]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
might add scalar() to select which does limit=1
authorMike Bayer <mike_mp@zzzcomputing.com>
Wed, 1 Feb 2006 23:26:18 +0000 (23:26 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Wed, 1 Feb 2006 23:26:18 +0000 (23:26 +0000)
lib/sqlalchemy/sql.py

index dcf153866e5376027bbbfb77f326a9556ce2a5ae..4ab1f187133a6842620c4f463b83bf1f3cfd0857 100644 (file)
@@ -293,6 +293,10 @@ class Compiled(ClauseVisitor):
         """executes this compiled object via the execute() method, then 
         returns the first column of the first row.  Useful for executing functions,
         sequences, rowcounts, etc."""
+        # we are still going off the assumption that fetching only the first row
+        # in a result set is not performance-wise any different than specifying limit=1
+        # else we'd have to construct a copy of the select() object with the limit
+        # installed (else if we change the existing select, not threadsafe)
         row = self.execute(*multiparams, **params).fetchone()
         if row is not None:
             return row[0]
@@ -399,6 +403,10 @@ class ClauseElement(object):
         """executes this SQL expression via the execute() method, then 
         returns the first column of the first row.  Useful for executing functions,
         sequences, rowcounts, etc."""
+        # we are still going off the assumption that fetching only the first row
+        # in a result set is not performance-wise any different than specifying limit=1
+        # else we'd have to construct a copy of the select() object with the limit
+        # installed (else if we change the existing select, not threadsafe)
         row = self.execute(*multiparams, **params).fetchone()
         if row is not None:
             return row[0]
@@ -1324,6 +1332,13 @@ class Select(SelectBaseMixin, FromClause):
     def union_all(self, other, **kwargs):
         return union_all(self, other, **kwargs)
 
+#    def scalar(self, *multiparams, **params):
+        # need to set limit=1, but only in this thread.
+        # we probably need to make a copy of the select().  this
+        # is expensive.  I think cursor.fetchone(), then discard remaining results 
+        # should be fine with most DBs
+        # for now use base scalar() method
+        
     def _find_engine(self):
         """tries to return a SQLEngine, either explicitly set in this object, or searched
         within the from clauses for one"""