]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- a full select() construct can be passed to query.select() (which
authorMike Bayer <mike_mp@zzzcomputing.com>
Thu, 22 Feb 2007 22:59:51 +0000 (22:59 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Thu, 22 Feb 2007 22:59:51 +0000 (22:59 +0000)
worked anyway), but also query.selectfirst(), query.selectone() which
will be used as is (i.e. no query is compiled). works similarly to
sending the results to instances().

CHANGES
lib/sqlalchemy/orm/query.py

diff --git a/CHANGES b/CHANGES
index f4d0646b94dd3b825e94cf7be342de429ad555ae..921c06a416a9a4b9d640328cf1d4b80120c36913 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,8 @@
+- orm:
+    - a full select() construct can be passed to query.select() (which
+      worked anyway), but also query.selectfirst(), query.selectone() which
+      will be used as is (i.e. no query is compiled). works similarly to
+      sending the results to instances().
 0.3.5
 - sql:
     - the value of "case_sensitive" defaults to True now, regardless of the
index bf64266388c2829f22639bfb9d9bbfc3571a5e5a..dd3196c2028ebe95f201d41e2599ad2168634e78 100644 (file)
@@ -213,19 +213,22 @@ class Query(object):
         The criterion is constructed in the same way as the select_by() method."""
         return self.count(self.join_by(*args, **params))
 
-    def selectfirst(self, *args, **params):
+    def selectfirst(self, arg=None, **kwargs):
         """works like select(), but only returns the first result by itself, or None if no 
         objects returned."""
-        params['limit'] = 1
-        ret = self.select_whereclause(*args, **params)
+        if isinstance(arg, sql.FromClause) and arg.supports_execution():
+            ret = self.select_statement(arg, **kwargs)
+        else:
+            kwargs['limit'] = 1
+            ret = self.select_whereclause(whereclause=arg, **kwargs)
         if ret:
             return ret[0]
         else:
             return None
 
-    def selectone(self, *args, **params):
+    def selectone(self, arg=None, **kwargs):
         """works like selectfirst(), but throws an error if not exactly one result was returned."""
-        ret = list(self.select(*args, **params)[0:2])
+        ret = list(self.select(arg, **kwargs)[0:2])
         if len(ret) == 1:
             return ret[0]
         elif len(ret) == 0:
@@ -247,7 +250,7 @@ class Query(object):
         ret = self.extension.select(self, arg=arg, **kwargs)
         if ret is not mapper.EXT_PASS:
             return ret
-        if isinstance(arg, sql.FromClause):
+        if isinstance(arg, sql.FromClause) and arg.supports_execution():
             return self.select_statement(arg, **kwargs)
         else:
             return self.select_whereclause(whereclause=arg, **kwargs)