Author: phd
Date: 2007-05-10 08:19:57 -0600 (Thu, 10 May 2007)
New Revision: 2668
Modified:
SQLObject/branches/0.7/docs/News.txt
SQLObject/branches/0.7/sqlobject/joins.py
SQLObject/branches/0.7/sqlobject/tests/test_SQLMultipleJoin.py
SQLObject/branches/0.7/sqlobject/tests/test_SQLRelatedJoin.py
Log:
Fixed a bug in SQLRelatedJoin that ignored per-instance connection
(backport of the r2660).
Modified: SQLObject/branches/0.7/docs/News.txt
===================================================================
--- SQLObject/branches/0.7/docs/News.txt 2007-05-10 13:26:46 UTC (rev 2667)
+++ SQLObject/branches/0.7/docs/News.txt 2007-05-10 14:19:57 UTC (rev 2668)
@@ -13,6 +13,8 @@
Bug Fixes
---------
+* Fixed a bug in SQLRelatedJoin that ignored per-instance connection.
+
* Fixed a bug in MySQL connection in case there is no charset in the DB URI.
SQLObject 0.7.6
Modified: SQLObject/branches/0.7/sqlobject/joins.py
===================================================================
--- SQLObject/branches/0.7/sqlobject/joins.py 2007-05-10 13:26:46 UTC (rev 2667)
+++ SQLObject/branches/0.7/sqlobject/joins.py 2007-05-10 14:19:57 UTC (rev 2668)
@@ -257,6 +257,10 @@
class SOSQLRelatedJoin(SORelatedJoin):
def performJoin(self, inst):
+ if inst.sqlmeta._perConnection:
+ conn = inst._connection
+ else:
+ conn = None
results = self.otherClass.select(sqlbuilder.AND(
OtherTableToJoin(
self.otherClass.sqlmeta.table, self.otherClass.sqlmeta.idName,
@@ -267,7 +271,8 @@
self.intermediateTable, self.joinColumn
),
TableToId(self.soClass.sqlmeta.table, self.soClass.sqlmeta.idName, inst.id),
- ), clauseTables=(self.soClass.sqlmeta.table, self.otherClass.sqlmeta.table, self.intermediateTable))
+ ), clauseTables=(self.soClass.sqlmeta.table, self.otherClass.sqlmeta.table, self.intermediateTable),
+ connection=conn)
if self.orderBy is NoDefault:
self.orderBy = self.otherClass.sqlmeta.defaultOrder
return results.orderBy(self.orderBy)
Modified: SQLObject/branches/0.7/sqlobject/tests/test_SQLMultipleJoin.py
===================================================================
--- SQLObject/branches/0.7/sqlobject/tests/test_SQLMultipleJoin.py 2007-05-10 13:26:46 UTC (rev 2667)
+++ SQLObject/branches/0.7/sqlobject/tests/test_SQLMultipleJoin.py 2007-05-10 14:19:57 UTC (rev 2668)
@@ -41,3 +41,16 @@
assert trunks in hibrid.fightersAsSResult
assert picollo not in hibrid.fightersAsSResult
assert hibrid.fightersAsSResult.sum('power') == 23
+
+def test_multiple_join_transaction():
+ if not supports('transactions'):
+ return
+ createAllTables()
+ trans = Race._connection.transaction()
+ try:
+ namek=Race(name='namekuseijin', connection=trans)
+ gokou=RFighter(name='Gokou (Kakaruto)', race=namek, power=10, connection=trans)
+ assert namek.fightersAsSResult.count() == 1
+ assert namek.fightersAsSResult[0]._connection == trans
+ finally:
+ Race._connection.autoCommit = True
Modified: SQLObject/branches/0.7/sqlobject/tests/test_SQLRelatedJoin.py
===================================================================
--- SQLObject/branches/0.7/sqlobject/tests/test_SQLRelatedJoin.py 2007-05-10 13:26:46 UTC (rev 2667)
+++ SQLObject/branches/0.7/sqlobject/tests/test_SQLRelatedJoin.py 2007-05-10 14:19:57 UTC (rev 2668)
@@ -42,3 +42,17 @@
for i, j in zip(t1.fightersAsList, t1.fightersAsSResult):
assert i is j
assert len(t2.fightersAsList) == t2.fightersAsSResult.count()
+
+def test_related_join_transaction():
+ if not supports('transactions'):
+ return
+ createAllTables()
+ trans = Tourtment._connection.transaction()
+ try:
+ t1=Tourtment(name='Tourtment #1', connection=trans)
+ t1.addFighter(Fighter(name='Jim', connection=trans))
+ assert t1.fightersAsSResult.count() == 1
+ assert t1.fightersAsSResult[0]._connection == trans
+ finally:
+ Tourtment._connection.autoCommit = True
+
|