Author: phd
Date: 2007-03-22 10:37:12 -0600 (Thu, 22 Mar 2007)
New Revision: 2446
Modified:
home/phd/SQLObject/paramstyles/sqlobject/main.py
home/phd/SQLObject/paramstyles/sqlobject/sqlbuilder.py
home/phd/SQLObject/paramstyles/sqlobject/tests/test_delete.py
Log:
Merged patches from the revisions 2442:2445 from the trunk
Modified: home/phd/SQLObject/paramstyles/sqlobject/main.py
===================================================================
--- home/phd/SQLObject/paramstyles/sqlobject/main.py 2007-03-22 16:24:17 UTC (rev 2445)
+++ home/phd/SQLObject/paramstyles/sqlobject/main.py 2007-03-22 16:37:12 UTC (rev 2446)
@@ -1562,6 +1562,19 @@
delete = classmethod(delete)
+ def deleteMany(cls, where=NoDefault, connection=None):
+ conn = connection or cls._connection
+ conn.query(conn.sqlrepr(sqlbuilder.Delete(cls.sqlmeta.table, where)))
+
+ deleteMany = classmethod(deleteMany)
+
+ def deleteBy(cls, connection=None, **kw):
+ conn = connection or cls._connection
+ conn.query(conn.sqlrepr(sqlbuilder.Delete(cls.sqlmeta.table,
+ conn._SO_columnClause(cls, kw))))
+
+ deleteBy = classmethod(deleteBy)
+
def __repr__(self):
if not hasattr(self, 'id'):
# Object initialization not finished. No attributes can be read.
@@ -1600,6 +1613,7 @@
cls._connection = value
setConnection = classmethod(setConnection)
+
def capitalize(name):
return name[0].capitalize() + name[1:]
Modified: home/phd/SQLObject/paramstyles/sqlobject/sqlbuilder.py
===================================================================
--- home/phd/SQLObject/paramstyles/sqlobject/sqlbuilder.py 2007-03-22 16:24:17 UTC (rev 2445)
+++ home/phd/SQLObject/paramstyles/sqlobject/sqlbuilder.py 2007-03-22 16:37:12 UTC (rev 2446)
@@ -718,10 +718,12 @@
raise TypeError, "You must give a where clause or pass in None to indicate no where clause"
self.whereClause = where
def __sqlrepr__(self, db):
- if self.whereClause is None:
+ whereClause = self.whereClause
+ if whereClause is None:
return "DELETE FROM %s" % self.table
- return "DELETE FROM %s WHERE %s" \
- % (self.table, sqlrepr(self.whereClause, db))
+ if isinstance(whereClause, SQLExpression):
+ whereClause = sqlrepr(whereClause, db)
+ return "DELETE FROM %s WHERE %s" % (self.table, whereClause)
def __sqllist__(self):
if self.whereClause is None:
return ["DELETE FROM %s" % self.table]
Modified: home/phd/SQLObject/paramstyles/sqlobject/tests/test_delete.py
===================================================================
--- home/phd/SQLObject/paramstyles/sqlobject/tests/test_delete.py 2007-03-22 16:24:17 UTC (rev 2445)
+++ home/phd/SQLObject/paramstyles/sqlobject/tests/test_delete.py 2007-03-22 16:37:12 UTC (rev 2446)
@@ -13,6 +13,20 @@
assert list(TestSO1.select('all')) == []
########################################
+## Delete many rows at once
+########################################
+
+def testDeleteMany():
+ setupGetters(TestSO1)
+ TestSO1.deleteMany(OR(TestSO1.q.name=="bob", TestSO1.q.name=="fred"))
+ assert len(list(TestSO1.select('all'))) == 2
+
+def testDeleteBy():
+ setupGetters(TestSO1)
+ TestSO1.deleteBy(name="dave")
+ assert len(list(TestSO1.select())) == 3
+
+########################################
## Delete without caching
########################################
|