Re: patch: fix a couple of server-prepared-statement bugs - Mailing list pgsql-jdbc

From Barry Lind
Subject Re: patch: fix a couple of server-prepared-statement bugs
Date
Msg-id 3F493816.7040901@xythos.com
Whole thread Raw
In response to patch: fix a couple of server-prepared-statement bugs  (Oliver Jowett <oliver@opencloud.com>)
List pgsql-jdbc
Patch applied.

thanks,
--Barry


Oliver Jowett wrote:
> This patch fixes two bugs related to setUseServerPrepare() (and adds
> unit tests for them):
>
> 1. Turning server-prepare from on to off before a query is executed results
> in an invalid "DEALLOCATE null" query being sent to the backend.
>
> 2. setBytes() uses a type of 'text' not 'bytea' when generating a PREPARE,
> resulting in typecasting problems.
>
> -O
>
>
> ------------------------------------------------------------------------
>
> Index: src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1Statement.java
> ===================================================================
> RCS file: /projects/cvsroot/pgsql-server/src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1Statement.java,v
> retrieving revision 1.31
> diff -u -c -r1.31 AbstractJdbc1Statement.java
> *** src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1Statement.java    11 Aug 2003 21:12:00 -0000    1.31
> --- src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1Statement.java    16 Aug 2003 05:26:48 -0000
> ***************
> *** 1088,1094 ****
>               }
>               else
>               {
> !                 setString(parameterIndex, PGbytea.toPGString(x), PG_TEXT);
>               }
>           }
>           else
> --- 1088,1094 ----
>               }
>               else
>               {
> !                 setString(parameterIndex, PGbytea.toPGString(x), PG_BYTEA);
>               }
>           }
>           else
> ***************
> *** 2055,2061 ****
>           if (connection.haveMinimumServerVersion("7.3")) {
>               //If turning server prepared statements off deallocate statement
>               //and reset statement name
> !             if (m_useServerPrepare != flag && !flag)
>                   connection.execSQL("DEALLOCATE " + m_statementName);
>               m_statementName = null;
>               m_useServerPrepare = flag;
> --- 2055,2061 ----
>           if (connection.haveMinimumServerVersion("7.3")) {
>               //If turning server prepared statements off deallocate statement
>               //and reset statement name
> !             if (m_useServerPrepare != flag && !flag && m_statementName != null)
>                   connection.execSQL("DEALLOCATE " + m_statementName);
>               m_statementName = null;
>               m_useServerPrepare = flag;
> Index: src/interfaces/jdbc/org/postgresql/test/jdbc2/ServerPreparedStmtTest.java
> ===================================================================
> RCS file: /projects/cvsroot/pgsql-server/src/interfaces/jdbc/org/postgresql/test/jdbc2/ServerPreparedStmtTest.java,v
> retrieving revision 1.3
> diff -u -c -r1.3 ServerPreparedStmtTest.java
> *** src/interfaces/jdbc/org/postgresql/test/jdbc2/ServerPreparedStmtTest.java    29 May 2003 04:39:48 -0000    1.3
> --- src/interfaces/jdbc/org/postgresql/test/jdbc2/ServerPreparedStmtTest.java    16 Aug 2003 05:26:48 -0000
> ***************
> *** 153,156 ****
> --- 153,178 ----
>           pstmt.close();
>       }
>
> +     public void testSPSToggle() throws Exception
> +     {
> +         // Verify we can toggle UseServerPrepare safely before a query is executed.
> +         PreparedStatement pstmt = con.prepareStatement("SELECT * FROM testsps WHERE id = 2");
> +         ((PGStatement)pstmt).setUseServerPrepare(true);
> +         ((PGStatement)pstmt).setUseServerPrepare(false);
> +     }
> +
> +     public void testBytea() throws Exception
> +     {
> +         // Verify we can use setBytes() with a server-prepared update.
> +         try {
> +             TestUtil.createTable(con, "testsps_bytea", "data bytea");
> +
> +             PreparedStatement pstmt = con.prepareStatement("INSERT INTO testsps_bytea(data) VALUES (?)");
> +             ((PGStatement)pstmt).setUseServerPrepare(true);
> +             pstmt.setBytes(1, new byte[100]);
> +             pstmt.executeUpdate();
> +         } finally {
> +             TestUtil.dropTable(con, "testsps_bytea");
> +         }
> +     }
>   }
>
>
> ------------------------------------------------------------------------
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 5: Have you checked our extensive FAQ?
>
>                http://www.postgresql.org/docs/faqs/FAQ.html



pgsql-jdbc by date:

Previous
From: Barry Lind
Date:
Subject: Re: [BUGS] Bug #926: if old postgresql.jar in CLASSPATH,
Next
From: Barry Lind
Date:
Subject: Re: SetMaxFieldSize