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 39e7d4851fd Replace databaseType with identifierContext for column 
name derivation (#39246)
39e7d4851fd is described below

commit 39e7d4851fdbf9e1be5ca9d05897a8aa14db1a40
Author: Haoran Meng <[email protected]>
AuthorDate: Tue Jul 28 10:04:18 2026 +0800

    Replace databaseType with identifierContext for column name derivation 
(#39246)
---
 .../encrypt/enums/EncryptDerivedColumnSuffix.java  | 11 +++----
 .../rewrite/token/EncryptTokenGenerateBuilder.java | 12 ++++----
 .../EncryptAssignmentTokenGenerator.java           |  2 +-
 ...EncryptInsertPredicateColumnTokenGenerator.java |  5 +++-
 .../EncryptPredicateColumnTokenGenerator.java      |  5 +++-
 ...ncryptInsertSelectProjectionTokenGenerator.java |  5 +++-
 .../EncryptProjectionTokenGenerator.java           | 24 +++++++++------
 .../EncryptSelectProjectionTokenGenerator.java     |  5 +++-
 .../select/EncryptGroupByItemTokenGenerator.java   |  5 +++-
 .../enums/EncryptDerivedColumnSuffixTest.java}     | 35 +++++++---------------
 .../EncryptPredicateColumnTokenGeneratorTest.java  |  5 +++-
 .../EncryptProjectionTokenGeneratorTest.java       | 22 +++++++-------
 .../EncryptGroupByItemTokenGeneratorTest.java      |  5 +++-
 13 files changed, 80 insertions(+), 61 deletions(-)

diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/enums/EncryptDerivedColumnSuffix.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/enums/EncryptDerivedColumnSuffix.java
index 7cf71277de5..8cbba583706 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/enums/EncryptDerivedColumnSuffix.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/enums/EncryptDerivedColumnSuffix.java
@@ -19,8 +19,9 @@ package org.apache.shardingsphere.encrypt.enums;
 
 import lombok.AccessLevel;
 import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
-import 
org.apache.shardingsphere.database.connector.core.type.DatabaseTypeRegistry;
+import 
org.apache.shardingsphere.database.connector.core.metadata.identifier.IdentifierScope;
+import 
org.apache.shardingsphere.infra.metadata.identifier.DatabaseIdentifierContext;
+import 
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
 
 /**
  * Encrypt derived column suffix.
@@ -38,10 +39,10 @@ public enum EncryptDerivedColumnSuffix {
      * Get derived column name.
      *
      * @param columnName column name
-     * @param databaseType database type
+     * @param identifierContext database identifier context
      * @return derived column name
      */
-    public String getDerivedColumnName(final String columnName, final 
DatabaseType databaseType) {
-        return String.format("%s%s", columnName, new 
DatabaseTypeRegistry(databaseType).formatIdentifierPattern(suffix));
+    public String getDerivedColumnName(final String columnName, final 
DatabaseIdentifierContext identifierContext) {
+        return String.format("%s%s", columnName, 
identifierContext.normalizeStorage(IdentifierScope.COLUMN, new 
IdentifierValue(suffix)));
     }
 }
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/EncryptTokenGenerateBuilder.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/EncryptTokenGenerateBuilder.java
index ef5eb45481e..3d243a97e08 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/EncryptTokenGenerateBuilder.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/EncryptTokenGenerateBuilder.java
@@ -39,6 +39,7 @@ import 
org.apache.shardingsphere.encrypt.rewrite.token.generator.select.EncryptI
 import org.apache.shardingsphere.encrypt.rule.EncryptRule;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import 
org.apache.shardingsphere.infra.metadata.identifier.DatabaseIdentifierContext;
 import org.apache.shardingsphere.infra.rewrite.context.SQLRewriteContext;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.common.generator.SQLTokenGenerator;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.common.generator.builder.SQLTokenGeneratorBuilder;
@@ -63,13 +64,14 @@ public final class EncryptTokenGenerateBuilder implements 
SQLTokenGeneratorBuild
     @Override
     public Collection<SQLTokenGenerator> getSQLTokenGenerators() {
         Collection<SQLTokenGenerator> result = new LinkedList<>();
-        addSQLTokenGenerator(result, new 
EncryptSelectProjectionTokenGenerator(rule));
-        addSQLTokenGenerator(result, new 
EncryptInsertSelectProjectionTokenGenerator(rule));
         ShardingSphereDatabase database = sqlRewriteContext.getDatabase();
+        DatabaseIdentifierContext identifierContext = 
database.getIdentifierContext();
+        addSQLTokenGenerator(result, new 
EncryptSelectProjectionTokenGenerator(rule, identifierContext));
+        addSQLTokenGenerator(result, new 
EncryptInsertSelectProjectionTokenGenerator(rule, identifierContext));
         addSQLTokenGenerator(result, new 
EncryptInsertAssignmentTokenGenerator(rule, database));
         addSQLTokenGenerator(result, new 
EncryptUpdateAssignmentTokenGenerator(rule, database));
-        addSQLTokenGenerator(result, new 
EncryptPredicateColumnTokenGenerator(rule));
-        addSQLTokenGenerator(result, new 
EncryptInsertPredicateColumnTokenGenerator(rule));
+        addSQLTokenGenerator(result, new 
EncryptPredicateColumnTokenGenerator(rule, identifierContext));
+        addSQLTokenGenerator(result, new 
EncryptInsertPredicateColumnTokenGenerator(rule, identifierContext));
         addSQLTokenGenerator(result, new 
EncryptPredicateValueTokenGenerator(rule, database, encryptConditions));
         addSQLTokenGenerator(result, new 
EncryptInsertPredicateValueTokenGenerator(rule, database, encryptConditions));
         addSQLTokenGenerator(result, new 
EncryptInsertValuesTokenGenerator(rule, database, sqlRewriteContext));
@@ -77,7 +79,7 @@ public final class EncryptTokenGenerateBuilder implements 
SQLTokenGeneratorBuild
         addSQLTokenGenerator(result, new 
EncryptInsertCipherNameTokenGenerator(rule));
         addSQLTokenGenerator(result, new 
EncryptInsertDerivedColumnsTokenGenerator(rule));
         addSQLTokenGenerator(result, new 
EncryptInsertOnUpdateTokenGenerator(rule, database));
-        addSQLTokenGenerator(result, new 
EncryptGroupByItemTokenGenerator(rule));
+        addSQLTokenGenerator(result, new 
EncryptGroupByItemTokenGenerator(rule, identifierContext));
         addSQLTokenGenerator(result, new 
EncryptIndexColumnTokenGenerator(rule));
         addSQLTokenGenerator(result, new 
EncryptCreateTableTokenGenerator(rule));
         addSQLTokenGenerator(result, new 
EncryptAlterTableTokenGenerator(rule));
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/assignment/EncryptAssignmentTokenGenerator.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/assignment/EncryptAssignmentTokenGenerator.java
index 25e949454a4..92483ab81dd 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/assignment/EncryptAssignmentTokenGenerator.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/assignment/EncryptAssignmentTokenGenerator.java
@@ -106,7 +106,7 @@ public final class EncryptAssignmentTokenGenerator {
     
     private String getColumnName(final ColumnSegment columnSegment, final 
EncryptDerivedColumnSuffix derivedColumnSuffix, final String actualColumnName) {
         return TableSourceType.TEMPORARY_TABLE == 
columnSegment.getColumnBoundInfo().getTableSourceType()
-                ? 
derivedColumnSuffix.getDerivedColumnName(columnSegment.getIdentifier().getValue(),
 databaseType)
+                ? 
derivedColumnSuffix.getDerivedColumnName(columnSegment.getIdentifier().getValue(),
 database.getIdentifierContext())
                 : actualColumnName;
     }
     
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptInsertPredicateColumnTokenGenerator.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptInsertPredicateColumnTokenGenerator.java
index afe94c3b962..8bf5017dd96 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptInsertPredicateColumnTokenGenerator.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptInsertPredicateColumnTokenGenerator.java
@@ -23,6 +23,7 @@ import org.apache.shardingsphere.encrypt.rule.EncryptRule;
 import org.apache.shardingsphere.infra.annotation.HighFrequencyInvocation;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.type.dml.InsertStatementContext;
+import 
org.apache.shardingsphere.infra.metadata.identifier.DatabaseIdentifierContext;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.common.generator.CollectionSQLTokenGenerator;
 import org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.SQLToken;
 
@@ -38,6 +39,8 @@ public final class EncryptInsertPredicateColumnTokenGenerator 
implements Collect
     
     private final EncryptRule rule;
     
+    private final DatabaseIdentifierContext identifierContext;
+    
     @Override
     public boolean isGenerateSQLToken(final SQLStatementContext 
sqlStatementContext) {
         return sqlStatementContext instanceof InsertStatementContext && null 
!= ((InsertStatementContext) sqlStatementContext).getInsertSelectContext()
@@ -46,7 +49,7 @@ public final class EncryptInsertPredicateColumnTokenGenerator 
implements Collect
     
     @Override
     public Collection<SQLToken> generateSQLTokens(final InsertStatementContext 
sqlStatementContext) {
-        EncryptPredicateColumnTokenGenerator generator = new 
EncryptPredicateColumnTokenGenerator(rule);
+        EncryptPredicateColumnTokenGenerator generator = new 
EncryptPredicateColumnTokenGenerator(rule, identifierContext);
         return 
generator.generateSQLTokens(sqlStatementContext.getInsertSelectContext().getSelectStatementContext());
     }
 }
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptPredicateColumnTokenGenerator.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptPredicateColumnTokenGenerator.java
index 7444402b36a..13de6ec8d3f 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptPredicateColumnTokenGenerator.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptPredicateColumnTokenGenerator.java
@@ -37,6 +37,7 @@ import 
org.apache.shardingsphere.infra.binder.context.segment.select.projection.
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.type.dml.SelectStatementContext;
 import org.apache.shardingsphere.infra.exception.ShardingSpherePreconditions;
+import 
org.apache.shardingsphere.infra.metadata.identifier.DatabaseIdentifierContext;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.common.generator.CollectionSQLTokenGenerator;
 import org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.SQLToken;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.generic.SubstitutableColumnNameToken;
@@ -66,6 +67,8 @@ public final class EncryptPredicateColumnTokenGenerator 
implements CollectionSQL
     
     private final EncryptRule rule;
     
+    private final DatabaseIdentifierContext identifierContext;
+    
     @Override
     public boolean isGenerateSQLToken(final SQLStatementContext 
sqlStatementContext) {
         return sqlStatementContext instanceof WhereContextAvailable;
@@ -137,7 +140,7 @@ public final class EncryptPredicateColumnTokenGenerator 
implements CollectionSQL
     private Collection<Projection> createColumnProjections(final String 
actualColumnName, final ColumnSegment columnSegment, final 
EncryptDerivedColumnSuffix derivedColumnSuffix,
                                                            final DatabaseType 
databaseType) {
         String columnName = TableSourceType.TEMPORARY_TABLE == 
columnSegment.getColumnBoundInfo().getTableSourceType()
-                ? 
derivedColumnSuffix.getDerivedColumnName(columnSegment.getIdentifier().getValue(),
 databaseType)
+                ? 
derivedColumnSuffix.getDerivedColumnName(columnSegment.getIdentifier().getValue(),
 identifierContext)
                 : actualColumnName;
         QuoteCharacter quoteCharacter = TableSourceType.TEMPORARY_TABLE == 
columnSegment.getColumnBoundInfo().getTableSourceType()
                 ? columnSegment.getIdentifier().getQuoteCharacter()
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/projection/EncryptInsertSelectProjectionTokenGenerator.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/projection/EncryptInsertSelectProjectionTokenGenerator.java
index 85bde119763..cfc56844b1c 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/projection/EncryptInsertSelectProjectionTokenGenerator.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/projection/EncryptInsertSelectProjectionTokenGenerator.java
@@ -23,6 +23,7 @@ import org.apache.shardingsphere.encrypt.rule.EncryptRule;
 import org.apache.shardingsphere.infra.annotation.HighFrequencyInvocation;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.type.dml.InsertStatementContext;
+import 
org.apache.shardingsphere.infra.metadata.identifier.DatabaseIdentifierContext;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.common.generator.CollectionSQLTokenGenerator;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.common.generator.aware.PreviousSQLTokensAware;
 import org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.SQLToken;
@@ -42,6 +43,8 @@ public final class 
EncryptInsertSelectProjectionTokenGenerator implements Collec
     
     private List<SQLToken> previousSQLTokens;
     
+    private final DatabaseIdentifierContext identifierContext;
+    
     @Override
     public boolean isGenerateSQLToken(final SQLStatementContext 
sqlStatementContext) {
         return sqlStatementContext instanceof InsertStatementContext && null 
!= ((InsertStatementContext) sqlStatementContext).getInsertSelectContext()
@@ -50,7 +53,7 @@ public final class 
EncryptInsertSelectProjectionTokenGenerator implements Collec
     
     @Override
     public Collection<SQLToken> generateSQLTokens(final InsertStatementContext 
sqlStatementContext) {
-        return new EncryptProjectionTokenGenerator(previousSQLTokens, 
sqlStatementContext.getSqlStatement().getDatabaseType(), rule)
+        return new EncryptProjectionTokenGenerator(previousSQLTokens, 
sqlStatementContext.getSqlStatement().getDatabaseType(), rule, 
identifierContext)
                 
.generateSQLTokens(sqlStatementContext.getInsertSelectContext().getSelectStatementContext());
     }
 }
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/projection/EncryptProjectionTokenGenerator.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/projection/EncryptProjectionTokenGenerator.java
index cd2217843d2..9304af92ddd 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/projection/EncryptProjectionTokenGenerator.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/projection/EncryptProjectionTokenGenerator.java
@@ -38,6 +38,7 @@ import 
org.apache.shardingsphere.infra.binder.context.segment.select.projection.
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.type.dml.SelectStatementContext;
 import 
org.apache.shardingsphere.infra.exception.generic.UnsupportedSQLOperationException;
+import 
org.apache.shardingsphere.infra.metadata.identifier.DatabaseIdentifierContext;
 import org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.SQLToken;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.generic.SubstitutableColumnNameToken;
 import org.apache.shardingsphere.sql.parser.statement.core.enums.SubqueryType;
@@ -82,10 +83,14 @@ public final class EncryptProjectionTokenGenerator {
     
     private final DialectDatabaseMetaData dialectDatabaseMetaData;
     
-    public EncryptProjectionTokenGenerator(final List<SQLToken> 
previousSQLTokens, final DatabaseType databaseType, final EncryptRule rule) {
+    private final DatabaseIdentifierContext identifierContext;
+    
+    public EncryptProjectionTokenGenerator(final List<SQLToken> 
previousSQLTokens, final DatabaseType databaseType, final EncryptRule rule,
+                                           final DatabaseIdentifierContext 
identifierContext) {
         this.previousSQLTokens = previousSQLTokens;
         this.databaseType = databaseType;
         this.rule = rule;
+        this.identifierContext = identifierContext;
         dialectDatabaseMetaData = new 
DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData();
     }
     
@@ -297,7 +302,7 @@ public final class EncryptProjectionTokenGenerator {
     private String getEncryptColumnName(final ColumnProjection 
columnProjection, final EncryptColumn encryptColumn) {
         IdentifierValue columnName = columnProjection.getName();
         return TableSourceType.TEMPORARY_TABLE == 
columnProjection.getColumnBoundInfo().getTableSourceType()
-                ? 
EncryptDerivedColumnSuffix.CIPHER.getDerivedColumnName(columnName.getValue(), 
databaseType)
+                ? 
EncryptDerivedColumnSuffix.CIPHER.getDerivedColumnName(columnName.getValue(), 
identifierContext)
                 : encryptColumn.getCipher().getName();
     }
     
@@ -308,7 +313,7 @@ public final class EncryptProjectionTokenGenerator {
     private Collection<Projection> 
generateCipherProjectionsInTableSegmentSubquery(final EncryptColumn 
encryptColumn, final ColumnProjection columnProjection) {
         Collection<Projection> result = new LinkedList<>();
         IdentifierValue cipherColumnName = TableSourceType.TEMPORARY_TABLE == 
columnProjection.getColumnBoundInfo().getTableSourceType()
-                ? new 
IdentifierValue(EncryptDerivedColumnSuffix.CIPHER.getDerivedColumnName(columnProjection.getName().getValue(),
 databaseType),
+                ? new 
IdentifierValue(EncryptDerivedColumnSuffix.CIPHER.getDerivedColumnName(columnProjection.getName().getValue(),
 identifierContext),
                         columnProjection.getName().getQuoteCharacter())
                 : new IdentifierValue(encryptColumn.getCipher().getName(), 
dialectDatabaseMetaData.getQuoteCharacter());
         IdentifierValue columnAlias = 
columnProjection.getAlias().orElse(columnProjection.getName());
@@ -325,15 +330,16 @@ public final class EncryptProjectionTokenGenerator {
     
     private IdentifierValue getEncryptColumnAliasInTableSegmentSubquery(final 
ColumnProjection columnProjection, final IdentifierValue columnAlias, final 
EncryptDerivedColumnSuffix suffix) {
         if (TableSourceType.TEMPORARY_TABLE == 
columnProjection.getColumnBoundInfo().getTableSourceType()) {
-            return columnProjection.getAlias().map(optional -> new 
IdentifierValue(suffix.getDerivedColumnName(optional.getValue(), databaseType), 
optional.getQuoteCharacter())).orElse(null);
+            return columnProjection.getAlias()
+                    .map(optional -> new 
IdentifierValue(suffix.getDerivedColumnName(optional.getValue(), 
identifierContext), optional.getQuoteCharacter())).orElse(null);
         }
-        return new 
IdentifierValue(suffix.getDerivedColumnName(columnAlias.getValue(), 
databaseType), columnAlias.getQuoteCharacter());
+        return new 
IdentifierValue(suffix.getDerivedColumnName(columnAlias.getValue(), 
identifierContext), columnAlias.getQuoteCharacter());
     }
     
     private void addAssistedQueryColumn(final ColumnProjection 
columnProjection, final AssistedQueryColumnItem assistedQueryColumnItem, final 
IdentifierValue columnAlias,
                                         final Collection<Projection> result) {
         IdentifierValue assistedQueryName = TableSourceType.TEMPORARY_TABLE == 
columnProjection.getColumnBoundInfo().getTableSourceType()
-                ? new 
IdentifierValue(EncryptDerivedColumnSuffix.ASSISTED_QUERY.getDerivedColumnName(columnProjection.getName().getValue(),
 databaseType),
+                ? new 
IdentifierValue(EncryptDerivedColumnSuffix.ASSISTED_QUERY.getDerivedColumnName(columnProjection.getName().getValue(),
 identifierContext),
                         columnProjection.getName().getQuoteCharacter())
                 : new IdentifierValue(assistedQueryColumnItem.getName(), 
columnProjection.getName().getQuoteCharacter());
         IdentifierValue assistedQueryAlias = 
getEncryptColumnAliasInTableSegmentSubquery(columnProjection, columnAlias, 
EncryptDerivedColumnSuffix.ASSISTED_QUERY);
@@ -343,7 +349,7 @@ public final class EncryptProjectionTokenGenerator {
     
     private void addLikeQueryColumn(final ColumnProjection columnProjection, 
final LikeQueryColumnItem likeQueryColumnItem, final IdentifierValue 
columnAlias, final Collection<Projection> result) {
         IdentifierValue likeQueryName = TableSourceType.TEMPORARY_TABLE == 
columnProjection.getColumnBoundInfo().getTableSourceType()
-                ? new 
IdentifierValue(EncryptDerivedColumnSuffix.LIKE_QUERY.getDerivedColumnName(columnProjection.getName().getValue(),
 databaseType),
+                ? new 
IdentifierValue(EncryptDerivedColumnSuffix.LIKE_QUERY.getDerivedColumnName(columnProjection.getName().getValue(),
 identifierContext),
                         columnProjection.getName().getQuoteCharacter())
                 : new IdentifierValue(likeQueryColumnItem.getName(), 
columnProjection.getName().getQuoteCharacter());
         IdentifierValue likeQueryAlias = 
getEncryptColumnAliasInTableSegmentSubquery(columnProjection, columnAlias, 
EncryptDerivedColumnSuffix.LIKE_QUERY);
@@ -368,7 +374,7 @@ public final class EncryptProjectionTokenGenerator {
     private Optional<String> getDerivedColumnName(final EncryptColumn 
encryptColumn, final ColumnProjection columnProjection) {
         if (TableSourceType.TEMPORARY_TABLE == 
columnProjection.getColumnBoundInfo().getTableSourceType()) {
             EncryptDerivedColumnSuffix derivedColumnSuffix = 
encryptColumn.getAssistedQuery().map(optional -> 
EncryptDerivedColumnSuffix.ASSISTED_QUERY).orElse(EncryptDerivedColumnSuffix.CIPHER);
-            return 
Optional.of(derivedColumnSuffix.getDerivedColumnName(columnProjection.getName().getValue(),
 databaseType));
+            return 
Optional.of(derivedColumnSuffix.getDerivedColumnName(columnProjection.getName().getValue(),
 identifierContext));
         }
         return Optional.empty();
     }
@@ -378,7 +384,7 @@ public final class EncryptProjectionTokenGenerator {
     }
     
     private String getDerivedColumnName(final ColumnProjection 
columnProjection, final EncryptDerivedColumnSuffix suffix) {
-        return null == suffix ? columnProjection.getName().getValue() : 
suffix.getDerivedColumnName(columnProjection.getName().getValue(), 
databaseType);
+        return null == suffix ? columnProjection.getName().getValue() : 
suffix.getDerivedColumnName(columnProjection.getName().getValue(), 
identifierContext);
     }
     
     private Collection<Projection> 
generateProjectionsInInsertSelectSubquery(final EncryptColumn encryptColumn, 
final ColumnProjection columnProjection) {
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/projection/EncryptSelectProjectionTokenGenerator.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/projection/EncryptSelectProjectionTokenGenerator.java
index e35330b0f86..e218e828788 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/projection/EncryptSelectProjectionTokenGenerator.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/projection/EncryptSelectProjectionTokenGenerator.java
@@ -25,6 +25,7 @@ import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementCont
 import 
org.apache.shardingsphere.infra.binder.context.statement.type.ddl.AlterViewStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.type.ddl.CreateViewStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.type.dml.SelectStatementContext;
+import 
org.apache.shardingsphere.infra.metadata.identifier.DatabaseIdentifierContext;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.common.generator.CollectionSQLTokenGenerator;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.common.generator.aware.PreviousSQLTokensAware;
 import org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.SQLToken;
@@ -46,6 +47,8 @@ public final class EncryptSelectProjectionTokenGenerator 
implements CollectionSQ
     
     private List<SQLToken> previousSQLTokens;
     
+    private final DatabaseIdentifierContext identifierContext;
+    
     @Override
     public boolean isGenerateSQLToken(final SQLStatementContext 
sqlStatementContext) {
         return extractSelectStatementContext(sqlStatementContext).map(each -> 
!each.getTablesContext().getSimpleTables().isEmpty()).orElse(false);
@@ -54,7 +57,7 @@ public final class EncryptSelectProjectionTokenGenerator 
implements CollectionSQ
     @Override
     public Collection<SQLToken> generateSQLTokens(final SQLStatementContext 
sqlStatementContext) {
         return extractSelectStatementContext(sqlStatementContext)
-                .map(each -> new 
EncryptProjectionTokenGenerator(previousSQLTokens, 
each.getSqlStatement().getDatabaseType(), rule).generateSQLTokens(each))
+                .map(each -> new 
EncryptProjectionTokenGenerator(previousSQLTokens, 
each.getSqlStatement().getDatabaseType(), rule, 
identifierContext).generateSQLTokens(each))
                 .orElse(Collections.emptyList());
     }
     
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/select/EncryptGroupByItemTokenGenerator.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/select/EncryptGroupByItemTokenGenerator.java
index 28f6e0f3a0d..c9adbc018f5 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/select/EncryptGroupByItemTokenGenerator.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/select/EncryptGroupByItemTokenGenerator.java
@@ -33,6 +33,7 @@ import 
org.apache.shardingsphere.infra.binder.context.segment.select.projection.
 import 
org.apache.shardingsphere.infra.binder.context.segment.select.projection.impl.ColumnProjection;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.type.dml.SelectStatementContext;
+import 
org.apache.shardingsphere.infra.metadata.identifier.DatabaseIdentifierContext;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.common.generator.CollectionSQLTokenGenerator;
 import org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.SQLToken;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.generic.SubstitutableColumnNameToken;
@@ -56,6 +57,8 @@ public final class EncryptGroupByItemTokenGenerator 
implements CollectionSQLToke
     
     private final EncryptRule rule;
     
+    private final DatabaseIdentifierContext identifierContext;
+    
     @Override
     public boolean isGenerateSQLToken(final SQLStatementContext 
sqlStatementContext) {
         return sqlStatementContext instanceof SelectStatementContext && 
containsGroupByItem((SelectStatementContext) sqlStatementContext);
@@ -114,7 +117,7 @@ public final class EncryptGroupByItemTokenGenerator 
implements CollectionSQLToke
     private Collection<Projection> createColumnProjections(final String 
actualColumnName, final ColumnSegment columnSegment, final DatabaseType 
databaseType,
                                                            final 
EncryptDerivedColumnSuffix derivedColumnSuffix) {
         String columnName = TableSourceType.TEMPORARY_TABLE == 
columnSegment.getColumnBoundInfo().getTableSourceType()
-                ? 
derivedColumnSuffix.getDerivedColumnName(columnSegment.getIdentifier().getValue(),
 databaseType)
+                ? 
derivedColumnSuffix.getDerivedColumnName(columnSegment.getIdentifier().getValue(),
 identifierContext)
                 : actualColumnName;
         QuoteCharacter quoteCharacter = TableSourceType.TEMPORARY_TABLE == 
columnSegment.getColumnBoundInfo().getTableSourceType()
                 ? columnSegment.getIdentifier().getQuoteCharacter()
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/enums/EncryptDerivedColumnSuffix.java
 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/enums/EncryptDerivedColumnSuffixTest.java
similarity index 50%
copy from 
features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/enums/EncryptDerivedColumnSuffix.java
copy to 
features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/enums/EncryptDerivedColumnSuffixTest.java
index 7cf71277de5..cd28ff4b876 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/enums/EncryptDerivedColumnSuffix.java
+++ 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/enums/EncryptDerivedColumnSuffixTest.java
@@ -17,31 +17,18 @@
 
 package org.apache.shardingsphere.encrypt.enums;
 
-import lombok.AccessLevel;
-import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
-import 
org.apache.shardingsphere.database.connector.core.type.DatabaseTypeRegistry;
+import 
org.apache.shardingsphere.database.connector.core.metadata.identifier.IdentifierCasePolicyFactory;
+import 
org.apache.shardingsphere.infra.metadata.identifier.DatabaseIdentifierContext;
+import org.junit.jupiter.api.Test;
 
-/**
- * Encrypt derived column suffix.
- */
-@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
-public enum EncryptDerivedColumnSuffix {
-    
-    CIPHER("_C"),
-    ASSISTED_QUERY("_A"),
-    LIKE_QUERY("_L");
-    
-    private final String suffix;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
+
+class EncryptDerivedColumnSuffixTest {
     
-    /**
-     * Get derived column name.
-     *
-     * @param columnName column name
-     * @param databaseType database type
-     * @return derived column name
-     */
-    public String getDerivedColumnName(final String columnName, final 
DatabaseType databaseType) {
-        return String.format("%s%s", columnName, new 
DatabaseTypeRegistry(databaseType).formatIdentifierPattern(suffix));
+    @Test
+    void assertGetDerivedColumnName() {
+        DatabaseIdentifierContext identifierContext = new 
DatabaseIdentifierContext(IdentifierCasePolicyFactory.newLowerCasePolicySet());
+        
assertThat(EncryptDerivedColumnSuffix.CIPHER.getDerivedColumnName("foo_column", 
identifierContext), is("foo_column_c"));
     }
 }
diff --git 
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptPredicateColumnTokenGeneratorTest.java
 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptPredicateColumnTokenGeneratorTest.java
index 3af1e0cf951..f82b1f2fcf9 100644
--- 
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptPredicateColumnTokenGeneratorTest.java
+++ 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptPredicateColumnTokenGeneratorTest.java
@@ -17,7 +17,9 @@
 
 package org.apache.shardingsphere.encrypt.rewrite.token.generator.predicate;
 
+import 
org.apache.shardingsphere.database.connector.core.metadata.identifier.IdentifierCasePolicyFactory;
 import 
org.apache.shardingsphere.encrypt.rewrite.token.generator.fixture.EncryptGeneratorFixtureBuilder;
+import 
org.apache.shardingsphere.infra.metadata.identifier.DatabaseIdentifierContext;
 import org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.SQLToken;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.generic.SubstitutableColumnNameToken;
 import org.junit.jupiter.api.BeforeEach;
@@ -35,7 +37,8 @@ class EncryptPredicateColumnTokenGeneratorTest {
     
     @BeforeEach
     void setup() {
-        generator = new 
EncryptPredicateColumnTokenGenerator(EncryptGeneratorFixtureBuilder.createEncryptRule());
+        generator = new EncryptPredicateColumnTokenGenerator(
+                EncryptGeneratorFixtureBuilder.createEncryptRule(), new 
DatabaseIdentifierContext(IdentifierCasePolicyFactory.newCasePreservingInsensitivePolicySet()));
     }
     
     @Test
diff --git 
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/projection/EncryptProjectionTokenGeneratorTest.java
 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/projection/EncryptProjectionTokenGeneratorTest.java
index 423256d1bf1..00f3ea3967a 100644
--- 
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/projection/EncryptProjectionTokenGeneratorTest.java
+++ 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/projection/EncryptProjectionTokenGeneratorTest.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.encrypt.rewrite.token.generator.projection;
 
 import 
org.apache.shardingsphere.database.connector.core.metadata.database.enums.QuoteCharacter;
+import 
org.apache.shardingsphere.database.connector.core.metadata.identifier.IdentifierCasePolicyFactory;
 import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
 import 
org.apache.shardingsphere.database.connector.core.type.DatabaseTypeRegistry;
 import org.apache.shardingsphere.encrypt.enums.EncryptDerivedColumnSuffix;
@@ -32,7 +33,7 @@ import 
org.apache.shardingsphere.infra.binder.context.segment.select.projection.
 import 
org.apache.shardingsphere.infra.binder.context.segment.select.projection.impl.ColumnProjection;
 import 
org.apache.shardingsphere.infra.binder.context.segment.table.TablesContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.type.dml.SelectStatementContext;
-import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import 
org.apache.shardingsphere.infra.metadata.identifier.DatabaseIdentifierContext;
 import org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.SQLToken;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.generic.SubstitutableColumnNameToken;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
@@ -70,12 +71,11 @@ class EncryptProjectionTokenGeneratorTest {
     
     private EncryptProjectionTokenGenerator generator;
     
+    private final DatabaseIdentifierContext identifierContext = new 
DatabaseIdentifierContext(IdentifierCasePolicyFactory.newCasePreservingInsensitivePolicySet());
+    
     @BeforeEach
     void setup() {
-        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
-        
when(database.getResourceMetaData().getStorageUnits()).thenReturn(Collections.emptyMap());
-        
when(database.getRuleMetaData().getRules()).thenReturn(Collections.emptyList());
-        generator = new 
EncryptProjectionTokenGenerator(Collections.emptyList(), databaseType, 
mockEncryptRule());
+        generator = new 
EncryptProjectionTokenGenerator(Collections.emptyList(), databaseType, 
mockEncryptRule(), identifierContext);
     }
     
     private EncryptRule mockEncryptRule() {
@@ -167,7 +167,8 @@ class EncryptProjectionTokenGeneratorTest {
     
     @Test
     void 
assertGenerateSQLTokensWhenInsertSelectUsesActualColumnsForPhysicalTable() {
-        EncryptProjectionTokenGenerator actualGenerator = new 
EncryptProjectionTokenGenerator(Collections.emptyList(), databaseType, 
mockEncryptRule(createEncryptColumnWithDerivedColumns()));
+        EncryptProjectionTokenGenerator actualGenerator = new 
EncryptProjectionTokenGenerator(
+                Collections.emptyList(), databaseType, 
mockEncryptRule(createEncryptColumnWithDerivedColumns()), identifierContext);
         SelectStatementContext sqlStatementContext = 
mockInsertSelectStatementContext(TableSourceType.PHYSICAL_TABLE, 
QuoteCharacter.QUOTE);
         Collection<SQLToken> actual = 
actualGenerator.generateSQLTokens(sqlStatementContext);
         assertThat(actual.size(), is(1));
@@ -180,16 +181,17 @@ class EncryptProjectionTokenGeneratorTest {
     
     @Test
     void 
assertGenerateSQLTokensWhenInsertSelectUsesDerivedColumnsForTemporaryTable() {
-        EncryptProjectionTokenGenerator actualGenerator = new 
EncryptProjectionTokenGenerator(Collections.emptyList(), databaseType, 
mockEncryptRule(createEncryptColumnWithDerivedColumns()));
+        EncryptProjectionTokenGenerator actualGenerator = new 
EncryptProjectionTokenGenerator(
+                Collections.emptyList(), databaseType, 
mockEncryptRule(createEncryptColumnWithDerivedColumns()), identifierContext);
         SelectStatementContext sqlStatementContext = 
mockInsertSelectStatementContext(TableSourceType.TEMPORARY_TABLE, 
QuoteCharacter.BACK_QUOTE);
         Collection<SQLToken> actual = 
actualGenerator.generateSQLTokens(sqlStatementContext);
         assertThat(actual.size(), is(1));
         SubstitutableColumnNameToken actualToken = 
(SubstitutableColumnNameToken) actual.iterator().next();
         List<ColumnProjection> actualProjections = 
getColumnProjections(actualToken.getProjections());
         assertThat(getProjectionNames(actualProjections), is(Arrays.asList(
-                
EncryptDerivedColumnSuffix.CIPHER.getDerivedColumnName("mobile", databaseType),
-                
EncryptDerivedColumnSuffix.ASSISTED_QUERY.getDerivedColumnName("mobile", 
databaseType),
-                
EncryptDerivedColumnSuffix.LIKE_QUERY.getDerivedColumnName("mobile", 
databaseType))));
+                
EncryptDerivedColumnSuffix.CIPHER.getDerivedColumnName("mobile", 
identifierContext),
+                
EncryptDerivedColumnSuffix.ASSISTED_QUERY.getDerivedColumnName("mobile", 
identifierContext),
+                
EncryptDerivedColumnSuffix.LIKE_QUERY.getDerivedColumnName("mobile", 
identifierContext))));
         assertThat(getProjectionQuoteCharacters(actualProjections), 
is(Arrays.asList(QuoteCharacter.BACK_QUOTE, QuoteCharacter.BACK_QUOTE, 
QuoteCharacter.BACK_QUOTE)));
     }
     
diff --git 
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/select/EncryptGroupByItemTokenGeneratorTest.java
 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/select/EncryptGroupByItemTokenGeneratorTest.java
index 116eaa50d31..8117c343868 100644
--- 
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/select/EncryptGroupByItemTokenGeneratorTest.java
+++ 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/select/EncryptGroupByItemTokenGeneratorTest.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.encrypt.rewrite.token.generator.select;
 
 import 
org.apache.shardingsphere.database.connector.core.metadata.database.enums.NullsOrderType;
+import 
org.apache.shardingsphere.database.connector.core.metadata.identifier.IdentifierCasePolicyFactory;
 import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
 import org.apache.shardingsphere.encrypt.rule.EncryptRule;
 import org.apache.shardingsphere.encrypt.rule.column.EncryptColumn;
@@ -25,6 +26,7 @@ import 
org.apache.shardingsphere.encrypt.rule.table.EncryptTable;
 import 
org.apache.shardingsphere.infra.binder.context.segment.select.orderby.OrderByItem;
 import 
org.apache.shardingsphere.infra.binder.context.segment.table.TablesContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.type.dml.SelectStatementContext;
+import 
org.apache.shardingsphere.infra.metadata.identifier.DatabaseIdentifierContext;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import 
org.apache.shardingsphere.sql.parser.statement.core.enums.OrderDirection;
 import 
org.apache.shardingsphere.sql.parser.statement.core.enums.TableSourceType;
@@ -57,7 +59,8 @@ class EncryptGroupByItemTokenGeneratorTest {
     
     @BeforeEach
     void setup() {
-        generator = new EncryptGroupByItemTokenGenerator(mockEncryptRule());
+        generator = new EncryptGroupByItemTokenGenerator(
+                mockEncryptRule(), new 
DatabaseIdentifierContext(IdentifierCasePolicyFactory.newCasePreservingInsensitivePolicySet()));
     }
     
     private EncryptRule mockEncryptRule() {


Reply via email to