[asterisk-bugs] [JIRA] (ASTERISK-25938) res_odbc: MySQL/MariaDB statement LAST_INSERT_ID() always returns zero.

Mark Michelson (JIRA) noreply at issues.asterisk.org
Fri Apr 22 09:56:56 CDT 2016


     [ https://issues.asterisk.org/jira/browse/ASTERISK-25938?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Mark Michelson updated ASTERISK-25938:
--------------------------------------

    Attachment: func_odbc_dsn.diff

Re-attaching the patch now. I'm not sure what happened there.

The problem isn't with func_odbc.c itself, but rather the behavior of the API  it depends on in res_odbc.c.

The suggestion of a connection per call is something that would allow nicely for parallelism and it would fix your particular case. My only concern here is if there are unreported problems that also stem from this behavior change. Maybe for Asterisk 14 we could go with a connection per call since upgrading to a major version allows for such behavior changes. For Asterisk 13, though, I'm going to try to revert to the behavior of 13.7.0 for func_odbc just so that behavior remains consistent and we don't have the possibility of causing subtle issues for people trying to perform a minor version upgrade.

> res_odbc: MySQL/MariaDB statement LAST_INSERT_ID() always returns zero.
> -----------------------------------------------------------------------
>
>                 Key: ASTERISK-25938
>                 URL: https://issues.asterisk.org/jira/browse/ASTERISK-25938
>             Project: Asterisk
>          Issue Type: Bug
>      Security Level: None
>          Components: Functions/func_odbc, Resources/res_odbc
>    Affects Versions: 13.8.0, 13.8.1
>         Environment: CentOS	  	  	7.2		  	2015-11
> Asterisk	  		13.8.0/13.8.1
> MariaDB			5.5.44
> unixODBC		2.3.1
> jansson  	  		2.7	  		2014-10-02
> PJSIP (pjproject)	2.4.5		2015-08-12
>            Reporter: Edwin Vandamme
>            Severity: Minor
>         Attachments: func_odbc_dsn.diff
>
>
> After upgrading to Asterisk 13.8.0 the MySQL/MariaDB statement LAST_INSERT_ID() always returns zero.
> To double check that it is related to Asterisk, I recompiled and installed 13.7.0 without any other modifications and the LAST_INSERT_ID() was returned correctly.
> To be sure, I recompiled and installed 13.8.0 and the problem returned.
> So back to 13.7.0 and no problem whatsoever.
> I checked the latest version which at time of writing is 13.8.1 and the problem returned.
> So back to 13.7.0 and no problem whatsoever.
> In my extensions.conf I do the following : 
> {code}
> ; Lock MySQL/MariaDB access.
> same = n,While($[${L} <= 0])
> same = n,Set(L=${LOCK(MySQL)})
> same = n,EndWhile()
> ; Mark start of a call attempt.
> same = n,Set(history_h1(${nIServer},${IProject},${ANI})=)
> ; Get unique call id
> same = n,Set(CallId=${history_h2()})
> ; Unlock MySQL access as the correct CallId was found.
> same = n,Set(L=${UNLOCK(MySQL)})
> {code}
> In my func_odbc.conf I do the following : 
> {code}
> [h1]
> prefix=history
> dsn=asterisk
> writesql=INSERT INTO callsystem.history SET IServer=${ARG1},IProject='${ARG2}',CallerId='${ARG3}',Status='ONLINE';
> [h2]
> prefix=history
> dsn=asterisk
> readsql=SELECT LAST_INSERT_ID() FROM callsystem.history LIMIT 1;
> {code}
> I also tried
> {code}
> readsql=SELECT LAST_INSERT_ID(); to no avail.
> {code}



--
This message was sent by Atlassian JIRA
(v6.2#6252)



More information about the asterisk-bugs mailing list