diff options
| author | mike bayer <mike_mp@zzzcomputing.com> | 2022-07-17 01:14:39 +0000 |
|---|---|---|
| committer | Gerrit Code Review <gerrit@ci3.zzzcomputing.com> | 2022-07-17 01:14:39 +0000 |
| commit | f1dff43a825fe779d52e12d9a823ede0edef9bb0 (patch) | |
| tree | f6b04df463c98e5f06e7811ee8dad1276879003f /lib/sqlalchemy/orm | |
| parent | 9a37ebdf99d0e3fcca53ca8f00f101fe475a1b01 (diff) | |
| parent | 26c0e8e1846a4e6ac05c15a1ad188a5655b72edb (diff) | |
| download | sqlalchemy-f1dff43a825fe779d52e12d9a823ede0edef9bb0.tar.gz | |
Merge "implement column._merge()" into main
Diffstat (limited to 'lib/sqlalchemy/orm')
| -rw-r--r-- | lib/sqlalchemy/orm/_orm_constructors.py | 6 | ||||
| -rw-r--r-- | lib/sqlalchemy/orm/properties.py | 34 |
2 files changed, 15 insertions, 25 deletions
diff --git a/lib/sqlalchemy/orm/_orm_constructors.py b/lib/sqlalchemy/orm/_orm_constructors.py index fe87d19dc..2f1128f94 100644 --- a/lib/sqlalchemy/orm/_orm_constructors.py +++ b/lib/sqlalchemy/orm/_orm_constructors.py @@ -255,11 +255,7 @@ def mapped_column( name=name, type_=type_, autoincrement=autoincrement, - insert_default=insert_default - if insert_default is not _NoArg.NO_ARG - else default - if default is not _NoArg.NO_ARG - else None, + insert_default=insert_default, attribute_options=_AttributeOptions( init, repr, diff --git a/lib/sqlalchemy/orm/properties.py b/lib/sqlalchemy/orm/properties.py index 051b6df8b..d11d3af55 100644 --- a/lib/sqlalchemy/orm/properties.py +++ b/lib/sqlalchemy/orm/properties.py @@ -485,6 +485,7 @@ class MappedColumn( "_creation_order", "foreign_keys", "_has_nullable", + "_has_insert_default", "deferred", "deferred_group", "deferred_raiseload", @@ -517,7 +518,13 @@ class MappedColumn( ): self._has_dataclass_arguments = True - kw["default"] = kw.pop("insert_default", None) + insert_default = kw.pop("insert_default", _NoArg.NO_ARG) + self._has_insert_default = insert_default is not _NoArg.NO_ARG + + if self._has_insert_default: + kw["default"] = insert_default + elif attr_opts.dataclasses_default is not _NoArg.NO_ARG: + kw["default"] = attr_opts.dataclasses_default self.deferred_group = kw.pop("deferred_group", None) self.deferred_raiseload = kw.pop("deferred_raiseload", None) @@ -543,6 +550,7 @@ class MappedColumn( new.foreign_keys = new.column.foreign_keys new._has_nullable = self._has_nullable new._attribute_options = self._attribute_options + new._has_insert_default = self._has_insert_default new._has_dataclass_arguments = self._has_dataclass_arguments util.set_creation_order(new) return new @@ -656,27 +664,13 @@ class MappedColumn( our_type_is_pep593 = False if use_args_from is not None: - if use_args_from.column.primary_key: - self.column.primary_key = True - if use_args_from.column.default is not None: - self.column.default = use_args_from.column.default if ( - use_args_from.column.server_default - and self.column.server_default is None + not self._has_insert_default + and use_args_from.column.default is not None ): - self.column.server_default = ( - use_args_from.column.server_default - ) - - for const in use_args_from.column.constraints: - if not const._type_bound: - new_const = const._copy() - new_const._set_parent(self.column) - - for fk in use_args_from.column.foreign_keys: - if not fk.constraint: - new_fk = fk._copy() - new_fk._set_parent(self.column) + self.column.default = None + use_args_from.column._merge(self.column) + sqltype = self.column.type if sqltype._isnull and not self.column.foreign_keys: new_sqltype = None |
