From: Mike Bayer Date: Sun, 17 Jun 2007 01:06:00 +0000 (+0000) Subject: filter() checks for ClauseElement [ticket:535] X-Git-Tag: rel_0_4_6~192 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=243ce000ec82e98121ac6376b0179b5a599cd135;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git filter() checks for ClauseElement [ticket:535] --- diff --git a/lib/sqlalchemy/orm/query.py b/lib/sqlalchemy/orm/query.py index a7bf73b80a..0eea06e841 100644 --- a/lib/sqlalchemy/orm/query.py +++ b/lib/sqlalchemy/orm/query.py @@ -243,6 +243,10 @@ class Query(object): the criterion is any sql.ClauseElement applicable to the WHERE clause of a select. """ + + if not isinstance(criterion, sql.ClauseElement): + raise exceptions.ArgumentError("filter() argument must be of type sqlalchemy.sql.ClauseElement") + q = self._clone() if q._criterion is not None: q._criterion = q._criterion & criterion @@ -256,7 +260,7 @@ class Query(object): import properties if len(args) > 1: - raise exceptions.InvalidRequestError("filter_by() takes either zero positional arguments, or one scalar or list argument indicating a property search path.") + raise exceptions.ArgumentError("filter_by() takes either zero positional arguments, or one scalar or list argument indicating a property search path.") if len(args) == 1: path = args[0] (join, joinpoint, alias) = self._join_to(path, outerjoin=False, start=self.mapper, create_aliases=True) diff --git a/test/orm/query.py b/test/orm/query.py index 6b77224e85..2194565a14 100644 --- a/test/orm/query.py +++ b/test/orm/query.py @@ -158,6 +158,13 @@ class FilterTest(QueryTest): def test_onefilter(self): assert [User(id=8), User(id=9)] == create_session().query(User).filter(users.c.name.endswith('ed')).all() + def test_typecheck(self): + try: + create_session().query(User).filter(User.name==5) + assert False + except exceptions.ArgumentError, e: + assert str(e) == "filter() argument must be of type sqlalchemy.sql.ClauseElement" + class ParentTest(QueryTest): def test_o2m(self): sess = create_session()