Skip to content

Commit

Permalink
Update some column types in result sets of CassandraDatabaseMetadata
Browse files Browse the repository at this point in the history
to respect the JDBC API specifications
  • Loading branch information
maximevw committed Dec 10, 2023
1 parent 35e10fe commit af90f3a
Show file tree
Hide file tree
Showing 7 changed files with 254 additions and 186 deletions.
11 changes: 11 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,17 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)

## Unreleased
### Changed
- Modify the types of some columns in the result sets of the following methods of `CassandraDatabaseMetadata` to respect
the JDBC API specifications:
- `getAttributes(String, String, String, String)`
- `getBestRowIdentifier(String, String, String, int, boolean)`
- `getColumns(String, String, String, String)`
- `getFunctions(String, String, String)`
- `getFunctionColumns(String, String, String, String)`
- `getIndexInfo(String, String, String, boolean, boolean)`
- `getPrimaryKeys(String, String, String)`
- `getTypeInfo()`
- `getUDTs(String, String, String, int[])`
- Update Apache Commons IO to version 2.15.1.
### Removed
- Remove the parameter `version` (CQL version) in JDBC URL and the deprecated constructors of `CassandraDataSource`
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -145,24 +145,24 @@ public CassandraMetadataResultSet buildColumns(final String schemaPattern,
buildDefinitionInAnonymousTable(TABLE_SCHEMA, DataTypes.TEXT),
buildDefinitionInAnonymousTable(TABLE_NAME, DataTypes.TEXT),
buildDefinitionInAnonymousTable(COLUMN_NAME, DataTypes.TEXT),
buildDefinitionInAnonymousTable(DATA_TYPE, DataTypes.TEXT),
buildDefinitionInAnonymousTable(DATA_TYPE, DataTypes.INT),
buildDefinitionInAnonymousTable(TYPE_NAME, DataTypes.TEXT),
buildDefinitionInAnonymousTable(COLUMN_SIZE, DataTypes.TEXT),
buildDefinitionInAnonymousTable(BUFFER_LENGTH, DataTypes.TEXT),
buildDefinitionInAnonymousTable(DECIMAL_DIGITS, DataTypes.TEXT),
buildDefinitionInAnonymousTable(NUM_PRECISION_RADIX, DataTypes.TEXT),
buildDefinitionInAnonymousTable(NULLABLE, DataTypes.TEXT),
buildDefinitionInAnonymousTable(COLUMN_SIZE, DataTypes.INT),
buildDefinitionInAnonymousTable(BUFFER_LENGTH, DataTypes.INT),
buildDefinitionInAnonymousTable(DECIMAL_DIGITS, DataTypes.INT),
buildDefinitionInAnonymousTable(NUM_PRECISION_RADIX, DataTypes.INT),
buildDefinitionInAnonymousTable(NULLABLE, DataTypes.INT),
buildDefinitionInAnonymousTable(REMARKS, DataTypes.TEXT),
buildDefinitionInAnonymousTable(COLUMN_DEFAULT, DataTypes.TEXT),
buildDefinitionInAnonymousTable(SQL_DATA_TYPE, DataTypes.TEXT),
buildDefinitionInAnonymousTable(SQL_DATETIME_SUB, DataTypes.TEXT),
buildDefinitionInAnonymousTable(CHAR_OCTET_LENGTH, DataTypes.TEXT),
buildDefinitionInAnonymousTable(ORDINAL_POSITION, DataTypes.TEXT),
buildDefinitionInAnonymousTable(SQL_DATA_TYPE, DataTypes.INT),
buildDefinitionInAnonymousTable(SQL_DATETIME_SUB, DataTypes.INT),
buildDefinitionInAnonymousTable(CHAR_OCTET_LENGTH, DataTypes.INT),
buildDefinitionInAnonymousTable(ORDINAL_POSITION, DataTypes.INT),
buildDefinitionInAnonymousTable(IS_NULLABLE, DataTypes.TEXT),
buildDefinitionInAnonymousTable(SCOPE_CATALOG, DataTypes.TEXT),
buildDefinitionInAnonymousTable(SCOPE_SCHEMA, DataTypes.TEXT),
buildDefinitionInAnonymousTable(SCOPE_TABLE, DataTypes.TEXT),
buildDefinitionInAnonymousTable(SOURCE_DATA_TYPE, DataTypes.TEXT),
buildDefinitionInAnonymousTable(SOURCE_DATA_TYPE, DataTypes.SMALLINT),
buildDefinitionInAnonymousTable(IS_AUTOINCREMENT, DataTypes.TEXT),
buildDefinitionInAnonymousTable(IS_GENERATED_COLUMN, DataTypes.TEXT)
);
Expand Down Expand Up @@ -202,19 +202,19 @@ public CassandraMetadataResultSet buildColumns(final String schemaPattern,
keyspaceMetadata.getName().asInternal(), // TABLE_SCHEM
tableMetadata.getName().asInternal(), // TABLE_NAME
columnMetadata.getName().asInternal(), // COLUMN_NAME
String.valueOf(jdbcType), // DATA_TYPE
jdbcType, // DATA_TYPE
columnMetadata.getType().toString(), // TYPE_NAME
String.valueOf(columnSize), // COLUMN_SIZE
String.valueOf(0), // BUFFER_LENGTH
columnSize, // COLUMN_SIZE
0, // BUFFER_LENGTH
null, // DECIMAL_DIGITS
String.valueOf(radix), // NUM_PREC_RADIX
String.valueOf(DatabaseMetaData.columnNoNulls), // NULLABLE
radix, // NUM_PREC_RADIX
DatabaseMetaData.columnNoNulls, // NULLABLE
null, // REMARKS
null, // COLUMN_DEF
null, // SQL_DATA_TYPE
null, // SQL_DATETIME_SUB
String.valueOf(Integer.MAX_VALUE), // CHAR_OCTET_LENGTH
String.valueOf(colIndex.getAndIncrement()), // ORDINAL_POSITION
Integer.MAX_VALUE, // CHAR_OCTET_LENGTH
colIndex.getAndIncrement(), // ORDINAL_POSITION
StringUtils.EMPTY, // IS_NULLABLE
null, // SCOPE_CATALOG
null, // SCOPE_SCHEMA
Expand All @@ -230,7 +230,7 @@ public CassandraMetadataResultSet buildColumns(final String schemaPattern,
// ORDINAL_POSITION.
columns.sort(Comparator.comparing(row -> ((MetadataRow) row).getString(TABLE_SCHEMA))
.thenComparing(row -> ((MetadataRow) row).getString(TABLE_NAME))
.thenComparing(row -> ((MetadataRow) row).getString(ORDINAL_POSITION)));
.thenComparing(row -> ((MetadataRow) row).getInt(ORDINAL_POSITION)));
return CassandraMetadataResultSet.buildFrom(this.statement,
new MetadataResultSet(rowTemplate).setRows(columns));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
import static com.ing.data.cassandra.jdbc.ColumnDefinitions.Definition.buildDefinitionInAnonymousTable;
import static com.ing.data.cassandra.jdbc.types.TypesMap.getTypeForComparator;
import static java.sql.DatabaseMetaData.functionColumnIn;
import static java.sql.DatabaseMetaData.functionNoTable;
import static java.sql.DatabaseMetaData.functionReturn;
import static java.sql.DatabaseMetaData.typeNullable;

Expand Down Expand Up @@ -103,7 +104,7 @@ public CassandraMetadataResultSet buildFunctions(final String schemaPattern,
buildDefinitionInAnonymousTable(FUNCTION_SCHEMA, DataTypes.TEXT),
buildDefinitionInAnonymousTable(FUNCTION_NAME, DataTypes.TEXT),
buildDefinitionInAnonymousTable(REMARKS, DataTypes.TEXT),
buildDefinitionInAnonymousTable(FUNCTION_TYPE, DataTypes.TEXT),
buildDefinitionInAnonymousTable(FUNCTION_TYPE, DataTypes.SMALLINT),
buildDefinitionInAnonymousTable(SPECIFIC_NAME, DataTypes.TEXT)
);

Expand All @@ -115,7 +116,7 @@ public CassandraMetadataResultSet buildFunctions(final String schemaPattern,
keyspaceMetadata.getName().asInternal(), // FUNCTION_SCHEM
functionSignature.getName().asInternal(), // FUNCTION_NAME
StringUtils.EMPTY, // REMARKS
String.valueOf(DatabaseMetaData.functionNoTable), // FUNCTION_TYPE
(short) functionNoTable, // FUNCTION_TYPE
functionSignature.getName().asInternal()); // SPECIFIC_NAME
functionsRows.add(row);
}), null);
Expand Down Expand Up @@ -216,17 +217,17 @@ public CassandraMetadataResultSet buildFunctionColumns(final String schemaPatter
buildDefinitionInAnonymousTable(FUNCTION_SCHEMA, DataTypes.TEXT),
buildDefinitionInAnonymousTable(FUNCTION_NAME, DataTypes.TEXT),
buildDefinitionInAnonymousTable(COLUMN_NAME, DataTypes.TEXT),
buildDefinitionInAnonymousTable(COLUMN_TYPE, DataTypes.TEXT),
buildDefinitionInAnonymousTable(DATA_TYPE, DataTypes.TEXT),
buildDefinitionInAnonymousTable(COLUMN_TYPE, DataTypes.SMALLINT),
buildDefinitionInAnonymousTable(DATA_TYPE, DataTypes.INT),
buildDefinitionInAnonymousTable(TYPE_NAME, DataTypes.TEXT),
buildDefinitionInAnonymousTable(PRECISION, DataTypes.TEXT),
buildDefinitionInAnonymousTable(LENGTH, DataTypes.TEXT),
buildDefinitionInAnonymousTable(SCALE, DataTypes.TEXT),
buildDefinitionInAnonymousTable(RADIX, DataTypes.TEXT),
buildDefinitionInAnonymousTable(NULLABLE, DataTypes.TEXT),
buildDefinitionInAnonymousTable(PRECISION, DataTypes.INT),
buildDefinitionInAnonymousTable(LENGTH, DataTypes.INT),
buildDefinitionInAnonymousTable(SCALE, DataTypes.INT),
buildDefinitionInAnonymousTable(RADIX, DataTypes.SMALLINT),
buildDefinitionInAnonymousTable(NULLABLE, DataTypes.SMALLINT),
buildDefinitionInAnonymousTable(REMARKS, DataTypes.TEXT),
buildDefinitionInAnonymousTable(CHAR_OCTET_LENGTH, DataTypes.TEXT),
buildDefinitionInAnonymousTable(ORDINAL_POSITION, DataTypes.TEXT),
buildDefinitionInAnonymousTable(CHAR_OCTET_LENGTH, DataTypes.INT),
buildDefinitionInAnonymousTable(ORDINAL_POSITION, DataTypes.INT),
buildDefinitionInAnonymousTable(IS_NULLABLE, DataTypes.TEXT),
buildDefinitionInAnonymousTable(SPECIFIC_NAME, DataTypes.TEXT)
);
Expand All @@ -242,17 +243,17 @@ public CassandraMetadataResultSet buildFunctionColumns(final String schemaPatter
keyspaceMetadata.getName().asInternal(), // FUNCTION_SCHEM
functionSignature.getName().asInternal(), // FUNCTION_NAME
StringUtils.EMPTY, // COLUMN_NAME
String.valueOf(functionReturn), // COLUMN_TYPE
String.valueOf(returnJdbcType.getJdbcType()), // DATA_TYPE
(short) functionReturn, // COLUMN_TYPE
returnJdbcType.getJdbcType(), // DATA_TYPE
functionMetadata.getReturnType().toString(), // TYPE_NAME
String.valueOf(returnJdbcType.getPrecision(null)), // PRECISION
String.valueOf(Integer.MAX_VALUE), // LENGTH
String.valueOf(returnJdbcType.getScale(null)), // SCALE
String.valueOf(returnJdbcType.getPrecision(null)), // RADIX
String.valueOf(typeNullable), // NULLABLE
returnJdbcType.getPrecision(null), // PRECISION
Integer.MAX_VALUE, // LENGTH
returnJdbcType.getScale(null), // SCALE
(short) returnJdbcType.getPrecision(null), // RADIX
(short) typeNullable, // NULLABLE
StringUtils.EMPTY, // REMARKS
null, // CHAR_OCTET_LENGTH
"0", // ORDINAL_POSITION
0, // ORDINAL_POSITION
YES_VALUE, // IS_NULLABLE
functionSignature.getName().asInternal()); // SPECIFIC_NAME
functionParamsRows.add(row);
Expand All @@ -269,17 +270,17 @@ public CassandraMetadataResultSet buildFunctionColumns(final String schemaPatter
keyspaceMetadata.getName().asInternal(), // FUNCTION_SCHEM
functionSignature.getName().asInternal(), // FUNCTION_NAME
paramNames.get(i).asInternal(), // COLUMN_NAME
String.valueOf(functionColumnIn), // COLUMN_TYPE
String.valueOf(paramJdbcType.getJdbcType()), // DATA_TYPE
(short) functionColumnIn, // COLUMN_TYPE
paramJdbcType.getJdbcType(), // DATA_TYPE
functionSignature.getParameterTypes().get(i).toString(), // TYPE_NAME
String.valueOf(paramJdbcType.getPrecision(null)), // PRECISION
String.valueOf(Integer.MAX_VALUE), // LENGTH
String.valueOf(paramJdbcType.getScale(null)), // SCALE
String.valueOf(paramJdbcType.getPrecision(null)), // RADIX
String.valueOf(typeNullable), // NULLABLE
paramJdbcType.getPrecision(null), // PRECISION
Integer.MAX_VALUE, // LENGTH
paramJdbcType.getScale(null), // SCALE
(short) paramJdbcType.getPrecision(null), // RADIX
(short) typeNullable, // NULLABLE
StringUtils.EMPTY, // REMARKS
null, // CHAR_OCTET_LENGTH
String.valueOf(i + 1), // ORDINAL_POSITION
i + 1, // ORDINAL_POSITION
YES_VALUE, // IS_NULLABLE
functionSignature.getName().asInternal()); // SPECIFIC_NAME
functionParamsRows.add(paramRow);
Expand All @@ -292,7 +293,7 @@ public CassandraMetadataResultSet buildFunctionColumns(final String schemaPatter
functionParamsRows.sort(Comparator.comparing(row -> ((MetadataRow) row).getString(FUNCTION_SCHEMA))
.thenComparing(row -> ((MetadataRow) row).getString(FUNCTION_NAME))
.thenComparing(row -> ((MetadataRow) row).getString(SPECIFIC_NAME))
.thenComparing(row -> Integer.valueOf(((MetadataRow) row).getString(ORDINAL_POSITION))));
.thenComparing(row -> ((MetadataRow) row).getInt(ORDINAL_POSITION)));
return CassandraMetadataResultSet.buildFrom(this.statement,
new MetadataResultSet(rowTemplate).setRows(functionParamsRows));
}
Expand Down
Loading

0 comments on commit af90f3a

Please sign in to comment.