diff options
| author | mike bayer <mike_mp@zzzcomputing.com> | 2020-04-06 20:11:20 +0000 |
|---|---|---|
| committer | Gerrit Code Review <gerrit@bbpush.zzzcomputing.com> | 2020-04-06 20:11:20 +0000 |
| commit | 2d6146192fbceec12585b6d9977cd818baae85a5 (patch) | |
| tree | 0893bdc694d04b37bbba5af4ca6edbfb2fe7e915 /lib/sqlalchemy/sql | |
| parent | 45dd5654a15e9df8eb6c04e49aa9a3b9a1d82197 (diff) | |
| parent | a902660f711da0b428fd2b9abf9b281a1ef6a118 (diff) | |
| download | sqlalchemy-2d6146192fbceec12585b6d9977cd818baae85a5.tar.gz | |
Merge "Add length parameter in `Enum`"
Diffstat (limited to 'lib/sqlalchemy/sql')
| -rw-r--r-- | lib/sqlalchemy/sql/sqltypes.py | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/lib/sqlalchemy/sql/sqltypes.py b/lib/sqlalchemy/sql/sqltypes.py index e106684bc..05d6ec36b 100644 --- a/lib/sqlalchemy/sql/sqltypes.py +++ b/lib/sqlalchemy/sql/sqltypes.py @@ -1303,7 +1303,14 @@ class Enum(Emulated, String, SchemaType): :param native_enum: Use the database's native ENUM type when available. Defaults to True. When False, uses VARCHAR + check - constraint for all backends. + constraint for all backends. The VARCHAR length can be controlled + with :paramref:`.Enum.length` + + :param length: Allows specifying a custom length for the VARCHAR + when :paramref:`.Enum.native_enum` is False. By default it uses the + length of the longest value. + + .. versionadded:: 1.3.16 :param schema: Schema name of this type. For types that exist on the target database as an independent schema construct (PostgreSQL), @@ -1375,6 +1382,7 @@ class Enum(Emulated, String, SchemaType): self.create_constraint = kw.pop("create_constraint", True) self.values_callable = kw.pop("values_callable", None) self._sort_key_function = kw.pop("sort_key_function", NO_ARG) + length_arg = kw.pop("length", NO_ARG) values, objects = self._parse_into_values(enums, kw) self._setup_for_values(values, objects, kw) @@ -1398,6 +1406,15 @@ class Enum(Emulated, String, SchemaType): length = max(len(x) for x in self.enums) else: length = 0 + if not self.native_enum and length_arg is not NO_ARG: + if length_arg < length: + raise ValueError( + "When provided, length must be larger or equal" + " than the length of the longest enum value. %s < %s" + % (length_arg, length) + ) + length = length_arg + self._valid_lookup[None] = self._object_lookup[None] = None super(Enum, self).__init__( |
