Module using transactional ODBC

Hello Guys,

I’m not sure if this is the right place to ask this question, but I didn’t receive an answer at the asterisk-embedded mailing list, so maybe I’ll have more luck this time.

What I want to do is to start an isolated ODBC Transaction, do some things, commit/rollback the changes and close the connection again. I also want to/have to use connection pooling as a speedup mechanism.

What I’ve done already:

following Code Snippet should get an independent odbc object:

struct ast_flags flags = RES_ODBC_INDEPENDENT_CONNECTION; obj = ast_odbc_request_obj2(obj, flags);

I have set the ODBC’s connection args to:

[test_connection] enabled => yes dsn => dsn_xyz username => abc password => abc pooling => yes limit => 10 pre-connect => yes isolation => serializable

After requesting the odbc object, I do the following:

struct generic_prepare_struct gps = { .sql = sql, .argc = argc, .argv = argv, .argTypes = argTypes }; snprintf(sql, sizeof(sql), "SELECT something for update"); stmt = ast_odbc_prepare_and_execute(obj, generic_prepare, &gps);

I added a sleep after the execution of the statement and tried to read/modify the data within a different Oracle session from antoher client.
And it worked, but when using a Serialized transaction it shouldn’t be possible to read data within another serialized transaction!

Hopefully someone could help me out here.

Thanks and best regards.
Christoph

PS:
When I disable connection pooling and set the transaction Isolation manually it works. (when I activate pooling I always receive an error that SQLSetConnection couldn’t be executed

SQLSetConnectAttr(obj->con, SQL_ATTR_TXN_ISOLATION, (SQLPOINTER)SQL_TXN_SERIALIZABLE, SQL_NTS); SQLSetConnectAttr(obj->con, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER)SQL_AUTOCOMMIT_OFF, SQL_NTS) ;