Thread: Driver confused by explicit transactions

Driver confused by explicit transactions

From
"Glen Parker"
Date:
It appears there is a somewhat on-going bug in the ODBC driver
(07.02.0005 in this case) concerning explicit transactions.  The
following sequence demonstrates it.

Begin transaction   (OK)
Execute update statement(s)   (OK, records hidden from other
transactions)
Commit transaction    (OK, records appear to other transactions)
Execute update statement(s)    (OK, but records hidden from other
transactions, should be visible)
Commit transaction    (OK, records appear to other transactions)

I'm going to dive into the code and see what I see, but wanted to report
the symptoms so others can look too.  I suspect the driver is failing to
turn auto-commit mode back on after the explicit commit, and is starting
a new transaction for statements following the commit when it should not
be, which do not get committed automatically.

Glen Parker
glenebob@nwlink.com


Re: Driver confused by explicit transactions

From
"Glen Parker"
Date:
It appears that this is fixed simply by having PGAPI_Transact() call
CC_set_autocommit_on(conn) after sending and verifying success of a
commit/abort statement to the server.  That makes the end of
PGAPI_Transact() look like this in my copy:


        if (!ok)
        {
            CC_on_abort(conn, NO_TRANS);
            CC_log_error(func, "", conn);
            return SQL_ERROR;
        }

        /* get (back) into auto-commit mode */
        CC_set_autocommit_on(conn);
    }
    return SQL_SUCCESS;
}


Glen Parker
glenebob@nwlink.com




> It appears there is a somewhat on-going bug in the ODBC driver
> (07.02.0005 in this case) concerning explicit transactions.  The
> following sequence demonstrates it.
>
> Begin transaction   (OK)
> Execute update statement(s)   (OK, records hidden from other
> transactions)
> Commit transaction    (OK, records appear to other transactions)
> Execute update statement(s)    (OK, but records hidden from other
> transactions, should be visible)
> Commit transaction    (OK, records appear to other transactions)
>
> I'm going to dive into the code and see what I see, but
> wanted to report
> the symptoms so others can look too.  I suspect the driver is
> failing to
> turn auto-commit mode back on after the explicit commit, and
> is starting
> a new transaction for statements following the commit when it
> should not
> be, which do not get committed automatically.
>
> Glen Parker
> glenebob@nwlink.com
>
>
> ---------------------------(end of
> broadcast)---------------------------
> TIP 6: Have you searched our list archives?
>
http://archives.postgresql.org


Re: Driver confused by explicit transactions

From
"Hiroshi Inoue"
Date:
> -----Original Message-----
> From: Glen Parker
>
> It appears there is a somewhat on-going bug in the ODBC driver
> (07.02.0005 in this case) concerning explicit transactions.  The
> following sequence demonstrates it.

What do you mean by explicit transactions ? i. e

> Begin transaction   (OK)

   How do you begin the transaction ?

> Execute update statement(s)   (OK, records hidden from other
> transactions)
> Commit transaction    (OK, records appear to other transactions)

  And how do you commit the transaction ?

regards,
Hiroshi Inoue

Re: Driver confused by explicit transactions

From
"Glen Parker"
Date:
> > It appears there is a somewhat on-going bug in the ODBC driver
> > (07.02.0005 in this case) concerning explicit transactions.  The
> > following sequence demonstrates it.
>
> What do you mean by explicit transactions ? i. e
>
> > Begin transaction   (OK)
>
>    How do you begin the transaction ?

By turning off auto-commit with a call to SQLSetConnectOption().

> > Execute update statement(s)   (OK, records hidden from other
> > transactions)
> > Commit transaction    (OK, records appear to other transactions)
>
>   And how do you commit the transaction ?

With a call to SQLTransact() to either commit or abort transaction.

Glen


Re: Driver confused by explicit transactions

From
"Hiroshi Inoue"
Date:
> -----Original Message-----
> From: Glen Parker [mailto:glenebob@nwlink.com]
>
> > > It appears there is a somewhat on-going bug in the ODBC driver
> > > (07.02.0005 in this case) concerning explicit transactions.  The
> > > following sequence demonstrates it.
> >
> > What do you mean by explicit transactions ? i. e
> >
> > > Begin transaction   (OK)
> >
> >    How do you begin the transaction ?
>
> By turning off auto-commit with a call to SQLSetConnectOption().
>
> > > Execute update statement(s)   (OK, records hidden from other
> > > transactions)
> > > Commit transaction    (OK, records appear to other transactions)
> >
> >   And how do you commit the transaction ?
>
> With a call to SQLTransact() to either commit or abort transaction.

Should SQLTransact() turn on auto-commit ?

regards,
Hiroshi Inoue