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:
Barry Lind 2003-09-22 05:38:01 +00:00
parent 66d00417c9
commit 8839b85ed8
3 changed files with 126 additions and 0 deletions

View File

@ -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);
}
}

View File

@ -61,6 +61,7 @@ public class Jdbc2TestSuite extends TestSuite
suite.addTestSuite(UpdateableResultTest.class );
suite.addTestSuite(CallableStmtTest.class );
suite.addTestSuite(CursorFetchTest.class);
// That's all folks
return suite;

View File

@ -229,4 +229,37 @@ public class ServerPreparedStmtTest extends TestCase
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");
}
}
}