Description
Here is my analysis of where we currently fall short of JDBC4 compliance, based on my reading of the current draft revision of the JDBC4 Compliance chapter. I will break this into subtasks.
Comparison of Derby to early May sneak preview of the JDBC4 Compliance Chapter:
6.1 Definitions
Just a recital of definitions.
6.2
Supported:
- Entry level SQL 92
- Escape syntax
- Transactions
- Driver access to all documented Derby features
- SQLFeatureNotSupportedException thrown for unimplemented optional features
- Agreement between DatabaseMetaData and actual feature set
6.3 JDBC 4.0 API Compliance
Supported:
- Supports a ResultSet type of TYPE_FORWARD_ONLY
- Supports a ResultSet concurrency of CONCUR_READ_ONLY
- Supports batch updates
- Fully implements the following interfaces:
- java.sql.Driver
- java.sql.DatabaseMetaData
- java.sql.ParameterMetaData
- java.sql.ResultSetMetaData
- java.sql.Wrapper
- javax.sql.DataSource
Unsupported:
- The following java.sql.Connection methods:
- getClientInfo()
- getClientInfo(java.lang.String)
- setClientInfo(java.lang.String,java.lang.String)
- The following java.sql.CallableStatement methods:
- getBlob(int)
- getClob(int)
- The following java.sql.ResultSet methods:
- updateBlob(int,java.sql.Blob)
- updateBlob(java.lang.String,java.sql.Blob)
- updateClob(int,java.sql.Clob)
- updateClob(java.lang.String,java.sql.Clob)
- The following java.sql.Blob methods:
- java.sql.Blob.setBytes(long,byte[])
- setBytes(long,byte[],int,int)
- getBinaryStream(long,long)
- setBinaryStream(long)
- truncate(long)
- The following java.sql.Clob methods:
- setString(long,java.lang.String)
- setString(long,java.lang.String,int,int)
- setAsciiStream(long)
- getCharacterStream(long,long)
- setCharacterStream(long)
- truncate(long)
6.4 Java EE JDBC Compliance
Supported:
- escape functions concat, substring, locate, length,
abs, sqrt, mod. - executeUpdate() works for calling procedures via
escape syntax.
Unsupported:
- OUT parameters not supported for these datatypes: BLOB, CLOB
- executeQuery() does NOT work for calling procedures via escape syntax.
IN ACTIVE DEVELOPMENT
- The following java.sql.Connection methods:
- Brokered class forwarding:
- isValid(int)
- createQueryObject(java.lang.Class)
- getClientInfo()
- getClientInfo(java.lang.String)
- setClientInfo(java.lang.String,java.lang.String)
- LOB improvements:
- createBlob()
- createClob()
- The following java.sql.Statement methods:
- Brokered class forwarding:
- isClosed()
- cancel()
- The following java.sql.PreparedStatement methods:
- Brokered class forwarding:
- setUnicodeStream(int,java.io.InputStream,int)
- setBlob(int,java.io.InputStream,long)
- setClob(int,java.io.Reader,long)
- The following java.sql.CallableStatement methods:
- Brokered class forwarding:
- getBlob(int)
- getClob(int)
- The following java.sql.Blob methods:
- LOB improvements:
- free()
- The following java.sql.Clob methods:
- LOB improvements:
- free()
Attachments
Issue Links
- incorporates
-
DERBY-1316 Wrong value returned by DatabaseMetaData.locatorsUpdateCopy()
- Closed
-
DERBY-1282 Finish client info api for JDBC4. Compliance task.
- Closed
-
DERBY-1283 Fill in a deprecated but mandatory JDBC3 method: PreparedStatement.setUnicodeStream()
- Closed
-
DERBY-1284 Fill in streaming ResultSet methods required for JDBC3 compliance
- Closed
-
DERBY-1285 Finish JDBC3 Blob implementation
- Closed
-
DERBY-1286 Fill in Clob methods required for JDBC3 compliance
- Closed
-
DERBY-1288 Bring Derby into JDBC compliance by supporting executeQuery() on escaped procedure invocations
- Closed
-
DERBY-1390 Statement.setEscapeProcessing() is a NOP in Derby.
- Closed