fix(sql): handle record_id=0 correctly in CRUD utilities
Updated sql_select, sql_update, and sql_delete to use explicit 'is not None' checks for record_id. This prevents falsy ID values (like 0) from triggering generic table scans or failing to filter, which was causing the config bootstrap to accidentally load record ID 1 when ID 0 was requested.
This commit is contained in:
@@ -111,7 +111,7 @@ def sql_update(
|
||||
if len(sql_set) < 4:
|
||||
return None
|
||||
|
||||
if record_id:
|
||||
if record_id is not None:
|
||||
data['id'] = record_id
|
||||
sql_update_stmt = text(f'UPDATE `{table_name}` SET {sql_set} WHERE id = :id')
|
||||
elif record_id_random:
|
||||
@@ -250,7 +250,7 @@ def sql_select(
|
||||
order_by_str_li = [f'`{table_name}`.`{k}` {v}' for k, v in order_by_li.items()]
|
||||
sql_order_by = f"ORDER BY {', '.join(order_by_str_li)}"
|
||||
|
||||
if table_name and not (record_id or record_id_random or field_name or field_value or sql or data):
|
||||
if table_name and record_id is None and not (record_id_random or field_name or field_value or sql or data):
|
||||
data = {}
|
||||
s_en, d_en = sql_enable_part(table_name, enabled) if enabled else ('', None)
|
||||
s_hi, d_hi = sql_hidden_part(table_name, hidden) if hidden else ('', None)
|
||||
@@ -264,12 +264,12 @@ def sql_select(
|
||||
|
||||
stmt = text(f"SELECT * FROM `{table_name}` WHERE 1=1 {s_search} {s_en} {s_hi} {sql_order_by} {sql_limit_offset};")
|
||||
|
||||
elif table_name and (record_id or record_id_random) and not (field_name or field_value or sql or data):
|
||||
data = {'rid': record_id} if record_id else {'ridr': record_id_random}
|
||||
where = f"`{table_name}`.id = :rid" if record_id else f"`{table_name}`.id_random = :ridr"
|
||||
elif table_name and (record_id is not None or record_id_random) and not (field_name or field_value or sql or data):
|
||||
data = {'rid': record_id} if record_id is not None else {'ridr': record_id_random}
|
||||
where = f"`{table_name}`.id = :rid" if record_id is not None else f"`{table_name}`.id_random = :ridr"
|
||||
stmt = text(f"SELECT * FROM `{table_name}` WHERE {where} {sql_order_by} {sql_limit_offset};")
|
||||
|
||||
elif table_name and field_name and field_value and not (record_id or record_id_random or sql or data):
|
||||
elif table_name and field_name and field_value and not (record_id is not None or record_id_random or sql or data):
|
||||
data = {field_name: field_value}
|
||||
s_where, d_where = sql_where_qry_part(qry_dict_li) if qry_dict_li else ('', {})
|
||||
s_ft, d_ft = sql_fulltext_qry_part(fulltext_qry_dict) if fulltext_qry_dict else ('', {})
|
||||
@@ -370,11 +370,11 @@ def sql_delete(
|
||||
) -> None|bool:
|
||||
log.setLevel(log_lvl)
|
||||
|
||||
if table_name and (record_id or record_id_random) and not (field_name or field_value or sql or data):
|
||||
data = {'rid': record_id} if record_id else {'ridr': record_id_random}
|
||||
where = f"`{table_name}`.id = :rid" if record_id else f"`{table_name}`.id_random = :ridr"
|
||||
if table_name and (record_id is not None or record_id_random) and not (field_name or field_value or sql or data):
|
||||
data = {'rid': record_id} if record_id is not None else {'ridr': record_id_random}
|
||||
where = f"`{table_name}`.id = :rid" if record_id is not None else f"`{table_name}`.id_random = :ridr"
|
||||
stmt = text(f"DELETE FROM `{table_name}` WHERE {where}")
|
||||
elif table_name and field_name and field_value and not (record_id or record_id_random or sql or data):
|
||||
elif table_name and field_name and field_value and not (record_id is not None or record_id_random or sql or data):
|
||||
data = {field_name: field_value}
|
||||
stmt = text(f"DELETE FROM `{table_name}` WHERE `{table_name}`.{field_name} = :{field_name}")
|
||||
elif sql:
|
||||
|
||||
Reference in New Issue
Block a user