]> granicus.if.org Git - postgresql/commitdiff
Added regression test for using server side prepared statements in jdbc
authorBarry Lind <barry@xythos.com>
Sat, 14 Sep 2002 03:52:56 +0000 (03:52 +0000)
committerBarry Lind <barry@xythos.com>
Sat, 14 Sep 2002 03:52:56 +0000 (03:52 +0000)
and fixed a bug found by the regression test

 Modified Files:
  jdbc/org/postgresql/jdbc1/AbstractJdbc1Statement.java
  jdbc/org/postgresql/test/jdbc2/Jdbc2TestSuite.java
 Added Files:
  jdbc/org/postgresql/test/jdbc2/ServerPreparedStmtTest.java

src/interfaces/jdbc/org/postgresql/jdbc1/AbstractJdbc1Statement.java
src/interfaces/jdbc/org/postgresql/test/jdbc2/Jdbc2TestSuite.java
src/interfaces/jdbc/org/postgresql/test/jdbc2/ServerPreparedStmtTest.java [new file with mode: 0644]

index e7e5d85d22675d33d61b0313b4a662ef11bc8734..dc9bafd2bbe8dfd361f03494b31533bae1686bbc 100644 (file)
@@ -8,7 +8,7 @@ import java.util.Vector;
 import org.postgresql.largeobject.*;
 import org.postgresql.util.*;
 
