Skip to content

Commit aa1472c

Browse files
committed
Fixing up sqldriver delete
Added the 'children deleted' list to delete, like it has in duplicate... otherwise there can be multiple deletes to the same table. Added a popup for exceptions to delete.
1 parent faf3468 commit aa1472c

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

pysimplesql/pysimplesql.py

+8-4
Original file line numberDiff line numberDiff line change
@@ -1400,7 +1400,10 @@ def delete_record(self, cascade:bool=True): # TODO: check return type, we return
14001400
return
14011401

14021402
# Delete child records first!
1403-
self.driver.delete_record(self, True)
1403+
result = self.driver.delete_record(self, True)
1404+
1405+
if result.exception is not None:
1406+
sg.popup(f"Query Failed! {result.exception}", keep_on_top=True)
14041407

14051408
# callback
14061409
if 'after_delete' in self.callbacks.keys():
@@ -4322,10 +4325,12 @@ def generate_query(self, dataset: DataSet, join_clause: bool = True, where_claus
43224325
def delete_record(self, dataset: DataSet, cascade=True): # TODO: get ON DELETE CASCADE from db
43234326
# Delete child records first!
43244327
if cascade:
4328+
child_deleted = []
43254329
for _ in dataset.frm.datasets:
43264330
for r in dataset.frm.relationships:
4327-
if r.parent_table == dataset.table and r.update_cascade:
4331+
if r.parent_table == dataset.table and r.update_cascade and (r.child_table not in child_deleted):
43284332
child = self.quote_table(r.child_table)
4333+
child_deleted.append(child)
43294334
fk_column = self.quote_column(r.fk_column)
43304335
q = f'DELETE FROM {child} WHERE {fk_column}={dataset.get_current(dataset.pk_column)}'
43314336
self.execute(q)
@@ -4335,7 +4340,7 @@ def delete_record(self, dataset: DataSet, cascade=True): # TODO: get ON DELETE C
43354340
table = self.quote_table(dataset.table)
43364341
pk_column = self.quote_column(dataset.pk_column)
43374342
q = f'DELETE FROM {table} WHERE {pk_column}={dataset.get_current(dataset.pk_column)};'
4338-
self.execute(q)
4343+
return self.execute(q)
43394344

43404345
def duplicate_record(self, dataset: DataSet, cascade: bool) -> ResultSet:
43414346
## https://stackoverflow.com/questions/1716320/how-to-insert-duplicate-rows-in-sqlite-with-a-unique-id
@@ -4459,7 +4464,6 @@ def __init__(self, db_path=None, sql_script=None, sqlite3_database=None, sql_com
44594464

44604465
def connect(self, database):
44614466
self.con = sqlite3.connect(database)
4462-
# self.con.execute('PRAGMA foreign_keys = ON') # For testing foreign_key ON DELETE CASCADE
44634467

44644468
def execute(self, query, values=None, silent=False, column_info = None):
44654469
if not silent:logger.info(f'Executing query: {query} {values}')

0 commit comments

Comments
 (0)