Author: phd
Date: 2005-04-24 09:54:28 +0000 (Sun, 24 Apr 2005)
New Revision: 736
Modified:
trunk/SQLObject/docs/SQLObjectSubqueries.txt
trunk/SQLObject/sqlobject/sqlbuilder.py
trunk/SQLObject/sqlobject/tests/test_subqueries.py
Log:
Changed IN() so it can be used for either IN-list or IN-subquery.
Modified: trunk/SQLObject/docs/SQLObjectSubqueries.txt
===================================================================
--- trunk/SQLObject/docs/SQLObjectSubqueries.txt 2005-04-24 08:42:19 UTC (rev 735)
+++ trunk/SQLObject/docs/SQLObjectSubqueries.txt 2005-04-24 09:54:28 UTC (rev 736)
@@ -19,3 +19,7 @@
Select() is used instead of .select() because you need to control what
columns and in what order the inner query returns.
+
+Avalable queries are IN(), NOTIN(), EXISTS(), NOTEXISTS(), SOME(), ANY()
+and ALL(). The last 3 are used with comparison operators, like this:
+"somevalue = ANY(Select(...))".
Modified: trunk/SQLObject/sqlobject/sqlbuilder.py
===================================================================
--- trunk/SQLObject/sqlobject/sqlbuilder.py 2005-04-24 08:42:19 UTC (rev 735)
+++ trunk/SQLObject/sqlobject/sqlbuilder.py 2005-04-24 09:54:28 UTC (rev 736)
@@ -603,9 +603,21 @@
def NOT(op):
return SQLPrefix("NOT", op)
-def IN(item, list):
+def _IN(item, list):
return SQLOp("IN", item, list)
+def IN(item, list):
+ if isinstance(list, Select):
+ return INSubquery(item, list)
+ else:
+ return _IN(item, list)
+
+def NOTIN(item, list):
+ if isinstance(list, Select):
+ return NOTINSubquery(item, list)
+ else:
+ return NOT(_IN(item, list))
+
def LIKE(expr, string):
return SQLOp("LIKE", expr, string)
Modified: trunk/SQLObject/sqlobject/tests/test_subqueries.py
===================================================================
--- trunk/SQLObject/sqlobject/tests/test_subqueries.py 2005-04-24 08:42:19 UTC (rev 735)
+++ trunk/SQLObject/sqlobject/tests/test_subqueries.py 2005-04-24 09:54:28 UTC (rev 736)
@@ -27,13 +27,13 @@
def test_1syntax_in():
setup()
- select = TestIn1.select(INSubquery(TestIn1.q.col1, Select(TestIn2.q.col2)))
+ select = TestIn1.select(IN(TestIn1.q.col1, Select(TestIn2.q.col2)))
assert str(select) == \
"SELECT test_in1.id, test_in1.col1 FROM test_in1 WHERE test_in1.col1 IN (SELECT test_in2.col2 FROM test_in2)"
def test_2perform_in():
insert()
- select = TestIn1.select(INSubquery(TestIn1.q.col1, Select(TestIn2.q.col2)))
+ select = TestIn1.select(IN(TestIn1.q.col1, Select(TestIn2.q.col2)))
assert select.count() == 2
def test_3syntax_exists():
|