func_odbc: Use one connection per DSN.
authorMark Michelson <mmichelson@digium.com>
Fri, 22 Apr 2016 18:49:50 +0000 (13:49 -0500)
committerMark Michelson <mmichelson@digium.com>
Fri, 22 Apr 2016 19:31:54 +0000 (14:31 -0500)
commit924738e950861c485d707fc5539e50bbf77b7202
tree20099c92a76f4e56ba1ef91b373768709f92dfe8
parent57c908c7a59056f6ea66ebe1453f2454be837233
func_odbc: Use one connection per DSN.

res_odbc was changed in Asterisk 13.8.0 to remove connection management,
opting instead to let unixodbc maintain open connections and return
those to Asterisk as requested.

This was a boon for realtime, since it meant that multiple threads could
potentially run parallel queries since they could each be using their
own database connections.

However, on the user-facing side, func_odbc, there were some inherent
behaviors being relied on that no longer hold true after the change.
One such reported behavior was that MySQL's LAST_INSERTED_ID() works
per-connection. This means that if Asterisk uses separate connections
for every database operation, whereas before it used one connection for
everything, we have broken expectations and functionality.

The fix provided in this patch is to make func_odbc use a single
database connection per DSN. This way, user-facing database usage will
have the same behavior as it did pre-13.8.0. However, realtime, which is
the real workhorse of database interaction, will continue to let
unixodbc manage connections.

ASTERISK-25938 #close
Reported by Edwin Vandamme

Change-Id: Iac961fe79154c6211569afcdfec843c0c24c46dc
funcs/func_odbc.c