|
[SQL-CVS] r2691 - in SQLObject/branches/0.9: docs sqlobject
sqlobject/tests
From: <subversion@co...> - 2007-05-15 15:58
|
Author: phd
Date: 2007-05-15 09:58:31 -0600 (Tue, 15 May 2007)
New Revision: 2691
Modified:
SQLObject/branches/0.9/docs/News.txt
SQLObject/branches/0.9/sqlobject/joins.py
SQLObject/branches/0.9/sqlobject/tests/test_SQLMultipleJoin.py
SQLObject/branches/0.9/sqlobject/tests/test_SingleJoin.py
Log:
Replaced calls to style.dbColumnToPythonAttr() in joins.py by name/dbName
lookup in case the user named columns differently using dbName.
Modified: SQLObject/branches/0.9/docs/News.txt
===================================================================
--- SQLObject/branches/0.9/docs/News.txt 2007-05-15 15:57:45 UTC (rev 2690)
+++ SQLObject/branches/0.9/docs/News.txt 2007-05-15 15:58:31 UTC (rev 2691)
@@ -224,6 +224,9 @@
SQLObject 0.7
=============
+* Replaced calls to style.dbColumnToPythonAttr() in joins.py by name/dbName
+ lookup in case the user named columns differently using dbName.
+
* Minor correction in the tests: we fully support EnumCol in Postgres.
SQLObject 0.7.7
Modified: SQLObject/branches/0.9/sqlobject/joins.py
===================================================================
--- SQLObject/branches/0.9/sqlobject/joins.py 2007-05-15 15:57:45 UTC (rev 2690)
+++ SQLObject/branches/0.9/sqlobject/joins.py 2007-05-15 15:58:31 UTC (rev 2691)
@@ -148,6 +148,12 @@
conn = None
return self._applyOrderBy([self.otherClass.get(id, conn) for (id,) in ids if id is not None], self.otherClass)
+ def _dbNameToPythonName(self):
+ for column in self.otherClass.sqlmeta.columns.values():
+ if column.dbName == self.joinColumn:
+ return column.name
+ return self.soClass.sqlmeta.style.dbColumnToPythonAttr(self.joinColumn)
+
class MultipleJoin(Join):
baseClass = SOMultipleJoin
@@ -158,7 +164,8 @@
conn = inst._connection
else:
conn = None
- results = self.otherClass.select(getattr(self.otherClass.q, self.soClass.sqlmeta.style.dbColumnToPythonAttr(self.joinColumn)) == inst.id, connection=conn)
+ pythonColumn = self._dbNameToPythonName()
+ results = self.otherClass.select(getattr(self.otherClass.q, pythonColumn) == inst.id, connection=conn)
if self.orderBy is NoDefault:
self.orderBy = self.otherClass.sqlmeta.defaultOrder
return results.orderBy(self.orderBy)
@@ -244,7 +251,7 @@
self.idName = idName
self.interTable = interTable
self.joinColumn = joinColumn
-
+
def __sqlrepr__(self, db):
return '%s.%s = %s.%s' % (self.interTable, self.joinColumn, self.table, self.idName)
@@ -265,7 +272,7 @@
conn = None
results = self.otherClass.select(sqlbuilder.AND(
OtherTableToJoin(
- self.otherClass.sqlmeta.table, self.otherClass.sqlmeta.idName,
+ self.otherClass.sqlmeta.table, self.otherClass.sqlmeta.idName,
self.intermediateTable, self.otherColumn
),
JoinToTable(
@@ -296,7 +303,7 @@
conn = inst._connection
else:
conn = None
- pythonColumn = self.soClass.sqlmeta.style.dbColumnToPythonAttr(self.joinColumn)
+ pythonColumn = self._dbNameToPythonName()
results = self.otherClass.select(
getattr(self.otherClass.q, pythonColumn) == inst.id,
connection=conn
@@ -378,7 +385,7 @@
& (sqlbuilder.Field(self.intermediateTable, self.joinColumn)
== obj.id))
select = self.otherClass.select(query)
- return _ManyToManySelectWrapper(obj, self, select)
+ return _ManyToManySelectWrapper(obj, self, select)
def event_CreateTableSignal(self, soClass, connection, extra_sql,
post_funcs):
@@ -402,14 +409,14 @@
joinColumn = None
otherColumn = None
createJoinTable = True
-
+
class _ManyToManySelectWrapper(object):
def __init__(self, forObject, join, select):
self.forObject = forObject
self.join = join
self.select = select
-
+
def __getattr__(self, attr):
# @@: This passes through private variable access too... should it?
# Also magic methods, like __str__
@@ -447,7 +454,7 @@
obj = self.join.otherClass(**kw)
self.add(obj)
return obj
-
+
class SOOneToMany(object):
def __init__(self, soClass, name, join, joinColumn, **attrs):
@@ -493,7 +500,7 @@
self.forObject = forObject
self.join = join
self.select = select
-
+
def __getattr__(self, attr):
# @@: This passes through private variable access too... should it?
# Also magic methods, like __str__
@@ -514,4 +521,3 @@
def create(self, **kw):
kw[self.join.joinColumn] = self.forObject.id
return self.join.otherClass(**kw)
-
Modified: SQLObject/branches/0.9/sqlobject/tests/test_SQLMultipleJoin.py
===================================================================
--- SQLObject/branches/0.9/sqlobject/tests/test_SQLMultipleJoin.py 2007-05-15 15:57:45 UTC (rev 2690)
+++ SQLObject/branches/0.9/sqlobject/tests/test_SQLMultipleJoin.py 2007-05-15 15:58:31 UTC (rev 2691)
@@ -3,12 +3,12 @@
class Race(SQLObject):
name = StringCol()
- fightersAsList = MultipleJoin('RFighter')
- fightersAsSResult = SQLMultipleJoin('RFighter')
+ fightersAsList = MultipleJoin('RFighter', joinColumn="rf_id")
+ fightersAsSResult = SQLMultipleJoin('RFighter', joinColumn="rf_id")
class RFighter(SQLObject):
name = StringCol()
- race = ForeignKey('Race')
+ race = ForeignKey('Race', dbName="rf_id")
power = IntCol()
def createAllTables():
Modified: SQLObject/branches/0.9/sqlobject/tests/test_SingleJoin.py
===================================================================
--- SQLObject/branches/0.9/sqlobject/tests/test_SingleJoin.py 2007-05-15 15:57:45 UTC (rev 2690)
+++ SQLObject/branches/0.9/sqlobject/tests/test_SingleJoin.py 2007-05-15 15:58:31 UTC (rev 2691)
@@ -4,13 +4,13 @@
class PersonWithAlbum(SQLObject):
name = StringCol()
# albumNone returns the album or none
- albumNone = SingleJoin('PhotoAlbum', joinColumn='person_id')
+ albumNone = SingleJoin('PhotoAlbum', joinColumn='test_person_id')
# albumInstance returns the album or an default album instance
- albumInstance = SingleJoin('PhotoAlbum', makeDefault=True, joinColumn='person_id')
+ albumInstance = SingleJoin('PhotoAlbum', makeDefault=True, joinColumn='test_person_id')
class PhotoAlbum(SQLObject):
color = StringCol(default='red')
- person = ForeignKey('PersonWithAlbum')
+ person = ForeignKey('PersonWithAlbum', dbName='test_person_id')
def test_1():
setupClass([PersonWithAlbum, PhotoAlbum])
|
| Thread | Author | Date |
|---|---|---|
| [SQL-CVS] r2691 - in SQLObject/branches/0.9: docs sqlobject sqlobject/tests | <subversion@co...> |