diff --git a/src/include/switch_utils.h b/src/include/switch_utils.h index 18bfbaf418..23dc3868d3 100644 --- a/src/include/switch_utils.h +++ b/src/include/switch_utils.h @@ -75,7 +75,7 @@ SWITCH_DECLARE(int) switch_isxdigit(int c); \return true value if the string is NULL or zero length */ static inline int zstr(const char *s) { - return (!s || *(s) == '\0'); + return !s || *s == '\0'; } #define switch_strlen_zero(x) zstr(x) diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c index cea5db904f..6121db0b0b 100644 --- a/src/mod/endpoints/mod_sofia/sofia.c +++ b/src/mod/endpoints/mod_sofia/sofia.c @@ -915,9 +915,7 @@ void *SWITCH_THREAD_FUNC sofia_profile_worker_thread_run(switch_thread_t *thread switch_mutex_lock(profile->ireg_mutex); - - sprintf(sqlbuf, "begin;\n"); - sofia_glue_actually_execute_sql(profile, sqlbuf, NULL); + sofia_glue_actually_execute_sql(profile, "begin;\n", NULL); while (switch_queue_trypop(profile->sql_queue, &pop) == SWITCH_STATUS_SUCCESS && pop) { char *sql = (char *) pop; @@ -943,9 +941,7 @@ void *SWITCH_THREAD_FUNC sofia_profile_worker_thread_run(switch_thread_t *thread //printf("TRANS:\n%s\n", sqlbuf); sofia_glue_actually_execute_sql(profile, sqlbuf, NULL); - - sprintf(sqlbuf, "commit;\n"); - sofia_glue_actually_execute_sql(profile, sqlbuf, NULL); + sofia_glue_actually_execute_sql(profile, "commit;\n", NULL); switch_mutex_unlock(profile->ireg_mutex); diff --git a/src/mod/endpoints/mod_sofia/sofia_glue.c b/src/mod/endpoints/mod_sofia/sofia_glue.c index 006eba57ac..a27c4117cd 100644 --- a/src/mod/endpoints/mod_sofia/sofia_glue.c +++ b/src/mod/endpoints/mod_sofia/sofia_glue.c @@ -3793,7 +3793,22 @@ int sofia_glue_init_sql(sofia_profile_t *profile) switch_odbc_handle_exec(odbc_dbh, "DROP TABLE sip_registrations", NULL); switch_odbc_handle_exec(odbc_dbh, reg_sql, NULL); } - free(test_sql); + + + + if (sofia_test_pflag(profile, PFLAG_SQL_IN_TRANS)) { + char *test2 = switch_mprintf("%s;%s", test_sql, test_sql); + + if (switch_odbc_handle_exec(odbc_dbh, test2, NULL) != SWITCH_ODBC_SUCCESS) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "GREAT SCOTT!!! Cannot execute batched statements!\n" + "If you are using mysql, make sure you are using MYODBC 3.51.18 or higher and enable FLAG_MULTI_STATEMENTS\n"); + sofia_clear_pflag(profile, PFLAG_SQL_IN_TRANS); + + } + free(test2); + } + + free(test_sql); test_sql = switch_mprintf("delete from sip_subscriptions where hostname='%q' and network_ip like '%%' and network_port like '%%'",