mirror of
https://github.com/sqlalchemy/sqlalchemy.git
synced 2026-05-21 08:02:07 -04:00
Repair and cover adaption call w/ ORM having()
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: 5d37b0be0d
Change-Id: I123b2c0a4a23b7c7c72929dec79801726afc71ee
This commit is contained in:
+9
@@ -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.
|
||||
|
||||
@@ -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
|
||||
)
|
||||
|
||||
|
||||
@@ -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",)],
|
||||
)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user