[SQL-CVS] r721 - in trunk/SQLObject/sqlobject: . tests
SQLObject is a Python ORM.
Brought to you by:
ianbicking,
phd
|
From: <sub...@co...> - 2005-04-11 19:33:08
|
Author: phd
Date: 2005-04-11 19:32:23 +0000 (Mon, 11 Apr 2005)
New Revision: 721
Added:
trunk/SQLObject/sqlobject/tests/test_selectBy_foreignKey.py
Modified:
trunk/SQLObject/sqlobject/dbconnection.py
Log:
Applied the bugfix 1176359 by David M. Cook and Viktor Ferenczi
for .selectBy(foreignKey=value) instead of .selectBy(foreignKeyID=value).
Modified: trunk/SQLObject/sqlobject/dbconnection.py
===================================================================
--- trunk/SQLObject/sqlobject/dbconnection.py 2005-04-08 05:47:51 UTC (rev 720)
+++ trunk/SQLObject/sqlobject/dbconnection.py 2005-04-11 19:32:23 UTC (rev 721)
@@ -555,12 +555,24 @@
def _SO_columnClause(self, soClass, kw):
ops = {None: "IS"}
+ data = {}
+ if 'id' in kw:
+ data[soClass.sqlmeta.idName] = kw['id']
+ else:
+ for key, col in soClass.sqlmeta._columnDict.items():
+ if key in kw:
+ data[col.dbName] = kw[key]
+ elif col.foreignName in kw:
+ obj = kw[col.foreignName]
+ if obj is None:
+ data[col.dbName] = None
+ else:
+ data[col.dbName] = obj.id
return ' AND '.join(
['%s %s %s' %
- (soClass.sqlmeta._columnDict[key].dbName,
- ops.get(value, "="), self.sqlrepr(value))
- for key, value
- in kw.items()])
+ (dbName, ops.get(value, "="), self.sqlrepr(value))
+ for dbName, value
+ in data.items()])
def sqlrepr(self, v):
return sqlrepr(v, self.dbName)
Added: trunk/SQLObject/sqlobject/tests/test_selectBy_foreignKey.py
===================================================================
--- trunk/SQLObject/sqlobject/tests/test_selectBy_foreignKey.py 2005-04-08 05:47:51 UTC (rev 720)
+++ trunk/SQLObject/sqlobject/tests/test_selectBy_foreignKey.py 2005-04-11 19:32:23 UTC (rev 721)
@@ -0,0 +1,33 @@
+from sqlobject import *
+from sqlobject.tests.dbtest import *
+
+class TestComposer(SQLObject):
+ name = StringCol()
+
+class TestWork(SQLObject):
+ class sqlmeta:
+ idName = "work_id"
+
+ composer = ForeignKey('TestComposer')
+ title = StringCol()
+
+def test1():
+ setupClass(TestComposer)
+ setupClass(TestWork)
+
+ c = TestComposer(name='Mahler, Gustav')
+ w1 = TestWork(composer=c, title='Symphony No. 9')
+ w2 = TestWork(composer=None, title=None)
+
+ # Select by usual way
+ s = TestWork.selectBy(composerID=c.id, title='Symphony No. 9')
+ assert s[0]==w1
+ # selectBy object
+ s = TestWork.selectBy(composer=c, title='Symphony No. 9')
+ assert s[0]==w1
+ # selectBy id
+ s = TestWork.selectBy(id=w1.id)
+ assert s[0]==w1
+ # is None handled correctly?
+ s = TestWork.selectBy(composer=None, title=None)
+ assert s[0]==w2
|