This is an automated email from the ASF dual-hosted git repository.
iamhucong 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 f18bc540654 Minor refactor encrypt rewrite logic (#39165)
f18bc540654 is described below
commit f18bc5406544b7b53c55b379a31ac5cb55f73913
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Fri Jul 17 15:51:31 2026 +0800
Minor refactor encrypt rewrite logic (#39165)
---
.../context/EncryptSQLRewriteContextDecorator.java | 10 +++++++--
.../EncryptInsertDefaultColumnsTokenGenerator.java | 24 +++++++++++++++-------
2 files changed, 25 insertions(+), 9 deletions(-)
diff --git
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/context/EncryptSQLRewriteContextDecorator.java
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/context/EncryptSQLRewriteContextDecorator.java
index e84fd65dddf..d1bf99f04e7 100644
---
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/context/EncryptSQLRewriteContextDecorator.java
+++
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/context/EncryptSQLRewriteContextDecorator.java
@@ -59,13 +59,19 @@ public final class EncryptSQLRewriteContextDecorator
implements SQLRewriteContex
Collection<ParameterRewriter> parameterRewriters = new
ParameterRewritersBuilder(sqlStatementContext).build(rewritersRegistry);
rewriteParameters(sqlRewriteContext, parameterRewriters);
}
- SQLTokenGeneratorBuilder sqlTokenGeneratorBuilder =
createSQLTokenGeneratorBuilder(rule, sqlRewriteContext, sqlStatementContext,
encryptConditions);
+ SQLTokenGeneratorBuilder sqlTokenGeneratorBuilder =
+ createSQLTokenGeneratorBuilder(rule, sqlRewriteContext,
sqlStatementContext, encryptConditions);
sqlRewriteContext.addSQLTokenGenerators(sqlTokenGeneratorBuilder.getSQLTokenGenerators());
}
private boolean containsEncryptTable(final EncryptRule rule, final
SQLStatementContext sqlStatementContext) {
+ return containsEncryptTableInCurrentContext(rule, sqlStatementContext);
+ }
+
+ private boolean containsEncryptTableInCurrentContext(final EncryptRule
rule, final SQLStatementContext sqlStatementContext) {
for (SimpleTableSegment each :
sqlStatementContext.getTablesContext().getSimpleTables()) {
- if
(rule.findEncryptTable(each.getTableName().getIdentifier().getValue()).isPresent())
{
+ String tableName = each.getTableName().getIdentifier().getValue();
+ if (rule.findEncryptTable(tableName).isPresent()) {
return true;
}
}
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 ddb5297edf7..6b990bba4a5 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
@@ -23,6 +23,7 @@ import lombok.Setter;
import
org.apache.shardingsphere.database.connector.core.metadata.database.enums.QuoteCharacter;
import
org.apache.shardingsphere.database.connector.core.type.DatabaseTypeRegistry;
import
org.apache.shardingsphere.encrypt.checker.cryptographic.InsertSelectColumnsEncryptorChecker;
+import
org.apache.shardingsphere.encrypt.exception.metadata.EncryptTableNotFoundException;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import org.apache.shardingsphere.encrypt.rule.column.EncryptColumn;
import org.apache.shardingsphere.encrypt.rule.table.EncryptTable;
@@ -64,13 +65,22 @@ public final class
EncryptInsertDefaultColumnsTokenGenerator implements Optional
@Override
public UseDefaultInsertColumnsToken generateSQLToken(final
InsertStatementContext insertStatementContext) {
- String tableName =
insertStatementContext.getSqlStatement().getTable().map(optional ->
optional.getTableName().getIdentifier().getValue()).orElse("");
+ String tableName = getTableName(insertStatementContext);
+ EncryptTable encryptTable =
findEncryptTable(insertStatementContext).orElseThrow(() -> new
EncryptTableNotFoundException(tableName));
Optional<UseDefaultInsertColumnsToken> previousSQLToken =
findInsertColumnsToken();
if (previousSQLToken.isPresent()) {
- processPreviousSQLToken(previousSQLToken.get(),
insertStatementContext, tableName);
+ processPreviousSQLToken(previousSQLToken.get(),
insertStatementContext, encryptTable);
return previousSQLToken.get();
}
- return generateNewSQLToken(insertStatementContext, tableName);
+ return generateNewSQLToken(insertStatementContext, encryptTable);
+ }
+
+ private Optional<EncryptTable> findEncryptTable(final
InsertStatementContext insertStatementContext) {
+ return rule.findEncryptTable(getTableName(insertStatementContext));
+ }
+
+ private String getTableName(final InsertStatementContext
insertStatementContext) {
+ return
insertStatementContext.getSqlStatement().getTable().map(optional ->
optional.getTableName().getIdentifier().getValue()).orElse("");
}
private Optional<UseDefaultInsertColumnsToken> findInsertColumnsToken() {
@@ -82,13 +92,13 @@ public final class
EncryptInsertDefaultColumnsTokenGenerator implements Optional
return Optional.empty();
}
- private void processPreviousSQLToken(final UseDefaultInsertColumnsToken
previousSQLToken, final InsertStatementContext insertStatementContext, final
String tableName) {
- List<String> columnNames = getColumnNames(insertStatementContext,
rule.getEncryptTable(tableName), previousSQLToken.getColumns());
+ private void processPreviousSQLToken(final UseDefaultInsertColumnsToken
previousSQLToken, final InsertStatementContext insertStatementContext, final
EncryptTable encryptTable) {
+ List<String> columnNames = getColumnNames(insertStatementContext,
encryptTable, previousSQLToken.getColumns());
previousSQLToken.getColumns().clear();
previousSQLToken.getColumns().addAll(columnNames);
}
- private UseDefaultInsertColumnsToken generateNewSQLToken(final
InsertStatementContext insertStatementContext, final String tableName) {
+ private UseDefaultInsertColumnsToken generateNewSQLToken(final
InsertStatementContext insertStatementContext, final EncryptTable encryptTable)
{
Optional<InsertColumnsSegment> insertColumnsSegment =
insertStatementContext.getSqlStatement().getInsertColumns();
Preconditions.checkState(insertColumnsSegment.isPresent());
if (null != insertStatementContext.getInsertSelectContext()) {
@@ -99,7 +109,7 @@ public final class EncryptInsertDefaultColumnsTokenGenerator
implements Optional
}
QuoteCharacter quoteCharacter = new
DatabaseTypeRegistry(insertStatementContext.getSqlStatement().getDatabaseType()).getDialectDatabaseMetaData().getQuoteCharacter();
return new UseDefaultInsertColumnsToken(
- insertColumnsSegment.get().getStopIndex(),
getColumnNames(insertStatementContext, rule.getEncryptTable(tableName),
insertStatementContext.getColumnNames()), quoteCharacter);
+ insertColumnsSegment.get().getStopIndex(),
getColumnNames(insertStatementContext, encryptTable,
insertStatementContext.getColumnNames()), quoteCharacter);
}
private List<String> getColumnNames(final InsertStatementContext
sqlStatementContext, final EncryptTable encryptTable, final List<String>
currentColumnNames) {