summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README_THIS_IS_NOW_VERSION_0.5.txt2
-rw-r--r--lib/sqlalchemy/orm/query.py13
-rw-r--r--test/orm/query.py52
3 files changed, 31 insertions, 36 deletions
diff --git a/README_THIS_IS_NOW_VERSION_0.5.txt b/README_THIS_IS_NOW_VERSION_0.5.txt
index 4586e326b..fd077e6ed 100644
--- a/README_THIS_IS_NOW_VERSION_0.5.txt
+++ b/README_THIS_IS_NOW_VERSION_0.5.txt
@@ -6,6 +6,8 @@ A work in progress describing the changes from 0.4 is at:
http://www.sqlalchemy.org/trac/wiki/05Migration
+IMPORTANT: some file names have changed in this branch. Remove all existing *.pyc files before using !
+
To continue working with the current development revision of
version 0.4, switch this working copy to the 0.4 maintenance branch:
diff --git a/lib/sqlalchemy/orm/query.py b/lib/sqlalchemy/orm/query.py
index dfa24efee..a52302771 100644
--- a/lib/sqlalchemy/orm/query.py
+++ b/lib/sqlalchemy/orm/query.py
@@ -258,10 +258,8 @@ class Query(object):
return equivs
def __no_criterion_condition(self, meth):
- if self._criterion or self._statement or self._from_obj:
- util.warn(
- ("Query.%s() being called on a Query with existing criterion; "
- "criterion is being ignored. This usage is deprecated.") % meth)
+ if self._criterion or self._statement or self._from_obj or self._limit or self._offset or self._group_by or self._order_by:
+ raise sa_exc.InvalidRequestError("Query.%s() being called on a Query with existing criterion. " % meth)
self._statement = self._criterion = self._from_obj = None
self._order_by = self._group_by = self._distinct = False
@@ -279,10 +277,9 @@ class Query(object):
def __no_limit_offset(self, meth):
if self._limit or self._offset:
- util.warn("Query.%s() being called on a Query which already has LIMIT or OFFSET applied. "
- "This usage is deprecated. Apply filtering and joins before LIMIT or OFFSET are applied, "
- "or to filter/join to the row-limited results of the query, call from_self() first."
- "In release 0.5, from_self() will be called automatically in this scenario."
+ # TODO: do we want from_self() to be implicit here ? i vote explicit for the time being
+ raise sa_exc.InvalidRequestError("Query.%s() being called on a Query which already has LIMIT or OFFSET applied. "
+ "To filter/join to the row-limited results of the query, call from_self() first."
)
def __no_criterion(self):
diff --git a/test/orm/query.py b/test/orm/query.py
index bc67740f2..f5a2f0a18 100644
--- a/test/orm/query.py
+++ b/test/orm/query.py
@@ -70,31 +70,9 @@ class GetTest(QueryTest):
s = create_session()
q = s.query(User).join('addresses').filter(Address.user_id==8)
- self.assertRaises(sa_exc.SAWarning, q.get, 7)
-
- @testing.emits_warning('Query.*')
- def warns():
- assert s.query(User).filter(User.id==7).get(19) is None
-
- u = s.query(User).get(7)
- assert s.query(User).filter(User.id==9).get(7) is u
- s.clear()
- assert s.query(User).filter(User.id==9).get(7).id == u.id
-
- # user 10 has no addresses
- u = s.query(User).get(10)
- assert s.query(User).join('addresses').get(10) is u
- s.clear()
- assert s.query(User).join('addresses').get(10).id == u.id
-
- u = s.query(User).get(7)
- assert s.query(User).join('addresses').filter(Address.user_id==8).filter(User.id==7).first() is None
- assert s.query(User).join('addresses').filter(Address.user_id==8).get(7) is u
- s.clear()
- 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
- warns()
+ self.assertRaises(sa_exc.InvalidRequestError, q.get, 7)
+ self.assertRaises(sa_exc.InvalidRequestError, s.query(User).filter(User.id==7).get, 19)
+ self.assertRaises(sa_exc.InvalidRequestError, s.query(User).filter(User.id==7).load, 19)
def test_unique_param_names(self):
class SomeUser(object):
@@ -196,11 +174,11 @@ class InvalidGenerationsTest(QueryTest):
s = create_session()
q = s.query(User).limit(2)
- self.assertRaises(sa_exc.SAWarning, q.join, "addresses")
+ self.assertRaises(sa_exc.InvalidRequestError, q.join, "addresses")
- self.assertRaises(sa_exc.SAWarning, q.filter, User.name=='ed')
+ self.assertRaises(sa_exc.InvalidRequestError, q.filter, User.name=='ed')
- self.assertRaises(sa_exc.SAWarning, q.filter_by, name='ed')
+ self.assertRaises(sa_exc.InvalidRequestError, q.filter_by, name='ed')
def test_no_from(self):
s = create_session()
@@ -213,6 +191,24 @@ class InvalidGenerationsTest(QueryTest):
# this is fine, however
q.from_self()
+
+ def test_from_statement(self):
+ s = create_session()
+
+ q = s.query(User).filter(User.id==5)
+ self.assertRaises(sa_exc.InvalidRequestError, q.from_statement, "x")
+
+ q = s.query(User).filter_by(id=5)
+ self.assertRaises(sa_exc.InvalidRequestError, q.from_statement, "x")
+
+ q = s.query(User).limit(5)
+ self.assertRaises(sa_exc.InvalidRequestError, q.from_statement, "x")
+
+ q = s.query(User).group_by(User.name)
+ self.assertRaises(sa_exc.InvalidRequestError, q.from_statement, "x")
+
+ q = s.query(User).order_by(User.name)
+ self.assertRaises(sa_exc.InvalidRequestError, q.from_statement, "x")
class OperatorTest(QueryTest):
"""test sql.Comparator implementation for MapperProperties"""