Skip to content
Alexander Turenko edited this page Jul 27, 2020 · 46 revisions

Contents

JDBC Status

Summary

The following things are known to have issues or are not supported yet while is supported by Tarantool itself:

  • No escape syntax support.
  • No batch execution.
  • Metainfo need to be verified.
  • No In/Out parameters metadata provided for prepared statements.
  • ResultSet metainfo is not fully implemented.

This is not an exhaustive list.

JDBC acceptance criteria

Here is a potential list of software to test JDBC completeness coverage level:

Web apps:

Libraries / Frameworks:

Dev apps / Clients:

Near API support tasks

java.sql package

Interface Required Supported Covered Details
Connection 32 23 16
DatabaseMetaData 176 52 20
Driver 7 7 4
ParameterMetaData 9 0 0 #173
PreparedStatement 34 27 12
ResultSet 56 47 16
ResultSetMetaData 21 3 3
Statement 37 25 15
Wrapper 16 14 14
java.sql.Connection interface
Method Milestone Details
abort(Executor) MVP #71
nativeSQL(String) MVP #76
commit() transactions #63; blocked
getAutoCommit() transactions #63; blocked
getTransactionIsolation() transactions #103; blocked
rollback() transactions #63; blocked
setAutoCommit(boolean) transactions #63; blocked
setReadOnly(boolean) transactions #176; blocked
setTransactionIsolation(int) transactions #103; blocked
java.sql.DatabaseMetaData interface
Method Milestone Details
allProceduresAreCallable() metadata #110
allTablesAreSelectable() metadata #110
autoCommitFailureClosesAllResultSets() metadata #112
dataDefinitionCausesTransactionCommit() metadata #112
dataDefinitionIgnoredInTransactions() metadata #112
doesMaxRowSizeIncludeBlobs() metadata #109
generatedKeyAlwaysReturned() metadata #112
getBestRowIdentifier(String, String, String, int, boolean) metadata #114
getCatalogs() metadata #105
getClientInfoProperties() metadata #74
getColumnPrivileges(String, String, String, String) metadata #115
getCrossReference(String x 6) metadata #116
getDatabaseMajorVersion() metadata #106
getDatabaseMinorVersion() metadata #106
getDefaultTransactionIsolation() metadata #108
getExportedKeys(String, String, String) metadata #116
getExtraNameCharacters() metadata #105
getFunctionColumns(String, String, String, String) metadata #118
getFunctions(String, String, String) metadata #104
getIdentifierQuoteString() metadata #105
getImportedKeys(String, String, String) metadata #116
getIndexInfo(String, String, String, boolean, boolean) metadata #117
getMaxBinaryLiteralLength() metadata #105
getMaxCatalogNameLength() metadata #105
getMaxCharLiteralLength() metadata #105
getMaxColumnNameLength() metadata #105
getMaxColumnsInGroupBy() metadata #109
getMaxColumnsInIndex() metadata #109
getMaxColumnsInOrderBy() metadata #109
getMaxColumnsInSelect() metadata #109
getMaxColumnsInTable() metadata #109
getMaxConnections() metadata #109
getMaxCursorNameLength() metadata #105
getMaxIndexLength() metadata #105
getMaxLogicalLobSize() metadata #109
getMaxProcedureNameLength() metadata #105
getMaxRowSize() metadata #109
getMaxSchemaNameLength() metadata #105
getMaxStatementLength() metadata #105
getMaxStatements() metadata #109
getMaxTableNameLength() metadata #105
getMaxTablesInSelect() metadata #109
getMaxUserNameLength() metadata #105
getNumericFunctions() metadata #82
getProcedureColumns(String, String, String, String) metadata #118
getProcedureTerm() metadata #104
getProcedures(String, String, String) metadata #105
getSchemaTerm() metadata #105
getSchemas() metadata #105
getSchemas(String, String) metadata #105
getSearchStringEscape() metadata #119
getStringFunctions() metadata #82
getSystemFunctions() metadata #82
getTablePrivileges(String, String, String) metadata #115
getTables(String, String, String, String[]) metadata #107
getTimeDateFunctions() metadata #82
getTypeInfo() metadata #113
storesMixedCaseIdentifiers() metadata #105
storesUpperCaseIdentifiers() metadata #105
supportsANSI92EntryLevelSQL() metadata #108
supportsANSI92FullSQL() metadata #108
supportsANSI92IntermediateSQL() metadata #108
supportsAlterTableWithAddColumn() metadata #108
supportsAlterTableWithDropColumn() metadata #108
supportsBatchUpdates() metadata #108
supportsCatalogsInDataManipulation() metadata #108
supportsCatalogsInIndexDefinitions() metadata #108
supportsCatalogsInPrivilegeDefinitions() metadata #108
supportsCatalogsInProcedureCalls() metadata #108
supportsCatalogsInTableDefinitions() metadata #108
supportsColumnAliasing() metadata #108
supportsConvert() metadata #108
supportsConvert(int fromType, int toType) metadata #108
supportsCoreSQLGrammar() metadata #108
supportsCorrelatedSubqueries() metadata #108
supportsDataDefinitionAndDataManipulationTransactions() metadata #108
supportsDataManipulationTransactionsOnly() metadata #108
supportsDifferentTableCorrelationNames() metadata #108
supportsExpressionsInOrderBy() metadata #108
supportsExtendedSQLGrammar() metadata #108
supportsFullOuterJoins() metadata #108
supportsGetGeneratedKeys() metadata #108
supportsGroupBy() metadata #108
supportsGroupByBeyondSelect() metadata #108
supportsGroupByUnrelated() metadata #108
supportsIntegrityEnhancementFacility() metadata #108
supportsLikeEscapeClause() metadata #108
supportsLimitedOuterJoins() metadata #108
supportsMinimumSQLGrammar() metadata #108
supportsMixedCaseIdentifiers() metadata #105 + #108
supportsMixedCaseQuotedIdentifiers() metadata #105 + #108
supportsMultipleOpenResults() metadata #108
supportsMultipleResultSets() metadata #108
supportsMultipleTransactions() metadata #108
supportsNamedParameters() metadata #108
supportsNonNullableColumns() metadata #108
supportsOpenCursorsAcrossCommit() metadata #108
supportsOpenCursorsAcrossRollback() metadata #108
supportsOpenStatementsAcrossCommit() metadata #108
supportsOpenStatementsAcrossRollback() metadata #108
supportsOrderByUnrelated() metadata #108
supportsOuterJoins() metadata #108
supportsPositionedDelete() metadata #108
supportsPositionedUpdate() metadata #108
supportsRefCursors() metadata #108
supportsSavepoints() metadata #108
supportsSchemasInDataManipulation() metadata #108
supportsSchemasInIndexDefinitions() metadata #108
supportsSchemasInPrivilegeDefinitions() metadata #108
supportsSchemasInProcedureCalls() metadata #108
supportsSchemasInTableDefinitions() metadata #108
supportsSelectForUpdate() metadata #108
supportsStatementPooling() metadata #108
supportsStoredFunctionsUsingCallSyntax() metadata #82 + #108
supportsStoredProcedures() metadata #82 + #108
supportsSubqueriesInComparisons() metadata #108
supportsSubqueriesInExists() metadata #108
supportsSubqueriesInIns() metadata #108
supportsSubqueriesInQuantifieds() metadata #108
supportsTableCorrelationNames() metadata #108
supportsTransactionIsolationLevel(int) metadata #108
supportsTransactions() metadata #108
supportsUnion() metadata #108
supportsUnionAll() metadata #108
java.sql.ParameterMetaData interface
Method Milestone Details
getParameterClassName(int) transactions #173
getParameterCount() transactions #173
getParameterMode(int) transactions #173
getParameterType(int) transactions #173
getParameterTypeName(int) transactions #173
getPrecision(int) transactions #173
getScale(int) transactions #173
isNullable(int) transactions #173
isSigned(int) transactions #173
java.sql.PreparedStatement interface
Method Milestone Details
addBatch() MVP #62
getParameterMetaData() transactions #173
setAsciiStream(int, InputStream, long) MVP #190
setBinaryStream(int, InputStream, long) MVP #190
setCharacterStream(int, Reader, int) MVP #190
setCharacterStream(int, Reader, long) MVP #190
setObject(int, Object, SQLType) MVP #92
setObject(int, Object, SQLType, int) MVP #92
java.sql.ResultSet interface
Method Milestone Details
getDate(String, Calendar) transactions #91; blocked
getDate(int, Calendar) transactions #91; blocked
getTime(String, Calendar) transactions #91; blocked
getTime(int, Calendar) transactions #91; blocked
getTimestamp(String, Calendar) transactions #91; blocked
getTimestamp(int, Calendar) transactions #91; blocked
setFetchSize(int) transactions #178
getFetchSize() transactions #178
java.sql.ResultSetMetaData interface
Method Milestone Details
getCatalogName(int) metadata
getColumnClassName(int) metadata
getColumnDisplaySize(int) metadata
getColumnType(int) metadata
getColumnTypeName(int) metadata
getPrecision(int) metadata
getScale(int) metadata
getSchemaName(int) metadata
getTableName(int) metadata
isAutoIncrement(int) metadata
isCaseSensitive(int) metadata
isCurrency(int) metadata
isDefinitelyWritable(int) metadata
isNullable(int) metadata
isReadOnly(int) metadata
isSearchable(int) metadata
isSigned(int) metadata
isWritable(int) metadata
java.sql.Statement interface
Method Milestone Details
addBatch(String) MVP #62
clearBatch() MVP #62
executeBatch() MVP #62
isPoolable() MVP #181
setPoolable(boolean) MVP #181
getMaxFieldSize() MVP #189
getQueryTimeout() MVP #155
setEscapeProcessing(boolean) MVP ?
setMaxFieldSize(int) MVP #189
setQueryTimeout(int) MVP #155
getFetchSize() transactions #178
setFetchSize(int) transactions #178
java.sql.Wrapper interface
Method Milestone Details
ParameterMetaData.isWrapperFor(Class<?>) transactions #173
ParameterMetaData.unwrap(Class) transactions #173

