Author: luke
Date: 2007-03-28 21:23:48 -0600 (Wed, 28 Mar 2007)
New Revision: 2474
Modified:
SQLObject/branches/sqlbuilder-sresults/sqlobject/sqlbuilder.py
SQLObject/branches/sqlbuilder-sresults/sqlobject/sresults.py
Log:
Merged sqlobject-views+1 r2473 to sqlobject-sresults (Fix for sresults.throughTo on sqlite)
Modified: SQLObject/branches/sqlbuilder-sresults/sqlobject/sqlbuilder.py
===================================================================
--- SQLObject/branches/sqlbuilder-sresults/sqlobject/sqlbuilder.py 2007-03-29 03:14:29 UTC (rev 2473)
+++ SQLObject/branches/sqlbuilder-sresults/sqlobject/sqlbuilder.py 2007-03-29 03:23:48 UTC (rev 2474)
@@ -829,6 +829,15 @@
def ISNOTNULL(expr):
return SQLOp("IS NOT", expr, None)
+class ColumnAS(SQLOp):
+ ''' Just like SQLOp('AS', expr, name) except without the parentheses '''
+ def __init__(self, expr, name):
+ if isinstance(name, (str, unicode)):
+ name = SQLConstant(name)
+ SQLOp.__init__(self, 'AS', expr, name)
+ def __sqlrepr__(self, db):
+ return "%s %s %s" % (sqlrepr(self.expr1, db), self.op, sqlrepr(self.expr2, db))
+
class _LikeQuoted:
# @@: I'm not sure what the quoting rules really are for all the
# databases
Modified: SQLObject/branches/sqlbuilder-sresults/sqlobject/sresults.py
===================================================================
--- SQLObject/branches/sqlbuilder-sresults/sqlobject/sresults.py 2007-03-29 03:14:29 UTC (rev 2473)
+++ SQLObject/branches/sqlbuilder-sresults/sqlobject/sresults.py 2007-03-29 03:23:48 UTC (rev 2474)
@@ -316,23 +316,27 @@
def _throughToFK(self, col):
otherClass = getattr(self.sourceClass, "_SO_class_"+col.foreignKey)
- query = sqlbuilder.Alias(self.queryForSelect(), "%s_%s" % (self.sourceClass.__name__, col.name))
- return otherClass, otherClass.q.id==getattr(query.q, getattr(self.sourceClass.q, col.name).fieldName)
+ colName = col.name
+ query = self.queryForSelect().newItems([sqlbuilder.ColumnAS(getattr(self.sourceClass.q, colName), colName)])
+ query = sqlbuilder.Alias(query, "%s_%s" % (self.sourceClass.__name__, col.name))
+ return otherClass, otherClass.q.id==getattr(query.q, colName)
def _throughToMultipleJoin(self, join):
otherClass = join.otherClass
- query = self.queryForSelect()
+ colName = join.soClass.sqlmeta.style.dbColumnToPythonAttr(join.joinColumn)
+ query = self.queryForSelect().newItems([sqlbuilder.ColumnAS(self.sourceClass.q.id, self.sourceClass.q.id.fieldName)])
query = sqlbuilder.Alias(query, "%s_%s" % (self.sourceClass.__name__, join.joinMethodName))
- joinColumn = getattr(otherClass.q, join.soClass.sqlmeta.style.dbColumnToPythonAttr(join.joinColumn))
+ joinColumn = getattr(otherClass.q, colName)
return otherClass, joinColumn==getattr(query.q, self.sourceClass.q.id.fieldName)
def _throughToRelatedJoin(self, join):
otherClass = join.otherClass
intTable = sqlbuilder.Table(join.intermediateTable)
- query = self.queryForSelect().newItems([getattr(intTable, join.joinColumn)])
+ colName = join.joinColumn
+ query = self.queryForSelect().newItems([sqlbuilder.ColumnAS(getattr(intTable, colName), colName)])
query = sqlbuilder.Alias(query, "%s_%s" % (self.sourceClass.__name__, join.joinMethodName))
clause = sqlbuilder.AND(otherClass.q.id == getattr(intTable, join.otherColumn),
- getattr(intTable, join.joinColumn) == getattr(query.q, join.joinColumn))
+ getattr(intTable, colName) == getattr(query.q, colName))
return otherClass, clause
__all__ = ['SelectResults']
|