Author: phd
Date: 2007-02-06 08:23:02 -0700 (Tue, 06 Feb 2007)
New Revision: 2257
Added:
SQLObject/branches/0.8/sqlobject/tests/test_sqlbuilder.py
Modified:
SQLObject/branches/0.8/sqlobject/sqlbuilder.py
Log:
A patch by Johan Dahlin <jd...@as...> - with empty parameters AND() and OR() returns None.
Modified: SQLObject/branches/0.8/sqlobject/sqlbuilder.py
===================================================================
--- SQLObject/branches/0.8/sqlobject/sqlbuilder.py 2007-02-06 15:21:18 UTC (rev 2256)
+++ SQLObject/branches/0.8/sqlobject/sqlbuilder.py 2007-02-06 15:23:02 UTC (rev 2257)
@@ -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/branches/0.8/sqlobject/tests/test_sqlbuilder.py
===================================================================
--- SQLObject/branches/0.8/sqlobject/tests/test_sqlbuilder.py (rev 0)
+++ SQLObject/branches/0.8/sqlobject/tests/test_sqlbuilder.py 2007-02-06 15:23:02 UTC (rev 2257)
@@ -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')))"
|