Author: phd
Date: Thu Mar 24 08:03:57 2011
New Revision: 4371
Log:
SelectResults (returned from .select()) is allowed in IN(column, list).
Modified:
SQLObject/trunk/docs/News.txt
SQLObject/trunk/sqlobject/sqlbuilder.py
SQLObject/trunk/sqlobject/tests/test_subqueries.py
Modified: SQLObject/trunk/docs/News.txt
==============================================================================
--- SQLObject/trunk/docs/News.txt Tue Mar 22 10:26:50 2011 (r4370)
+++ SQLObject/trunk/docs/News.txt Thu Mar 24 08:03:57 2011 (r4371)
@@ -10,6 +10,11 @@
SQLObject (trunk)
=================
+Features & Interface
+--------------------
+
+* SelectResults (returned from .select()) is allowed in IN(column, list).
+
SQLObject 1.0.0
===============
Modified: SQLObject/trunk/sqlobject/sqlbuilder.py
==============================================================================
--- SQLObject/trunk/sqlobject/sqlbuilder.py Tue Mar 22 10:26:50 2011 (r4370)
+++ SQLObject/trunk/sqlobject/sqlbuilder.py Thu Mar 24 08:03:57 2011 (r4371)
@@ -836,6 +836,11 @@
return SQLOp("IN", item, list)
def IN(item, list):
+ from sresults import SelectResults # Import here to avoid circular import
+ if isinstance(list, SelectResults):
+ query = list.queryForSelect()
+ query.ops['items'] = [list.sourceClass.q.id]
+ list = query
if isinstance(list, Select):
return INSubquery(item, list)
else:
Modified: SQLObject/trunk/sqlobject/tests/test_subqueries.py
==============================================================================
--- SQLObject/trunk/sqlobject/tests/test_subqueries.py Tue Mar 22 10:26:50 2011 (r4370)
+++ SQLObject/trunk/sqlobject/tests/test_subqueries.py Thu Mar 24 08:03:57 2011 (r4371)
@@ -31,6 +31,10 @@
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)"
+ select = TestIn1.select(IN(TestIn1.q.col1, TestIn2.select()))
+ assert str(select) == \
+ "SELECT test_in1.id, test_in1.col1 FROM test_in1 WHERE test_in1.col1 IN (SELECT test_in2.id FROM test_in2 WHERE 1 = 1)"
+
def test_2perform_in():
insert()
select = TestIn1.select(IN(TestIn1.q.col1, Select(TestIn2.q.col2)))
|