Data model

Tarantool/SQL types are going to be more strict, so tables below will be updated to reflect current Tarantool and Tarantool/SQL types.

Mapping from Tarantool/SQL types into JDBC and Java types:

Tarantool/SQL JDBC Java Supported? Details
BOOL Types.BOOLEAN boolean No only in 2.2 #92
BOOLEAN Types.BOOLEAN boolean No only in 2.2 #92
FLOAT Types.FLOAT double Yes
DOUBLE Types.DOUBLE double Yes
REAL Types.REAL float Yes
INT Types.INTEGER BigInteger No see also #3810; no select to BigInteger #92
INTEGER Types.INTEGER BigInteger No see also #3810
DECIMAL Types.DECIMAL BigDecimal No blocked by #692 and #3672
DECIMAL(N) Types.DECIMAL BigDecimal No blocked by #692 and #3672
DECIMAL(N, M) Types.DECIMAL BigDecimal No blocked by #692 and #3672
NUMERIC Types.NUMERIC BigDecimal No blocked by #692 and #3672
NUMERIC(N) Types.NUMERIC BigDecimal No blocked by #692 and #3672
NUMERIC(N, M) Types.NUMERIC BigDecimal No blocked by #692 and #3672
NUM Types.NUMERIC BigDecimal No blocked by #692 and #3672
NUM(N) Types.NUMERIC BigDecimal No blocked by #692 and #3672
NUM(N, M) Types.NUMERIC BigDecimal No blocked by #692 and #3672
DATE Types.DATE java.sql.Date No blocked by #3694
TIME Types.TIME java.sql.Time No blocked by #3694
TIMESTAMP Types.TIMESTAMP java.sql.Timestamp No blocked by #3694
CHAR(N) Types.CHAR String No blocked by #3665
VARCHAR(N) Types.VARCHAR String Yes
TEXT Types.VARCHAR String Yes
SCALAR No only binary strings are tested #92

