Author: phd
Date: Wed Jul 10 12:12:54 2013
New Revision: 4613
Log:
Helpers for class Outer were changed to lookup columns in table's declarations
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 Sun Jul 7 12:45:11 2013 (r4612)
+++ SQLObject/trunk/docs/News.txt Wed Jul 10 12:12:54 2013 (r4613)
@@ -10,6 +10,15 @@
SQLObject (trunk)
=================
+Features & Interface
+--------------------
+
+* Helpers for class Outer were changed to lookup columns in table's
+ declarations.
+
+Bugfixes
+--------
+
* A bug was fixed in DBConnection.close(); close() doesn't raise
an UnboundLocalError if connection pool is empty.
Modified: SQLObject/trunk/sqlobject/sqlbuilder.py
==============================================================================
--- SQLObject/trunk/sqlobject/sqlbuilder.py Sun Jul 7 12:45:11 2013 (r4612)
+++ SQLObject/trunk/sqlobject/sqlbuilder.py Wed Jul 10 12:12:54 2013 (r4613)
@@ -1135,22 +1135,13 @@
## Subqueries (subselects)
########################################
-class OuterField(Field):
+class OuterField(SQLObjectField):
def tablesUsedImmediate(self):
return []
-class OuterTable(Table):
+class OuterTable(SQLObjectTable):
FieldClass = OuterField
- def __init__(self, table):
- if hasattr(table, "sqlmeta"):
- tableName = table.sqlmeta.table
- else:
- tableName = table
- table = None
- Table.__init__(self, tableName)
- self.table = table
-
class Outer:
def __init__(self, table):
self.q = OuterTable(table)
Modified: SQLObject/trunk/sqlobject/tests/test_subqueries.py
==============================================================================
--- SQLObject/trunk/sqlobject/tests/test_subqueries.py Sun Jul 7 12:45:11 2013 (r4612)
+++ SQLObject/trunk/sqlobject/tests/test_subqueries.py Wed Jul 10 12:12:54 2013 (r4613)
@@ -12,6 +12,9 @@
class TestIn2(SQLObject):
col2 = StringCol()
+class TestOuter(SQLObject):
+ fk = ForeignKey('TestIn1')
+
def setup():
setupClass(TestIn1)
setupClass(TestIn2)
@@ -46,11 +49,20 @@
assert str(select) == \
"SELECT test_in1.id, test_in1.col1 FROM test_in1 WHERE NOT EXISTS (SELECT test_in2.col2 FROM test_in2 WHERE ((test_in1.col1) = (test_in2.col2)))"
+ setupClass(TestOuter)
+ select = TestOuter.select(NOTEXISTS(Select(TestIn1.q.col1, where=(Outer(TestOuter).q.fk == TestIn1.q.id))))
+ assert str(select) == \
+ "SELECT test_outer.id, test_outer.fk_id FROM test_outer WHERE NOT EXISTS (SELECT test_in1.col1 FROM test_in1 WHERE ((test_outer.fk_id) = (test_in1.id)))"
+
def test_4perform_exists():
insert()
select = TestIn1.select(EXISTS(Select(TestIn2.q.col2, where=(Outer(TestIn1).q.col1 == TestIn2.q.col2))))
assert len(list(select)) == 2
+ setupClass(TestOuter)
+ select = TestOuter.select(NOTEXISTS(Select(TestIn1.q.col1, where=(Outer(TestOuter).q.fkID == TestIn1.q.id))))
+ assert len(list(select)) == 0
+
def test_4syntax_direct():
setup()
select = TestIn1.select(TestIn1.q.col1 == Select(TestIn2.q.col2, where=(TestIn2.q.col2 == "test")))
|