Oleg Broytmann wrote:
Is there a mechanism by which I can ask SQLObject to add these parens?
SQLObject generates query strings in dbconnection.py and sqlbuilder.py
modules. I think the only way to fix this would be to always add parens
whatever parameters are, Select() or not.
Thank you -- this turned out to be an entirely trivial patch. It would
be nice if someone with all the database engines available could run the
test suite; I'm presently only using SQLite (and don't know offhand how
to invoke the test suite against only one backend anyhow, should such be
supported).
Thanks!
Index: sqlobject/dbconnection.py
===================================================================
--- sqlobject/dbconnection.py (revision 1695)
+++ sqlobject/dbconnection.py (working copy)
@@ -560,9 +560,9 @@
# in the SQLObject class.
def _SO_update(self, so, values):
- self.query("UPDATE %s SET %s WHERE %s = %s" %
+ self.query("UPDATE %s SET %s WHERE %s = (%s)" %
(so.sqlmeta.table,
- ", ".join(["%s = %s" % (dbName, self.sqlrepr(value))
+ ", ".join(["%s = (%s)" % (dbName, self.sqlrepr(value))
for dbName, value in values]),
so.sqlmeta.idName,
self.sqlrepr(so.id)))
@@ -571,40 +571,40 @@
columns = ", ".join(columnNames)
if columns:
return self.queryOne(
- "SELECT %s FROM %s WHERE %s = %s" %
+ "SELECT %s FROM %s WHERE %s = (%s)" %
(columns,
so.sqlmeta.table,
so.sqlmeta.idName,
self.sqlrepr(so.id)))
else:
return self.queryOne(
- "SELECT NULL FROM %s WHERE %s = %s" %
+ "SELECT NULL FROM %s WHERE %s = (%s)" %
(so.sqlmeta.table,
so.sqlmeta.idName,
self.sqlrepr(so.id)))
def _SO_selectOneAlt(self, cls, columnNames, column, value):
- return self.queryOne("SELECT %s FROM %s WHERE %s = %s" %
+ return self.queryOne("SELECT %s FROM %s WHERE %s = (%s)" %
(", ".join(columnNames),
cls.sqlmeta.table,
column,
self.sqlrepr(value)))
def _SO_delete(self, so):
- self.query("DELETE FROM %s WHERE %s = %s" %
+ self.query("DELETE FROM %s WHERE %s = (%s)" %
(so.sqlmeta.table,
so.sqlmeta.idName,
self.sqlrepr(so.id)))
def _SO_selectJoin(self, soClass, column, value):
- return self.queryAll("SELECT %s FROM %s WHERE %s = %s" %
+ return self.queryAll("SELECT %s FROM %s WHERE %s = (%s)" %
(soClass.sqlmeta.idName,
soClass.sqlmeta.table,
column,
self.sqlrepr(value)))
def _SO_intermediateJoin(self, table, getColumn, joinColumn, value):
- return self.queryAll("SELECT %s FROM %s WHERE %s = %s" %
+ return self.queryAll("SELECT %s FROM %s WHERE %s = (%s)" %
(getColumn,
table,
joinColumn,
@@ -612,7 +612,7 @@
def _SO_intermediateDelete(self, table, firstColumn, firstValue,
secondColumn, secondValue):
- self.query("DELETE FROM %s WHERE %s = %s AND %s = %s" %
+ self.query("DELETE FROM %s WHERE %s = (%s) AND %s = (%s)" %
(table,
firstColumn,
self.sqlrepr(firstValue),
Index: sqlobject/dbconnection.py
===================================================================
--- sqlobject/dbconnection.py (revision 1695)
+++ sqlobject/dbconnection.py (working copy)
@@ -604,9 +604,9 @@
# in the SQLObject class.
def _SO_update(self, so, values):
- self.query("UPDATE %s SET %s WHERE %s = %s" %
+ self.query("UPDATE %s SET %s WHERE %s = (%s)" %
(so.sqlmeta.table,
- ", ".join(["%s = %s" % (dbName, self.sqlrepr(value))
+ ", ".join(["%s = (%s)" % (dbName, self.sqlrepr(value))
for dbName, value in values]),
so.sqlmeta.idName,
self.sqlrepr(so.id)))
@@ -615,14 +615,14 @@
columns = ", ".join(columnNames)
if columns:
return self.queryOne(
- "SELECT %s FROM %s WHERE %s = %s" %
+ "SELECT %s FROM %s WHERE %s = (%s)" %
(columns,
so.sqlmeta.table,
so.sqlmeta.idName,
self.sqlrepr(so.id)))
else:
return self.queryOne(
- "SELECT NULL FROM %s WHERE %s = %s" %
+ "SELECT NULL FROM %s WHERE %s = (%s)" %
(so.sqlmeta.table,
so.sqlmeta.idName,
self.sqlrepr(so.id)))
@@ -635,7 +635,7 @@
raise ValueError, "'column' and 'value' tuples must be of the same size"
columns = []
for i in xrange(len(column)):
- columns.append("%s = %s" % (column[i], self.sqlrepr(value[i])))
+ columns.append("%s = (%s)" % (column[i], self.sqlrepr(value[i])))
condition = ' AND '.join(columns)
return self.queryOne("SELECT %s FROM %s WHERE %s" %
(", ".join(columnNames),
@@ -643,20 +643,20 @@
condition))
def _SO_delete(self, so):
- self.query("DELETE FROM %s WHERE %s = %s" %
+ self.query("DELETE FROM %s WHERE %s = (%s)" %
(so.sqlmeta.table,
so.sqlmeta.idName,
self.sqlrepr(so.id)))
def _SO_selectJoin(self, soClass, column, value):
- return self.queryAll("SELECT %s FROM %s WHERE %s = %s" %
+ return self.queryAll("SELECT %s FROM %s WHERE %s = (%s)" %
(soClass.sqlmeta.idName,
soClass.sqlmeta.table,
column,
self.sqlrepr(value)))
def _SO_intermediateJoin(self, table, getColumn, joinColumn, value):
- return self.queryAll("SELECT %s FROM %s WHERE %s = %s" %
+ return self.queryAll("SELECT %s FROM %s WHERE %s = (%s)" %
(getColumn,
table,
joinColumn,
@@ -664,7 +664,7 @@
def _SO_intermediateDelete(self, table, firstColumn, firstValue,
secondColumn, secondValue):
- self.query("DELETE FROM %s WHERE %s = %s AND %s = %s" %
+ self.query("DELETE FROM %s WHERE %s = (%s) AND %s = (%s)" %
(table,
firstColumn,
self.sqlrepr(firstValue),
Index: sqlobject/main.py
===================================================================
--- sqlobject/main.py (revision 1695)
+++ sqlobject/main.py (working copy)
@@ -1293,7 +1293,7 @@
else:
names = []
for i in xrange(len(name)):
- names.append("%s = %s" % (name[i], repr(value[i])))
+ names.append("%s = (%s)" % (name[i], repr(value[i])))
names = ', '.join(names)
raise SQLObjectNotFound, "The %s by unique index %s(%s) does not exist" % (cls.__name__, idxName, names)
if obj:
@@ -1483,7 +1483,7 @@
if col.cascade == False:
# Found a restriction
restrict = True
- query.append("%s = %s" % (col.dbName, self.id))
+ query.append("%s = (%s)" % (col.dbName, self.id))
if col.cascade == 'null':
setnull = col.name
elif col.cascade: