Thread: [SQL-CVS] r2446 - in home/phd/SQLObject/paramstyles/sqlobject: . tests
SQLObject is a Python ORM.
Brought to you by:
ianbicking,
phd
From: <sub...@co...> - 2007-03-22 16:37:24
|
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 ######################################## |