From: Mike Bayer Date: Thu, 6 Dec 2007 19:31:59 +0000 (+0000) Subject: warn if query.get() used with existing criterion X-Git-Tag: rel_0_4_2~101 X-Git-Url: http://git.ipfire.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=3ac9c93e260aa1a5d9c88a648bf7d1213a0e817f;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git warn if query.get() used with existing criterion --- diff --git a/lib/sqlalchemy/orm/query.py b/lib/sqlalchemy/orm/query.py index eb0d49147c..20f18eecbc 100644 --- a/lib/sqlalchemy/orm/query.py +++ b/lib/sqlalchemy/orm/query.py @@ -10,6 +10,7 @@ from sqlalchemy.sql import expression, visitors, operators from sqlalchemy.orm import mapper, object_mapper from sqlalchemy.orm import util as mapperutil from itertools import chain +import warnings __all__ = ['Query', 'QueryContext'] @@ -55,6 +56,10 @@ class Query(object): def _no_criterion(self): q = self._clone() + + if q._criterion or q._statement or q._from_obj != [self.table]: + warnings.warn(RuntimeWarning("Query.get() being called on a Query with existing criterion; criterion is being ignored.")) + q._from_obj = [self.table] q._alias_ids = {} q._joinpoint = self.mapper diff --git a/test/orm/query.py b/test/orm/query.py index 158576f176..4e5f048558 100644 --- a/test/orm/query.py +++ b/test/orm/query.py @@ -63,8 +63,19 @@ class GetTest(QueryTest): def test_no_criterion(self): """test that get()/load() does not use preexisting filter/etc. criterion""" - + s = create_session() + + import warnings + warnings.filterwarnings("error", r".*Query.*") + print "---------------------------------------" + try: + s.query(User).join('addresses').filter(Address.user_id==8).get(7) + assert False + except RuntimeWarning, e: + assert str(e) == "Query.get() being called on a Query with existing criterion; criterion is being ignored." + + warnings.filterwarnings("once", r".*Query.*") assert s.query(User).filter(User.id==7).get(19) is None @@ -86,6 +97,8 @@ class GetTest(QueryTest): assert s.query(User).join('addresses').filter(Address.user_id==8).get(7).id == u.id assert s.query(User).join('addresses').filter(Address.user_id==8).load(7).id == u.id + + def test_unique_param_names(self): class SomeUser(object):