summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy
diff options
context:
space:
mode:
authormike bayer <mike_mp@zzzcomputing.com>2021-04-06 21:55:33 +0000
committerGerrit Code Review <gerrit@ci3.zzzcomputing.com>2021-04-06 21:55:33 +0000
commitd12be719cc5517fdf1f6ed79ff8018324f6451c7 (patch)
treea321b3af96c5d2707dfa6cd83887c8fd7ded3128 /lib/sqlalchemy
parent64cfcf4af0d5b09efa07aeb2b863c2aae9587c3d (diff)
parent5ef1b89d865679fa2ca4bb3e3c1892bdd966ad89 (diff)
downloadsqlalchemy-d12be719cc5517fdf1f6ed79ff8018324f6451c7.tar.gz
Merge "Disable and disallow Result.unique() with yield_per"
Diffstat (limited to 'lib/sqlalchemy')
-rw-r--r--lib/sqlalchemy/orm/loading.py11
-rw-r--r--lib/sqlalchemy/orm/query.py5
2 files changed, 14 insertions, 2 deletions
diff --git a/lib/sqlalchemy/orm/loading.py b/lib/sqlalchemy/orm/loading.py
index 4a90caeff..9dcaca0ea 100644
--- a/lib/sqlalchemy/orm/loading.py
+++ b/lib/sqlalchemy/orm/loading.py
@@ -87,11 +87,20 @@ def instances(cursor, context):
with util.safe_reraise():
cursor.close()
+ def _no_unique(entry):
+ raise sa_exc.InvalidRequestError(
+ "Can't use the ORM yield_per feature in conjunction with unique()"
+ )
+
row_metadata = SimpleResultMetaData(
labels,
extra,
_unique_filters=[
- id if ent.use_id_for_hash else None
+ _no_unique
+ if context.yield_per
+ else id
+ if ent.use_id_for_hash
+ else None
for ent in context.compile_state._entities
],
)
diff --git a/lib/sqlalchemy/orm/query.py b/lib/sqlalchemy/orm/query.py
index 38f1d26b4..9348d7d48 100644
--- a/lib/sqlalchemy/orm/query.py
+++ b/lib/sqlalchemy/orm/query.py
@@ -2827,7 +2827,10 @@ class Query(
if result._attributes.get("is_single_entity", False):
result = result.scalars()
- if result._attributes.get("filtered", False):
+ if (
+ result._attributes.get("filtered", False)
+ and not self.load_options._yield_per
+ ):
result = result.unique()
return result