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; }