Further refactored SQLiteAdapter calling the super method instead of duplicating the code
This commit is contained in:
+5
-10
@@ -2439,24 +2439,19 @@ class SQLiteAdapter(BaseAdapter):
|
|||||||
self.expand(second, 'string'))
|
self.expand(second, 'string'))
|
||||||
|
|
||||||
def delete(self, tablename, query):
|
def delete(self, tablename, query):
|
||||||
sql = self._delete(tablename, query)
|
# SQLite requires its own delete to handle CASCADE
|
||||||
### Special code to Handle CASCADE in SQLite & SpatiaLite
|
|
||||||
db = self.db
|
db = self.db
|
||||||
table = db[tablename]
|
table = db[tablename]
|
||||||
deleted = [x[table._id.name] for x in db(query).select(table._id)]
|
deleted = [x[table._id.name] for x in db(query).select(table._id)]
|
||||||
### end special code to handle CASCADE in SQLite & SpatiaLite
|
|
||||||
self.execute(sql)
|
counter = super(SQLiteAdapter, self).delete(tablename, query)
|
||||||
try:
|
|
||||||
counter = self.cursor.rowcount
|
|
||||||
except:
|
|
||||||
counter = None
|
|
||||||
### special code to handle CASCADE in SQLite & SpatiaLite
|
|
||||||
if counter:
|
if counter:
|
||||||
for field in table._referenced_by:
|
for field in table._referenced_by:
|
||||||
if field.type == 'reference '+ tablename \
|
if field.type == 'reference '+ tablename \
|
||||||
and field.ondelete == 'CASCADE':
|
and field.ondelete == 'CASCADE':
|
||||||
db(field.belongs(deleted)).delete()
|
db(field.belongs(deleted)).delete()
|
||||||
### end special code to handle CASCADE in SQLite & SpatiaLite
|
|
||||||
return counter
|
return counter
|
||||||
|
|
||||||
def select(self, query, fields, attributes):
|
def select(self, query, fields, attributes):
|
||||||
|
|||||||
Reference in New Issue
Block a user