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));
}
}