]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Added tests for Query.scalar(), .value() [ticket:1163]
authorJason Kirtland <jek@discorporate.us>
Mon, 3 Nov 2008 00:09:33 +0000 (00:09 +0000)
committerJason Kirtland <jek@discorporate.us>
Mon, 3 Nov 2008 00:09:33 +0000 (00:09 +0000)
lib/sqlalchemy/orm/query.py
test/orm/query.py

index 93699b79a6ca996885624a9853740517fd7fea12..b358f431141881f7d0cef4364008bfe77ecf97c8 100644 (file)
@@ -552,9 +552,11 @@ class Query(object):
 
     def value(self, column):
         """Return a scalar result corresponding to the given column expression."""
-        
-        return self.values(column).next()[0]
-        
+        try:
+            return self.values(column).next()[0]
+        except StopIteration:
+            return None
+
     @_generative()
     def add_column(self, column):
         """Add a SQL ColumnElement to the list of result columns to be returned."""
@@ -1058,6 +1060,8 @@ class Query(object):
           <Item>
           >>> session.query(Item.id).scalar()
           1
+          >>> session.query(Item.id).filter(Item.id < 0).scalar()
+          None
           >>> session.query(Item.id, Item.name).scalar()
           1
           >>> session.query(func.count(Parent.id)).scalar()
@@ -1066,10 +1070,10 @@ class Query(object):
         This results in an execution of the underlying query.
 
         """
-        ret = list(self)[0]
-        if not isinstance(ret, tuple):
-            return ret
         try:
+            ret = list(self)[0]
+            if not isinstance(ret, tuple):
+                return ret
             return ret[0]
         except IndexError:
             return None
index 407757c10a1b599ea8452ac7e26f12acf2a4fd29..dcd0ac548a47621a21087778b97c476a374f62fa 100644 (file)
@@ -1828,11 +1828,31 @@ class ImmediateTest(_fixtures.FixtureTest):
         self.assertRaises(sa.orm.exc.MultipleResultsFound,
                           sess.query(User, Address).join(User.addresses).one)
 
-
     @testing.future
     def test_getslice(self):
         assert False
 
+    @testing.resolve_artifact_names
+    def test_scalar(self):
+        sess = create_session()
+
+        eq_(sess.query(User.id).filter_by(id=7).scalar(), 7)
+        eq_(sess.query(User.id, User.name).filter_by(id=7).scalar(), 7)
+        eq_(sess.query(User.id).filter_by(id=0).scalar(), None)
+        eq_(sess.query(User).filter_by(id=7).scalar(),
+            sess.query(User).filter_by(id=7).one())
+
+    @testing.resolve_artifact_names
+    def test_value(self):
+        sess = create_session()
+
+        eq_(sess.query(User).filter_by(id=7).value(User.id), 7)
+        eq_(sess.query(User.id, User.name).filter_by(id=7).value(User.id), 7)
+        eq_(sess.query(User).filter_by(id=0).value(User.id), None)
+
+        sess.bind = sa.testing.db
+        eq_(sess.query().value(sa.literal_column('1')), 1)
+
 
 class SelectFromTest(QueryTest):
     keep_mappers = False