]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- query.count() emits "count(*)" instead of
authorMike Bayer <mike_mp@zzzcomputing.com>
Tue, 10 May 2011 19:45:37 +0000 (15:45 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Tue, 10 May 2011 19:45:37 +0000 (15:45 -0400)
"count(1)".  [ticket:2162]
- another test that should be excluded from "low-connections"

CHANGES
lib/sqlalchemy/orm/query.py
test/engine/test_transaction.py
test/lib/assertsql.py
test/orm/test_query.py

diff --git a/CHANGES b/CHANGES
index daffcfd1315a2351726281eeef600d38c498bfe7..621a366ec2254a01eb9a3cc55e176f3922bda269 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -15,6 +15,9 @@ CHANGES
     fixed up some of the error messages tailored
     in [ticket:2069]
 
+  - query.count() emits "count(*)" instead of 
+    "count(1)".  [ticket:2162]
+
   - Fine tuning of Query clause adaptation when
     from_self(), union(), or other "select from
     myself" operation, such that plain SQL expression
index b586dfb778837264fd96a4de5b46a8dd9b82f6e2..45fe5c4bf5f1d9e7d18487b8a15a7df1946242a4 100644 (file)
@@ -2119,7 +2119,7 @@ class Query(object):
             session.query(func.count(distinct(User.name)))
             
         """
-        col = sql.func.count(sql.literal_column('1'))
+        col = sql.func.count(sql.literal_column('*'))
         return self.from_self(col).scalar()
 
     def delete(self, synchronize_session='evaluate'):
index f626a0ae0822c5defa0db1d46e7ec9dccee0f36d..e4046f4d361b5d0b505fefd2a4c1c693c3d6eb81 100644 (file)
@@ -965,6 +965,7 @@ counters = None
 
 
 class ForUpdateTest(fixtures.TestBase):
+    __requires__ = 'ad_hoc_engines',
 
     @classmethod
     def setup_class(cls):
index 4954a0bfed6b6643d24ddf201608d720363dd299..897f4b3b1d2df6a07bacce27f81e5f9ef51df150 100644 (file)
@@ -182,6 +182,8 @@ class CompiledSQL(SQLMatchRule):
                 equivalent = False
         else:
             params = {}
+            all_params = {}
+            all_received = []
         self._result = equivalent
         if not self._result:
             print 'Testing for compiled statement %r partial params '\
index e55b0bc1eab6e34a15f201a352f0c707b6813146..441f092cc96e60fad0f356889feee3f57284bcb1 100644 (file)
@@ -6,7 +6,7 @@ from sqlalchemy.sql import compiler, table, column
 from sqlalchemy.engine import default
 from sqlalchemy.orm import *
 from sqlalchemy.orm import attributes
-
+from test.lib.assertsql import CompiledSQL
 from test.lib.testing import eq_
 
 import sqlalchemy as sa
@@ -1387,6 +1387,24 @@ class CountTest(QueryTest):
 
         eq_(s.query(User).filter(users.c.name.endswith('ed')).count(), 2)
 
+    def test_count_char(self):
+        User = self.classes.User
+        s = create_session()
+        # '*' is favored here as the most common character,
+        # it is reported that Informix doesn't like count(1),
+        # rumors about Oracle preferring count(1) don't appear 
+        # to be well founded.
+        self.assert_sql_execution(
+                testing.db,
+                s.query(User).count,
+                CompiledSQL(
+                    "SELECT count(*) AS count_1 FROM "
+                    "(SELECT users.id AS users_id, users.name "
+                    "AS users_name FROM users) AS anon_1",
+                    {} 
+                )
+        )
+
     def test_multiple_entity(self):
         User, Address = self.classes.User, self.classes.Address