提交 76ab5cb5 编写于 作者: T terrymanu

for #2567, refactor SQLRewriteEngine for encrypt

上级 587824a6
......@@ -40,6 +40,7 @@ import org.apache.shardingsphere.core.rule.BaseRule;
import org.apache.shardingsphere.core.rule.EncryptRule;
import org.apache.shardingsphere.core.rule.MasterSlaveRule;
import org.apache.shardingsphere.core.rule.ShardingRule;
import org.apache.shardingsphere.core.strategy.encrypt.EncryptTable;
import org.apache.shardingsphere.spi.encrypt.ShardingEncryptor;
import org.apache.shardingsphere.spi.encrypt.ShardingQueryAssistedEncryptor;
......@@ -106,34 +107,26 @@ public final class SQLRewriteEngine {
return optimizedStatement instanceof InsertOptimizedStatement && !encryptRule.getEncryptTableNames().isEmpty();
}
private void encryptInsertOptimizedStatement(final EncryptRule encryptRule, final ShardingInsertOptimizedStatement insertOptimizedStatement) {
private void encryptInsertOptimizedStatement(final EncryptRule encryptRule, final InsertOptimizedStatement insertOptimizedStatement) {
String tableName = insertOptimizedStatement.getTables().getSingleTableName();
for (InsertValue insertValue : insertOptimizedStatement.getInsertValues()) {
for (String each : insertOptimizedStatement.getColumnNames()) {
Optional<ShardingEncryptor> shardingEncryptor = encryptRule.findShardingEncryptor(tableName, each);
if (shardingEncryptor.isPresent()) {
encryptInsertValue(encryptRule, shardingEncryptor.get(), insertOptimizedStatement, insertValue, each);
}
}
Optional<EncryptTable> encryptTable = encryptRule.findEncryptTable(tableName);
if (!encryptTable.isPresent()) {
return;
}
}
private void encryptInsertOptimizedStatement(final EncryptRule encryptRule, final EncryptInsertOptimizedStatement insertOptimizedStatement) {
String tableName = insertOptimizedStatement.getTables().getSingleTableName();
for (InsertValue insertValue : insertOptimizedStatement.getInsertValues()) {
for (String each : insertOptimizedStatement.getColumnNames()) {
Optional<ShardingEncryptor> shardingEncryptor = encryptRule.findShardingEncryptor(tableName, each);
if (shardingEncryptor.isPresent()) {
encryptInsertValue(encryptRule, shardingEncryptor.get(), insertOptimizedStatement, insertValue, each);
for (String each : encryptTable.get().getLogicColumns()) {
int columnIndex = insertOptimizedStatement.getColumnNames().indexOf(each);
Optional<ShardingEncryptor> shardingEncryptor = encryptRule.findShardingEncryptor(tableName, each);
if (shardingEncryptor.isPresent()) {
for (InsertValue insertValue : insertOptimizedStatement.getInsertValues()) {
encryptInsertValue(encryptRule, shardingEncryptor.get(), tableName, columnIndex, insertValue, each);
}
}
}
}
private void encryptInsertValue(final EncryptRule encryptRule, final ShardingEncryptor shardingEncryptor,
final InsertOptimizedStatement insertOptimizedStatement, final InsertValue insertValue, final String encryptLogicColumnName) {
String tableName = insertOptimizedStatement.getTables().getSingleTableName();
Object originalValue = insertValue.getValue(insertOptimizedStatement.getColumnNames().indexOf(encryptLogicColumnName));
final String tableName, final int columnIndex, final InsertValue insertValue, final String encryptLogicColumnName) {
Object originalValue = insertValue.getValue(columnIndex);
insertValue.setValue(encryptLogicColumnName, shardingEncryptor.encrypt(originalValue));
if (shardingEncryptor instanceof ShardingQueryAssistedEncryptor) {
Optional<String> assistedColumnName = encryptRule.findAssistedQueryColumn(tableName, encryptLogicColumnName);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册