This is an automated email from the ASF dual-hosted git repository.
tuichenchuxin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new 03dcb0090ed Add indexes columns at Oracle metadata loader (#28240)
03dcb0090ed is described below
commit 03dcb0090ed2ee7dc0982b10a690236a153bc433
Author: Xinze Guo <[email protected]>
AuthorDate: Thu Aug 24 09:47:41 2023 +0800
Add indexes columns at Oracle metadata loader (#28240)
---
.../metadata/data/loader/OracleMetaDataLoader.java | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git
a/infra/database/type/oracle/src/main/java/org/apache/shardingsphere/infra/database/oracle/metadata/data/loader/OracleMetaDataLoader.java
b/infra/database/type/oracle/src/main/java/org/apache/shardingsphere/infra/database/oracle/metadata/data/loader/OracleMetaDataLoader.java
index 6c217492650..7ff5e560c4b 100644
---
a/infra/database/type/oracle/src/main/java/org/apache/shardingsphere/infra/database/oracle/metadata/data/loader/OracleMetaDataLoader.java
+++
b/infra/database/type/oracle/src/main/java/org/apache/shardingsphere/infra/database/oracle/metadata/data/loader/OracleMetaDataLoader.java
@@ -65,6 +65,8 @@ public final class OracleMetaDataLoader implements
DialectMetaDataLoader {
private static final String PRIMARY_KEY_META_DATA_SQL_IN_TABLES =
PRIMARY_KEY_META_DATA_SQL + " AND A.TABLE_NAME IN (%s)";
+ private static final String INDEX_COLUMN_META_DATA_SQL = "SELECT
COLUMN_NAME FROM ALL_IND_COLUMNS WHERE INDEX_OWNER = ? AND TABLE_NAME = ? AND
INDEX_NAME = ?";
+
private static final int COLLATION_START_MAJOR_VERSION = 12;
private static final int COLLATION_START_MINOR_VERSION = 2;
@@ -168,6 +170,7 @@ public final class OracleMetaDataLoader implements
DialectMetaDataLoader {
}
IndexMetaData indexMetaData = new IndexMetaData(indexName);
indexMetaData.setUnique(isUnique);
+
indexMetaData.getColumns().addAll(loadIndexColumnNames(connection, tableName,
indexName));
result.get(tableName).add(indexMetaData);
}
}
@@ -175,7 +178,22 @@ public final class OracleMetaDataLoader implements
DialectMetaDataLoader {
return result;
}
+ private List<String> loadIndexColumnNames(final Connection connection,
final String tableName, final String indexName) throws SQLException {
+ try (PreparedStatement preparedStatement =
connection.prepareStatement(INDEX_COLUMN_META_DATA_SQL)) {
+ preparedStatement.setString(1, connection.getSchema());
+ preparedStatement.setString(2, tableName);
+ preparedStatement.setString(3, indexName);
+ List<String> result = new LinkedList<>();
+ ResultSet resultSet = preparedStatement.executeQuery();
+ while (resultSet.next()) {
+ result.add(resultSet.getString("COLUMN_NAME"));
+ }
+ return result;
+ }
+ }
+
private String getIndexMetaDataSQL(final Collection<String> tableNames) {
+ // TODO The table name needs to be in uppercase, otherwise the index
cannot be found.
return String.format(INDEX_META_DATA_SQL, tableNames.stream().map(each
-> String.format("'%s'", each)).collect(Collectors.joining(",")));
}