summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/orm
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2021-10-19 16:13:51 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2021-10-19 16:13:51 -0400
commit498c72d8b6c4a04112b490cdad6ba94324c69ce4 (patch)
treee54bedd6ed4353139927a94d9624d97906861c44 /lib/sqlalchemy/orm
parent18b4a3437a60fbfa0c25287d9a3b83d7c9d4f762 (diff)
downloadsqlalchemy-498c72d8b6c4a04112b490cdad6ba94324c69ce4.tar.gz
revise _get_crud_kv_pairs from 18b4a3437
submitted 18b4a3437a60fbfa0c25287d9a3b83d7c9d4f762 too soon as @CaselIT found a great refinement for this method. Change-Id: Id3818aa6bdc5938fc2f1395558aa8ead8ea6b319
Diffstat (limited to 'lib/sqlalchemy/orm')
-rw-r--r--lib/sqlalchemy/orm/persistence.py78
1 files changed, 38 insertions, 40 deletions
diff --git a/lib/sqlalchemy/orm/persistence.py b/lib/sqlalchemy/orm/persistence.py
index 3d20cfdea..4ba1917f6 100644
--- a/lib/sqlalchemy/orm/persistence.py
+++ b/lib/sqlalchemy/orm/persistence.py
@@ -2177,49 +2177,21 @@ class BulkORMUpdate(UpdateDMLState, BulkUDCompileState):
def _get_crud_kv_pairs(cls, statement, kv_iterator):
plugin_subject = statement._propagate_attrs["plugin_subject"]
- if plugin_subject:
- mapper = plugin_subject.mapper
- else:
- mapper = None
+ core_get_crud_kv_pairs = UpdateDMLState._get_crud_kv_pairs
+
+ if not plugin_subject or not plugin_subject.mapper:
+ return core_get_crud_kv_pairs(statement, kv_iterator)
+
+ mapper = plugin_subject.mapper
values = []
- core_get_crud_kv_pairs = UpdateDMLState._get_crud_kv_pairs
for k, v in kv_iterator:
- if mapper:
- k = coercions.expect(roles.DMLColumnRole, k)
-
- if isinstance(k, util.string_types):
- desc = _entity_namespace_key(mapper, k, default=NO_VALUE)
- if desc is NO_VALUE:
- values.append(
- (
- k,
- coercions.expect(
- roles.ExpressionElementRole,
- v,
- type_=sqltypes.NullType(),
- is_crud=True,
- ),
- )
- )
- else:
- values.extend(
- core_get_crud_kv_pairs(
- statement, desc._bulk_update_tuples(v)
- )
- )
- elif "entity_namespace" in k._annotations:
- k_anno = k._annotations
- attr = _entity_namespace_key(
- k_anno["entity_namespace"], k_anno["proxy_key"]
- )
- values.extend(
- core_get_crud_kv_pairs(
- statement, attr._bulk_update_tuples(v)
- )
- )
- else:
+ k = coercions.expect(roles.DMLColumnRole, k)
+
+ if isinstance(k, util.string_types):
+ desc = _entity_namespace_key(mapper, k, default=NO_VALUE)
+ if desc is NO_VALUE:
values.append(
(
k,
@@ -2231,8 +2203,34 @@ class BulkORMUpdate(UpdateDMLState, BulkUDCompileState):
),
)
)
+ else:
+ values.extend(
+ core_get_crud_kv_pairs(
+ statement, desc._bulk_update_tuples(v)
+ )
+ )
+ elif "entity_namespace" in k._annotations:
+ k_anno = k._annotations
+ attr = _entity_namespace_key(
+ k_anno["entity_namespace"], k_anno["proxy_key"]
+ )
+ values.extend(
+ core_get_crud_kv_pairs(
+ statement, attr._bulk_update_tuples(v)
+ )
+ )
else:
- values.extend(core_get_crud_kv_pairs(statement, [(k, v)]))
+ values.append(
+ (
+ k,
+ coercions.expect(
+ roles.ExpressionElementRole,
+ v,
+ type_=sqltypes.NullType(),
+ is_crud=True,
+ ),
+ )
+ )
return values
@classmethod