]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
[Core] ODBC: Add odbc-skip-autocommit-flip switch param. 1773/head
authorAndrey Volk <andywolk@gmail.com>
Thu, 25 Aug 2022 17:14:47 +0000 (20:14 +0300)
committerAndrey Volk <andywolk@gmail.com>
Thu, 25 Aug 2022 17:14:47 +0000 (20:14 +0300)
conf/vanilla/autoload_configs/switch.conf.xml
src/include/switch_odbc.h
src/switch_core.c
src/switch_odbc.c

index 714b62c54cc496ab88db36d1f1e40bd7fdd788c5..ba54eb7fce08df5b255024f27c6a33995a331fb2 100644 (file)
     <!-- <param name="core-db-dsn" value="postgresql://freeswitch:@127.0.0.1/freeswitch?options=-c%20client_min_messages%3DNOTICE" /> -->
     <!-- <param name="core-db-dsn" value="mariadb://Server=localhost;Database=freeswitch;Uid=freeswitch;Pwd=pass;" /> -->
     <!-- <param name="core-db-dsn" value="dsn:username:password" /> -->
+
+    <!-- <param name="odbc-skip-autocommit-flip" value="true" /> -->
+
     <!-- 
         Allow to specify the sqlite db at a different location (In this example, move it to ramdrive for
         better performance on most linux distro (note, you loose the data if you reboot))
index 84e049a1ac3dd7a951c34b36f27b34dc02811c2e..b640f43da96ce301bfc9ab396edd4cc30c71aa30 100644 (file)
@@ -51,6 +51,7 @@ typedef enum {
        SWITCH_ODBC_FAIL = -1
 } switch_odbc_status_t;
 
+SWITCH_DECLARE(void) switch_odbc_skip_autocommit_flip();
 SWITCH_DECLARE(switch_odbc_handle_t *) switch_odbc_handle_new(const char *dsn, const char *username, const char *password);
 SWITCH_DECLARE(void) switch_odbc_set_num_retries(switch_odbc_handle_t *handle, int num_retries);
 SWITCH_DECLARE(switch_odbc_status_t) switch_odbc_handle_disconnect(switch_odbc_handle_t *handle);
index d1bba3fa3e49380c3b6fc9abc84fd9ad5945885c..b1be13201842c4ee57cb2fd3db278ad96a29ac29 100644 (file)
@@ -2172,6 +2172,10 @@ static void switch_load_core_config(const char *file)
                                        } else {
                                                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "max-db-handles must be between 5 and 5000\n");
                                        }
+                               } else if (!strcasecmp(var, "odbc-skip-autocommit-flip")) {
+                                       if (switch_true(val)) {
+                                               switch_odbc_skip_autocommit_flip();
+                                       }
                                } else if (!strcasecmp(var, "db-handle-timeout")) {
                                        long tmp = atol(val);
 
index fbad0e371a98617d178be2fa16c65ff7d9c35f8d..be42080a7059ff2f9001d59388db4d9d946698ea 100644 (file)
@@ -62,6 +62,13 @@ struct switch_odbc_handle {
 };
 #endif
 
+uint8_t skip_autocommit_flip = 0;
+
+SWITCH_DECLARE(void) switch_odbc_skip_autocommit_flip()
+{
+       skip_autocommit_flip = 1;
+}
+
 SWITCH_DECLARE(switch_odbc_handle_t *) switch_odbc_handle_new(const char *dsn, const char *username, const char *password)
 {
 #ifdef SWITCH_HAVE_ODBC
@@ -811,6 +818,10 @@ SWITCH_DECLARE(switch_bool_t) switch_odbc_available(void)
 SWITCH_DECLARE(switch_odbc_status_t) switch_odbc_SQLSetAutoCommitAttr(switch_odbc_handle_t *handle, switch_bool_t on)
 {
 #ifdef SWITCH_HAVE_ODBC
+       if (skip_autocommit_flip) {
+               return SWITCH_ODBC_SUCCESS;
+       }
+
        if (on) {
                return SQLSetConnectAttr(handle->con, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER *) SQL_AUTOCOMMIT_ON, 0 );
        } else {