mirror of
https://github.com/postgres/postgres.git
synced 2025-06-26 12:21:12 +03:00
This concludes my changes that restructured the code to support JDBC3. The jdbc unit tests were also resturctured to allow different tests between jdbc2 and jdbc3, although currently make check (aka ant test) for JDBC3 just runs the JDBC2 tests. Of special note the largeobject/PGblob and PGclob classes have been moved under the jdbc2/jdbc3 specific directories as they now differ by jdbc version. Also note that this checkin removes the PostgresqlDataSource and files in the xa directory. A recent checkin has added new datasource support that replaces the functionality provided by these classes. Modified Files: jdbc/build.xml jdbc/org/postgresql/jdbc1/AbstractJdbc1DatabaseMetaData.java jdbc/org/postgresql/jdbc1/AbstractJdbc1ResultSet.java jdbc/org/postgresql/jdbc1/AbstractJdbc1ResultSetMetaData.java jdbc/org/postgresql/jdbc1/AbstractJdbc1Statement.java jdbc/org/postgresql/jdbc2/AbstractJdbc2Connection.java jdbc/org/postgresql/jdbc2/AbstractJdbc2DatabaseMetaData.java jdbc/org/postgresql/jdbc2/AbstractJdbc2ResultSet.java jdbc/org/postgresql/jdbc2/AbstractJdbc2ResultSetMetaData.java jdbc/org/postgresql/jdbc2/AbstractJdbc2Statement.java jdbc/org/postgresql/jdbc2/Array.java jdbc/org/postgresql/jdbc2/Jdbc2CallableStatement.java jdbc/org/postgresql/jdbc2/Jdbc2Connection.java jdbc/org/postgresql/jdbc2/Jdbc2DatabaseMetaData.java jdbc/org/postgresql/jdbc2/Jdbc2PreparedStatement.java jdbc/org/postgresql/jdbc2/Jdbc2ResultSet.java jdbc/org/postgresql/jdbc2/Jdbc2ResultSetMetaData.java jdbc/org/postgresql/jdbc2/Jdbc2Statement.java jdbc/org/postgresql/test/jdbc2/BatchExecuteTest.java jdbc/org/postgresql/test/jdbc2/BlobTest.java jdbc/org/postgresql/test/jdbc2/CallableStmtTest.java jdbc/org/postgresql/test/jdbc2/ConnectionTest.java jdbc/org/postgresql/test/jdbc2/DatabaseMetaDataTest.java jdbc/org/postgresql/test/jdbc2/DateTest.java jdbc/org/postgresql/test/jdbc2/DriverTest.java jdbc/org/postgresql/test/jdbc2/JBuilderTest.java jdbc/org/postgresql/test/jdbc2/MiscTest.java jdbc/org/postgresql/test/jdbc2/ResultSetTest.java jdbc/org/postgresql/test/jdbc2/TimeTest.java jdbc/org/postgresql/test/jdbc2/TimestampTest.java jdbc/org/postgresql/test/jdbc2/UpdateableResultTest.java Added Files: jdbc/org/postgresql/jdbc2/AbstractJdbc2Blob.java jdbc/org/postgresql/jdbc2/AbstractJdbc2Clob.java jdbc/org/postgresql/jdbc2/Jdbc2Blob.java jdbc/org/postgresql/jdbc2/Jdbc2Clob.java jdbc/org/postgresql/jdbc3/AbstractJdbc3Blob.java jdbc/org/postgresql/jdbc3/AbstractJdbc3Clob.java jdbc/org/postgresql/jdbc3/AbstractJdbc3Connection.java jdbc/org/postgresql/jdbc3/AbstractJdbc3DatabaseMetaData.java jdbc/org/postgresql/jdbc3/AbstractJdbc3ResultSet.java jdbc/org/postgresql/jdbc3/AbstractJdbc3Statement.java jdbc/org/postgresql/jdbc3/Jdbc3Blob.java jdbc/org/postgresql/jdbc3/Jdbc3CallableStatement.java jdbc/org/postgresql/jdbc3/Jdbc3Clob.java jdbc/org/postgresql/jdbc3/Jdbc3Connection.java jdbc/org/postgresql/jdbc3/Jdbc3DatabaseMetaData.java jdbc/org/postgresql/jdbc3/Jdbc3PreparedStatement.java jdbc/org/postgresql/jdbc3/Jdbc3ResultSet.java jdbc/org/postgresql/jdbc3/Jdbc3ResultSetMetaData.java jdbc/org/postgresql/jdbc3/Jdbc3Statement.java jdbc/org/postgresql/test/TestUtil.java jdbc/org/postgresql/test/jdbc2/Jdbc2TestSuite.java jdbc/org/postgresql/test/jdbc3/Jdbc3TestSuite.java Removed Files: jdbc/org/postgresql/PostgresqlDataSource.java jdbc/org/postgresql/largeobject/PGblob.java jdbc/org/postgresql/largeobject/PGclob.java jdbc/org/postgresql/test/JDBC2Tests.java jdbc/org/postgresql/xa/ClientConnection.java jdbc/org/postgresql/xa/TwoPhaseConnection.java jdbc/org/postgresql/xa/TxConnection.java jdbc/org/postgresql/xa/XAConnectionImpl.java jdbc/org/postgresql/xa/XADataSourceImpl.java
116 lines
3.9 KiB
Java
116 lines
3.9 KiB
Java
package org.postgresql.test.jdbc2;
|
|
|
|
import org.postgresql.test.TestUtil;
|
|
import junit.framework.TestCase;
|
|
import java.io.*;
|
|
import java.sql.*;
|
|
|
|
/*
|
|
* CallableStatement tests.
|
|
* @author Paul Bethe
|
|
*/
|
|
public class CallableStmtTest extends TestCase
|
|
{
|
|
private Connection con;
|
|
|
|
public CallableStmtTest (String name)
|
|
{
|
|
super(name);
|
|
}
|
|
|
|
protected void setUp() throws Exception
|
|
{
|
|
con = TestUtil.openDB();
|
|
Statement stmt = con.createStatement ();
|
|
stmt.execute ("CREATE OR REPLACE FUNCTION testspg__getString (varchar) " +
|
|
"RETURNS varchar AS ' DECLARE inString alias for $1; begin "+
|
|
"return ''bob''; end; ' LANGUAGE 'plpgsql';");
|
|
stmt.execute ("CREATE OR REPLACE FUNCTION testspg__getDouble (float) " +
|
|
"RETURNS float AS ' DECLARE inString alias for $1; begin " +
|
|
"return 42.42; end; ' LANGUAGE 'plpgsql';");
|
|
stmt.execute ("CREATE OR REPLACE FUNCTION testspg__getInt (int) RETURNS int " +
|
|
" AS 'DECLARE inString alias for $1; begin " +
|
|
"return 42; end;' LANGUAGE 'plpgsql';");
|
|
stmt.execute ("CREATE OR REPLACE FUNCTION testspg__getNumeric (numeric) " +
|
|
"RETURNS numeric AS ' DECLARE inString alias for $1; " +
|
|
"begin return 42; end; ' LANGUAGE 'plpgsql';");
|
|
stmt.close ();
|
|
}
|
|
|
|
protected void tearDown() throws Exception
|
|
{
|
|
Statement stmt = con.createStatement ();
|
|
stmt.execute ("drop FUNCTION testspg__getString (varchar);");
|
|
stmt.execute ("drop FUNCTION testspg__getDouble (float);");
|
|
stmt.execute ("drop FUNCTION testspg__getInt (int);");
|
|
stmt.execute ("drop FUNCTION testspg__getNumeric (numeric);");
|
|
TestUtil.closeDB(con);
|
|
}
|
|
|
|
|
|
final String func = "{ ? = call ";
|
|
final String pkgName = "testspg__";
|
|
// protected void runTest () throws Throwable {
|
|
//testGetString ();
|
|
//}
|
|
|
|
public void testGetDouble () throws Throwable {
|
|
// System.out.println ("Testing CallableStmt Types.DOUBLE");
|
|
CallableStatement call = con.prepareCall (func + pkgName + "getDouble (?) }");
|
|
call.setDouble (2, (double)3.04);
|
|
call.registerOutParameter (1, Types.DOUBLE);
|
|
call.execute ();
|
|
double result = call.getDouble (1);
|
|
assertTrue ("correct return from getString ()", result == 42.42);
|
|
}
|
|
|
|
public void testGetInt () throws Throwable {
|
|
// System.out.println ("Testing CallableStmt Types.INTEGER");
|
|
CallableStatement call = con.prepareCall (func + pkgName + "getInt (?) }");
|
|
call.setInt (2, 4);
|
|
call.registerOutParameter (1, Types.INTEGER);
|
|
call.execute ();
|
|
int result = call.getInt (1);
|
|
assertTrue ("correct return from getString ()", result == 42);
|
|
}
|
|
|
|
public void testGetNumeric () throws Throwable {
|
|
// System.out.println ("Testing CallableStmt Types.NUMERIC");
|
|
CallableStatement call = con.prepareCall (func + pkgName + "getNumeric (?) }");
|
|
call.setBigDecimal (2, new java.math.BigDecimal(4));
|
|
call.registerOutParameter (1, Types.NUMERIC);
|
|
call.execute ();
|
|
java.math.BigDecimal result = call.getBigDecimal (1);
|
|
assertTrue ("correct return from getString ()",
|
|
result.equals (new java.math.BigDecimal(42)));
|
|
}
|
|
|
|
public void testGetString () throws Throwable {
|
|
// System.out.println ("Testing CallableStmt Types.VARCHAR");
|
|
CallableStatement call = con.prepareCall (func + pkgName + "getString (?) }");
|
|
call.setString (2, "foo");
|
|
call.registerOutParameter (1, Types.VARCHAR);
|
|
call.execute ();
|
|
String result = call.getString (1);
|
|
assertTrue ("correct return from getString ()", result.equals ("bob"));
|
|
|
|
}
|
|
|
|
public void testBadStmt () throws Throwable {
|
|
tryOneBadStmt ("{ ?= " + pkgName + "getString (?) }");
|
|
tryOneBadStmt ("{ ?= call getString (?) ");
|
|
tryOneBadStmt ("{ = ? call getString (?); }");
|
|
}
|
|
|
|
protected void tryOneBadStmt (String sql) throws Throwable {
|
|
boolean wasCaught = false;
|
|
try {
|
|
CallableStatement call = con.prepareCall (sql);
|
|
} catch (SQLException e) {
|
|
wasCaught = true; // good -> this statement was missing something
|
|
}
|
|
assertTrue ("bad statment ('"+sql+"')was not caught", wasCaught);
|
|
}
|
|
|
|
}
|