Changeset: e48d017e9a10 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/e48d017e9a10
Modified Files:
clients/odbc/driver/ODBCDbc.c
clients/odbc/driver/ODBCDbc.h
clients/odbc/driver/SQLConnect.c
clients/odbc/driver/SQLEndTran.c
clients/odbc/driver/SQLGetConnectAttr.c
clients/odbc/driver/SQLSetConnectAttr.c
sql/odbc/tests/Tests/ODBCconnect.py
Branch: Aug2024
Log Message:
Get rid of sql_attr_autocommit
It's part of the msettings now and shouldn't blindly override those.
diffs (111 lines):
diff --git a/clients/odbc/driver/ODBCDbc.c b/clients/odbc/driver/ODBCDbc.c
--- a/clients/odbc/driver/ODBCDbc.c
+++ b/clients/odbc/driver/ODBCDbc.c
@@ -80,7 +80,6 @@ newODBCDbc(ODBCEnv *env)
*dbc = (ODBCDbc) {
.Env = env,
.settings = settings,
- .sql_attr_autocommit = SQL_AUTOCOMMIT_ON, /* default is
autocommit */
.sql_attr_metadata_id = SQL_FALSE,
/* add this dbc to start of the administrative linked dbc list
*/
.next = env->FirstDbc,
diff --git a/clients/odbc/driver/ODBCDbc.h b/clients/odbc/driver/ODBCDbc.h
--- a/clients/odbc/driver/ODBCDbc.h
+++ b/clients/odbc/driver/ODBCDbc.h
@@ -59,7 +59,6 @@ typedef struct tODBCDRIVERDBC {
bool allow_hugeint; /* whether the application deals with HUGEINT */
bool raw_strings; /* server uses raw strings */
int mapToLongVarchar; /* when > 0 we map WVARCHAR to WLONGVARCHAR,
default 0 */
- SQLUINTEGER sql_attr_autocommit;
SQLUINTEGER sql_attr_metadata_id;
/* MonetDB connection handle & status information */
diff --git a/clients/odbc/driver/SQLConnect.c b/clients/odbc/driver/SQLConnect.c
--- a/clients/odbc/driver/SQLConnect.c
+++ b/clients/odbc/driver/SQLConnect.c
@@ -482,7 +482,6 @@ MNDBConnectSettings(ODBCDbc *dbc, const
if (mid) {
settings = NULL; // will be free'd as part of 'mid' now
mapi_setclientprefix(mid, "ODBC " MONETDB_VERSION);
- mapi_setAutocommit(mid, dbc->sql_attr_autocommit ==
SQL_AUTOCOMMIT_ON);
mapi_set_size_header(mid, true);
mapi_reconnect(mid);
}
diff --git a/clients/odbc/driver/SQLEndTran.c b/clients/odbc/driver/SQLEndTran.c
--- a/clients/odbc/driver/SQLEndTran.c
+++ b/clients/odbc/driver/SQLEndTran.c
@@ -119,7 +119,7 @@ MNDBEndTran(SQLSMALLINT HandleType,
assert(HandleType == SQL_HANDLE_DBC);
- if (dbc->sql_attr_autocommit == SQL_AUTOCOMMIT_ON) {
+ if (msetting_bool(dbc->settings, MP_AUTOCOMMIT)) {
/* nothing to do if in autocommit mode */
return SQL_SUCCESS;
}
diff --git a/clients/odbc/driver/SQLGetConnectAttr.c
b/clients/odbc/driver/SQLGetConnectAttr.c
--- a/clients/odbc/driver/SQLGetConnectAttr.c
+++ b/clients/odbc/driver/SQLGetConnectAttr.c
@@ -64,7 +64,8 @@ MNDBGetConnectAttr(ODBCDbc *dbc,
break;
case SQL_ATTR_AUTOCOMMIT: /* SQLUINTEGER */
/* SQL_AUTOCOMMIT */
- WriteData(ValuePtr, dbc->sql_attr_autocommit, SQLUINTEGER);
+ bool autocommit = msetting_bool(dbc->settings, MP_AUTOCOMMIT);
+ WriteData(ValuePtr, autocommit, SQLUINTEGER);
break;
case SQL_ATTR_CONNECTION_DEAD: /* SQLUINTEGER */
WriteData(ValuePtr, dbc->mid && mapi_is_connected(dbc->mid) ?
SQL_CD_FALSE : SQL_CD_TRUE, SQLUINTEGER);
diff --git a/clients/odbc/driver/SQLSetConnectAttr.c
b/clients/odbc/driver/SQLSetConnectAttr.c
--- a/clients/odbc/driver/SQLSetConnectAttr.c
+++ b/clients/odbc/driver/SQLSetConnectAttr.c
@@ -47,13 +47,12 @@ MNDBSetConnectAttr(ODBCDbc *dbc,
switch ((SQLUINTEGER) (uintptr_t) ValuePtr) {
case SQL_AUTOCOMMIT_ON:
case SQL_AUTOCOMMIT_OFF:
- dbc->sql_attr_autocommit = (SQLUINTEGER) (uintptr_t)
ValuePtr;
+ bool autocommit = (bool) (SQLUINTEGER) (uintptr_t)
ValuePtr;
#ifdef ODBCDEBUG
- ODBCLOG("SQLSetConnectAttr set autocommit %s\n",
- dbc->sql_attr_autocommit == SQL_AUTOCOMMIT_ON ?
"on" : "off");
+ ODBCLOG("SQLSetConnectAttr set autocommit %s\n",
autocommit ? "on" : "off");
#endif
if (dbc->mid)
- mapi_setAutocommit(dbc->mid,
dbc->sql_attr_autocommit == SQL_AUTOCOMMIT_ON);
+ mapi_setAutocommit(dbc->mid, autocommit);
break;
default:
/* Invalid attribute value */
diff --git a/sql/odbc/tests/Tests/ODBCconnect.py
b/sql/odbc/tests/Tests/ODBCconnect.py
--- a/sql/odbc/tests/Tests/ODBCconnect.py
+++ b/sql/odbc/tests/Tests/ODBCconnect.py
@@ -179,6 +179,29 @@ ex = Execution('-0', '-d', f'DSN={dsn}-W
ex.expect('OK')
ex.end()
+# test autocommit, default should be On
+ex = Execution('-d', f'DSN={dsn}', '-q', 'ROLLBACK')
+ex.expect('OK') # connect succeeds
+ex.expect('Error:') # rollback fails
+ex.expect('2DM30:') # because 2DM30: not allowed in autocommit mode
+ex.expect_fail()
+ex.end()
+
+# test autocommit, force On
+ex = Execution('-d', f'DSN={dsn};Autocommit=On', '-q', 'ROLLBACK')
+ex.expect('OK') # connect succeeds
+ex.expect('Error:') # rollback fails
+ex.expect('2DM30:') # because 2DM30: not allowed in autocommit mode
+ex.expect_fail()
+ex.end()
+
+# test autocommit, force Off
+ex = Execution('-d', f'DSN={dsn};Autocommit=Off', '-q', 'ROLLBACK')
+ex.expect('OK') # connect succeeds
+ex.expect('RESULT') # rollback succeeds
+ex.end()
+
+
# Test browsing
ex = Execution('-b', 'Driver={MonetDB}')
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]