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

menghaoranss 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 579de83cf84 Make unquoted schema lookup case-insensitive for 
PostgresSQL (#38696)
579de83cf84 is described below

commit 579de83cf84b1c3523380b845781a45a0f54c13a
Author: Haoran Meng <[email protected]>
AuthorDate: Fri May 15 19:07:34 2026 +0800

    Make unquoted schema lookup case-insensitive for PostgresSQL (#38696)
---
 .../identifier/OpenGaussIdentifierCaseRuleProvider.java     |  9 ++++++++-
 .../identifier/OpenGaussIdentifierCaseRuleProviderTest.java | 13 +++++++++----
 .../identifier/PostgreSQLIdentifierCaseRuleProvider.java    |  9 ++++++++-
 .../PostgreSQLIdentifierCaseRuleProviderTest.java           | 13 +++++++++----
 .../identifier/DatabaseIdentifierContextFactoryTest.java    |  8 ++++----
 5 files changed, 38 insertions(+), 14 deletions(-)

diff --git 
a/database/connector/dialect/opengauss/src/main/java/org/apache/shardingsphere/database/connector/opengauss/metadata/identifier/OpenGaussIdentifierCaseRuleProvider.java
 
b/database/connector/dialect/opengauss/src/main/java/org/apache/shardingsphere/database/connector/opengauss/metadata/identifier/OpenGaussIdentifierCaseRuleProvider.java
index f638598fe44..da274ab5be3 100644
--- 
a/database/connector/dialect/opengauss/src/main/java/org/apache/shardingsphere/database/connector/opengauss/metadata/identifier/OpenGaussIdentifierCaseRuleProvider.java
+++ 
b/database/connector/dialect/opengauss/src/main/java/org/apache/shardingsphere/database/connector/opengauss/metadata/identifier/OpenGaussIdentifierCaseRuleProvider.java
@@ -19,9 +19,13 @@ package 
org.apache.shardingsphere.database.connector.opengauss.metadata.identifi
 
 import 
org.apache.shardingsphere.database.connector.core.metadata.identifier.IdentifierCaseRuleProvider;
 import 
org.apache.shardingsphere.database.connector.core.metadata.identifier.IdentifierCaseRuleProviderContext;
+import 
org.apache.shardingsphere.database.connector.core.metadata.identifier.IdentifierCaseRule;
 import 
org.apache.shardingsphere.database.connector.core.metadata.identifier.IdentifierCaseRuleSet;
 import 
org.apache.shardingsphere.database.connector.core.metadata.identifier.IdentifierCaseRuleSets;
+import 
org.apache.shardingsphere.database.connector.core.metadata.identifier.IdentifierScope;
 
+import java.util.EnumMap;
+import java.util.Map;
 import java.util.Objects;
 import java.util.Optional;
 
@@ -33,7 +37,10 @@ public final class OpenGaussIdentifierCaseRuleProvider 
implements IdentifierCase
     @Override
     public Optional<IdentifierCaseRuleSet> provide(final 
IdentifierCaseRuleProviderContext context) {
         Objects.requireNonNull(context, "context cannot be null.");
-        return Optional.of(IdentifierCaseRuleSets.newLowerCaseRuleSet());
+        IdentifierCaseRuleSet lowerCaseRuleSet = 
IdentifierCaseRuleSets.newLowerCaseRuleSet();
+        Map<IdentifierScope, IdentifierCaseRule> scopedRules = new 
EnumMap<>(IdentifierScope.class);
+        scopedRules.put(IdentifierScope.SCHEMA, 
IdentifierCaseRuleSets.newInsensitiveRuleSet().getRule(IdentifierScope.SCHEMA));
+        return Optional.of(new 
IdentifierCaseRuleSet(lowerCaseRuleSet.getRule(IdentifierScope.TABLE), 
scopedRules));
     }
     
     @Override
diff --git 
a/database/connector/dialect/opengauss/src/test/java/org/apache/shardingsphere/database/connector/opengauss/metadata/identifier/OpenGaussIdentifierCaseRuleProviderTest.java
 
b/database/connector/dialect/opengauss/src/test/java/org/apache/shardingsphere/database/connector/opengauss/metadata/identifier/OpenGaussIdentifierCaseRuleProviderTest.java
index 9035e474e3a..b3ea2f2fb78 100644
--- 
a/database/connector/dialect/opengauss/src/test/java/org/apache/shardingsphere/database/connector/opengauss/metadata/identifier/OpenGaussIdentifierCaseRuleProviderTest.java
+++ 
b/database/connector/dialect/opengauss/src/test/java/org/apache/shardingsphere/database/connector/opengauss/metadata/identifier/OpenGaussIdentifierCaseRuleProviderTest.java
@@ -48,9 +48,14 @@ class OpenGaussIdentifierCaseRuleProviderTest {
     
     @Test
     void assertProvide() {
-        IdentifierCaseRule actual = provider.provide(new 
IdentifierCaseRuleProviderContext(databaseType, 
null)).orElseThrow(AssertionError::new).getRule(IdentifierScope.TABLE);
-        assertThat(actual.getLookupMode(QuoteCharacter.NONE), 
is(LookupMode.NORMALIZED));
-        assertTrue(actual.matches("foo", "FOO", QuoteCharacter.NONE));
-        assertFalse(actual.matches("Foo", "foo", QuoteCharacter.NONE));
+        IdentifierCaseRuleProviderContext context = new 
IdentifierCaseRuleProviderContext(databaseType, null);
+        IdentifierCaseRule tableRule = 
provider.provide(context).orElseThrow(AssertionError::new).getRule(IdentifierScope.TABLE);
+        assertThat(tableRule.getLookupMode(QuoteCharacter.NONE), 
is(LookupMode.NORMALIZED));
+        assertTrue(tableRule.matches("foo", "FOO", QuoteCharacter.NONE));
+        assertFalse(tableRule.matches("Foo", "foo", QuoteCharacter.NONE));
+        IdentifierCaseRule schemaRule = 
provider.provide(context).orElseThrow(AssertionError::new).getRule(IdentifierScope.SCHEMA);
+        assertThat(schemaRule.getLookupMode(QuoteCharacter.NONE), 
is(LookupMode.NORMALIZED));
+        assertTrue(schemaRule.matches("UPPER_SCHEMA", "upper_schema", 
QuoteCharacter.NONE));
+        assertFalse(schemaRule.matches("UPPER_SCHEMA", "upper_schema", 
QuoteCharacter.QUOTE));
     }
 }
diff --git 
a/database/connector/dialect/postgresql/src/main/java/org/apache/shardingsphere/database/connector/postgresql/metadata/identifier/PostgreSQLIdentifierCaseRuleProvider.java
 
b/database/connector/dialect/postgresql/src/main/java/org/apache/shardingsphere/database/connector/postgresql/metadata/identifier/PostgreSQLIdentifierCaseRuleProvider.java
index 9a22e86431f..d07f4879a9f 100644
--- 
a/database/connector/dialect/postgresql/src/main/java/org/apache/shardingsphere/database/connector/postgresql/metadata/identifier/PostgreSQLIdentifierCaseRuleProvider.java
+++ 
b/database/connector/dialect/postgresql/src/main/java/org/apache/shardingsphere/database/connector/postgresql/metadata/identifier/PostgreSQLIdentifierCaseRuleProvider.java
@@ -20,8 +20,12 @@ package 
org.apache.shardingsphere.database.connector.postgresql.metadata.identif
 import 
org.apache.shardingsphere.database.connector.core.metadata.identifier.IdentifierCaseRuleProvider;
 import 
org.apache.shardingsphere.database.connector.core.metadata.identifier.IdentifierCaseRuleProviderContext;
 import 
org.apache.shardingsphere.database.connector.core.metadata.identifier.IdentifierCaseRuleSet;
+import 
org.apache.shardingsphere.database.connector.core.metadata.identifier.IdentifierCaseRule;
 import 
org.apache.shardingsphere.database.connector.core.metadata.identifier.IdentifierCaseRuleSets;
+import 
org.apache.shardingsphere.database.connector.core.metadata.identifier.IdentifierScope;
 
+import java.util.EnumMap;
+import java.util.Map;
 import java.util.Objects;
 import java.util.Optional;
 
@@ -33,7 +37,10 @@ public final class PostgreSQLIdentifierCaseRuleProvider 
implements IdentifierCas
     @Override
     public Optional<IdentifierCaseRuleSet> provide(final 
IdentifierCaseRuleProviderContext context) {
         Objects.requireNonNull(context, "context cannot be null.");
-        return Optional.of(IdentifierCaseRuleSets.newLowerCaseRuleSet());
+        IdentifierCaseRuleSet lowerCaseRuleSet = 
IdentifierCaseRuleSets.newLowerCaseRuleSet();
+        Map<IdentifierScope, IdentifierCaseRule> scopedRules = new 
EnumMap<>(IdentifierScope.class);
+        scopedRules.put(IdentifierScope.SCHEMA, 
IdentifierCaseRuleSets.newInsensitiveRuleSet().getRule(IdentifierScope.SCHEMA));
+        return Optional.of(new 
IdentifierCaseRuleSet(lowerCaseRuleSet.getRule(IdentifierScope.TABLE), 
scopedRules));
     }
     
     @Override
diff --git 
a/database/connector/dialect/postgresql/src/test/java/org/apache/shardingsphere/database/connector/postgresql/metadata/identifier/PostgreSQLIdentifierCaseRuleProviderTest.java
 
b/database/connector/dialect/postgresql/src/test/java/org/apache/shardingsphere/database/connector/postgresql/metadata/identifier/PostgreSQLIdentifierCaseRuleProviderTest.java
index 29b76995208..b12d1788eb7 100644
--- 
a/database/connector/dialect/postgresql/src/test/java/org/apache/shardingsphere/database/connector/postgresql/metadata/identifier/PostgreSQLIdentifierCaseRuleProviderTest.java
+++ 
b/database/connector/dialect/postgresql/src/test/java/org/apache/shardingsphere/database/connector/postgresql/metadata/identifier/PostgreSQLIdentifierCaseRuleProviderTest.java
@@ -48,9 +48,14 @@ class PostgreSQLIdentifierCaseRuleProviderTest {
     
     @Test
     void assertProvide() {
-        IdentifierCaseRule actual = provider.provide(new 
IdentifierCaseRuleProviderContext(databaseType, 
null)).orElseThrow(AssertionError::new).getRule(IdentifierScope.TABLE);
-        assertThat(actual.getLookupMode(QuoteCharacter.NONE), 
is(LookupMode.NORMALIZED));
-        assertTrue(actual.matches("foo", "FOO", QuoteCharacter.NONE));
-        assertFalse(actual.matches("Foo", "foo", QuoteCharacter.NONE));
+        IdentifierCaseRuleProviderContext context = new 
IdentifierCaseRuleProviderContext(databaseType, null);
+        IdentifierCaseRule tableRule = 
provider.provide(context).orElseThrow(AssertionError::new).getRule(IdentifierScope.TABLE);
+        assertThat(tableRule.getLookupMode(QuoteCharacter.NONE), 
is(LookupMode.NORMALIZED));
+        assertTrue(tableRule.matches("foo", "FOO", QuoteCharacter.NONE));
+        assertFalse(tableRule.matches("Foo", "foo", QuoteCharacter.NONE));
+        IdentifierCaseRule schemaRule = 
provider.provide(context).orElseThrow(AssertionError::new).getRule(IdentifierScope.SCHEMA);
+        assertThat(schemaRule.getLookupMode(QuoteCharacter.NONE), 
is(LookupMode.NORMALIZED));
+        assertTrue(schemaRule.matches("UPPER_SCHEMA", "upper_schema", 
QuoteCharacter.NONE));
+        assertFalse(schemaRule.matches("UPPER_SCHEMA", "upper_schema", 
QuoteCharacter.QUOTE));
     }
 }
diff --git 
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/identifier/DatabaseIdentifierContextFactoryTest.java
 
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/identifier/DatabaseIdentifierContextFactoryTest.java
index 124a13aa87d..5bb59d8eeba 100644
--- 
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/identifier/DatabaseIdentifierContextFactoryTest.java
+++ 
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/identifier/DatabaseIdentifierContextFactoryTest.java
@@ -417,8 +417,8 @@ class DatabaseIdentifierContextFactoryTest {
     private static Stream<Arguments> 
createWithSupportedDatabaseSchemaLookupArguments() {
         return Stream.of(
                 createNormalizedLookupArguments("mysql schema", 
MYSQL_DATABASE_TYPE, MYSQL_INSENSITIVE_RESOURCE_META_DATA, "foo_schema", "`"),
-                createLowerCaseLookupArguments("postgresql schema", 
POSTGRESQL_DATABASE_TYPE, POSTGRESQL_RESOURCE_META_DATA, "foo_schema", "\""),
-                createLowerCaseLookupArguments("openGauss schema", 
OPEN_GAUSS_DATABASE_TYPE, OPEN_GAUSS_RESOURCE_META_DATA, "foo_schema", "\""),
+                createInsensitiveQuotedExactLookupArguments("postgresql 
schema", POSTGRESQL_DATABASE_TYPE, POSTGRESQL_RESOURCE_META_DATA, "foo_schema", 
"\""),
+                createInsensitiveQuotedExactLookupArguments("openGauss 
schema", OPEN_GAUSS_DATABASE_TYPE, OPEN_GAUSS_RESOURCE_META_DATA, "foo_schema", 
"\""),
                 createUpperCaseLookupArguments("oracle schema", 
ORACLE_DATABASE_TYPE, ORACLE_RESOURCE_META_DATA, "foo_schema", "\""))
                 .flatMap(each -> each);
     }
@@ -474,8 +474,8 @@ class DatabaseIdentifierContextFactoryTest {
     private static Stream<Arguments> 
createWithMixedStoredCaseSchemaLookupArguments() {
         return Stream.of(
                 createNormalizedMixedLookupArguments("mysql schema", 
MYSQL_DATABASE_TYPE, MYSQL_INSENSITIVE_RESOURCE_META_DATA, "foo_schema", "`"),
-                createLowerCaseMixedLookupArguments("postgresql schema", 
POSTGRESQL_DATABASE_TYPE, POSTGRESQL_RESOURCE_META_DATA, "foo_schema", "\""),
-                createLowerCaseMixedLookupArguments("openGauss schema", 
OPEN_GAUSS_DATABASE_TYPE, OPEN_GAUSS_RESOURCE_META_DATA, "foo_schema", "\""),
+                createInsensitiveQuotedExactMixedLookupArguments("postgresql 
schema", POSTGRESQL_DATABASE_TYPE, POSTGRESQL_RESOURCE_META_DATA, "foo_schema", 
"\""),
+                createInsensitiveQuotedExactMixedLookupArguments("openGauss 
schema", OPEN_GAUSS_DATABASE_TYPE, OPEN_GAUSS_RESOURCE_META_DATA, "foo_schema", 
"\""),
                 createUpperCaseMixedLookupArguments("oracle schema", 
ORACLE_DATABASE_TYPE, ORACLE_RESOURCE_META_DATA, "foo_schema", "\""))
                 .flatMap(each -> each);
     }

Reply via email to