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 e2ca9293b2f Refactor EncryptAssignmentTokenGenerator (#26719)
e2ca9293b2f is described below
commit e2ca9293b2fb425f345b137af90c3356fe4aa96e
Author: Liang Zhang <[email protected]>
AuthorDate: Fri Jun 30 21:07:20 2023 +0800
Refactor EncryptAssignmentTokenGenerator (#26719)
* Refactor EncryptAlterTableTokenGenerator
* Refactor EncryptAlterTableTokenGenerator
* Refactor EncryptAssignmentTokenGenerator
* Refactor EncryptAssignmentTokenGenerator
---
.../generator/EncryptAlterTableTokenGenerator.java | 4 +-
.../generator/EncryptAssignmentTokenGenerator.java | 45 ++++++++++------------
2 files changed, 22 insertions(+), 27 deletions(-)
diff --git
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAlterTableTokenGenerator.java
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAlterTableTokenGenerator.java
index d91bdd7b3f9..cc20b84ce05 100644
---
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAlterTableTokenGenerator.java
+++
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAlterTableTokenGenerator.java
@@ -221,9 +221,9 @@ public final class EncryptAlterTableTokenGenerator
implements CollectionSQLToken
result.add(new
EncryptAlterTableToken(segment.getColumnDefinition().getColumnName().getStopIndex()
+ 1, segment.getColumnDefinition().getColumnName().getStopIndex(),
encryptColumn.getCipher().getName(), null));
previousEncryptColumn.getAssistedQuery().map(optional -> new
EncryptAlterTableToken(segment.getStopIndex() + 1,
segment.getColumnDefinition().getColumnName().getStopIndex(),
-
encryptColumn.getAssistedQuery().map(AssistedQueryColumnItem::getName).orElse(""),
", CHANGE COLUMN " + optional.getName())).ifPresent(result::add);
+
encryptColumn.getAssistedQuery().map(AssistedQueryColumnItem::getName).orElse(""),
", CHANGE COLUMN " + optional.getName())).ifPresent(result::add);
previousEncryptColumn.getLikeQuery().map(optional -> new
EncryptAlterTableToken(segment.getStopIndex() + 1,
segment.getColumnDefinition().getColumnName().getStopIndex(),
-
encryptColumn.getLikeQuery().map(LikeQueryColumnItem::getName).orElse(""), ",
CHANGE COLUMN " + optional.getName())).ifPresent(result::add);
+
encryptColumn.getLikeQuery().map(LikeQueryColumnItem::getName).orElse(""), ",
CHANGE COLUMN " + optional.getName())).ifPresent(result::add);
return result;
}
diff --git
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAssignmentTokenGenerator.java
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAssignmentTokenGenerator.java
index ebdd52eee48..00af5d34d2d 100644
---
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAssignmentTokenGenerator.java
+++
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAssignmentTokenGenerator.java
@@ -73,8 +73,7 @@ public final class EncryptAssignmentTokenGenerator implements
CollectionSQLToken
for (AssignmentSegment each :
getSetAssignmentSegment(sqlStatementContext.getSqlStatement()).getAssignments())
{
String columnName =
each.getColumns().get(0).getIdentifier().getValue();
if (encryptTable.isEncryptColumn(columnName)) {
- EncryptColumn encryptColumn =
encryptTable.getEncryptColumn(columnName);
- generateSQLToken(schemaName, encryptTable, encryptColumn,
each).ifPresent(result::add);
+ generateSQLToken(schemaName, encryptTable.getTable(),
encryptTable.getEncryptColumn(columnName), each).ifPresent(result::add);
}
}
return result;
@@ -89,44 +88,41 @@ public final class EncryptAssignmentTokenGenerator
implements CollectionSQLToken
return ((UpdateStatement) sqlStatement).getSetAssignment();
}
- private Optional<EncryptAssignmentToken> generateSQLToken(final String
schemaName, final EncryptTable encryptTable, final EncryptColumn encryptColumn,
final AssignmentSegment assignmentSegment) {
- if (assignmentSegment.getValue() instanceof
ParameterMarkerExpressionSegment) {
- return Optional.of(generateParameterSQLToken(encryptTable,
assignmentSegment));
+ private Optional<EncryptAssignmentToken> generateSQLToken(final String
schemaName, final String tableName, final EncryptColumn encryptColumn, final
AssignmentSegment segment) {
+ if (segment.getValue() instanceof ParameterMarkerExpressionSegment) {
+ return Optional.of(generateParameterSQLToken(encryptColumn,
segment));
}
- if (assignmentSegment.getValue() instanceof LiteralExpressionSegment) {
- return Optional.of(generateLiteralSQLToken(schemaName,
encryptTable.getTable(), encryptColumn, assignmentSegment));
+ if (segment.getValue() instanceof LiteralExpressionSegment) {
+ return Optional.of(generateLiteralSQLToken(schemaName, tableName,
encryptColumn, segment));
}
return Optional.empty();
}
- private EncryptAssignmentToken generateParameterSQLToken(final
EncryptTable encryptTable, final AssignmentSegment assignmentSegment) {
- EncryptParameterAssignmentToken result = new
EncryptParameterAssignmentToken(assignmentSegment.getColumns().get(0).getStartIndex(),
assignmentSegment.getStopIndex());
- String columnName =
assignmentSegment.getColumns().get(0).getIdentifier().getValue();
- EncryptColumn encryptColumn =
encryptTable.getEncryptColumn(columnName);
+ private EncryptAssignmentToken generateParameterSQLToken(final
EncryptColumn encryptColumn, final AssignmentSegment segment) {
+ EncryptParameterAssignmentToken result = new
EncryptParameterAssignmentToken(segment.getColumns().get(0).getStartIndex(),
segment.getStopIndex());
result.addColumnName(encryptColumn.getCipher().getName());
encryptColumn.getAssistedQuery().ifPresent(optional ->
result.addColumnName(optional.getName()));
encryptColumn.getLikeQuery().ifPresent(optional ->
result.addColumnName(optional.getName()));
return result;
}
- private EncryptAssignmentToken generateLiteralSQLToken(final String
schemaName, final String tableName, final EncryptColumn encryptColumn, final
AssignmentSegment assignmentSegment) {
- EncryptLiteralAssignmentToken result = new
EncryptLiteralAssignmentToken(assignmentSegment.getColumns().get(0).getStartIndex(),
assignmentSegment.getStopIndex());
- addCipherAssignment(schemaName, tableName, encryptColumn,
assignmentSegment, result);
- addAssistedQueryAssignment(schemaName, tableName, encryptColumn,
assignmentSegment, result);
- addLikeAssignment(schemaName, tableName, encryptColumn,
assignmentSegment, result);
+ private EncryptAssignmentToken generateLiteralSQLToken(final String
schemaName, final String tableName, final EncryptColumn encryptColumn, final
AssignmentSegment segment) {
+ EncryptLiteralAssignmentToken result = new
EncryptLiteralAssignmentToken(segment.getColumns().get(0).getStartIndex(),
segment.getStopIndex());
+ addCipherAssignment(schemaName, tableName, encryptColumn, segment,
result);
+ addAssistedQueryAssignment(schemaName, tableName, encryptColumn,
segment, result);
+ addLikeAssignment(schemaName, tableName, encryptColumn, segment,
result);
return result;
}
- private void addCipherAssignment(final String schemaName, final String
tableName,
- final EncryptColumn encryptColumn, final
AssignmentSegment assignmentSegment, final EncryptLiteralAssignmentToken token)
{
- Object originalValue = ((LiteralExpressionSegment)
assignmentSegment.getValue()).getLiterals();
+ private void addCipherAssignment(final String schemaName, final String
tableName, final EncryptColumn encryptColumn, final AssignmentSegment segment,
final EncryptLiteralAssignmentToken token) {
+ Object originalValue = ((LiteralExpressionSegment)
segment.getValue()).getLiterals();
Object cipherValue = encryptColumn.getCipher().encrypt(databaseName,
schemaName, tableName, encryptColumn.getName(),
Collections.singletonList(originalValue)).iterator().next();
token.addAssignment(encryptColumn.getCipher().getName(), cipherValue);
}
private void addAssistedQueryAssignment(final String schemaName, final
String tableName, final EncryptColumn encryptColumn,
- final AssignmentSegment
assignmentSegment, final EncryptLiteralAssignmentToken token) {
- Object originalValue = ((LiteralExpressionSegment)
assignmentSegment.getValue()).getLiterals();
+ final AssignmentSegment segment,
final EncryptLiteralAssignmentToken token) {
+ Object originalValue = ((LiteralExpressionSegment)
segment.getValue()).getLiterals();
if (encryptColumn.getAssistedQuery().isPresent()) {
Object assistedQueryValue =
encryptColumn.getAssistedQuery().get().encrypt(
databaseName, schemaName, tableName,
encryptColumn.getName(),
Collections.singletonList(originalValue)).iterator().next();
@@ -134,12 +130,11 @@ public final class EncryptAssignmentTokenGenerator
implements CollectionSQLToken
}
}
- private void addLikeAssignment(final String schemaName, final String
tableName, final EncryptColumn encryptColumn,
- final AssignmentSegment assignmentSegment,
final EncryptLiteralAssignmentToken token) {
- Object originalValue = ((LiteralExpressionSegment)
assignmentSegment.getValue()).getLiterals();
+ private void addLikeAssignment(final String schemaName, final String
tableName, final EncryptColumn encryptColumn, final AssignmentSegment segment,
final EncryptLiteralAssignmentToken token) {
+ Object originalValue = ((LiteralExpressionSegment)
segment.getValue()).getLiterals();
if (encryptColumn.getLikeQuery().isPresent()) {
Object assistedQueryValue =
encryptColumn.getLikeQuery().get().encrypt(databaseName, schemaName,
- tableName,
assignmentSegment.getColumns().get(0).getIdentifier().getValue(),
Collections.singletonList(originalValue)).iterator().next();
+ tableName,
segment.getColumns().get(0).getIdentifier().getValue(),
Collections.singletonList(originalValue)).iterator().next();
token.addAssignment(encryptColumn.getLikeQuery().get().getName(),
assistedQueryValue);
}
}