mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-01-24 18:55:04 +08: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:
parent
3357577247
commit
7d6a055a7f
@ -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) {
|
||||
|
@ -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;
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user