Re: Behaviour of setAutoCommit may not be completely - Mailing list pgsql-jdbc

From Mark Lewis
Subject Re: Behaviour of setAutoCommit may not be completely
Date
Msg-id 1143827025.5634.37.camel@archimedes
Whole thread Raw
In response to Re: Behaviour of setAutoCommit may not be completely correct.  (Dave Cramer <pg@fastcrypt.com>)
List pgsql-jdbc
Just an FYI, I ran a quick compatibility test and Oracle's 10g driver
does NOT commit if autoCommit was false and is set to false again.

-- Mark Lewis

On Fri, 2006-03-31 at 08:39 -0500, Dave Cramer wrote:
> So the question is which document is right.
>
> The specs as Michael pointed out say if it is called, the specs as
> Joao pointed out suggest that if it is changed. Joao, where did you
> read this ?
>
> Dave
> On 31-Mar-06, at 5:02 AM, João Paulo Ribeiro wrote:
>
> > Hello.
> >
> > I found a situation that is causing db locks using enhydra dods
> > with postgresql due to somethinf that look like a bad behaviour of
> > postgresql.
> > Since version 6.0, i think, dods do all the db queries with
> > setAutoCommit(false). The expected behaviour of setAutocommit(...)
> > is that the current transaction is commited, allowing the db
> > backend to free resources previously allocated, and a new one is
> > created with the autocommit set to the value passed.
> >
> > From the specs: "If the value of auto-commit is changed in the
> > middle of a transaction, the current transaction is committed."
> >
> > The postgresql have a problem with setAutocommit(...): if the value
> > passed (false or true) is the same that was previously set, it just
> > does nothing.
> >
> > I looked to the postgresql driver and found this:
> >
> >     public void setAutoCommit(boolean autoCommit) throws SQLException
> >     {
> >         if (this.autoCommit == autoCommit)
> >             return ;
> >         if (autoCommit)
> >         {
> >                 execSQL("end");
> >         }
> >         else
> >         {
> >             if (haveMinimumServerVersion("7.1"))
> >             {
> >                 execSQL("begin;" + getIsolationLevelSQL());
> >             }
> >             else
> >             {
> >                 execSQL("begin");
> >                 execSQL(getIsolationLevelSQL());
> >             }
> >         }
> >         this.autoCommit = autoCommit;
> >     }
> >
> > The driver do nothing when the value passed (false or true) is the
> > same
> > that was previously set.
> > I fixed the driver and found that the behaviour was the same: it's
> > look
> > likes the backend is using the same logic and that explain why someone
> > at the driver JDBC decided to not pass this to the backend.
> > My tests were done with Postgresql 7.4.12.
> > Can someone confirm that the problem exist and it is in the driver
> > code
> > and the backend server?
> > Is this still happening with postgresql 8.1?
> >
> > Best regards
> > João Paulo Ribeiro
> >
> > --
> > João Paulo Ribeiro | Senior Software Engineer
> > jp@mobicomp.com
> >
> > PHONE: + 351 253 305 250
> > FAX  : + 351 253 305 250
> > www.mobicomp.com
> >
> > ________________________________________________________________
> >
> > About Solutions | Wireless World
> >
> > CONFIDENTIALITY NOTICE: This message, as well as existing attached
> > files, is confidential and intended exclusively for the individual
> > (s) named as addressees. If you are not the intended recipient, you
> > are kindly requested not to make any use whatsoever of its contents
> > and to proceed to the destruction of the message, thereby notifying
> > the sender.
> > DISCLAIMER: The sender of this message can not ensure the security
> > of its electronic transmission and consequently does not accept
> > liability for any fact which may interfere with the integrity of
> > its content.
> >
> >
> > ---------------------------(end of
> > broadcast)---------------------------
> > TIP 5: don't forget to increase your free space map settings
> >
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 1: if posting/reading through Usenet, please send an appropriate
>        subscribe-nomail command to majordomo@postgresql.org so that your
>        message can get through to the mailing list cleanly

pgsql-jdbc by date:

Previous
From: Dave Cramer
Date:
Subject: Re: Behaviour of setAutoCommit may not be completely correct.
Next
From: Oliver Jowett
Date:
Subject: Re: Behaviour of setAutoCommit may not be completely correct.