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(",")));
     }
     

Reply via email to