From e8322b4b1a4e425bb38581399d39a4555c7e0ec9 Mon Sep 17 00:00:00 2001 From: Scott Idem Date: Wed, 21 Jan 2026 19:49:58 -0500 Subject: [PATCH] fix(db): prevent silent failures in sql_select - Modify sql_select to return False on database exceptions instead of an empty result - Update V3 Search endpoint to catch False results and return a 500 Internal Server Error - Enhances error visibility for frontend developers and prevents misleading 200 OK responses during SQL errors --- app/lib_sql_crud.py | 2 +- app/routers/api_crud_v3.py | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/app/lib_sql_crud.py b/app/lib_sql_crud.py index 73057b9..6a90fb8 100644 --- a/app/lib_sql_crud.py +++ b/app/lib_sql_crud.py @@ -312,7 +312,7 @@ def sql_select( except Exception as e: log.error(f"SQL Fetch Error: {e}") set_last_sql_error(e) - return [] if as_list else None + return False count = len(rows) diff --git a/app/routers/api_crud_v3.py b/app/routers/api_crud_v3.py index 7112894..e1c09b0 100644 --- a/app/routers/api_crud_v3.py +++ b/app/routers/api_crud_v3.py @@ -363,6 +363,11 @@ async def search_obj_li( as_list=True, ) + if sql_result is False: + # Standardized rich error bubbling + db_err = format_db_error(get_last_sql_error()) + return mk_resp(data=False, status_code=500, response=response, status_message="Search failed due to database error.", details=db_err.dict()) + if sql_result: resp_data_li = [base_name(**record).dict(by_alias=serialization.by_alias, exclude_unset=serialization.exclude_unset, exclude_defaults=serialization.exclude_defaults, exclude_none=serialization.exclude_none) for record in sql_result] return mk_resp(data=resp_data_li, response=response)