This is an automated email from the ASF dual-hosted git repository.

terrymanu 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 f05ee36c6bf Fix Oracle composite index column order (#39839)
f05ee36c6bf is described below

commit f05ee36c6bf62b7fb13225f90f8e59fbd8bbee45
Author: Liang Zhang <[email protected]>
AuthorDate: Mon Sep 14 00:39:12 2026 +0800

    Fix Oracle composite index column order (#39839)
---
 .../oracle/metadata/data/loader/OracleMetaDataLoader.java     |  4 ++--
 .../oracle/metadata/data/loader/OracleMetaDataLoaderTest.java | 11 ++++++-----
 2 files changed, 8 insertions(+), 7 deletions(-)

diff --git 
a/database/connector/dialect/oracle/src/main/java/org/apache/shardingsphere/database/connector/oracle/metadata/data/loader/OracleMetaDataLoader.java
 
b/database/connector/dialect/oracle/src/main/java/org/apache/shardingsphere/database/connector/oracle/metadata/data/loader/OracleMetaDataLoader.java
index 392daedc724..5d1e2c2f018 100644
--- 
a/database/connector/dialect/oracle/src/main/java/org/apache/shardingsphere/database/connector/oracle/metadata/data/loader/OracleMetaDataLoader.java
+++ 
b/database/connector/dialect/oracle/src/main/java/org/apache/shardingsphere/database/connector/oracle/metadata/data/loader/OracleMetaDataLoader.java
@@ -76,7 +76,8 @@ public final class OracleMetaDataLoader implements 
DialectMetaDataLoader {
     private static final String PRIMARY_KEY_COLUMN_META_DATA_SQL =
             "SELECT OWNER AS TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME FROM 
ALL_CONS_COLUMNS WHERE OWNER = ? AND TABLE_NAME IN (%s) AND CONSTRAINT_NAME IN 
(%s)";
     
-    private static final String INDEX_COLUMN_META_DATA_SQL = "SELECT 
INDEX_NAME, COLUMN_NAME FROM ALL_IND_COLUMNS WHERE INDEX_OWNER = ? AND 
INDEX_NAME IN (%s)";
+    private static final String INDEX_COLUMN_META_DATA_SQL =
+            "SELECT INDEX_NAME, COLUMN_NAME FROM ALL_IND_COLUMNS WHERE 
INDEX_OWNER = ? AND INDEX_NAME IN (%s) ORDER BY INDEX_NAME, COLUMN_POSITION";
     
     private static final int COLLATION_START_MAJOR_VERSION = 12;
     
@@ -166,7 +167,6 @@ public final class OracleMetaDataLoader implements 
DialectMetaDataLoader {
     }
     
     private boolean isCaseSensitive(final int dataType, final String 
collation, final boolean collationSupported) {
-        // TODO Resolve case sensitivity from session parameters for Oracle 
versions earlier than 12.2 and session-dependent collations.
         return collationSupported ? null != collation && 
isCaseSensitive(collation) : dataTypeOption.isStringDataType(dataType);
     }
     
diff --git 
a/database/connector/dialect/oracle/src/test/java/org/apache/shardingsphere/database/connector/oracle/metadata/data/loader/OracleMetaDataLoaderTest.java
 
b/database/connector/dialect/oracle/src/test/java/org/apache/shardingsphere/database/connector/oracle/metadata/data/loader/OracleMetaDataLoaderTest.java
index c98a3fde429..adc5635babf 100644
--- 
a/database/connector/dialect/oracle/src/test/java/org/apache/shardingsphere/database/connector/oracle/metadata/data/loader/OracleMetaDataLoaderTest.java
+++ 
b/database/connector/dialect/oracle/src/test/java/org/apache/shardingsphere/database/connector/oracle/metadata/data/loader/OracleMetaDataLoaderTest.java
@@ -71,7 +71,8 @@ class OracleMetaDataLoaderTest {
     
     private static final String ALL_INDEXES_SQL = "SELECT OWNER AS 
TABLE_SCHEMA, TABLE_NAME, INDEX_NAME, UNIQUENESS FROM ALL_INDEXES WHERE OWNER = 
? AND TABLE_NAME IN ('tbl')";
     
-    private static final String ALL_INDEX_COLUMNS_SQL_WITH_MULTIPLE_INDEXES = 
"SELECT INDEX_NAME, COLUMN_NAME FROM ALL_IND_COLUMNS WHERE INDEX_OWNER = ? AND 
INDEX_NAME IN ('id','id_2')";
+    private static final String ALL_INDEX_COLUMNS_SQL_WITH_MULTIPLE_INDEXES =
+            "SELECT INDEX_NAME, COLUMN_NAME FROM ALL_IND_COLUMNS WHERE 
INDEX_OWNER = ? AND INDEX_NAME IN ('id','id_2') ORDER BY INDEX_NAME, 
COLUMN_POSITION";
     
     private static final String ALL_VIEWS_SQL = "SELECT VIEW_NAME FROM 
ALL_VIEWS WHERE OWNER = ? AND VIEW_NAME IN ('tbl')";
     
@@ -186,7 +187,7 @@ class OracleMetaDataLoaderTest {
         assertThat(actualTableMetaData.getIndexes().size(), is(2));
         List<IndexMetaData> actualIndexes = new 
ArrayList<>(actualTableMetaData.getIndexes());
         assertIndexMetaData(actualIndexes.get(0), new IndexMetaData("id"), 
true, Collections.singletonList("id"));
-        assertIndexMetaData(actualIndexes.get(1), new IndexMetaData("id_2"), 
false, Collections.singletonList("name"));
+        assertIndexMetaData(actualIndexes.get(1), new IndexMetaData("id_2"), 
false, Arrays.asList("name", "creation_time"));
     }
     
     @SuppressWarnings({"JDBCResourceOpenedButNotSafelyClosed", "resource"})
@@ -254,9 +255,9 @@ class OracleMetaDataLoaderTest {
     
     private ResultSet mockIndexColumnMetaDataResultSetWithMultipleIndexes() 
throws SQLException {
         ResultSet result = mock(ResultSet.class);
-        when(result.next()).thenReturn(true, true, false);
-        when(result.getString("INDEX_NAME")).thenReturn("id", "id_2");
-        when(result.getString("COLUMN_NAME")).thenReturn("id", "name");
+        when(result.next()).thenReturn(true, true, true, false);
+        when(result.getString("INDEX_NAME")).thenReturn("id", "id_2", "id_2");
+        when(result.getString("COLUMN_NAME")).thenReturn("id", "name", 
"creation_time");
         return result;
     }
     

Reply via email to