mirror of
https://github.com/sqlalchemy/sqlalchemy.git
synced 2026-05-26 18:41:41 -04:00
Merge "Don't use and_() inside of Query.filter_by"
This commit is contained in:
+12
@@ -0,0 +1,12 @@
|
||||
.. change::
|
||||
:tags: bug, orm
|
||||
:tickets: 4606
|
||||
|
||||
Adjusted the :meth:`.Query.filter_by` method to not call :func:`.and()`
|
||||
internally against multiple criteria, instead passing it off to
|
||||
:meth:`.Query.filter` as a series of criteria, instead of a single criteria.
|
||||
This allows :meth:`.Query.filter_by` to defer to :meth:`.Query.filter`'s
|
||||
treatment of variable numbers of clauses, including the case where the list
|
||||
is empty. In this case, the :class:`.Query` object will not have a
|
||||
``.whereclause``, which allows subsequent "no whereclause" methods like
|
||||
:meth:`.Query.select_from` to behave consistently.
|
||||
@@ -1791,7 +1791,7 @@ class Query(object):
|
||||
_entity_descriptor(self._joinpoint_zero(), key) == value
|
||||
for key, value in kwargs.items()
|
||||
]
|
||||
return self.filter(sql.and_(*clauses))
|
||||
return self.filter(*clauses)
|
||||
|
||||
@_generative(_no_statement_condition, _no_limit_offset)
|
||||
def order_by(self, *criterion):
|
||||
|
||||
@@ -2880,6 +2880,15 @@ class FilterTest(QueryTest, AssertsCompiledSQL):
|
||||
checkparams={"email_address_1": "ed@ed.com", "name_1": "ed"},
|
||||
)
|
||||
|
||||
def test_empty_filters(self):
|
||||
User = self.classes.User
|
||||
sess = create_session()
|
||||
|
||||
q1 = sess.query(User)
|
||||
|
||||
is_(None, q1.filter().whereclause)
|
||||
is_(None, q1.filter_by().whereclause)
|
||||
|
||||
def test_filter_by_no_property(self):
|
||||
addresses = self.tables.addresses
|
||||
sess = create_session()
|
||||
|
||||
Reference in New Issue
Block a user