Thread: [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 |