summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/orm
diff options
context:
space:
mode:
authormike bayer <mike_mp@zzzcomputing.com>2022-07-17 01:14:39 +0000
committerGerrit Code Review <gerrit@ci3.zzzcomputing.com>2022-07-17 01:14:39 +0000
commitf1dff43a825fe779d52e12d9a823ede0edef9bb0 (patch)
treef6b04df463c98e5f06e7811ee8dad1276879003f /lib/sqlalchemy/orm
parent9a37ebdf99d0e3fcca53ca8f00f101fe475a1b01 (diff)
parent26c0e8e1846a4e6ac05c15a1ad188a5655b72edb (diff)
downloadsqlalchemy-f1dff43a825fe779d52e12d9a823ede0edef9bb0.tar.gz
Merge "implement column._merge()" into main
Diffstat (limited to 'lib/sqlalchemy/orm')
-rw-r--r--lib/sqlalchemy/orm/_orm_constructors.py6
-rw-r--r--lib/sqlalchemy/orm/properties.py34
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