]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- warnings about Query invalid operations become InvalidRequestErrors
authorMike Bayer <mike_mp@zzzcomputing.com>
Fri, 9 May 2008 17:05:13 +0000 (17:05 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Fri, 9 May 2008 17:05:13 +0000 (17:05 +0000)
- __no_criterion() checks for more pre-existing conditions
- helpful note in 0.5 svn readme

README_THIS_IS_NOW_VERSION_0.5.txt
lib/sqlalchemy/orm/query.py
test/orm/query.py

index 4586e326bf3d108f5e78345b8e454d02584ac88f..fd077e6eda3d377ccaf29ac0e9ed93f570764e4c 100644 (file)
@@ -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:
 
index dfa24efee6f3ab69ceb044434781d7dd4d33e788..a5230277163d989b0f3ba3333be36e8af8354fd3 100644 (file)
@@ -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):
index bc67740f275610b7cc5fd56a6b4d36b2bd4eba04..f5a2f0a1864e45d271a7a59b37d7bf71094c7605 100644 (file)
@@ -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"""