[SQL-CVS] r2622 - in SQLObject/trunk/sqlobject: . tests
SQLObject is a Python ORM.
Brought to you by:
ianbicking,
phd
|
From: <sub...@co...> - 2007-05-02 14:53:58
|
Author: phd
Date: 2007-05-02 08:53:50 -0600 (Wed, 02 May 2007)
New Revision: 2622
Added:
SQLObject/trunk/sqlobject/tests/test_groupBy.py
Modified:
SQLObject/trunk/sqlobject/sqlbuilder.py
Log:
Fixed a longstanding bug with sqlbuilder.Select() with groupBy being a sequence.
Modified: SQLObject/trunk/sqlobject/sqlbuilder.py
===================================================================
--- SQLObject/trunk/sqlobject/sqlbuilder.py 2007-05-02 14:53:17 UTC (rev 2621)
+++ SQLObject/trunk/sqlobject/sqlbuilder.py 2007-05-02 14:53:50 UTC (rev 2622)
@@ -651,7 +651,10 @@
if self.ops['clause'] is not NoDefault:
select += " WHERE %s" % sqlrepr(self.ops['clause'], db)
if self.ops['groupBy'] is not NoDefault:
- select += " GROUP BY %s" % sqlrepr(self.ops['groupBy'], db)
+ groupBy = sqlrepr(self.ops['groupBy'], db)
+ if isinstance(self.ops['groupBy'], (list, tuple)):
+ groupBy = groupBy[1:-1] # Remove parens
+ select += " GROUP BY %s" % groupBy
if self.ops['having'] is not NoDefault:
select += " HAVING %s" % sqlrepr(self.ops['having'], db)
if self.ops['orderBy'] is not NoDefault and self.ops['orderBy'] is not None:
Added: SQLObject/trunk/sqlobject/tests/test_groupBy.py
===================================================================
--- SQLObject/trunk/sqlobject/tests/test_groupBy.py (rev 0)
+++ SQLObject/trunk/sqlobject/tests/test_groupBy.py 2007-05-02 14:53:50 UTC (rev 2622)
@@ -0,0 +1,39 @@
+from sqlobject import *
+from sqlobject.sqlbuilder import Select, func
+from sqlobject.tests.dbtest import *
+
+########################################
+## groupBy
+########################################
+
+class GroupbyTest(SQLObject):
+ name = StringCol()
+ value = IntCol()
+
+def test_groupBy():
+ setupClass(GroupbyTest)
+ GroupbyTest(name='a', value=1)
+ GroupbyTest(name='a', value=2)
+ GroupbyTest(name='b', value=1)
+
+ connection = getConnection()
+ select = Select([GroupbyTest.q.name, func.COUNT(GroupbyTest.q.value)],
+ groupBy=GroupbyTest.q.name,
+ orderBy=GroupbyTest.q.name)
+ sql = connection.sqlrepr(select)
+ rows = connection.queryAll(sql)
+ assert rows == [('a', 2), ('b', 1)]
+
+def test_groupBy_list():
+ setupClass(GroupbyTest)
+ GroupbyTest(name='a', value=1)
+ GroupbyTest(name='a', value=2)
+ GroupbyTest(name='b', value=1)
+
+ connection = getConnection()
+ select = Select([GroupbyTest.q.name, GroupbyTest.q.value],
+ groupBy=[GroupbyTest.q.name, GroupbyTest.q.value],
+ orderBy=[GroupbyTest.q.name, GroupbyTest.q.value])
+ sql = connection.sqlrepr(select)
+ rows = connection.queryAll(sql)
+ assert rows == [('a', 1), ('a', 2), ('b', 1)]
|