]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Repair and cover adaption call w/ ORM having()
authoresoh <sean.so.oh@gmail.com>
Sat, 19 Dec 2020 02:59:31 +0000 (21:59 -0500)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sat, 19 Dec 2020 17:42:33 +0000 (12:42 -0500)
Fixed 1.4 regression where the use of :meth:`_orm.Query.having` in
conjunction with queries with internally adapted SQL elements (common in
inheritance scenarios) would fail due to an incorrect function call. Pull
request courtesy esoh.

Fixes: #5781
Closes: #5782
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/5782
Pull-request-sha: 5d37b0be0db68ec2a4dfea552ee47bcb3ef6778c

Change-Id: I123b2c0a4a23b7c7c72929dec79801726afc71ee

doc/build/changelog/unreleased_14/5781.rst [new file with mode: 0644]
lib/sqlalchemy/orm/context.py
test/orm/inheritance/test_polymorphic_rel.py
test/orm/inheritance/test_single.py

diff --git a/doc/build/changelog/unreleased_14/5781.rst b/doc/build/changelog/unreleased_14/5781.rst
new file mode 100644 (file)
index 0000000..ba1ccec
--- /dev/null
@@ -0,0 +1,9 @@
+.. change::
+    :tags: bug, orm
+    :tickets: 5781
+
+    Fixed 1.4 regression where the use of :meth:`_orm.Query.having` in
+    conjunction with queries with internally adapted SQL elements (common in
+    inheritance scenarios) would fail due to an incorrect function call. Pull
+    request courtesy esoh.
+
index cd654ed3d6eefdc54c77a4dd6a9a4c6dff0a22dd..41b2146a3d66405e9695398f1cf53c69aa180d6d 100644 (file)
@@ -585,7 +585,7 @@ class ORMSelectCompileState(ORMCompileState, SelectState):
 
         if query._having_criteria:
             self._having_criteria = tuple(
-                current_adapter(crit, True, True) if current_adapter else crit
+                current_adapter(crit, True) if current_adapter else crit
                 for crit in query._having_criteria
             )
 
index 51277943f0b6c2eb59e34f04f06040fca79a1361..84ef22d52fe8ced21a81ab808b6e9d7da229f1b2 100644 (file)
@@ -2360,4 +2360,12 @@ class PolymorphicAliasedJoinsTest(
 
 
 class PolymorphicJoinsTest(_PolymorphicTestBase, _PolymorphicJoins):
-    pass
+    def test_having_group_by(self):
+        sess = create_session()
+        eq_(
+            sess.query(Person.name)
+            .group_by(Person.name)
+            .having(Person.name == "dilbert")
+            .all(),
+            [("dilbert",)],
+        )
index aa17f43007468d0eeb0b882de0964ac03284f12d..cbe6bd238eed3c4356d29f2747b6979e293f61b0 100644 (file)
@@ -416,6 +416,24 @@ class SingleInheritanceTest(testing.AssertsCompiledSQL, fixtures.MappedTest):
                 },
             )
 
+    def test_having(self):
+
+        Engineer, Manager = self.classes("Engineer", "Manager")
+
+        sess = create_session()
+
+        self.assert_compile(
+            sess.query(Engineer)
+            .group_by(Engineer.employee_id)
+            .having(Engineer.name == "js"),
+            "SELECT employees.employee_id AS employees_employee_id, "
+            "employees.name AS employees_name, employees.manager_data "
+            "AS employees_manager_data, employees.engineer_info "
+            "AS employees_engineer_info, employees.type AS employees_type "
+            "FROM employees WHERE employees.type IN ([POSTCOMPILE_type_1]) "
+            "GROUP BY employees.employee_id HAVING employees.name = :name_1",
+        )
+
     def test_from_self_count(self):
         Engineer = self.classes.Engineer