mirror of
https://github.com/postgres/postgres.git
synced 2025-07-15 19:21:59 +03:00
Added regression test for using server side prepared statements in jdbc
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
This commit is contained in:
@ -8,7 +8,7 @@ import java.util.Vector;
|
|||||||
import org.postgresql.largeobject.*;
|
import org.postgresql.largeobject.*;
|
||||||
import org.postgresql.util.*;
|
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
|
* This class defines methods of the jdbc1 specification. This class is
|
||||||
* extended by org.postgresql.jdbc2.AbstractJdbc2Statement which adds the jdbc2
|
* extended by org.postgresql.jdbc2.AbstractJdbc2Statement which adds the jdbc2
|
||||||
* methods. The real Statement class (for jdbc1) is org.postgresql.jdbc1.Jdbc1Statement
|
* 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);
|
String l_sql = replaceProcessing(p_sql);
|
||||||
m_sqlFragments = new String[] {l_sql};
|
m_sqlFragments = new String[] {l_sql};
|
||||||
|
m_binds = new Object[0];
|
||||||
//If we have already created a server prepared statement, we need
|
//If we have already created a server prepared statement, we need
|
||||||
//to deallocate the existing one
|
//to deallocate the existing one
|
||||||
if (m_statementName != null) {
|
if (m_statementName != null) {
|
||||||
|
@ -48,6 +48,9 @@ public class Jdbc2TestSuite extends TestSuite
|
|||||||
|
|
||||||
// PreparedStatement
|
// PreparedStatement
|
||||||
|
|
||||||
|
// ServerSide Prepared Statements
|
||||||
|
suite.addTestSuite(ServerPreparedStmtTest.class);
|
||||||
|
|
||||||
// BatchExecute
|
// BatchExecute
|
||||||
suite.addTestSuite(BatchExecuteTest.class);
|
suite.addTestSuite(BatchExecuteTest.class);
|
||||||
|
|
||||||
@ -60,9 +63,9 @@ public class Jdbc2TestSuite extends TestSuite
|
|||||||
|
|
||||||
// Fastpath/LargeObject
|
// Fastpath/LargeObject
|
||||||
suite.addTestSuite(BlobTest.class);
|
suite.addTestSuite(BlobTest.class);
|
||||||
suite.addTestSuite( UpdateableResultTest.class );
|
suite.addTestSuite(UpdateableResultTest.class );
|
||||||
|
|
||||||
suite.addTestSuite( CallableStmtTest.class );
|
suite.addTestSuite(CallableStmtTest.class );
|
||||||
|
|
||||||
// That's all folks
|
// That's all folks
|
||||||
return suite;
|
return suite;
|
||||||
|
@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Reference in New Issue
Block a user