Author: phd
Date: 2007-02-06 08:40:44 -0700 (Tue, 06 Feb 2007)
New Revision: 2261
Added:
home/phd/SQLObject/paramstyles/sqlobject/tests/test_sqlbuilder.py
Modified:
home/phd/SQLObject/paramstyles/sqlobject/converters.py
home/phd/SQLObject/paramstyles/sqlobject/sqlbuilder.py
home/phd/SQLObject/paramstyles/sqlobject/tests/test_converters.py
Log:
Merged patches from the revisions 2254:2260 from the trunk
Modified: home/phd/SQLObject/paramstyles/sqlobject/converters.py
===================================================================
--- home/phd/SQLObject/paramstyles/sqlobject/converters.py 2007-02-06 15:39:04 UTC (rev 2260)
+++ home/phd/SQLObject/paramstyles/sqlobject/converters.py 2007-02-06 15:40:44 UTC (rev 2261)
@@ -180,6 +180,21 @@
registerConverter(type(()), SequenceConverter)
registerConverter(type([]), SequenceConverter)
+registerConverter(type({}), SequenceConverter)
+try:
+ set, frozenset
+except NameError:
+ pass
+else:
+ registerConverter(set, SequenceConverter)
+ registerConverter(frozenset, SequenceConverter)
+try:
+ from sets import Set, ImmutableSet
+except ImportError:
+ pass
+else:
+ registerConverter(Set, SequenceConverter)
+ registerConverter(ImmutableSet, SequenceConverter)
if hasattr(time, 'struct_time'):
def StructTimeConverter(value, db):
Modified: home/phd/SQLObject/paramstyles/sqlobject/sqlbuilder.py
===================================================================
--- home/phd/SQLObject/paramstyles/sqlobject/sqlbuilder.py 2007-02-06 15:39:04 UTC (rev 2260)
+++ home/phd/SQLObject/paramstyles/sqlobject/sqlbuilder.py 2007-02-06 15:40:44 UTC (rev 2261)
@@ -746,6 +746,8 @@
return '%s DESC' % sqlrepr(self.expr, db)
def AND(*ops):
+ if not ops:
+ return None
op1 = ops[0]
ops = ops[1:]
if ops:
@@ -754,6 +756,8 @@
return op1
def OR(*ops):
+ if not ops:
+ return None
op1 = ops[0]
ops = ops[1:]
if ops:
Modified: home/phd/SQLObject/paramstyles/sqlobject/tests/test_converters.py
===================================================================
--- home/phd/SQLObject/paramstyles/sqlobject/tests/test_converters.py 2007-02-06 15:39:04 UTC (rev 2260)
+++ home/phd/SQLObject/paramstyles/sqlobject/tests/test_converters.py 2007-02-06 15:40:44 UTC (rev 2261)
@@ -176,3 +176,20 @@
def test_prefix():
instance = SQLPrefix('test', 'test')
assert sqlrepr(instance, 'mysql') == "test 'test'"
+
+def test_dict():
+ assert sqlrepr({"key": "value"}, "sqlite") == "('key')"
+
+def test_sets():
+ try:
+ set
+ except NameError:
+ pass
+ else:
+ assert sqlrepr(set([1])) == "(1)"
+ try:
+ from sets import Set
+ except ImportError:
+ pass
+ else:
+ assert sqlrepr(Set([1])) == "(1)"
Copied: home/phd/SQLObject/paramstyles/sqlobject/tests/test_sqlbuilder.py (from rev 2260, SQLObject/trunk/sqlobject/tests/test_sqlbuilder.py)
===================================================================
--- home/phd/SQLObject/paramstyles/sqlobject/tests/test_sqlbuilder.py (rev 0)
+++ home/phd/SQLObject/paramstyles/sqlobject/tests/test_sqlbuilder.py 2007-02-06 15:40:44 UTC (rev 2261)
@@ -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')))"
|