Mapping from Tarantool/SQL types into Tarantool native types (space format / index format) and additional Tarantool/SQL constraints (for reference):

Tarantool/SQL Tarantool native Tarantool/SQL constraints
BOOL boolean true / false (only in 2.2)
BOOLEAN boolean true / false (only in 2.2)
FLOAT number float64 for insert, native number (int+fp) for select
DOUBLE number float64 for insert, native number (int+fp) for select
REAL number float64 for insert, native number (int+fp) for select
INT integer -2^63 .. 2^63-1 for insert, native integer (-2^63 .. 2^64-1) for select; #3810
INTEGER integer -2^63 .. 2^63-1 for insert, native integer (-2^63 .. 2^64-1) for select; #3810
VARCHAR(N) string native string (of any length)
TEXT string native string (of any length)
SCALAR scalar native scalar

Tarantool native types, msgpack and Lua types (for reference):

Tarantool native Msgpack Lua
integer nil, pos/neg fixint, int/uint 8/16/32/64 nil/box.NULL, number, cdata(int64_t), cdata(uint64_t)
number nil, pos/neg fixint, int/uint 8/16/32/64, float 32/64 nil/box.NULL, number, cdata(int64_t), cdata(uint64_t)
string nil, fixstr, str 8/16/32 nil/box.NULL, string
scalar all above, bin 8/16/32, bool all above, bool

Links