? libpsqlodbc.so.0 ? foo Index: options.c =================================================================== RCS file: /opt/cvs/postgresql.org/pgsql/src/interfaces/odbc/options.c,v retrieving revision 1.16 diff -u -r1.16 options.c --- options.c 2000/10/28 15:10:36 1.16 +++ options.c 2000/12/14 13:49:30 @@ -314,32 +314,18 @@ 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: Index: statement.c =================================================================== RCS file: /opt/cvs/postgresql.org/pgsql/src/interfaces/odbc/statement.c,v retrieving revision 1.18 diff -u -r1.18 statement.c --- statement.c 2000/10/25 14:15:49 1.18 +++ statement.c 2000/12/14 13:49:30 @@ -750,12 +750,12 @@ 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 @@ 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;