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 e406a153c59 Support load unique key for H2 #28035 (#28154)
e406a153c59 is described below

commit e406a153c595a315fcf9cd0950a7eb1e206eaa7c
Author: Sindhu <[email protected]>
AuthorDate: Mon Sep 11 23:59:42 2023 -0700

    Support load unique key for H2 #28035 (#28154)
    
    * Support Unique Key for H2
    
    * formatting
---
 .../infra/database/h2/metadata/data/loader/H2MetaDataLoader.java | 8 ++++++--
 .../database/h2/metadata/data/loader/H2MetaDataLoaderTest.java   | 9 ++++++---
 2 files changed, 12 insertions(+), 5 deletions(-)

diff --git 
a/infra/database/type/h2/src/main/java/org/apache/shardingsphere/infra/database/h2/metadata/data/loader/H2MetaDataLoader.java
 
b/infra/database/type/h2/src/main/java/org/apache/shardingsphere/infra/database/h2/metadata/data/loader/H2MetaDataLoader.java
index fac7aa8f9e0..50b3251d42b 100644
--- 
a/infra/database/type/h2/src/main/java/org/apache/shardingsphere/infra/database/h2/metadata/data/loader/H2MetaDataLoader.java
+++ 
b/infra/database/type/h2/src/main/java/org/apache/shardingsphere/infra/database/h2/metadata/data/loader/H2MetaDataLoader.java
@@ -51,7 +51,7 @@ public final class H2MetaDataLoader implements 
DialectMetaDataLoader {
     
     private static final String TABLE_META_DATA_SQL_IN_TABLES = 
TABLE_META_DATA_NO_ORDER + " AND UPPER(TABLE_NAME) IN (%s)" + 
ORDER_BY_ORDINAL_POSITION;
     
-    private static final String INDEX_META_DATA_SQL = "SELECT TABLE_CATALOG, 
TABLE_NAME, INDEX_NAME FROM INFORMATION_SCHEMA.INDEXES"
+    private static final String INDEX_META_DATA_SQL = "SELECT TABLE_CATALOG, 
TABLE_NAME, INDEX_NAME, INDEX_TYPE_NAME FROM INFORMATION_SCHEMA.INDEXES"
             + " WHERE TABLE_CATALOG=? AND TABLE_SCHEMA=? AND UPPER(TABLE_NAME) 
IN (%s)";
     
     private static final String PRIMARY_KEY_META_DATA_SQL = "SELECT 
TABLE_NAME, INDEX_NAME FROM INFORMATION_SCHEMA.INDEXES WHERE TABLE_CATALOG=? 
AND TABLE_SCHEMA=?"
@@ -126,10 +126,14 @@ public final class H2MetaDataLoader implements 
DialectMetaDataLoader {
                 while (resultSet.next()) {
                     String indexName = resultSet.getString("INDEX_NAME");
                     String tableName = resultSet.getString("TABLE_NAME");
+                    boolean uniqueIndex = "UNIQUE 
INDEX".equals(resultSet.getString("INDEX_TYPE_NAME"));
                     if (!result.containsKey(tableName)) {
                         result.put(tableName, new LinkedList<>());
                     }
-                    result.get(tableName).add(new IndexMetaData(indexName));
+                    IndexMetaData indexMetaData = new IndexMetaData(indexName);
+                    indexMetaData.setUnique(uniqueIndex);
+                    result.get(tableName).add(indexMetaData);
+                    
                 }
             }
         }
diff --git 
a/infra/database/type/h2/src/test/java/org/apache/shardingsphere/infra/database/h2/metadata/data/loader/H2MetaDataLoaderTest.java
 
b/infra/database/type/h2/src/test/java/org/apache/shardingsphere/infra/database/h2/metadata/data/loader/H2MetaDataLoaderTest.java
index 30ad5418a05..38e548485ae 100644
--- 
a/infra/database/type/h2/src/test/java/org/apache/shardingsphere/infra/database/h2/metadata/data/loader/H2MetaDataLoaderTest.java
+++ 
b/infra/database/type/h2/src/test/java/org/apache/shardingsphere/infra/database/h2/metadata/data/loader/H2MetaDataLoaderTest.java
@@ -55,7 +55,7 @@ class H2MetaDataLoaderTest {
                 .executeQuery()).thenReturn(resultSet);
         ResultSet indexResultSet = mockIndexMetaDataResultSet();
         when(dataSource.getConnection().prepareStatement(
-                "SELECT TABLE_CATALOG, TABLE_NAME, INDEX_NAME FROM 
INFORMATION_SCHEMA.INDEXES WHERE TABLE_CATALOG=? AND TABLE_SCHEMA=? AND 
UPPER(TABLE_NAME) IN ('TBL')")
+                "SELECT TABLE_CATALOG, TABLE_NAME, INDEX_NAME, INDEX_TYPE_NAME 
FROM INFORMATION_SCHEMA.INDEXES WHERE TABLE_CATALOG=? AND TABLE_SCHEMA=? AND 
UPPER(TABLE_NAME) IN ('TBL')")
                 .executeQuery()).thenReturn(indexResultSet);
         ResultSet primaryKeys = mockPrimaryKeysMetaDataResultSet();
         when(dataSource.getConnection().prepareStatement(
@@ -78,7 +78,7 @@ class H2MetaDataLoaderTest {
                 .executeQuery()).thenReturn(resultSet);
         ResultSet indexResultSet = mockIndexMetaDataResultSet();
         when(dataSource.getConnection().prepareStatement(
-                "SELECT TABLE_CATALOG, TABLE_NAME, INDEX_NAME FROM 
INFORMATION_SCHEMA.INDEXES WHERE TABLE_CATALOG=? AND TABLE_SCHEMA=? AND 
UPPER(TABLE_NAME) IN ('TBL')")
+                "SELECT TABLE_CATALOG, TABLE_NAME, INDEX_NAME, INDEX_TYPE_NAME 
FROM INFORMATION_SCHEMA.INDEXES WHERE TABLE_CATALOG=? AND TABLE_SCHEMA=? AND 
UPPER(TABLE_NAME) IN ('TBL')")
                 .executeQuery()).thenReturn(indexResultSet);
         ResultSet primaryKeys = mockPrimaryKeysMetaDataResultSet();
         when(dataSource.getConnection().prepareStatement(
@@ -142,6 +142,7 @@ class H2MetaDataLoaderTest {
         when(result.next()).thenReturn(true, false);
         when(result.getString("INDEX_NAME")).thenReturn("id");
         when(result.getString("TABLE_NAME")).thenReturn("tbl");
+        when(result.getString("INDEX_TYPE_NAME")).thenReturn("UNIQUE INDEX");
         return result;
     }
     
@@ -160,6 +161,8 @@ class H2MetaDataLoaderTest {
         assertThat(columnsIterator.next(), is(new ColumnMetaData("name", 
Types.VARCHAR, false, false, false, false, false, true)));
         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