[SQL-CVS] r2255 - in SQLObject/trunk/sqlobject: . tests
SQLObject is a Python ORM.
Brought to you by:
ianbicking,
phd
|
From: <sub...@co...> - 2007-02-06 15:21:23
|
Author: phd
Date: 2007-02-06 08:21:02 -0700 (Tue, 06 Feb 2007)
New Revision: 2255
Added:
SQLObject/trunk/sqlobject/tests/test_sqlbuilder.py
Modified:
SQLObject/trunk/sqlobject/sqlbuilder.py
Log:
A patch by Johan Dahlin <jd...@as...> - with empty parameters AND() and OR() returns None.
Modified: SQLObject/trunk/sqlobject/sqlbuilder.py
===================================================================
--- SQLObject/trunk/sqlobject/sqlbuilder.py 2007-02-06 05:19:37 UTC (rev 2254)
+++ SQLObject/trunk/sqlobject/sqlbuilder.py 2007-02-06 15:21:02 UTC (rev 2255)
@@ -626,6 +626,8 @@
return '%s DESC' % sqlrepr(self.expr, db)
def AND(*ops):
+ if not ops:
+ return None
op1 = ops[0]
ops = ops[1:]
if ops:
@@ -634,6 +636,8 @@
return op1
def OR(*ops):
+ if not ops:
+ return None
op1 = ops[0]
ops = ops[1:]
if ops:
Added: SQLObject/trunk/sqlobject/tests/test_sqlbuilder.py
===================================================================
--- SQLObject/trunk/sqlobject/tests/test_sqlbuilder.py (rev 0)
+++ SQLObject/trunk/sqlobject/tests/test_sqlbuilder.py 2007-02-06 15:21:02 UTC (rev 2255)
@@ -0,0 +1,14 @@
+from sqlobject.sqlbuilder import AND, SQLOp, sqlrepr
+
+def test_empty_AND():
+ assert AND() == None
+ assert AND(True) == True
+
+ # sqlrepr() is needed because AND() returns an SQLExpression that overrides
+ # comparison. The following
+ # AND('x', 'y') == "foo bar"
+ # is True! (-: Eeek!
+ assert sqlrepr(AND(1, 2)) == sqlrepr(SQLOp("AND", 1, 2)) == "((1) AND (2))"
+ assert sqlrepr(AND(1, 2, '3'), "sqlite") == \
+ sqlrepr(SQLOp("AND", 1, SQLOp("AND", 2, '3')), "sqlite") == \
+ "((1) AND ((2) AND ('3')))"
|