Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -483,22 +483,20 @@ public Map<String, Object> getTableProperties(Connection connection, JdbcTableHa
{
ImmutableMap.Builder<String, Object> properties = ImmutableMap.builder();
SchemaTableName schemaTableName = tableHandle.asPlainTable().getSchemaTableName();
String schemaName = requireNonNull(schemaTableName.getSchemaName(), "Ignite schema name can not be null").toUpperCase(ENGLISH);
String tableName = requireNonNull(schemaTableName.getTableName(), "Ignite table name can not be null").toUpperCase(ENGLISH);
String sql = "SELECT idx.CACHE_ID, " +
"(SELECT COLUMNS FROM sys.indexes WHERE SCHEMA_NAME = 'PUBLIC' AND TABLE_NAME = ? AND INDEX_NAME = '_key_PK') AS PKS," +
"(SELECT COLUMNS FROM sys.indexes WHERE SCHEMA_NAME = 'PUBLIC' AND TABLE_NAME = ? AND INDEX_NAME = 'AFFINITY_KEY') AS AFK FROM sys.indexes as idx " +
"JOIN sys.caches che ON idx.CACHE_ID = che.CACHE_ID WHERE idx.SCHEMA_NAME = 'PUBLIC' AND idx.TABLE_NAME = ? LIMIT 1";
// Get primary keys from 'sys.indexes' because DatabaseMetaData.getPrimaryKeys doesn't work well while table being concurrent modified
String sql = "SELECT COLUMNS FROM sys.indexes WHERE SCHEMA_NAME = ? AND TABLE_NAME = ? AND INDEX_NAME = '_key_PK' LIMIT 1";

try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
preparedStatement.setString(1, tableName);
preparedStatement.setString(1, schemaName);
preparedStatement.setString(2, tableName);
preparedStatement.setString(3, tableName);

try (ResultSet resultSet = preparedStatement.executeQuery()) {
if (!resultSet.next()) {
return ImmutableMap.of();
}
List<String> primaryKeys = extractColumnNamesFromOrderingScheme(resultSet.getString("PKS"));
List<String> primaryKeys = extractColumnNamesFromOrderingScheme(resultSet.getString("COLUMNS"));
checkArgument(!primaryKeys.isEmpty(), "Ignite table should has at least one primary key");
properties.put(PRIMARY_KEY_PROPERTY, primaryKeys);
}
Expand Down