Skip to content

Commit 78a7af4

Browse files
authored
Merge pull request #82 from ssweber/ab2
Changes
2 parents 6119e02 + ec1ff2d commit 78a7af4

File tree

1 file changed

+19
-10
lines changed

1 file changed

+19
-10
lines changed

pysimplesql/pysimplesql.py

+19-10
Original file line numberDiff line numberDiff line change
@@ -492,7 +492,8 @@ def records_changed(self, recursive=True, column_name:str=None) -> bool:
492492
logger.debug(f'Checking if records have changed in table "{self.table}"...')
493493

494494
# Virtual rows wills always be considered dirty
495-
if self.get_current_row().virtual: return True
495+
if self.rows:
496+
if self.get_current_row().virtual: return True
496497

497498
dirty = False
498499
# First check the current record to see if it's dirty
@@ -964,6 +965,10 @@ def insert_record(self, values:dict=None, skip_prompt_save=False) -> None:
964965
else:
965966
# At minimum, we should update the description column
966967
new_values[self.description_column] = 'New Record'
968+
# Make sure we take into account the foreign key relationships...
969+
for r in self.frm.relationships:
970+
if self.table == r.child_table and r.update_cascade:
971+
new_values[r.fk_column] = self.frm[r.parent_table].get_current_pk()
967972

968973
# Update the pk to match the expected pk the driver would generate on insert.
969974
new_values[self.pk_column] = self.driver.next_pk(self.table, self.pk_column)
@@ -1027,6 +1032,10 @@ def save_record(self, display_message=True, update_elements=True) -> None:
10271032

10281033
if val =='':
10291034
val = None
1035+
1036+
# Fix for Checkboxes switching from 0 to False, and from 1 to True
1037+
if type(val) is bool and type(self[v['column']]) is int:
1038+
val = int(val)
10301039

10311040
current_row[v['column']] = val
10321041

@@ -1037,13 +1046,13 @@ def save_record(self, display_message=True, update_elements=True) -> None:
10371046
return SAVE_NONE + SHOW_MESSAGE
10381047

10391048
# check to see if cascading-fk has changed before we update database
1040-
fk_changed = False
1041-
fk_column = self.frm.get_parent_cascade_fk(self.table)
1042-
if fk_column:
1049+
cascade_fk_changed = False
1050+
cascade_fk_column = self.frm.get_cascade_fk_column(self.table)
1051+
if cascade_fk_column:
10431052
# check if fk
10441053
for v in self.frm.element_map:
1045-
if v['query'] == self and pysimplesql.get_record_info(v['element'].Key)[1] == fk_column:
1046-
fk_changed = self.records_changed(recursive=False, column_name=v)
1054+
if v['query'] == self and pysimplesql.get_record_info(v['element'].Key)[1] == cascade_fk_column:
1055+
cascade_fk_changed = self.records_changed(recursive=False, column_name=v)
10471056

10481057
# Update the database from the stored rows
10491058
if self.transform is not None: self.transform(changed, TFORM_ENCODE)
@@ -1066,7 +1075,7 @@ def save_record(self, display_message=True, update_elements=True) -> None:
10661075
pk = self.get_current_pk()
10671076

10681077
# If child changes parent, move index back and requery/requery_dependents
1069-
if fk_changed: # TODO: Research why fk_changed is triggering at timems it does not need to
1078+
if cascade_fk_changed and not current_row.virtual: # Virtual rows already requery, and don't have any dependents.
10701079
self.frm[self.table].requery(select_first=False) #keep spot in table
10711080
self.frm[self.table].requery_dependents()
10721081

@@ -1485,15 +1494,15 @@ def get_parent(self, table):
14851494
return r.parent_table
14861495
return None
14871496

1488-
def get_parent_cascade_fk(self, table):
1497+
def get_cascade_fk_column(self, table):
14891498
"""
1490-
Return the parent fk that cascade-filters for the passed-in table
1499+
Return the cascade fk that filters for the passed-in table
14911500
:param table: The table (str) of child
14921501
:return: The name of the cascade-fk, or None
14931502
"""
14941503
for qry in self.queries:
14951504
for r in self.relationships:
1496-
if r.child_table == self[table].table:
1505+
if r.child_table == self[table].table and r.update_cascade:
14971506
return r.fk_column
14981507
return None
14991508

0 commit comments

Comments
 (0)