diff options
| author | mike bayer <mike_mp@zzzcomputing.com> | 2021-04-06 21:55:33 +0000 |
|---|---|---|
| committer | Gerrit Code Review <gerrit@ci3.zzzcomputing.com> | 2021-04-06 21:55:33 +0000 |
| commit | d12be719cc5517fdf1f6ed79ff8018324f6451c7 (patch) | |
| tree | a321b3af96c5d2707dfa6cd83887c8fd7ded3128 /lib/sqlalchemy | |
| parent | 64cfcf4af0d5b09efa07aeb2b863c2aae9587c3d (diff) | |
| parent | 5ef1b89d865679fa2ca4bb3e3c1892bdd966ad89 (diff) | |
| download | sqlalchemy-d12be719cc5517fdf1f6ed79ff8018324f6451c7.tar.gz | |
Merge "Disable and disallow Result.unique() with yield_per"
Diffstat (limited to 'lib/sqlalchemy')
| -rw-r--r-- | lib/sqlalchemy/orm/loading.py | 11 | ||||
| -rw-r--r-- | lib/sqlalchemy/orm/query.py | 5 |
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 |
