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 52be4b5dba2 Support insert statement rewrite use quote (#34259)
52be4b5dba2 is described below

commit 52be4b5dba230683a58aa8225beb358bec81467d
Author: ZhangCheng <[email protected]>
AuthorDate: Mon Jan 6 14:00:15 2025 +0800

    Support insert statement rewrite use quote (#34259)
    
    * Support insert statement rewrite use quote
    
    * Support insert statement rewrite use quote
    
    * Support insert statement rewrite use quote
---
 .../EncryptAssignmentTokenGenerator.java           |  6 ++++--
 .../EncryptInsertCipherNameTokenGenerator.java     |  4 +++-
 .../EncryptInsertDefaultColumnsTokenGenerator.java |  5 ++++-
 .../EncryptInsertDerivedColumnsTokenGenerator.java |  2 +-
 .../EncryptInsertOnUpdateTokenGenerator.java       |  9 ++++++---
 .../rewrite/token/pojo/EncryptAssignmentToken.java |  6 +++++-
 .../token/pojo/EncryptFunctionAssignmentToken.java | 11 +++++++----
 .../token/pojo/EncryptLiteralAssignmentToken.java  | 11 +++++++----
 .../pojo/EncryptParameterAssignmentToken.java      |  8 +++++---
 ...ryptInsertDefaultColumnsTokenGeneratorTest.java |  4 ++--
 .../pojo/EncryptLiteralAssignmentTokenTest.java    |  3 ++-
 .../pojo/EncryptParameterAssignmentTokenTest.java  |  3 ++-
 .../common/pojo/generic/InsertColumnsToken.java    | 12 +++++++++++-
 .../pojo/generic/UseDefaultInsertColumnsToken.java | 22 +++++++++++++++++++++-
 .../query-with-cipher/dml/insert/insert-column.xml | 16 ++++++++--------
 .../query-with-cipher/dml/insert/insert-select.xml |  5 +++++
 .../query-with-cipher/dml/insert/insert-set.xml    | 10 ++++++++++
 .../query-with-cipher/dml/insert/insert-column.xml | 12 ++++++------
 18 files changed, 109 insertions(+), 40 deletions(-)

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 f045d9b352a..0feb32c79e9 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
@@ -84,7 +84,8 @@ public final class EncryptAssignmentTokenGenerator {
     }
     
     private EncryptAssignmentToken generateParameterSQLToken(final 
EncryptColumn encryptColumn, final ColumnAssignmentSegment segment) {
-        EncryptParameterAssignmentToken result = new 
EncryptParameterAssignmentToken(segment.getColumns().get(0).getStartIndex(), 
segment.getStopIndex());
+        EncryptParameterAssignmentToken result =
+                new 
EncryptParameterAssignmentToken(segment.getColumns().get(0).getStartIndex(), 
segment.getStopIndex(), 
segment.getColumns().get(0).getIdentifier().getQuoteCharacter());
         result.addColumnName(encryptColumn.getCipher().getName());
         encryptColumn.getAssistedQuery().ifPresent(optional -> 
result.addColumnName(optional.getName()));
         encryptColumn.getLikeQuery().ifPresent(optional -> 
result.addColumnName(optional.getName()));
@@ -92,7 +93,8 @@ public final class EncryptAssignmentTokenGenerator {
     }
     
     private EncryptAssignmentToken generateLiteralSQLToken(final String 
schemaName, final String tableName, final EncryptColumn encryptColumn, final 
ColumnAssignmentSegment segment) {
-        EncryptLiteralAssignmentToken result = new 
EncryptLiteralAssignmentToken(segment.getColumns().get(0).getStartIndex(), 
segment.getStopIndex());
+        EncryptLiteralAssignmentToken result =
+                new 
EncryptLiteralAssignmentToken(segment.getColumns().get(0).getStartIndex(), 
segment.getStopIndex(), 
segment.getColumns().get(0).getIdentifier().getQuoteCharacter());
         addCipherAssignment(schemaName, tableName, encryptColumn, segment, 
result);
         addAssistedQueryAssignment(schemaName, tableName, encryptColumn, 
segment, result);
         addLikeAssignment(schemaName, tableName, encryptColumn, segment, 
result);
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertCipherNameTokenGenerator.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertCipherNameTokenGenerator.java
index 94722edbc19..fc7a31bef0f 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertCipherNameTokenGenerator.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertCipherNameTokenGenerator.java
@@ -36,6 +36,7 @@ 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.segment.dml.column.ColumnSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.InsertColumnsSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
 
 import java.util.Collection;
 import java.util.Collections;
@@ -75,7 +76,8 @@ public final class EncryptInsertCipherNameTokenGenerator 
implements CollectionSQ
             String columnName = each.getIdentifier().getValue();
             if (encryptTable.isEncryptColumn(columnName)) {
                 Collection<Projection> projections =
-                        Collections.singleton(new ColumnProjection(null, 
encryptTable.getEncryptColumn(columnName).getCipher().getName(), null, 
insertStatementContext.getDatabaseType()));
+                        Collections.singleton(new ColumnProjection(null, new 
IdentifierValue(encryptTable.getEncryptColumn(columnName).getCipher().getName(),
 each.getIdentifier().getQuoteCharacter()),
+                                null, 
insertStatementContext.getDatabaseType()));
                 result.add(new 
SubstitutableColumnNameToken(each.getStartIndex(), each.getStopIndex(), 
projections, insertStatementContext.getDatabaseType()));
             }
         }
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertDefaultColumnsTokenGenerator.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertDefaultColumnsTokenGenerator.java
index fe5b24134e0..b748abb1d3c 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertDefaultColumnsTokenGenerator.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertDefaultColumnsTokenGenerator.java
@@ -28,6 +28,8 @@ import 
org.apache.shardingsphere.infra.annotation.HighFrequencyInvocation;
 import 
org.apache.shardingsphere.infra.binder.context.segment.select.projection.Projection;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.dml.InsertStatementContext;
+import 
org.apache.shardingsphere.infra.database.core.metadata.database.enums.QuoteCharacter;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import 
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
 import 
org.apache.shardingsphere.infra.exception.generic.UnsupportedSQLOperationException;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.common.generator.OptionalSQLTokenGenerator;
@@ -96,8 +98,9 @@ public final class EncryptInsertDefaultColumnsTokenGenerator 
implements Optional
             
ShardingSpherePreconditions.checkState(InsertSelectColumnsEncryptorComparator.isSame(derivedInsertColumns,
 projections, rule),
                     () -> new UnsupportedSQLOperationException("Can not use 
different encryptor in insert select columns"));
         }
+        QuoteCharacter quoteCharacter = new 
DatabaseTypeRegistry(insertStatementContext.getDatabaseType()).getDialectDatabaseMetaData().getQuoteCharacter();
         return new UseDefaultInsertColumnsToken(
-                insertColumnsSegment.get().getStopIndex(), 
getColumnNames(insertStatementContext, rule.getEncryptTable(tableName), 
insertStatementContext.getColumnNames()));
+                insertColumnsSegment.get().getStopIndex(), 
getColumnNames(insertStatementContext, rule.getEncryptTable(tableName), 
insertStatementContext.getColumnNames()), quoteCharacter);
     }
     
     private List<String> getColumnNames(final InsertStatementContext 
sqlStatementContext, final EncryptTable encryptTable, final List<String> 
currentColumnNames) {
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertDerivedColumnsTokenGenerator.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertDerivedColumnsTokenGenerator.java
index efd890e927e..2385ce37b22 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertDerivedColumnsTokenGenerator.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertDerivedColumnsTokenGenerator.java
@@ -57,7 +57,7 @@ public final class EncryptInsertDerivedColumnsTokenGenerator 
implements Collecti
         for (ColumnSegment each : 
insertStatementContext.getSqlStatement().getColumns()) {
             List<String> derivedColumnNames = 
getDerivedColumnNames(encryptTable, each);
             if (!derivedColumnNames.isEmpty()) {
-                result.add(new InsertColumnsToken(each.getStopIndex() + 1, 
derivedColumnNames));
+                result.add(new InsertColumnsToken(each.getStopIndex() + 1, 
derivedColumnNames, each.getIdentifier().getQuoteCharacter()));
             }
         }
         return result;
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertOnUpdateTokenGenerator.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertOnUpdateTokenGenerator.java
index 6869d3ffc93..ba0fb916d0c 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertOnUpdateTokenGenerator.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertOnUpdateTokenGenerator.java
@@ -115,7 +115,8 @@ public final class EncryptInsertOnUpdateTokenGenerator 
implements CollectionSQLT
     }
     
     private EncryptAssignmentToken generateParameterSQLToken(final 
EncryptTable encryptTable, final ColumnAssignmentSegment assignmentSegment) {
-        EncryptParameterAssignmentToken result = new 
EncryptParameterAssignmentToken(assignmentSegment.getColumns().get(0).getStartIndex(),
 assignmentSegment.getStopIndex());
+        EncryptParameterAssignmentToken result = new 
EncryptParameterAssignmentToken(assignmentSegment.getColumns().get(0).getStartIndex(),
 assignmentSegment.getStopIndex(),
+                
assignmentSegment.getColumns().get(0).getIdentifier().getQuoteCharacter());
         String columnName = 
assignmentSegment.getColumns().get(0).getIdentifier().getValue();
         EncryptColumn encryptColumn = 
encryptTable.getEncryptColumn(columnName);
         result.addColumnName(encryptColumn.getCipher().getName());
@@ -126,7 +127,8 @@ public final class EncryptInsertOnUpdateTokenGenerator 
implements CollectionSQLT
     
     private EncryptAssignmentToken generateLiteralSQLToken(final String 
schemaName, final String tableName,
                                                            final EncryptColumn 
encryptColumn, final ColumnAssignmentSegment assignmentSegment) {
-        EncryptLiteralAssignmentToken result = new 
EncryptLiteralAssignmentToken(assignmentSegment.getColumns().get(0).getStartIndex(),
 assignmentSegment.getStopIndex());
+        EncryptLiteralAssignmentToken result = new 
EncryptLiteralAssignmentToken(assignmentSegment.getColumns().get(0).getStartIndex(),
 assignmentSegment.getStopIndex(),
+                
assignmentSegment.getColumns().get(0).getIdentifier().getQuoteCharacter());
         addCipherAssignment(schemaName, tableName, encryptColumn, 
assignmentSegment, result);
         addAssistedQueryAssignment(schemaName, tableName, encryptColumn, 
assignmentSegment, result);
         addLikeAssignment(schemaName, tableName, encryptColumn, 
assignmentSegment, result);
@@ -139,7 +141,8 @@ public final class EncryptInsertOnUpdateTokenGenerator 
implements CollectionSQLT
         Optional<ExpressionSegment> valueColumnSegment = 
functionSegment.getParameters().stream().findFirst();
         Preconditions.checkState(valueColumnSegment.isPresent());
         String valueColumn = ((ColumnSegment) 
valueColumnSegment.get()).getIdentifier().getValue();
-        EncryptFunctionAssignmentToken result = new 
EncryptFunctionAssignmentToken(columnSegment.getStartIndex(), 
assignmentSegment.getStopIndex());
+        EncryptFunctionAssignmentToken result =
+                new 
EncryptFunctionAssignmentToken(columnSegment.getStartIndex(), 
assignmentSegment.getStopIndex(), 
assignmentSegment.getColumns().get(0).getIdentifier().getQuoteCharacter());
         boolean isEncryptColumn = encryptTable.isEncryptColumn(column);
         boolean isEncryptValueColumn = 
encryptTable.isEncryptColumn(valueColumn);
         EncryptColumn encryptColumn = encryptTable.getEncryptColumn(column);
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/pojo/EncryptAssignmentToken.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/pojo/EncryptAssignmentToken.java
index 864d2b62fb7..7c93d8f3817 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/pojo/EncryptAssignmentToken.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/pojo/EncryptAssignmentToken.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.encrypt.rewrite.token.pojo;
 
 import lombok.Getter;
+import 
org.apache.shardingsphere.infra.database.core.metadata.database.enums.QuoteCharacter;
 import org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.SQLToken;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.Substitutable;
 
@@ -29,8 +30,11 @@ public abstract class EncryptAssignmentToken extends 
SQLToken implements Substit
     
     private final int stopIndex;
     
-    protected EncryptAssignmentToken(final int startIndex, final int 
stopIndex) {
+    private final QuoteCharacter quoteCharacter;
+    
+    protected EncryptAssignmentToken(final int startIndex, final int 
stopIndex, final QuoteCharacter quoteCharacter) {
         super(startIndex);
         this.stopIndex = stopIndex;
+        this.quoteCharacter = quoteCharacter;
     }
 }
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/pojo/EncryptFunctionAssignmentToken.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/pojo/EncryptFunctionAssignmentToken.java
index ba51b0907f7..8daf1eb1d5c 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/pojo/EncryptFunctionAssignmentToken.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/pojo/EncryptFunctionAssignmentToken.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.encrypt.rewrite.token.pojo;
 
 import lombok.RequiredArgsConstructor;
+import 
org.apache.shardingsphere.infra.database.core.metadata.database.enums.QuoteCharacter;
 
 import java.util.Collection;
 import java.util.LinkedList;
@@ -31,8 +32,8 @@ public final class EncryptFunctionAssignmentToken extends 
EncryptAssignmentToken
     
     private final Collection<FunctionAssignment> assignments = new 
LinkedList<>();
     
-    public EncryptFunctionAssignmentToken(final int startIndex, final int 
stopIndex) {
-        super(startIndex, stopIndex);
+    public EncryptFunctionAssignmentToken(final int startIndex, final int 
stopIndex, final QuoteCharacter quoteCharacter) {
+        super(startIndex, stopIndex, quoteCharacter);
     }
     
     /**
@@ -42,7 +43,7 @@ public final class EncryptFunctionAssignmentToken extends 
EncryptAssignmentToken
      * @param value assignment value
      */
     public void addAssignment(final String columnName, final Object value) {
-        FunctionAssignment functionAssignment = new 
FunctionAssignment(columnName, value);
+        FunctionAssignment functionAssignment = new 
FunctionAssignment(columnName, value, getQuoteCharacter());
         assignments.add(functionAssignment);
         builder.append(functionAssignment).append(", ");
     }
@@ -68,9 +69,11 @@ public final class EncryptFunctionAssignmentToken extends 
EncryptAssignmentToken
         
         private final Object value;
         
+        private final QuoteCharacter quoteCharacter;
+        
         @Override
         public String toString() {
-            return String.format("%s = %s", columnName, value);
+            return quoteCharacter.wrap(columnName) + " = " + value;
         }
     }
 }
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/pojo/EncryptLiteralAssignmentToken.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/pojo/EncryptLiteralAssignmentToken.java
index f5f5ca8f0f3..582fc30d93a 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/pojo/EncryptLiteralAssignmentToken.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/pojo/EncryptLiteralAssignmentToken.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.encrypt.rewrite.token.pojo;
 
 import lombok.RequiredArgsConstructor;
+import 
org.apache.shardingsphere.infra.database.core.metadata.database.enums.QuoteCharacter;
 
 import java.util.Collection;
 import java.util.LinkedList;
@@ -30,8 +31,8 @@ public final class EncryptLiteralAssignmentToken extends 
EncryptAssignmentToken
     
     private final Collection<LiteralAssignment> assignments = new 
LinkedList<>();
     
-    public EncryptLiteralAssignmentToken(final int startIndex, final int 
stopIndex) {
-        super(startIndex, stopIndex);
+    public EncryptLiteralAssignmentToken(final int startIndex, final int 
stopIndex, final QuoteCharacter quoteCharacter) {
+        super(startIndex, stopIndex, quoteCharacter);
     }
     
     /**
@@ -41,7 +42,7 @@ public final class EncryptLiteralAssignmentToken extends 
EncryptAssignmentToken
      * @param value assignment value
      */
     public void addAssignment(final String columnName, final Object value) {
-        assignments.add(new LiteralAssignment(columnName, value));
+        assignments.add(new LiteralAssignment(columnName, value, 
getQuoteCharacter()));
     }
     
     @Override
@@ -56,9 +57,11 @@ public final class EncryptLiteralAssignmentToken extends 
EncryptAssignmentToken
         
         private final Object value;
         
+        private final QuoteCharacter quoteCharacter;
+        
         @Override
         public String toString() {
-            return columnName + " = " + toString(value);
+            return quoteCharacter.wrap(columnName) + " = " + toString(value);
         }
         
         private String toString(final Object value) {
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/pojo/EncryptParameterAssignmentToken.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/pojo/EncryptParameterAssignmentToken.java
index fa30ca7f459..40f37836d70 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/pojo/EncryptParameterAssignmentToken.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/pojo/EncryptParameterAssignmentToken.java
@@ -17,6 +17,8 @@
 
 package org.apache.shardingsphere.encrypt.rewrite.token.pojo;
 
+import 
org.apache.shardingsphere.infra.database.core.metadata.database.enums.QuoteCharacter;
+
 import java.util.Collection;
 import java.util.LinkedList;
 import java.util.StringJoiner;
@@ -28,8 +30,8 @@ public final class EncryptParameterAssignmentToken extends 
EncryptAssignmentToke
     
     private final Collection<String> columnNames = new LinkedList<>();
     
-    public EncryptParameterAssignmentToken(final int startIndex, final int 
stopIndex) {
-        super(startIndex, stopIndex);
+    public EncryptParameterAssignmentToken(final int startIndex, final int 
stopIndex, final QuoteCharacter quoteCharacter) {
+        super(startIndex, stopIndex, quoteCharacter);
     }
     
     /**
@@ -45,7 +47,7 @@ public final class EncryptParameterAssignmentToken extends 
EncryptAssignmentToke
     public String toString() {
         StringJoiner result = new StringJoiner(", ");
         for (String each : columnNames) {
-            result.add(each + " = ?");
+            result.add(getQuoteCharacter().wrap(each) + " = ?");
         }
         return result.toString();
     }
diff --git 
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertDefaultColumnsTokenGeneratorTest.java
 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertDefaultColumnsTokenGeneratorTest.java
index 774903a37f8..578cdc25e2c 100644
--- 
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertDefaultColumnsTokenGeneratorTest.java
+++ 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertDefaultColumnsTokenGeneratorTest.java
@@ -47,14 +47,14 @@ class EncryptInsertDefaultColumnsTokenGeneratorTest {
     void assertGenerateSQLTokenFromGenerateNewSQLToken() {
         generator.setPreviousSQLTokens(Collections.emptyList());
         
assertThat(generator.generateSQLToken(EncryptGeneratorFixtureBuilder.createInsertStatementContext(Collections.emptyList())).toString(),
-                is("(id, name, status, pwd_cipher, pwd_assist, pwd_like)"));
+                is("(`id`, `name`, `status`, `pwd_cipher`, `pwd_assist`, 
`pwd_like`)"));
     }
     
     @Test
     void assertGenerateSQLTokenFromPreviousSQLTokens() {
         
generator.setPreviousSQLTokens(EncryptGeneratorFixtureBuilder.getPreviousSQLTokens());
         
assertThat(generator.generateSQLToken(EncryptGeneratorFixtureBuilder.createInsertStatementContext(Collections.emptyList())).toString(),
-                is("(id, name, status, pwd_cipher, pwd_assist, pwd_like)"));
+                is("(`id`, `name`, `status`, `pwd_cipher`, `pwd_assist`, 
`pwd_like`)"));
     }
     
     @Test
diff --git 
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/pojo/EncryptLiteralAssignmentTokenTest.java
 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/pojo/EncryptLiteralAssignmentTokenTest.java
index 514214fd184..0e0f6123cf3 100644
--- 
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/pojo/EncryptLiteralAssignmentTokenTest.java
+++ 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/pojo/EncryptLiteralAssignmentTokenTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.encrypt.rewrite.token.pojo;
 
+import 
org.apache.shardingsphere.infra.database.core.metadata.database.enums.QuoteCharacter;
 import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -26,7 +27,7 @@ class EncryptLiteralAssignmentTokenTest {
     
     @Test
     void assertToString() {
-        EncryptLiteralAssignmentToken actual = new 
EncryptLiteralAssignmentToken(0, 1);
+        EncryptLiteralAssignmentToken actual = new 
EncryptLiteralAssignmentToken(0, 1, QuoteCharacter.NONE);
         actual.addAssignment("c1", "c1");
         actual.addAssignment("c2", 1);
         assertThat(actual.toString(), is("c1 = 'c1', c2 = 1"));
diff --git 
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/pojo/EncryptParameterAssignmentTokenTest.java
 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/pojo/EncryptParameterAssignmentTokenTest.java
index 806c1ca72cd..af65dafdc58 100644
--- 
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/pojo/EncryptParameterAssignmentTokenTest.java
+++ 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/pojo/EncryptParameterAssignmentTokenTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.encrypt.rewrite.token.pojo;
 
+import 
org.apache.shardingsphere.infra.database.core.metadata.database.enums.QuoteCharacter;
 import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -26,7 +27,7 @@ class EncryptParameterAssignmentTokenTest {
     
     @Test
     void assertToString() {
-        EncryptParameterAssignmentToken actual = new 
EncryptParameterAssignmentToken(0, 1);
+        EncryptParameterAssignmentToken actual = new 
EncryptParameterAssignmentToken(0, 1, QuoteCharacter.NONE);
         actual.addColumnName("c1");
         actual.addColumnName("c2");
         assertThat(actual.toString(), is("c1 = ?, c2 = ?"));
diff --git 
a/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/common/pojo/generic/InsertColumnsToken.java
 
b/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/common/pojo/generic/InsertColumnsToken.java
index 1fb4a04ab20..de092e2f7bc 100644
--- 
a/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/common/pojo/generic/InsertColumnsToken.java
+++ 
b/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/common/pojo/generic/InsertColumnsToken.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.generic;
 
+import 
org.apache.shardingsphere.infra.database.core.metadata.database.enums.QuoteCharacter;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.Attachable;
 import org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.SQLToken;
 
@@ -30,9 +31,18 @@ public final class InsertColumnsToken extends SQLToken 
implements Attachable {
     
     private final List<String> columns;
     
+    private final QuoteCharacter quoteCharacter;
+    
     public InsertColumnsToken(final int startIndex, final List<String> 
columns) {
         super(startIndex);
         this.columns = columns;
+        this.quoteCharacter = QuoteCharacter.NONE;
+    }
+    
+    public InsertColumnsToken(final int startIndex, final List<String> 
columns, final QuoteCharacter quoteCharacter) {
+        super(startIndex);
+        this.columns = columns;
+        this.quoteCharacter = quoteCharacter;
     }
     
     @Override
@@ -41,7 +51,7 @@ public final class InsertColumnsToken extends SQLToken 
implements Attachable {
             return "";
         }
         StringJoiner result = new StringJoiner(", ", ", ", "");
-        columns.forEach(result::add);
+        columns.forEach(each -> result.add(quoteCharacter.wrap(each)));
         return result.toString();
     }
     
diff --git 
a/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/common/pojo/generic/UseDefaultInsertColumnsToken.java
 
b/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/common/pojo/generic/UseDefaultInsertColumnsToken.java
index 47f16babb6e..fa259e42cab 100644
--- 
a/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/common/pojo/generic/UseDefaultInsertColumnsToken.java
+++ 
b/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/common/pojo/generic/UseDefaultInsertColumnsToken.java
@@ -18,9 +18,12 @@
 package org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.generic;
 
 import lombok.Getter;
+import 
org.apache.shardingsphere.infra.database.core.metadata.database.enums.QuoteCharacter;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.Attachable;
 import org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.SQLToken;
 
+import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
 
 /**
@@ -31,14 +34,31 @@ public final class UseDefaultInsertColumnsToken extends 
SQLToken implements Atta
     
     private final List<String> columns;
     
+    private final QuoteCharacter quoteCharacter;
+    
     public UseDefaultInsertColumnsToken(final int startIndex, final 
List<String> columns) {
         super(startIndex);
         this.columns = columns;
+        this.quoteCharacter = QuoteCharacter.NONE;
+    }
+    
+    public UseDefaultInsertColumnsToken(final int startIndex, final 
List<String> columns, final QuoteCharacter quoteCharacter) {
+        super(startIndex);
+        this.columns = columns;
+        this.quoteCharacter = quoteCharacter;
     }
     
     @Override
     public String toString() {
-        return columns.isEmpty() ? "" : "(" + String.join(", ", columns) + ")";
+        return columns.isEmpty() ? "" : "(" + String.join(", ", 
getColumnNames()) + ")";
+    }
+    
+    private Collection<String> getColumnNames() {
+        Collection<String> result = new ArrayList<>(columns.size());
+        for (String each : columns) {
+            result.add(quoteCharacter.wrap(each));
+        }
+        return result;
     }
     
     @Override
diff --git 
a/test/it/rewriter/src/test/resources/scenario/encrypt/case/query-with-cipher/dml/insert/insert-column.xml
 
b/test/it/rewriter/src/test/resources/scenario/encrypt/case/query-with-cipher/dml/insert/insert-column.xml
index cac4bcf5822..1c13db8ec66 100644
--- 
a/test/it/rewriter/src/test/resources/scenario/encrypt/case/query-with-cipher/dml/insert/insert-column.xml
+++ 
b/test/it/rewriter/src/test/resources/scenario/encrypt/case/query-with-cipher/dml/insert/insert-column.xml
@@ -49,22 +49,22 @@
     
     <rewrite-assertion id="insert_values_without_columns_for_parameters" 
db-types="MySQL">
         <input sql="INSERT INTO t_account VALUES (?, ?, ?, ?), (2, '222X', 
'bbb', 2000), (?, ?, ?, ?), (4, '444X', 'ddd', 4000)" parameters="1, 111X, aaa, 
1000, 3, 333X, ccc, 3000" />
-        <output sql="INSERT INTO t_account(account_id, 
cipher_certificate_number, assisted_query_certificate_number, 
like_query_certificate_number, cipher_password, assisted_query_password, 
like_query_password, cipher_amount) VALUES (?, ?, ?, ?, ?, ?, ?, ?), (2, 
'encrypt_222X', 'assisted_query_222X', 'like_query_222X', 'encrypt_bbb', 
'assisted_query_bbb', 'like_query_bbb', 'encrypt_2000'), (?, ?, ?, ?, ?, ?, ?, 
?), (4, 'encrypt_444X', 'assisted_query_444X', 'like_query_444X', 'encrypt_dd 
[...]
+        <output sql="INSERT INTO t_account(`account_id`, 
`cipher_certificate_number`, `assisted_query_certificate_number`, 
`like_query_certificate_number`, `cipher_password`, `assisted_query_password`, 
`like_query_password`, `cipher_amount`) VALUES (?, ?, ?, ?, ?, ?, ?, ?), (2, 
'encrypt_222X', 'assisted_query_222X', 'like_query_222X', 'encrypt_bbb', 
'assisted_query_bbb', 'like_query_bbb', 'encrypt_2000'), (?, ?, ?, ?, ?, ?, ?, 
?), (4, 'encrypt_444X', 'assisted_query_444X', 'like_query_44 [...]
     </rewrite-assertion>
     
     <rewrite-assertion id="insert_values_without_columns_for_literals" 
db-types="MySQL">
         <input sql="INSERT INTO t_account VALUES (1, '111X', 'aaa', 1000), (2, 
'222X', 'bbb', 2000), (3, '333X', 'ccc', 3000), (4, '444X', 'ddd', 4000)" />
-        <output sql="INSERT INTO t_account(account_id, 
cipher_certificate_number, assisted_query_certificate_number, 
like_query_certificate_number, cipher_password, assisted_query_password, 
like_query_password, cipher_amount) VALUES (1, 'encrypt_111X', 
'assisted_query_111X', 'like_query_111X', 'encrypt_aaa', 'assisted_query_aaa', 
'like_query_aaa', 'encrypt_1000'), (2, 'encrypt_222X', 'assisted_query_222X', 
'like_query_222X', 'encrypt_bbb', 'assisted_query_bbb', 'like_query_bbb', 
'encrypt [...]
+        <output sql="INSERT INTO t_account(`account_id`, 
`cipher_certificate_number`, `assisted_query_certificate_number`, 
`like_query_certificate_number`, `cipher_password`, `assisted_query_password`, 
`like_query_password`, `cipher_amount`) VALUES (1, 'encrypt_111X', 
'assisted_query_111X', 'like_query_111X', 'encrypt_aaa', 'assisted_query_aaa', 
'like_query_aaa', 'encrypt_1000'), (2, 'encrypt_222X', 'assisted_query_222X', 
'like_query_222X', 'encrypt_bbb', 'assisted_query_bbb', 'like_quer [...]
     </rewrite-assertion>
     
     <rewrite-assertion 
id="insert_values_without_columns_with_plain_for_parameters" db-types="MySQL">
         <input sql="INSERT INTO t_account_bak VALUES (?, ?, ?, ?), (2, '222X', 
'bbb', 2000), (?, ?, ?, ?), (4, '444X', 'ddd', 4000)" parameters="1, 111X, aaa, 
1000, 3, 333X, ccc, 3000" />
-        <output sql="INSERT INTO t_account_bak(account_id, 
cipher_certificate_number, assisted_query_certificate_number, 
like_query_certificate_number, cipher_password, assisted_query_password, 
like_query_password, cipher_amount) VALUES (?, ?, ?, ?, ?, ?, ?, ?), (2, 
'encrypt_222X', 'assisted_query_222X', 'like_query_222X', 'encrypt_bbb', 
'assisted_query_bbb', 'like_query_bbb', 'encrypt_2000'), (?, ?, ?, ?, ?, ?, ?, 
?), (4, 'encrypt_444X', 'assisted_query_444X', 'like_query_444X', 'encryp [...]
+        <output sql="INSERT INTO t_account_bak(`account_id`, 
`cipher_certificate_number`, `assisted_query_certificate_number`, 
`like_query_certificate_number`, `cipher_password`, `assisted_query_password`, 
`like_query_password`, `cipher_amount`) VALUES (?, ?, ?, ?, ?, ?, ?, ?), (2, 
'encrypt_222X', 'assisted_query_222X', 'like_query_222X', 'encrypt_bbb', 
'assisted_query_bbb', 'like_query_bbb', 'encrypt_2000'), (?, ?, ?, ?, ?, ?, ?, 
?), (4, 'encrypt_444X', 'assisted_query_444X', 'like_quer [...]
     </rewrite-assertion>
     
     <rewrite-assertion 
id="insert_values_without_columns_with_plain_for_literals" db-types="MySQL">
         <input sql="INSERT INTO t_account_bak VALUES (1, '111X', 'aaa', 1000), 
(2, '222X', 'bbb', 2000), (3, '333X', 'ccc', 3000), (4, '444X', 'ddd', 4000)" />
-        <output sql="INSERT INTO t_account_bak(account_id, 
cipher_certificate_number, assisted_query_certificate_number, 
like_query_certificate_number, cipher_password, assisted_query_password, 
like_query_password, cipher_amount) VALUES (1, 'encrypt_111X', 
'assisted_query_111X', 'like_query_111X', 'encrypt_aaa', 'assisted_query_aaa', 
'like_query_aaa', 'encrypt_1000'), (2, 'encrypt_222X', 'assisted_query_222X', 
'like_query_222X', 'encrypt_bbb', 'assisted_query_bbb', 'like_query_bbb', 'enc 
[...]
+        <output sql="INSERT INTO t_account_bak(`account_id`, 
`cipher_certificate_number`, `assisted_query_certificate_number`, 
`like_query_certificate_number`, `cipher_password`, `assisted_query_password`, 
`like_query_password`, `cipher_amount`) VALUES (1, 'encrypt_111X', 
'assisted_query_111X', 'like_query_111X', 'encrypt_aaa', 'assisted_query_aaa', 
'like_query_aaa', 'encrypt_1000'), (2, 'encrypt_222X', 'assisted_query_222X', 
'like_query_222X', 'encrypt_bbb', 'assisted_query_bbb', 'like_ [...]
     </rewrite-assertion>
     
     <rewrite-assertion id="mixed_insert_values_with_columns_for_parameters" 
db-types="MySQL">
@@ -99,22 +99,22 @@
     
     <rewrite-assertion id="mixed_insert_values_without_columns_for_parameters" 
db-types="MySQL">
         <input sql="INSERT INTO t_account VALUES (?, '111X', ?, ?), (2, 
'222X', 'bbb', 2000), (?, '333X', ?, ?), (4, '444X', 'ddd', 4000)" 
parameters="1, aaa, 1000, 3, ccc, 3000" />
-        <output sql="INSERT INTO t_account(account_id, 
cipher_certificate_number, assisted_query_certificate_number, 
like_query_certificate_number, cipher_password, assisted_query_password, 
like_query_password, cipher_amount) VALUES (?, 'encrypt_111X', 
'assisted_query_111X', 'like_query_111X', ?, ?, ?, ?), (2, 'encrypt_222X', 
'assisted_query_222X', 'like_query_222X', 'encrypt_bbb', 'assisted_query_bbb', 
'like_query_bbb', 'encrypt_2000'), (?, 'encrypt_333X', 'assisted_query_333X', 
'like_q [...]
+        <output sql="INSERT INTO t_account(`account_id`, 
`cipher_certificate_number`, `assisted_query_certificate_number`, 
`like_query_certificate_number`, `cipher_password`, `assisted_query_password`, 
`like_query_password`, `cipher_amount`) VALUES (?, 'encrypt_111X', 
'assisted_query_111X', 'like_query_111X', ?, ?, ?, ?), (2, 'encrypt_222X', 
'assisted_query_222X', 'like_query_222X', 'encrypt_bbb', 'assisted_query_bbb', 
'like_query_bbb', 'encrypt_2000'), (?, 'encrypt_333X', 'assisted_quer [...]
     </rewrite-assertion>
     
     <rewrite-assertion id="mixed_insert_values_without_columns_for_literals" 
db-types="MySQL">
         <input sql="INSERT INTO t_account VALUES (1, '111X', ?, 1000), (2, 
'222X', 'bbb', 2000), (3, '333X', ?, 3000), (4, '444X', 'ddd', 4000)" 
parameters="aaa, ccc" />
-        <output sql="INSERT INTO t_account(account_id, 
cipher_certificate_number, assisted_query_certificate_number, 
like_query_certificate_number, cipher_password, assisted_query_password, 
like_query_password, cipher_amount) VALUES (1, 'encrypt_111X', 
'assisted_query_111X', 'like_query_111X', ?, ?, ?, 'encrypt_1000'), (2, 
'encrypt_222X', 'assisted_query_222X', 'like_query_222X', 'encrypt_bbb', 
'assisted_query_bbb', 'like_query_bbb', 'encrypt_2000'), (3, 'encrypt_333X', 
'assisted_query_3 [...]
+        <output sql="INSERT INTO t_account(`account_id`, 
`cipher_certificate_number`, `assisted_query_certificate_number`, 
`like_query_certificate_number`, `cipher_password`, `assisted_query_password`, 
`like_query_password`, `cipher_amount`) VALUES (1, 'encrypt_111X', 
'assisted_query_111X', 'like_query_111X', ?, ?, ?, 'encrypt_1000'), (2, 
'encrypt_222X', 'assisted_query_222X', 'like_query_222X', 'encrypt_bbb', 
'assisted_query_bbb', 'like_query_bbb', 'encrypt_2000'), (3, 'encrypt_333X', ' 
[...]
     </rewrite-assertion>
     
     <rewrite-assertion 
id="mixed_insert_values_without_columns_with_plain_for_parameters" 
db-types="MySQL">
         <input sql="INSERT INTO t_account_bak VALUES (?, ?, 'aaa', ?), (2, 
'222X', 'bbb', 2000), (?, ?, 'ccc', ?), (4, '444X', 'ddd', 4000)" 
parameters="1, 111X, 1000, 3, 333X, 3000" />
-        <output sql="INSERT INTO t_account_bak(account_id, 
cipher_certificate_number, assisted_query_certificate_number, 
like_query_certificate_number, cipher_password, assisted_query_password, 
like_query_password, cipher_amount) VALUES (?, ?, ?, ?, 'encrypt_aaa', 
'assisted_query_aaa', 'like_query_aaa', ?), (2, 'encrypt_222X', 
'assisted_query_222X', 'like_query_222X', 'encrypt_bbb', 'assisted_query_bbb', 
'like_query_bbb', 'encrypt_2000'), (?, ?, ?, ?, 'encrypt_ccc', 
'assisted_query_ccc', [...]
+        <output sql="INSERT INTO t_account_bak(`account_id`, 
`cipher_certificate_number`, `assisted_query_certificate_number`, 
`like_query_certificate_number`, `cipher_password`, `assisted_query_password`, 
`like_query_password`, `cipher_amount`) VALUES (?, ?, ?, ?, 'encrypt_aaa', 
'assisted_query_aaa', 'like_query_aaa', ?), (2, 'encrypt_222X', 
'assisted_query_222X', 'like_query_222X', 'encrypt_bbb', 'assisted_query_bbb', 
'like_query_bbb', 'encrypt_2000'), (?, ?, ?, ?, 'encrypt_ccc', 'assi [...]
     </rewrite-assertion>
     
     <rewrite-assertion 
id="mixed_insert_values_without_columns_with_plain_for_literals" 
db-types="MySQL">
         <input sql="INSERT INTO t_account_bak VALUES (1, ?, 'aaa', 1000), (2, 
'222X', 'bbb', 2000), (3, ?, 'ccc', 3000), (4, '444X', 'ddd', 4000)" 
parameters="111X, 333X" />
-        <output sql="INSERT INTO t_account_bak(account_id, 
cipher_certificate_number, assisted_query_certificate_number, 
like_query_certificate_number, cipher_password, assisted_query_password, 
like_query_password, cipher_amount) VALUES (1, ?, ?, ?, 'encrypt_aaa', 
'assisted_query_aaa', 'like_query_aaa', 'encrypt_1000'), (2, 'encrypt_222X', 
'assisted_query_222X', 'like_query_222X', 'encrypt_bbb', 'assisted_query_bbb', 
'like_query_bbb', 'encrypt_2000'), (3, ?, ?, ?, 'encrypt_ccc', 'assiste [...]
+        <output sql="INSERT INTO t_account_bak(`account_id`, 
`cipher_certificate_number`, `assisted_query_certificate_number`, 
`like_query_certificate_number`, `cipher_password`, `assisted_query_password`, 
`like_query_password`, `cipher_amount`) VALUES (1, ?, ?, ?, 'encrypt_aaa', 
'assisted_query_aaa', 'like_query_aaa', 'encrypt_1000'), (2, 'encrypt_222X', 
'assisted_query_222X', 'like_query_222X', 'encrypt_bbb', 'assisted_query_bbb', 
'like_query_bbb', 'encrypt_2000'), (3, ?, ?, ?, 'encryp [...]
     </rewrite-assertion>
     
     <rewrite-assertion 
id="insert_values_with_null_encrypt_column_for_parameters" 
db-types="MySQL,PostgreSQL,openGauss">
diff --git 
a/test/it/rewriter/src/test/resources/scenario/encrypt/case/query-with-cipher/dml/insert/insert-select.xml
 
b/test/it/rewriter/src/test/resources/scenario/encrypt/case/query-with-cipher/dml/insert/insert-select.xml
index 62272153b8a..94edc38708b 100644
--- 
a/test/it/rewriter/src/test/resources/scenario/encrypt/case/query-with-cipher/dml/insert/insert-select.xml
+++ 
b/test/it/rewriter/src/test/resources/scenario/encrypt/case/query-with-cipher/dml/insert/insert-select.xml
@@ -27,4 +27,9 @@
         <input sql="INSERT INTO t_account_detail (account_id, 
certificate_number, password, amount, status) SELECT 40, certificate_number, 
password, amount, status FROM t_account WHERE certificate_number = 'cert1'" />
         <output sql="INSERT INTO t_account_detail (account_id, 
cipher_certificate_number, assisted_query_certificate_number, 
like_query_certificate_number, cipher_password, assisted_query_password, 
like_query_password, cipher_amount, status) SELECT 40, 
cipher_certificate_number, assisted_query_certificate_number, 
like_query_certificate_number, cipher_password, assisted_query_password, 
like_query_password, cipher_amount, status FROM t_account WHERE 
assisted_query_certificate_number = 'ass [...]
     </rewrite-assertion>
+
+    <rewrite-assertion id="insert_select_account_bak_for_literal_and_quote" 
db-types="MySQL">
+        <input sql="INSERT INTO `t_account_detail` (`account_id`, 
`certificate_number`, `password`, `amount`, `status`) SELECT 40, 
`certificate_number`, `password`, `amount`, `status` FROM `t_account` WHERE 
`certificate_number` = 'cert1'" />
+        <output sql="INSERT INTO `t_account_detail` (`account_id`, 
`cipher_certificate_number`, `assisted_query_certificate_number`, 
`like_query_certificate_number`, `cipher_password`, `assisted_query_password`, 
`like_query_password`, `cipher_amount`, `status`) SELECT 40, 
`cipher_certificate_number`, `assisted_query_certificate_number`, 
`like_query_certificate_number`, `cipher_password`, `assisted_query_password`, 
`like_query_password`, `cipher_amount`, `status` FROM `t_account` WHERE `a [...]
+    </rewrite-assertion>
 </rewrite-assertions>
diff --git 
a/test/it/rewriter/src/test/resources/scenario/encrypt/case/query-with-cipher/dml/insert/insert-set.xml
 
b/test/it/rewriter/src/test/resources/scenario/encrypt/case/query-with-cipher/dml/insert/insert-set.xml
index 8bea5290b28..8be2e32c97d 100644
--- 
a/test/it/rewriter/src/test/resources/scenario/encrypt/case/query-with-cipher/dml/insert/insert-set.xml
+++ 
b/test/it/rewriter/src/test/resources/scenario/encrypt/case/query-with-cipher/dml/insert/insert-set.xml
@@ -56,4 +56,14 @@
         <input sql="INSERT INTO t_account_bak SET account_id = 1, 
certificate_number = '111X', password = 'aaa', amount = ?, status = 'OK'" 
parameters="1000" />
         <output sql="INSERT INTO t_account_bak SET account_id = 1, 
cipher_certificate_number = 'encrypt_111X', assisted_query_certificate_number = 
'assisted_query_111X', like_query_certificate_number = 'like_query_111X', 
cipher_password = 'encrypt_aaa', assisted_query_password = 
'assisted_query_aaa', like_query_password = 'like_query_aaa', cipher_amount = 
?, status = 'OK'" parameters="encrypt_1000" />
     </rewrite-assertion>
+
+    <rewrite-assertion id="insert_account_bak_set_for_parameters_and_quote" 
db-types="MySQL">
+        <input sql="INSERT INTO `t_account_bak` SET `account_id` = ?, 
`certificate_number` = ?, `password` = ?, `amount` = ?, `status` = ?" 
parameters="1, cert, pwd, 1000, OK" />
+        <output sql="INSERT INTO `t_account_bak` SET `account_id` = ?, 
`cipher_certificate_number` = ?, `assisted_query_certificate_number` = ?, 
`like_query_certificate_number` = ?, `cipher_password` = ?, 
`assisted_query_password` = ?, `like_query_password` = ?, `cipher_amount` = ?, 
`status` = ?" parameters="1, encrypt_cert, assisted_query_cert, 
like_query_cert, encrypt_pwd, assisted_query_pwd, like_query_pwd, encrypt_1000, 
OK" />
+    </rewrite-assertion>
+
+    <rewrite-assertion id="insert_set_with_quote" db-types="MySQL">
+        <input sql="INSERT INTO `t_account_bak` SET `account_id` = 1, 
`certificate_number` = '111X', `password` = ?, `amount` = IFNULL(`amount`, ?)" 
parameters="aaa, 1000" />
+        <output sql="INSERT INTO `t_account_bak` SET `account_id` = 1, 
`cipher_certificate_number` = 'encrypt_111X', 
`assisted_query_certificate_number` = 'assisted_query_111X', 
`like_query_certificate_number` = 'like_query_111X', `cipher_password` = ?, 
`assisted_query_password` = ?, `like_query_password` = ?, `amount` = 
IFNULL(`amount`, ?)" parameters="encrypt_aaa, assisted_query_aaa, 
like_query_aaa, 1000" />
+    </rewrite-assertion>
 </rewrite-assertions>
diff --git 
a/test/it/rewriter/src/test/resources/scenario/mix/case/query-with-cipher/dml/insert/insert-column.xml
 
b/test/it/rewriter/src/test/resources/scenario/mix/case/query-with-cipher/dml/insert/insert-column.xml
index 95729298291..c26fba7e7b2 100644
--- 
a/test/it/rewriter/src/test/resources/scenario/mix/case/query-with-cipher/dml/insert/insert-column.xml
+++ 
b/test/it/rewriter/src/test/resources/scenario/mix/case/query-with-cipher/dml/insert/insert-column.xml
@@ -79,8 +79,8 @@
     
     <rewrite-assertion id="insert_values_without_columns_with_id_for_literals" 
db-types="MySQL">
         <input sql="INSERT INTO t_account VALUES (1, 'aaa', 1000), (2, 'bbb', 
2000), (3, 'ccc', 3000), (4, 'ddd', 4000)" />
-        <output sql="INSERT INTO t_account_1(account_id, cipher_password, 
assisted_query_password, cipher_amount) VALUES (1, 'encrypt_aaa', 
'assisted_query_aaa', 'encrypt_1000'), (3, 'encrypt_ccc', 'assisted_query_ccc', 
'encrypt_3000')" />
-        <output sql="INSERT INTO t_account_0(account_id, cipher_password, 
assisted_query_password, cipher_amount) VALUES (2, 'encrypt_bbb', 
'assisted_query_bbb', 'encrypt_2000'), (4, 'encrypt_ddd', 'assisted_query_ddd', 
'encrypt_4000')" />
+        <output sql="INSERT INTO t_account_1(`account_id`, `cipher_password`, 
`assisted_query_password`, `cipher_amount`) VALUES (1, 'encrypt_aaa', 
'assisted_query_aaa', 'encrypt_1000'), (3, 'encrypt_ccc', 'assisted_query_ccc', 
'encrypt_3000')" />
+        <output sql="INSERT INTO t_account_0(`account_id`, `cipher_password`, 
`assisted_query_password`, `cipher_amount`) VALUES (2, 'encrypt_bbb', 
'assisted_query_bbb', 'encrypt_2000'), (4, 'encrypt_ddd', 'assisted_query_ddd', 
'encrypt_4000')" />
     </rewrite-assertion>
     
     <rewrite-assertion 
id="insert_values_without_columns_without_id_for_parameters" db-types="MySQL">
@@ -95,14 +95,14 @@
     
     <rewrite-assertion 
id="insert_values_without_columns_with_plain_with_id_for_parameters" 
db-types="MySQL">
         <input sql="INSERT INTO t_account_bak VALUES (?, ?, ?), (2, 'bbb', 
2000), (?, ?, ?), (4, 'ddd', 4000)" parameters="1, aaa, 1000, 3, ccc, 3000" />
-        <output sql="INSERT INTO t_account_bak_1(account_id, cipher_password, 
assisted_query_password, cipher_amount) VALUES (?, ?, ?, ?), (?, ?, ?, ?)" 
parameters="1, encrypt_aaa, assisted_query_aaa, encrypt_1000, 3, encrypt_ccc, 
assisted_query_ccc, encrypt_3000" />
-        <output sql="INSERT INTO t_account_bak_0(account_id, cipher_password, 
assisted_query_password, cipher_amount) VALUES (2, 'encrypt_bbb', 
'assisted_query_bbb', 'encrypt_2000'), (4, 'encrypt_ddd', 'assisted_query_ddd', 
'encrypt_4000')" />
+        <output sql="INSERT INTO t_account_bak_1(`account_id`, 
`cipher_password`, `assisted_query_password`, `cipher_amount`) VALUES (?, ?, ?, 
?), (?, ?, ?, ?)" parameters="1, encrypt_aaa, assisted_query_aaa, encrypt_1000, 
3, encrypt_ccc, assisted_query_ccc, encrypt_3000" />
+        <output sql="INSERT INTO t_account_bak_0(`account_id`, 
`cipher_password`, `assisted_query_password`, `cipher_amount`) VALUES (2, 
'encrypt_bbb', 'assisted_query_bbb', 'encrypt_2000'), (4, 'encrypt_ddd', 
'assisted_query_ddd', 'encrypt_4000')" />
     </rewrite-assertion>
     
     <rewrite-assertion 
id="insert_values_without_columns_with_plain_with_id_for_literals" 
db-types="MySQL">
         <input sql="INSERT INTO t_account_bak VALUES (1, 'aaa', 1000), (2, 
'bbb', 2000), (3, 'ccc', 3000), (4, 'ddd', 4000)" />
-        <output sql="INSERT INTO t_account_bak_1(account_id, cipher_password, 
assisted_query_password, cipher_amount) VALUES (1, 'encrypt_aaa', 
'assisted_query_aaa', 'encrypt_1000'), (3, 'encrypt_ccc', 'assisted_query_ccc', 
'encrypt_3000')" />
-        <output sql="INSERT INTO t_account_bak_0(account_id, cipher_password, 
assisted_query_password, cipher_amount) VALUES (2, 'encrypt_bbb', 
'assisted_query_bbb', 'encrypt_2000'), (4, 'encrypt_ddd', 'assisted_query_ddd', 
'encrypt_4000')" />
+        <output sql="INSERT INTO t_account_bak_1(`account_id`, 
`cipher_password`, `assisted_query_password`, `cipher_amount`) VALUES (1, 
'encrypt_aaa', 'assisted_query_aaa', 'encrypt_1000'), (3, 'encrypt_ccc', 
'assisted_query_ccc', 'encrypt_3000')" />
+        <output sql="INSERT INTO t_account_bak_0(`account_id`, 
`cipher_password`, `assisted_query_password`, `cipher_amount`) VALUES (2, 
'encrypt_bbb', 'assisted_query_bbb', 'encrypt_2000'), (4, 'encrypt_ddd', 
'assisted_query_ddd', 'encrypt_4000')" />
     </rewrite-assertion>
     
     <rewrite-assertion 
id="insert_values_without_columns_with_plain_without_id_for_parameters" 
db-types="MySQL">

Reply via email to