diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2021-10-19 16:13:51 -0400 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2021-10-19 16:13:51 -0400 |
commit | 498c72d8b6c4a04112b490cdad6ba94324c69ce4 (patch) | |
tree | e54bedd6ed4353139927a94d9624d97906861c44 /lib/sqlalchemy/orm | |
parent | 18b4a3437a60fbfa0c25287d9a3b83d7c9d4f762 (diff) | |
download | sqlalchemy-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.py | 78 |
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 |