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 233fb2082c6 support save unique key in metadata for Oracle (#28072)
233fb2082c6 is described below

commit 233fb2082c614a7c0a593b7365e288f2f18a0cf8
Author: Zonglei Dong <[email protected]>
AuthorDate: Mon Aug 14 13:39:50 2023 +0800

    support save unique key in metadata for Oracle (#28072)
---
 .../database/oracle/metadata/data/loader/OracleMetaDataLoader.java | 7 +++++--
 .../oracle/metadata/data/loader/OracleMetaDataLoaderTest.java      | 7 +++++--
 2 files changed, 10 insertions(+), 4 deletions(-)

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 982065ca52f..701f8909584 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
@@ -58,7 +58,7 @@ public final class OracleMetaDataLoader implements 
DialectMetaDataLoader {
     
     private static final String TABLE_META_DATA_SQL_IN_TABLES = 
TABLE_META_DATA_SQL_NO_ORDER + " AND TABLE_NAME IN (%s)" + ORDER_BY_COLUMN_ID;
     
-    private static final String INDEX_META_DATA_SQL = "SELECT OWNER AS 
TABLE_SCHEMA, TABLE_NAME, INDEX_NAME FROM ALL_INDEXES WHERE OWNER = ? AND 
TABLE_NAME IN (%s)";
+    private static final String INDEX_META_DATA_SQL = "SELECT OWNER AS 
TABLE_SCHEMA, TABLE_NAME, INDEX_NAME, UNIQUENESS FROM ALL_INDEXES WHERE OWNER = 
? AND TABLE_NAME IN (%s)";
     
     private static final String PRIMARY_KEY_META_DATA_SQL = "SELECT A.OWNER AS 
TABLE_SCHEMA, A.TABLE_NAME AS TABLE_NAME, B.COLUMN_NAME AS COLUMN_NAME FROM 
ALL_CONSTRAINTS A INNER JOIN"
             + " ALL_CONS_COLUMNS B ON A.CONSTRAINT_NAME = B.CONSTRAINT_NAME 
WHERE CONSTRAINT_TYPE = 'P' AND A.OWNER = '%s'";
@@ -162,10 +162,13 @@ public final class OracleMetaDataLoader implements 
DialectMetaDataLoader {
                 while (resultSet.next()) {
                     String indexName = resultSet.getString("INDEX_NAME");
                     String tableName = resultSet.getString("TABLE_NAME");
+                    boolean isUnique = 
"UNIQUE".equals(resultSet.getString("UNIQUENESS"));
                     if (!result.containsKey(tableName)) {
                         result.put(tableName, new LinkedList<>());
                     }
-                    result.get(tableName).add(new IndexMetaData(indexName));
+                    IndexMetaData indexMetaData = new IndexMetaData(indexName);
+                    indexMetaData.setUnique(isUnique);
+                    result.get(tableName).add(indexMetaData);
                 }
             }
         }
diff --git 
a/infra/database/type/oracle/src/test/java/org/apache/shardingsphere/infra/database/oracle/metadata/data/loader/OracleMetaDataLoaderTest.java
 
b/infra/database/type/oracle/src/test/java/org/apache/shardingsphere/infra/database/oracle/metadata/data/loader/OracleMetaDataLoaderTest.java
index 05409c711ed..0b56585ef12 100644
--- 
a/infra/database/type/oracle/src/test/java/org/apache/shardingsphere/infra/database/oracle/metadata/data/loader/OracleMetaDataLoaderTest.java
+++ 
b/infra/database/type/oracle/src/test/java/org/apache/shardingsphere/infra/database/oracle/metadata/data/loader/OracleMetaDataLoaderTest.java
@@ -51,7 +51,7 @@ class OracleMetaDataLoaderTest {
     private static final String ALL_CONSTRAINTS_SQL_WITH_TABLES = "SELECT 
A.OWNER AS TABLE_SCHEMA, A.TABLE_NAME AS TABLE_NAME, B.COLUMN_NAME AS 
COLUMN_NAME FROM ALL_CONSTRAINTS A"
             + " INNER JOIN ALL_CONS_COLUMNS B ON A.CONSTRAINT_NAME = 
B.CONSTRAINT_NAME WHERE CONSTRAINT_TYPE = 'P' AND A.OWNER = 'TEST' AND 
A.TABLE_NAME IN ('tbl')";
     
-    private static final String ALL_INDEXES_SQL = "SELECT OWNER AS 
TABLE_SCHEMA, TABLE_NAME, INDEX_NAME FROM ALL_INDEXES WHERE OWNER = ? AND 
TABLE_NAME IN ('tbl')";
+    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_TAB_COLUMNS_SQL_CONDITION1 = "SELECT OWNER 
AS TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, NULLABLE, DATA_TYPE, COLUMN_ID, 
HIDDEN_COLUMN , IDENTITY_COLUMN, COLLATION"
             + " FROM ALL_TAB_COLS WHERE OWNER = ? AND TABLE_NAME IN ('tbl') 
ORDER BY COLUMN_ID";
@@ -259,6 +259,7 @@ class OracleMetaDataLoaderTest {
         when(result.next()).thenReturn(true, false);
         when(result.getString("INDEX_NAME")).thenReturn("id");
         when(result.getString("TABLE_NAME")).thenReturn("tbl");
+        when(result.getString("UNIQUENESS")).thenReturn("UNIQUE");
         return result;
     }
     
@@ -282,6 +283,8 @@ class OracleMetaDataLoaderTest {
         assertThat(actualTableMetaData.getColumns().size(), is(3));
         assertThat(actualTableMetaData.getIndexes().size(), is(1));
         Iterator<IndexMetaData> indexesIterator = 
actualTableMetaData.getIndexes().iterator();
-        assertThat(indexesIterator.next(), is(new IndexMetaData("id")));
+        IndexMetaData indexMetaData = new IndexMetaData("id");
+        indexMetaData.setUnique(true);
+        assertThat(indexesIterator.next(), is(indexMetaData));
     }
 }

Reply via email to