@@ -1400,7 +1400,10 @@ def delete_record(self, cascade:bool=True): # TODO: check return type, we return
1400
1400
return
1401
1401
1402
1402
# 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 )
1404
1407
1405
1408
# callback
1406
1409
if 'after_delete' in self .callbacks .keys ():
@@ -4322,10 +4325,12 @@ def generate_query(self, dataset: DataSet, join_clause: bool = True, where_claus
4322
4325
def delete_record (self , dataset : DataSet , cascade = True ): # TODO: get ON DELETE CASCADE from db
4323
4326
# Delete child records first!
4324
4327
if cascade :
4328
+ child_deleted = []
4325
4329
for _ in dataset .frm .datasets :
4326
4330
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 ) :
4328
4332
child = self .quote_table (r .child_table )
4333
+ child_deleted .append (child )
4329
4334
fk_column = self .quote_column (r .fk_column )
4330
4335
q = f'DELETE FROM { child } WHERE { fk_column } ={ dataset .get_current (dataset .pk_column )} '
4331
4336
self .execute (q )
@@ -4335,7 +4340,7 @@ def delete_record(self, dataset: DataSet, cascade=True): # TODO: get ON DELETE C
4335
4340
table = self .quote_table (dataset .table )
4336
4341
pk_column = self .quote_column (dataset .pk_column )
4337
4342
q = f'DELETE FROM { table } WHERE { pk_column } ={ dataset .get_current (dataset .pk_column )} ;'
4338
- self .execute (q )
4343
+ return self .execute (q )
4339
4344
4340
4345
def duplicate_record (self , dataset : DataSet , cascade : bool ) -> ResultSet :
4341
4346
## 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
4459
4464
4460
4465
def connect (self , database ):
4461
4466
self .con = sqlite3 .connect (database )
4462
- # self.con.execute('PRAGMA foreign_keys = ON') # For testing foreign_key ON DELETE CASCADE
4463
4467
4464
4468
def execute (self , query , values = None , silent = False , column_info = None ):
4465
4469
if not silent :logger .info (f'Executing query: { query } { values } ' )
0 commit comments