]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
[mod_pgsql] err is now set correctly (dbh:last_error())
authorAron Podrigal <aronp@guaranteedplus.com>
Fri, 17 Jan 2025 15:51:45 +0000 (09:51 -0600)
committerGitHub <noreply@github.com>
Fri, 17 Jan 2025 15:51:45 +0000 (18:51 +0300)
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.

src/mod/databases/mod_pgsql/mod_pgsql.c

index 89fdd710f6af1064c6b863574a51aaec2705af45..1a5874e14cc78fc79c03ea0b8b671cf98f003c15 100644 (file)
@@ -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;
 }