mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-12-21 08:29:39 +08:00
Additional jdbc regression tests submitted by Oliver Jowett. Some tests are
currently commented out, pending fixes for the bugs these tests uncovered. Modified Files: jdbc/org/postgresql/test/jdbc2/Jdbc2TestSuite.java jdbc/org/postgresql/test/jdbc2/ServerPreparedStmtTest.java Added Files: jdbc/org/postgresql/test/jdbc2/CursorFetchTest.java
This commit is contained in:
parent
66d00417c9
commit
8839b85ed8
@ -0,0 +1,92 @@
|
|||||||
|
package org.postgresql.test.jdbc2;
|
||||||
|
|
||||||
|
import java.sql.*;
|
||||||
|
|
||||||
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
|
import org.postgresql.test.TestUtil;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Tests for using non-zero setFetchSize().
|
||||||
|
*/
|
||||||
|
public class CursorFetchTest extends TestCase
|
||||||
|
{
|
||||||
|
private Connection con;
|
||||||
|
|
||||||
|
public CursorFetchTest(String name)
|
||||||
|
{
|
||||||
|
super(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void setUp() throws Exception
|
||||||
|
{
|
||||||
|
con = TestUtil.openDB();
|
||||||
|
TestUtil.createTable(con, "test_fetch", "value integer");
|
||||||
|
con.setAutoCommit(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void tearDown() throws Exception
|
||||||
|
{
|
||||||
|
con.rollback();
|
||||||
|
con.setAutoCommit(true);
|
||||||
|
TestUtil.dropTable(con, "test_fetch");
|
||||||
|
TestUtil.closeDB(con);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void createRows(int count) throws Exception
|
||||||
|
{
|
||||||
|
PreparedStatement stmt = con.prepareStatement("insert into test_fetch(value) values(?)");
|
||||||
|
for (int i = 0; i < count; ++i) {
|
||||||
|
stmt.setInt(1,i);
|
||||||
|
stmt.executeUpdate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test various fetchsizes.
|
||||||
|
public void testBasicFetch() throws Exception
|
||||||
|
{
|
||||||
|
createRows(100);
|
||||||
|
|
||||||
|
PreparedStatement stmt = con.prepareStatement("select * from test_fetch order by value");
|
||||||
|
int[] testSizes = { 0, 1, 49, 50, 51, 99, 100, 101 };
|
||||||
|
for (int i = 0; i < testSizes.length; ++i) {
|
||||||
|
stmt.setFetchSize(testSizes[i]);
|
||||||
|
ResultSet rs = stmt.executeQuery();
|
||||||
|
|
||||||
|
int count = 0;
|
||||||
|
while (rs.next()) {
|
||||||
|
assertEquals("query value error with fetch size " + testSizes[i], count, rs.getInt(1));
|
||||||
|
++count;
|
||||||
|
}
|
||||||
|
|
||||||
|
assertEquals("total query size error with fetch size " + testSizes[i], 100, count);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test odd queries that should not be transformed into cursor-based fetches.
|
||||||
|
public void TODO_FAILS_testInsert() throws Exception
|
||||||
|
{
|
||||||
|
// INSERT should not be transformed.
|
||||||
|
PreparedStatement stmt = con.prepareStatement("insert into test_fetch(value) values(1)");
|
||||||
|
stmt.setFetchSize(100); // Should be meaningless.
|
||||||
|
stmt.executeUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void TODO_FAILS_testMultistatement() throws Exception
|
||||||
|
{
|
||||||
|
// Queries with multiple statements should not be transformed.
|
||||||
|
|
||||||
|
createRows(100); // 0 .. 99
|
||||||
|
PreparedStatement stmt = con.prepareStatement("insert into test_fetch(value) values(100); select * from test_fetch order by value");
|
||||||
|
stmt.setFetchSize(10);
|
||||||
|
ResultSet rs = stmt.executeQuery();
|
||||||
|
|
||||||
|
int count = 0;
|
||||||
|
while (rs.next()) {
|
||||||
|
assertEquals(count, rs.getInt(1));
|
||||||
|
++count;
|
||||||
|
}
|
||||||
|
|
||||||
|
assertEquals(101, count);
|
||||||
|
}
|
||||||
|
}
|
@ -61,6 +61,7 @@ public class Jdbc2TestSuite extends TestSuite
|
|||||||
suite.addTestSuite(UpdateableResultTest.class );
|
suite.addTestSuite(UpdateableResultTest.class );
|
||||||
|
|
||||||
suite.addTestSuite(CallableStmtTest.class );
|
suite.addTestSuite(CallableStmtTest.class );
|
||||||
|
suite.addTestSuite(CursorFetchTest.class);
|
||||||
|
|
||||||
// That's all folks
|
// That's all folks
|
||||||
return suite;
|
return suite;
|
||||||
|
@ -229,4 +229,37 @@ public class ServerPreparedStmtTest extends TestCase
|
|||||||
TestUtil.dropTable(con, "testsps_bytea");
|
TestUtil.dropTable(con, "testsps_bytea");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check statements are not transformed when they shouldn't be.
|
||||||
|
public void TODO_FAILS_testCreateTable() throws Exception {
|
||||||
|
// CREATE TABLE isn't supported by PREPARE; the driver should realize this and
|
||||||
|
// still complete without error.
|
||||||
|
PreparedStatement pstmt = con.prepareStatement("CREATE TABLE testsps_bad(data int)");
|
||||||
|
((PGStatement)pstmt).setUseServerPrepare(true);
|
||||||
|
pstmt.executeUpdate();
|
||||||
|
TestUtil.dropTable(con, "testsps_bad");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void TODO_FAILS_testMultistatement() throws Exception {
|
||||||
|
// Shouldn't try to PREPARE this one, if we do we get:
|
||||||
|
// PREPARE x(int,int) AS INSERT .... $1 ; INSERT ... $2 -- syntax error
|
||||||
|
try {
|
||||||
|
TestUtil.createTable(con, "testsps_multiple", "data int");
|
||||||
|
PreparedStatement pstmt = con.prepareStatement("INSERT INTO testsps_multiple(data) VALUES (?); INSERT INTO testsps_multiple(data) VALUES (?)");
|
||||||
|
((PGStatement)pstmt).setUseServerPrepare(true);
|
||||||
|
pstmt.setInt(1, 1);
|
||||||
|
pstmt.setInt(2, 2);
|
||||||
|
pstmt.executeUpdate(); // Two inserts.
|
||||||
|
|
||||||
|
pstmt.setInt(1, 3);
|
||||||
|
pstmt.setInt(2, 4);
|
||||||
|
pstmt.executeUpdate(); // Two more inserts.
|
||||||
|
|
||||||
|
ResultSet check = con.createStatement().executeQuery("SELECT COUNT(*) FROM testsps_multiple");
|
||||||
|
assertTrue(check.next());
|
||||||
|
assertEquals(4, check.getInt(1));
|
||||||
|
} finally {
|
||||||
|
TestUtil.dropTable(con, "testsps_multiple");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user