diff --git a/src/interfaces/odbc/options.c b/src/interfaces/odbc/options.c index c9d6d107bd..ccc419299d 100644 --- a/src/interfaces/odbc/options.c +++ b/src/interfaces/odbc/options.c @@ -314,32 +314,18 @@ int i; case SQL_AUTOCOMMIT: - /* Since we are almost always in a transaction, this is now ok. - Even if we were, the logic will handle it by sending a commit - after the statement. - if (CC_is_in_trans(conn)) { - conn->errormsg = "Cannot switch commit mode while a transaction is in progres"; + conn->errormsg = "Cannot switch commit mode while a transaction is in progress"; conn->errornumber = CONN_TRANSACT_IN_PROGRES; CC_log_error(func, "", conn); return SQL_ERROR; } - */ mylog("SQLSetConnectOption: AUTOCOMMIT: transact_status=%d, vparam=%d\n", conn->transact_status, vParam); switch(vParam) { case SQL_AUTOCOMMIT_OFF: CC_set_autocommit_off(conn); - /* The following two lines are new. - With this modification the SELECT statements - are also included in the transactions. - Error handling should be written, - this is missing yet, see - SC_execute in statement.c for details. Zoltan - */ - CC_send_query(conn,"BEGIN",NULL); - CC_set_in_trans(conn); break; case SQL_AUTOCOMMIT_ON: diff --git a/src/interfaces/odbc/statement.c b/src/interfaces/odbc/statement.c index 0fac4d6bc0..e3b8a0fdff 100644 --- a/src/interfaces/odbc/statement.c +++ b/src/interfaces/odbc/statement.c @@ -750,12 +750,12 @@ QueryInfo qi; starting a transaction first. A transaction should be begun if and only if - we use declare/fetch and the statement is SELECT. + we use declare/fetch and the statement is SELECT + or we are not in autocommit state We assume that the Postgres backend has an autocommit feature as default. (Zoltan Kovacs, 04/26/2000) */ - // if ( ! self->internal && ! CC_is_in_trans(conn) && (globals.use_declarefetch || STMT_UPDATE(self))) { - if ( ! self->internal && ! CC_is_in_trans(conn) && globals.use_declarefetch && self->statement_type == STMT_TYPE_SELECT) { + if ( ! self->internal && ! CC_is_in_trans(conn) && ((globals.use_declarefetch && self->statement_type == STMT_TYPE_SELECT) || ! CC_is_in_autocommit(conn))) { mylog(" about to begin a transaction on statement = %u\n", self); res = CC_send_query(conn, "BEGIN", NULL); @@ -831,16 +831,9 @@ QueryInfo qi; mylog(" it's NOT a select statement: stmt=%u\n", self); self->result = CC_send_query(conn, self->stmt_with_params, NULL); - /* If we are in autocommit, we must send the commit. */ - /* No, we shouldn't. Postgres backend does the + /* We shouldn't send COMMIT. Postgres backend does the autocommit if neccessary. (Zoltan, 04/26/2000) */ -/* if ( ! self->internal && CC_is_in_autocommit(conn) && STMT_UPDATE(self)) { - res = CC_send_query(conn, "COMMIT", NULL); - QR_Destructor(res); - CC_set_no_trans(conn); - }*/ - } conn->status = oldstatus;