mirror of
https://github.com/postgres/postgres.git
synced 2025-07-28 23:42:10 +03:00
Added support for JDBC3. The driver will now build under JDBC3 (i.e. Java 1.4).
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
This commit is contained in:
@ -0,0 +1,57 @@
|
||||
package org.postgresql.jdbc2;
|
||||
|
||||
import java.lang.*;
|
||||
import java.io.*;
|
||||
import java.math.*;
|
||||
import java.text.*;
|
||||
import java.util.*;
|
||||
import java.sql.*;
|
||||
import org.postgresql.Field;
|
||||
import org.postgresql.PGConnection;
|
||||
import org.postgresql.largeobject.*;
|
||||
|
||||
public abstract class AbstractJdbc2Blob
|
||||
{
|
||||
private int oid;
|
||||
private LargeObject lo;
|
||||
|
||||
public AbstractJdbc2Blob(PGConnection conn, int oid) throws SQLException
|
||||
{
|
||||
this.oid = oid;
|
||||
LargeObjectManager lom = conn.getLargeObjectAPI();
|
||||
this.lo = lom.open(oid);
|
||||
}
|
||||
|
||||
public long length() throws SQLException
|
||||
{
|
||||
return lo.size();
|
||||
}
|
||||
|
||||
public InputStream getBinaryStream() throws SQLException
|
||||
{
|
||||
return lo.getInputStream();
|
||||
}
|
||||
|
||||
public byte[] getBytes(long pos, int length) throws SQLException
|
||||
{
|
||||
lo.seek((int)pos, LargeObject.SEEK_SET);
|
||||
return lo.read(length);
|
||||
}
|
||||
|
||||
/*
|
||||
* For now, this is not implemented.
|
||||
*/
|
||||
public long position(byte[] pattern, long start) throws SQLException
|
||||
{
|
||||
throw org.postgresql.Driver.notImplemented();
|
||||
}
|
||||
|
||||
/*
|
||||
* This should be simply passing the byte value of the pattern Blob
|
||||
*/
|
||||
public long position(Blob pattern, long start) throws SQLException
|
||||
{
|
||||
return position(pattern.getBytes(0, (int)pattern.length()), start);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,63 @@
|
||||
package org.postgresql.jdbc2;
|
||||
|
||||
|
||||
import java.lang.*;
|
||||
import java.io.*;
|
||||
import java.math.*;
|
||||
import java.text.*;
|
||||
import java.util.*;
|
||||
import java.sql.*;
|
||||
import org.postgresql.Field;
|
||||
import org.postgresql.PGConnection;
|
||||
import org.postgresql.largeobject.*;
|
||||
|
||||
public class AbstractJdbc2Clob
|
||||
{
|
||||
private int oid;
|
||||
private LargeObject lo;
|
||||
|
||||
public AbstractJdbc2Clob(PGConnection conn, int oid) throws SQLException
|
||||
{
|
||||
this.oid = oid;
|
||||
LargeObjectManager lom = conn.getLargeObjectAPI();
|
||||
this.lo = lom.open(oid);
|
||||
}
|
||||
|
||||
public long length() throws SQLException
|
||||
{
|
||||
return lo.size();
|
||||
}
|
||||
|
||||
public InputStream getAsciiStream() throws SQLException
|
||||
{
|
||||
return lo.getInputStream();
|
||||
}
|
||||
|
||||
public Reader getCharacterStream() throws SQLException
|
||||
{
|
||||
return new InputStreamReader(lo.getInputStream());
|
||||
}
|
||||
|
||||
public String getSubString(long i, int j) throws SQLException
|
||||
{
|
||||
lo.seek((int)i - 1);
|
||||
return new String(lo.read(j));
|
||||
}
|
||||
|
||||
/*
|
||||
* For now, this is not implemented.
|
||||
*/
|
||||
public long position(String pattern, long start) throws SQLException
|
||||
{
|
||||
throw org.postgresql.Driver.notImplemented();
|
||||
}
|
||||
|
||||
/*
|
||||
* This should be simply passing the byte value of the pattern Blob
|
||||
*/
|
||||
public long position(Clob pattern, long start) throws SQLException
|
||||
{
|
||||
throw org.postgresql.Driver.notImplemented();
|
||||
}
|
||||
|
||||
}
|
@ -15,12 +15,13 @@ import org.postgresql.util.PGbytea;
|
||||
import org.postgresql.util.PSQLException;
|
||||
|
||||
|
||||
/* $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc2/Attic/AbstractJdbc2ResultSet.java,v 1.3 2002/07/25 22:45:28 barry Exp $
|
||||
/* $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc2/Attic/AbstractJdbc2ResultSet.java,v 1.4 2002/08/14 20:35:39 barry Exp $
|
||||
* This class defines methods of the jdbc2 specification. This class extends
|
||||
* org.postgresql.jdbc1.AbstractJdbc1ResultSet which provides the jdbc1
|
||||
* methods. The real Statement class (for jdbc2) is org.postgresql.jdbc2.Jdbc2ResultSet
|
||||
*/
|
||||
public class AbstractJdbc2ResultSet extends org.postgresql.jdbc1.AbstractJdbc1ResultSet {
|
||||
public abstract class AbstractJdbc2ResultSet extends org.postgresql.jdbc1.AbstractJdbc1ResultSet {
|
||||
|
||||
protected String sqlQuery = null;
|
||||
|
||||
//needed for updateable result set support
|
||||
@ -237,9 +238,7 @@ public class AbstractJdbc2ResultSet extends org.postgresql.jdbc1.AbstractJdbc1Re
|
||||
}
|
||||
|
||||
|
||||
public Blob getBlob(int i) throws SQLException {
|
||||
return new org.postgresql.largeobject.PGblob(connection, getInt(i));
|
||||
}
|
||||
public abstract Blob getBlob(int i) throws SQLException;
|
||||
|
||||
|
||||
public java.io.Reader getCharacterStream(String columnName) throws SQLException {
|
||||
@ -276,9 +275,7 @@ public class AbstractJdbc2ResultSet extends org.postgresql.jdbc1.AbstractJdbc1Re
|
||||
}
|
||||
|
||||
|
||||
public Clob getClob(int i) throws SQLException {
|
||||
return new org.postgresql.largeobject.PGclob(connection, getInt(i));
|
||||
}
|
||||
public abstract Clob getClob(int i) throws SQLException;
|
||||
|
||||
|
||||
public int getConcurrency() throws SQLException {
|
||||
@ -919,7 +916,7 @@ public class AbstractJdbc2ResultSet extends org.postgresql.jdbc1.AbstractJdbc1Re
|
||||
selectStatement.setObject( i, ((PrimaryKey) primaryKeys.get(j)).getValue() );
|
||||
}
|
||||
|
||||
Jdbc2ResultSet rs = (Jdbc2ResultSet) selectStatement.executeQuery();
|
||||
AbstractJdbc2ResultSet rs = (AbstractJdbc2ResultSet) selectStatement.executeQuery();
|
||||
|
||||
if ( rs.first() ) {
|
||||
rowBuffer = rs.rowBuffer;
|
||||
|
@ -124,33 +124,33 @@ public class Array implements java.sql.Array
|
||||
case Types.BIT:
|
||||
retVal = new boolean[ count ];
|
||||
for ( ; count > 0; count-- )
|
||||
((boolean[])retVal)[i++] = Jdbc2ResultSet.toBoolean( arrayContents[(int)index++] );
|
||||
((boolean[])retVal)[i++] = AbstractJdbc2ResultSet.toBoolean( arrayContents[(int)index++] );
|
||||
break;
|
||||
case Types.SMALLINT:
|
||||
case Types.INTEGER:
|
||||
retVal = new int[ count ];
|
||||
for ( ; count > 0; count-- )
|
||||
((int[])retVal)[i++] = Jdbc2ResultSet.toInt( arrayContents[(int)index++] );
|
||||
((int[])retVal)[i++] = AbstractJdbc2ResultSet.toInt( arrayContents[(int)index++] );
|
||||
break;
|
||||
case Types.BIGINT:
|
||||
retVal = new long[ count ];
|
||||
for ( ; count > 0; count-- )
|
||||
((long[])retVal)[i++] = Jdbc2ResultSet.toLong( arrayContents[(int)index++] );
|
||||
((long[])retVal)[i++] = AbstractJdbc2ResultSet.toLong( arrayContents[(int)index++] );
|
||||
break;
|
||||
case Types.NUMERIC:
|
||||
retVal = new BigDecimal[ count ];
|
||||
for ( ; count > 0; count-- )
|
||||
((BigDecimal[])retVal)[i++] = Jdbc2ResultSet.toBigDecimal( arrayContents[(int)index++], 0 );
|
||||
((BigDecimal[])retVal)[i++] = AbstractJdbc2ResultSet.toBigDecimal( arrayContents[(int)index++], 0 );
|
||||
break;
|
||||
case Types.REAL:
|
||||
retVal = new float[ count ];
|
||||
for ( ; count > 0; count-- )
|
||||
((float[])retVal)[i++] = Jdbc2ResultSet.toFloat( arrayContents[(int)index++] );
|
||||
((float[])retVal)[i++] = AbstractJdbc2ResultSet.toFloat( arrayContents[(int)index++] );
|
||||
break;
|
||||
case Types.DOUBLE:
|
||||
retVal = new double[ count ];
|
||||
for ( ; count > 0; count-- )
|
||||
((double[])retVal)[i++] = Jdbc2ResultSet.toDouble( arrayContents[(int)index++] );
|
||||
((double[])retVal)[i++] = AbstractJdbc2ResultSet.toDouble( arrayContents[(int)index++] );
|
||||
break;
|
||||
case Types.CHAR:
|
||||
case Types.VARCHAR:
|
||||
@ -161,18 +161,18 @@ public class Array implements java.sql.Array
|
||||
case Types.DATE:
|
||||
retVal = new java.sql.Date[ count ];
|
||||
for ( ; count > 0; count-- )
|
||||
((java.sql.Date[])retVal)[i++] = Jdbc2ResultSet.toDate( arrayContents[(int)index++] );
|
||||
((java.sql.Date[])retVal)[i++] = AbstractJdbc2ResultSet.toDate( arrayContents[(int)index++] );
|
||||
break;
|
||||
case Types.TIME:
|
||||
retVal = new java.sql.Time[ count ];
|
||||
for ( ; count > 0; count-- )
|
||||
((java.sql.Time[])retVal)[i++] = Jdbc2ResultSet.toTime( arrayContents[(int)index++], rs, getBaseTypeName() );
|
||||
((java.sql.Time[])retVal)[i++] = AbstractJdbc2ResultSet.toTime( arrayContents[(int)index++], rs, getBaseTypeName() );
|
||||
break;
|
||||
case Types.TIMESTAMP:
|
||||
retVal = new Timestamp[ count ];
|
||||
StringBuffer sbuf = null;
|
||||
for ( ; count > 0; count-- )
|
||||
((java.sql.Timestamp[])retVal)[i++] = Jdbc2ResultSet.toTimestamp( arrayContents[(int)index++], rs, getBaseTypeName() );
|
||||
((java.sql.Timestamp[])retVal)[i++] = AbstractJdbc2ResultSet.toTimestamp( arrayContents[(int)index++], rs, getBaseTypeName() );
|
||||
break;
|
||||
|
||||
// Other datatypes not currently supported. If you are really using other types ask
|
||||
@ -340,7 +340,7 @@ public class Array implements java.sql.Array
|
||||
default:
|
||||
throw org.postgresql.Driver.notImplemented();
|
||||
}
|
||||
return ((Jdbc2Connection)conn).getResultSet(null, fields, rows, "OK", 1 );
|
||||
return ((AbstractJdbc2Connection)conn).getResultSet(null, fields, rows, "OK", 1 );
|
||||
}
|
||||
|
||||
public String toString()
|
||||
|
12
src/interfaces/jdbc/org/postgresql/jdbc2/Jdbc2Blob.java
Normal file
12
src/interfaces/jdbc/org/postgresql/jdbc2/Jdbc2Blob.java
Normal file
@ -0,0 +1,12 @@
|
||||
package org.postgresql.jdbc2;
|
||||
|
||||
|
||||
public class Jdbc2Blob extends AbstractJdbc2Blob implements java.sql.Blob
|
||||
{
|
||||
|
||||
public Jdbc2Blob(org.postgresql.PGConnection conn, int oid) throws java.sql.SQLException
|
||||
{
|
||||
super(conn, oid);
|
||||
}
|
||||
|
||||
}
|
@ -3,7 +3,7 @@ package org.postgresql.jdbc2;
|
||||
|
||||
import java.sql.*;
|
||||
|
||||
public class Jdbc2CallableStatement extends AbstractJdbc2Statement implements java.sql.CallableStatement
|
||||
public class Jdbc2CallableStatement extends org.postgresql.jdbc2.AbstractJdbc2Statement implements java.sql.CallableStatement
|
||||
{
|
||||
|
||||
public Jdbc2CallableStatement(Jdbc2Connection connection, String sql) throws SQLException
|
||||
|
12
src/interfaces/jdbc/org/postgresql/jdbc2/Jdbc2Clob.java
Normal file
12
src/interfaces/jdbc/org/postgresql/jdbc2/Jdbc2Clob.java
Normal file
@ -0,0 +1,12 @@
|
||||
package org.postgresql.jdbc2;
|
||||
|
||||
|
||||
public class Jdbc2Clob extends AbstractJdbc2Clob implements java.sql.Clob
|
||||
{
|
||||
|
||||
public Jdbc2Clob(org.postgresql.PGConnection conn, int oid) throws java.sql.SQLException
|
||||
{
|
||||
super(conn, oid);
|
||||
}
|
||||
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
package org.postgresql.jdbc2;
|
||||
|
||||
|
||||
public class Jdbc2DatabaseMetaData extends AbstractJdbc2DatabaseMetaData implements java.sql.DatabaseMetaData
|
||||
public class Jdbc2DatabaseMetaData extends org.postgresql.jdbc2.AbstractJdbc2DatabaseMetaData implements java.sql.DatabaseMetaData
|
||||
{
|
||||
public Jdbc2DatabaseMetaData(Jdbc2Connection conn)
|
||||
{
|
||||
|
@ -3,7 +3,7 @@ package org.postgresql.jdbc2;
|
||||
|
||||
import java.sql.*;
|
||||
|
||||
public class Jdbc2PreparedStatement extends AbstractJdbc2Statement implements java.sql.PreparedStatement
|
||||
public class Jdbc2PreparedStatement extends org.postgresql.jdbc2.AbstractJdbc2Statement implements java.sql.PreparedStatement
|
||||
{
|
||||
|
||||
public Jdbc2PreparedStatement(Jdbc2Connection connection, String sql) throws SQLException
|
||||
|
@ -5,7 +5,7 @@ import java.sql.*;
|
||||
import java.util.Vector;
|
||||
import org.postgresql.Field;
|
||||
|
||||
/* $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc2/Attic/Jdbc2ResultSet.java,v 1.3 2002/07/26 05:29:35 barry Exp $
|
||||
/* $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/jdbc2/Attic/Jdbc2ResultSet.java,v 1.4 2002/08/14 20:35:39 barry Exp $
|
||||
* This class implements the java.sql.ResultSet interface for JDBC2.
|
||||
* However most of the implementation is really done in
|
||||
* org.postgresql.jdbc2.AbstractJdbc2ResultSet or one of it's parents
|
||||
@ -23,5 +23,13 @@ public class Jdbc2ResultSet extends org.postgresql.jdbc2.AbstractJdbc2ResultSet
|
||||
return new Jdbc2ResultSetMetaData(rows, fields);
|
||||
}
|
||||
|
||||
public java.sql.Clob getClob(int i) throws SQLException {
|
||||
return new org.postgresql.jdbc2.Jdbc2Clob(connection, getInt(i));
|
||||
}
|
||||
|
||||
public java.sql.Blob getBlob(int i) throws SQLException {
|
||||
return new org.postgresql.jdbc2.Jdbc2Blob(connection, getInt(i));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user