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

duanzhengqiang 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 b57efb878f9 Fix case sensitive issue when loading schema meta data 
with H2 database (#24789)
b57efb878f9 is described below

commit b57efb878f93723d78d811b71d8825b6c4af08e6
Author: Zheng Feng <[email protected]>
AuthorDate: Fri Mar 24 08:22:50 2023 +0800

    Fix case sensitive issue when loading schema meta data with H2 database 
(#24789)
---
 .../loader/metadata/dialect/H2SchemaMetaDataLoader.java  | 16 ++++++++--------
 .../metadata/dialect/H2SchemaMetaDataLoaderTest.java     |  8 ++++----
 2 files changed, 12 insertions(+), 12 deletions(-)

diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/metadata/dialect/H2SchemaMetaDataLoader.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/metadata/dialect/H2SchemaMetaDataLoader.java
index 05714df9cd5..c511d66cf29 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/metadata/dialect/H2SchemaMetaDataLoader.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/metadata/dialect/H2SchemaMetaDataLoader.java
@@ -51,20 +51,20 @@ public final class H2SchemaMetaDataLoader implements 
DialectSchemaMetaDataLoader
     
     private static final String TABLE_META_DATA_SQL = TABLE_META_DATA_NO_ORDER 
+ ORDER_BY_ORDINAL_POSITION;
     
-    private static final String TABLE_META_DATA_SQL_IN_TABLES = 
TABLE_META_DATA_NO_ORDER + " AND TABLE_NAME IN (%s)" + 
ORDER_BY_ORDINAL_POSITION;
+    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"
-            + " WHERE TABLE_CATALOG=? AND TABLE_SCHEMA=? AND TABLE_NAME IN 
(%s)";
+            + " 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=?"
             + " AND INDEX_TYPE_NAME = 'PRIMARY KEY'";
     
-    private static final String PRIMARY_KEY_META_DATA_SQL_IN_TABLES = 
PRIMARY_KEY_META_DATA_SQL + " AND TABLE_NAME IN (%s)";
+    private static final String PRIMARY_KEY_META_DATA_SQL_IN_TABLES = 
PRIMARY_KEY_META_DATA_SQL + " AND UPPER(TABLE_NAME) IN (%s)";
     
     private static final String GENERATED_INFO_SQL = "SELECT C.TABLE_NAME 
TABLE_NAME, C.COLUMN_NAME COLUMN_NAME, COALESCE(I.IS_GENERATED, FALSE) 
IS_GENERATED FROM INFORMATION_SCHEMA.COLUMNS C"
             + " RIGHT JOIN INFORMATION_SCHEMA.INDEXES I ON 
C.TABLE_NAME=I.TABLE_NAME WHERE C.TABLE_CATALOG=? AND C.TABLE_SCHEMA=?";
     
-    private static final String GENERATED_INFO_SQL_IN_TABLES = 
GENERATED_INFO_SQL + " AND C.TABLE_NAME IN (%s)";
+    private static final String GENERATED_INFO_SQL_IN_TABLES = 
GENERATED_INFO_SQL + " AND UPPER(C.TABLE_NAME) IN (%s)";
     
     @Override
     public Collection<SchemaMetaData> load(final DataSource dataSource, final 
Collection<String> tables, final String defaultSchemaName) throws SQLException {
@@ -115,7 +115,7 @@ public final class H2SchemaMetaDataLoader implements 
DialectSchemaMetaDataLoader
     
     private String getTableMetaDataSQL(final Collection<String> tables) {
         return tables.isEmpty() ? TABLE_META_DATA_SQL
-                : String.format(TABLE_META_DATA_SQL_IN_TABLES, 
tables.stream().map(each -> String.format("'%s'", 
each)).collect(Collectors.joining(",")));
+                : String.format(TABLE_META_DATA_SQL_IN_TABLES, 
tables.stream().map(each -> String.format("'%s'", 
each).toUpperCase()).collect(Collectors.joining(",")));
     }
     
     private Map<String, Collection<IndexMetaData>> loadIndexMetaData(final 
Connection connection, final Collection<String> tableNames) throws SQLException 
{
@@ -138,12 +138,12 @@ public final class H2SchemaMetaDataLoader implements 
DialectSchemaMetaDataLoader
     }
     
     private String getIndexMetaDataSQL(final Collection<String> tableNames) {
-        return String.format(INDEX_META_DATA_SQL, tableNames.stream().map(each 
-> String.format("'%s'", each)).collect(Collectors.joining(",")));
+        return String.format(INDEX_META_DATA_SQL, tableNames.stream().map(each 
-> String.format("'%s'", each).toUpperCase()).collect(Collectors.joining(",")));
     }
     
     private String getPrimaryKeyMetaDataSQL(final Collection<String> tables) {
         return tables.isEmpty() ? PRIMARY_KEY_META_DATA_SQL
-                : String.format(PRIMARY_KEY_META_DATA_SQL_IN_TABLES, 
tables.stream().map(each -> String.format("'%s'", 
each)).collect(Collectors.joining(",")));
+                : String.format(PRIMARY_KEY_META_DATA_SQL_IN_TABLES, 
tables.stream().map(each -> String.format("'%s'", 
each).toUpperCase()).collect(Collectors.joining(",")));
     }
     
     private Map<String, Collection<String>> loadTablePrimaryKeys(final 
Connection connection, final Collection<String> tableNames) throws SQLException 
{
@@ -164,7 +164,7 @@ public final class H2SchemaMetaDataLoader implements 
DialectSchemaMetaDataLoader
     
     private String getGeneratedInfoSQL(final Collection<String> tables) {
         return tables.isEmpty() ? GENERATED_INFO_SQL
-                : String.format(GENERATED_INFO_SQL_IN_TABLES, 
tables.stream().map(each -> String.format("'%s'", 
each)).collect(Collectors.joining(",")));
+                : String.format(GENERATED_INFO_SQL_IN_TABLES, 
tables.stream().map(each -> String.format("'%s'", 
each).toUpperCase()).collect(Collectors.joining(",")));
     }
     
     private Map<String, Map<String, Boolean>> loadTableGenerated(final 
Connection connection, final Collection<String> tableNames) throws SQLException 
{
diff --git 
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/metadata/dialect/H2SchemaMetaDataLoaderTest.java
 
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/metadata/dialect/H2SchemaMetaDataLoaderTest.java
index 20fc2474df9..bf7d855b3b8 100644
--- 
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/metadata/dialect/H2SchemaMetaDataLoaderTest.java
+++ 
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/metadata/dialect/H2SchemaMetaDataLoaderTest.java
@@ -54,7 +54,7 @@ public final class H2SchemaMetaDataLoaderTest {
                 .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 
TABLE_NAME IN ('tbl')")
+                "SELECT TABLE_CATALOG, TABLE_NAME, INDEX_NAME FROM 
INFORMATION_SCHEMA.INDEXES WHERE TABLE_CATALOG=? AND TABLE_SCHEMA=? AND 
UPPER(TABLE_NAME) IN ('TBL')")
                 .executeQuery())
                         .thenReturn(indexResultSet);
         ResultSet primaryKeys = mockPrimaryKeysMetaDataResultSet();
@@ -74,15 +74,15 @@ public final class H2SchemaMetaDataLoaderTest {
         ResultSet resultSet = mockTableMetaDataResultSet();
         when(dataSource.getConnection().prepareStatement(
                 "SELECT TABLE_CATALOG, TABLE_NAME, COLUMN_NAME, DATA_TYPE, 
ORDINAL_POSITION, COALESCE(IS_VISIBLE, FALSE) IS_VISIBLE FROM 
INFORMATION_SCHEMA.COLUMNS"
-                        + " WHERE TABLE_CATALOG=? AND TABLE_SCHEMA=? AND 
TABLE_NAME IN ('tbl') ORDER BY ORDINAL_POSITION")
+                        + " WHERE TABLE_CATALOG=? AND TABLE_SCHEMA=? AND 
UPPER(TABLE_NAME) IN ('TBL') ORDER BY ORDINAL_POSITION")
                 .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 
TABLE_NAME IN ('tbl')")
+                "SELECT TABLE_CATALOG, TABLE_NAME, INDEX_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(
-                "SELECT TABLE_NAME, INDEX_NAME FROM INFORMATION_SCHEMA.INDEXES 
WHERE TABLE_CATALOG=? AND TABLE_SCHEMA=? AND INDEX_TYPE_NAME = 'PRIMARY KEY' 
AND TABLE_NAME IN ('tbl')")
+                "SELECT TABLE_NAME, INDEX_NAME FROM INFORMATION_SCHEMA.INDEXES 
WHERE TABLE_CATALOG=? AND TABLE_SCHEMA=? AND INDEX_TYPE_NAME = 'PRIMARY KEY' 
AND UPPER(TABLE_NAME) IN ('TBL')")
                 .executeQuery())
                         .thenReturn(primaryKeys);
         ResultSet generatedInfo = mockGeneratedInfoResultSet();

Reply via email to