-/* $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc1/Attic/AbstractJdbc1Statement.java,v 1.9 2002/09/11 05:38:44 barry Exp $
+/* $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc1/Attic/AbstractJdbc1Statement.java,v 1.10 2002/09/14 03:52:56 barry Exp $
  * This class defines methods of the jdbc1 specification.  This class is
  * extended by org.postgresql.jdbc2.AbstractJdbc2Statement which adds the jdbc2
  * methods.  The real Statement class (for jdbc1) is org.postgresql.jdbc1.Jdbc1Statement
@@ -129,6 +129,7 @@ public abstract class AbstractJdbc1Statement implements org.postgresql.PGStateme
        {
                String l_sql = replaceProcessing(p_sql);
                m_sqlFragments = new String[] {l_sql};
+               m_binds = new Object[0];
                //If we have already created a server prepared statement, we need
                //to deallocate the existing one
                if (m_statementName != null) {
index 3dbc1f8d321f38bf2f09c76a1b46cc6d54e70a7e..2a117cecf0356ea6b380eb2b3a6ca5526d1f6187 100644 (file)
@@ -48,6 +48,9 @@ public class Jdbc2TestSuite extends TestSuite
 
                // PreparedStatement
 
+        // ServerSide Prepared Statements
+        suite.addTestSuite(ServerPreparedStmtTest.class);
+
                // BatchExecute
                suite.addTestSuite(BatchExecuteTest.class);
 
@@ -60,9 +63,9 @@ public class Jdbc2TestSuite extends TestSuite
 
                // Fastpath/LargeObject
                suite.addTestSuite(BlobTest.class);
-               suite.addTestSuite( UpdateableResultTest.class );
+               suite.addTestSuite(UpdateableResultTest.class );
 
-               suite.addTestSuite( CallableStmtTest.class );
+               suite.addTestSuite(CallableStmtTest.class );
 
                // That's all folks
                return suite;
diff --git a/src/interfaces/jdbc/org/postgresql/test/jdbc2/ServerPreparedStmtTest.java b/src/interfaces/jdbc/org/postgresql/test/jdbc2/ServerPreparedStmtTest.java
new file mode 100644 (file)
index 0000000..7617603
--- /dev/null
@@ -0,0 +1,153 @@
+package org.postgresql.test.jdbc2;
+
+import org.postgresql.test.TestUtil;
+import org.postgresql.PGStatement;
+import junit.framework.TestCase;
+import java.io.*;
+import java.sql.*;
+
+/*
+ *  Tests for using server side prepared statements
+ */
+public class ServerPreparedStmtTest extends TestCase
+{
+       private Connection con;
+
+       public ServerPreparedStmtTest(String name)
+       {
+               super(name);
+       }
+
+       protected void setUp() throws Exception
+       {
+               con = TestUtil.openDB();
+               Statement stmt = con.createStatement();
+
+               TestUtil.createTable(con, "testsps", "id integer");
+
+               stmt.executeUpdate("INSERT INTO testsps VALUES (1)");
+               stmt.executeUpdate("INSERT INTO testsps VALUES (2)");
+               stmt.executeUpdate("INSERT INTO testsps VALUES (3)");
+               stmt.executeUpdate("INSERT INTO testsps VALUES (4)");
+               stmt.executeUpdate("INSERT INTO testsps VALUES (6)");
+               stmt.executeUpdate("INSERT INTO testsps VALUES (9)");
+
+               stmt.close();
+       }
+
+       protected void tearDown() throws Exception
+       {
+               TestUtil.dropTable(con, "testsps");
+               TestUtil.closeDB(con);
+       }
+
+       public void testPreparedStatementsNoBinds() throws Exception
+       {
+               PreparedStatement pstmt = con.prepareStatement("SELECT * FROM testsps WHERE id = 2");
+        ((PGStatement)pstmt).setUseServerPrepare(true);
+        if (((org.postgresql.jdbc1.AbstractJdbc1Connection)con).haveMinimumServerVersion("7.3")) {
+                       assertTrue(((PGStatement)pstmt).isUseServerPrepare());
+               } else {
+                       assertTrue(!((PGStatement)pstmt).isUseServerPrepare());
+               }
+
+        //Test that basic functionality works
+               ResultSet rs = pstmt.executeQuery();
+               assertTrue(rs.next());
+        assertEquals(2, rs.getInt(1));
+        rs.close();
+
+        //Verify that subsequent calls still work
+               rs = pstmt.executeQuery();
+               assertTrue(rs.next());
+        assertEquals(2, rs.getInt(1));
+        rs.close();
+
+        //Verify that using the statement to execute a different query works
+               rs = pstmt.executeQuery("SELECT * FROM testsps WHERE id = 9");
+               assertTrue(rs.next());
+        assertEquals(9, rs.getInt(1));
+        rs.close();
+
+        ((PGStatement)pstmt).setUseServerPrepare(false);
+        assertTrue(!((PGStatement)pstmt).isUseServerPrepare());
+
+        //Verify that using the statement still works after turning off prepares
+               rs = pstmt.executeQuery("SELECT * FROM testsps WHERE id = 9");
+               assertTrue(rs.next());
+        assertEquals(9, rs.getInt(1));
+        rs.close();
+
+               pstmt.close();
+       }
+
+       public void testPreparedStatementsWithOneBind() throws Exception
+       {
+               PreparedStatement pstmt = con.prepareStatement("SELECT * FROM testsps WHERE id = ?");
+        ((PGStatement)pstmt).setUseServerPrepare(true);
+        if (((org.postgresql.jdbc1.AbstractJdbc1Connection)con).haveMinimumServerVersion("7.3")) {
+                       assertTrue(((PGStatement)pstmt).isUseServerPrepare());
+               } else {
+                       assertTrue(!((PGStatement)pstmt).isUseServerPrepare());
+               }
+
+        //Test that basic functionality works
+        pstmt.setInt(1,2);
+               ResultSet rs = pstmt.executeQuery();
+               assertTrue(rs.next());
+        assertEquals(2, rs.getInt(1));
+        rs.close();
+
+        //Verify that subsequent calls still work
+               rs = pstmt.executeQuery();
+               assertTrue(rs.next());
+        assertEquals(2, rs.getInt(1));
+        rs.close();
+
+        //Verify that using the statement to execute a different query works
+               rs = pstmt.executeQuery("SELECT * FROM testsps WHERE id = 9");
+               assertTrue(rs.next());
+        assertEquals(9, rs.getInt(1));
+        rs.close();
+
+        ((PGStatement)pstmt).setUseServerPrepare(false);
+        assertTrue(!((PGStatement)pstmt).isUseServerPrepare());
+
+        //Verify that using the statement still works after turning off prepares
+               rs = pstmt.executeQuery("SELECT * FROM testsps WHERE id = 9");
+               assertTrue(rs.next());
+        assertEquals(9, rs.getInt(1));
+        rs.close();
+
+               pstmt.close();
+       }
+
+       public void testPreparedStatementsWithBinds() throws Exception
+       {
+               PreparedStatement pstmt = con.prepareStatement("SELECT * FROM testsps WHERE id = ? or id = ?");
+        ((PGStatement)pstmt).setUseServerPrepare(true);
+        if (((org.postgresql.jdbc1.AbstractJdbc1Connection)con).haveMinimumServerVersion("7.3")) {
+                       assertTrue(((PGStatement)pstmt).isUseServerPrepare());
+               } else {
+                       assertTrue(!((PGStatement)pstmt).isUseServerPrepare());
+               }
+
+        //Test that basic functionality works
+        //bind different datatypes
+        pstmt.setInt(1,2);
+        pstmt.setString(2,"2");
+               ResultSet rs = pstmt.executeQuery();
+               assertTrue(rs.next());
+        assertEquals(2, rs.getInt(1));
+        rs.close();
+
+        //Verify that subsequent calls still work
+               rs = pstmt.executeQuery();
+               assertTrue(rs.next());
+        assertEquals(2, rs.getInt(1));
+        rs.close();
+
+               pstmt.close();
+       }
+
+}