aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--configs/res_odbc.conf.sample13
-rw-r--r--res/res_odbc.c11
2 files changed, 18 insertions, 6 deletions
diff --git a/configs/res_odbc.conf.sample b/configs/res_odbc.conf.sample
index 097849dd7..c40b47e3e 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 201cf77b9..34d905b55 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) {