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">