Commit 5cb74797fe for freeswitch.com
commit 5cb74797fe996b706be1dc29d1096c7baefdfbfb
Author: Aron Podrigal <aronp@guaranteedplus.com>
Date: Fri Jan 17 09:51:45 2025 -0600
[mod_pgsql] err is now set correctly (dbh:last_error())
New function, `void pgsql_handle_set_error_if_not_set(switch_pgsql_handle_t *handle, char **err)` has been added to mod_pgsql module. This function is now called at several points where an error occurred but *err was not yet set.
diff --git a/src/mod/databases/mod_pgsql/mod_pgsql.c b/src/mod/databases/mod_pgsql/mod_pgsql.c
index 89fdd710f6..1a5874e14c 100644
--- a/src/mod/databases/mod_pgsql/mod_pgsql.c
+++ b/src/mod/databases/mod_pgsql/mod_pgsql.c
@@ -106,6 +106,22 @@ char * pgsql_handle_get_error(switch_pgsql_handle_t *handle)
return err_str;
}
+void pgsql_handle_set_error_if_not_set(switch_pgsql_handle_t *handle, char **err)
+{
+ char *err_str;
+
+ if (err && !(*err)) {
+ err_str = pgsql_handle_get_error(handle);
+
+ if (zstr(err_str)) {
+ switch_safe_free(err_str);
+ err_str = strdup((char *)"SQL ERROR!");
+ }
+
+ *err = err_str;
+ }
+}
+
static int db_is_up(switch_pgsql_handle_t *handle)
{
int ret = 0;
@@ -553,8 +569,15 @@ switch_status_t pgsql_handle_exec_detailed(const char *file, const char *func, i
goto error;
}
- return pgsql_finish_results(handle);
+ if (pgsql_finish_results(handle) != SWITCH_STATUS_SUCCESS) {
+ goto error;
+ }
+
+ return SWITCH_STATUS_SUCCESS;
+
error:
+ pgsql_handle_set_error_if_not_set(handle, err);
+
return SWITCH_STATUS_FALSE;
}
@@ -630,6 +653,7 @@ done:
pgsql_free_result(&result);
if (pgsql_finish_results(handle) != SWITCH_STATUS_SUCCESS) {
+ pgsql_handle_set_error_if_not_set(handle, err);
sstatus = SWITCH_STATUS_FALSE;
}
@@ -638,6 +662,7 @@ done:
error:
pgsql_free_result(&result);
+ pgsql_handle_set_error_if_not_set(handle, err);
return SWITCH_STATUS_FALSE;
}
@@ -1050,6 +1075,8 @@ switch_status_t pgsql_handle_callback_exec_detailed(const char *file, const char
return SWITCH_STATUS_SUCCESS;
error:
+ pgsql_handle_set_error_if_not_set(handle, err);
+
return SWITCH_STATUS_FALSE;
}