diff --git a/configs/res_odbc.conf.sample b/configs/res_odbc.conf.sample index 097849dd73491fa5ca46236dfcab715f3904e1e7..c40b47e3ef96121532e7afa83e70c1548a7be95b 100644 --- a/configs/res_odbc.conf.sample +++ b/configs/res_odbc.conf.sample @@ -4,8 +4,9 @@ ; Note that all environmental variables can be seen by all connections, ; so you can't have different values for different connections. [ENV] -INFORMIXSERVER => my_special_database -INFORMIXDIR => /opt/informix +;INFORMIXSERVER => my_special_database +;INFORMIXDIR => /opt/informix +;ORACLE_HOME => /home/oracle ; All other sections are arbitrary names for database connections. @@ -15,6 +16,7 @@ dsn => asterisk ;username => myuser ;password => mypass pre-connect => yes +; ; What should we execute to ensure that our connection is still alive? The ; statement should return a non-zero value in the first field of its first ; record. The default is "select 1". @@ -34,17 +36,18 @@ pre-connect => yes ;idlecheck => 3600 ; Certain servers, such as MS SQL Server and Sybase use the TDS protocol, which -; limits the number of active queries per connection to 1. By setting up pools -; of connections, Asterisk can be made to work with these servers. +; limits the number of active queries per connection to 1. By telling res_odbc +; not to share connections, Asterisk can be made to work with these servers. [sqlserver] enabled => no dsn => mickeysoft -pooling => yes +share_connections => no limit => 5 username => oscar password => thegrouch pre-connect => yes sanitysql => select count(*) from systables +; ; Many databases have a default of '\' to escape special characters. MS SQL ; Server does not. backslash_is_escape => no diff --git a/res/res_odbc.c b/res/res_odbc.c index 201cf77b938bdc802684a649a0c0a6f0b437dd1f..34d905b555e95aa4d36976cff0d157268e90c4e5 100644 --- a/res/res_odbc.c +++ b/res/res_odbc.c @@ -262,6 +262,10 @@ static int load_odbc_config(void) if (!strcasecmp(v->name, "pooling")) { if (ast_true(v->value)) pooling = 1; + } else if (!strncasecmp(v->name, "share", 5)) { + /* "shareconnections" is a little clearer in meaning than "pooling" */ + if (ast_false(v->value)) + pooling = 1; } else if (!strcasecmp(v->name, "limit")) { sscanf(v->value, "%d", &limit); if (ast_true(v->value) && !limit) { @@ -633,7 +637,12 @@ static int reload(void) bse = 1; for (v = ast_variable_browse(config, cat); v; v = v->next) { if (!strcasecmp(v->name, "pooling")) { - pooling = 1; + if (ast_true(v->value)) + pooling = 1; + } else if (!strncasecmp(v->name, "share", 5)) { + /* "shareconnections" is a little clearer in meaning than "pooling" */ + if (ast_false(v->value)) + pooling = 1; } else if (!strcasecmp(v->name, "limit")) { sscanf(v->value, "%d", &limit); if (ast_true(v->value) && !limit) {