diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/token/generator/EncryptRuleAware.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/aware/EncryptRuleAware.java similarity index 93% rename from sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/token/generator/EncryptRuleAware.java rename to sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/aware/EncryptRuleAware.java index 3fddac09dd4043c483b237a5d2cca85f6cba877a..730f4d8ce0d45582d29c8fdde6daedac52b5286b 100644 --- a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/token/generator/EncryptRuleAware.java +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/aware/EncryptRuleAware.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.shardingsphere.core.rewrite.feature.encrypt.token.generator; +package org.apache.shardingsphere.core.rewrite.feature.encrypt.aware; import org.apache.shardingsphere.core.rule.EncryptRule; diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/token/generator/QueryWithCipherColumnAware.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/aware/QueryWithCipherColumnAware.java similarity index 93% rename from sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/token/generator/QueryWithCipherColumnAware.java rename to sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/aware/QueryWithCipherColumnAware.java index 824f2b8d8a48c0637e5c0b62eedcd665ba29045e..116508010a350413bc32dac7e2babc67528b9f3a 100644 --- a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/token/generator/QueryWithCipherColumnAware.java +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/aware/QueryWithCipherColumnAware.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.shardingsphere.core.rewrite.feature.encrypt.token.generator; +package org.apache.shardingsphere.core.rewrite.feature.encrypt.aware; /** * Query with cipher column aware. diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/parameter/EncryptParameterRewriterBuilder.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/parameter/EncryptParameterRewriterBuilder.java index 2e81466602ead5504de859b25630b372c206156d..f62798f559b978213fafb7ba8cd4f99611415f4f 100644 --- a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/parameter/EncryptParameterRewriterBuilder.java +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/parameter/EncryptParameterRewriterBuilder.java @@ -22,8 +22,8 @@ import org.apache.shardingsphere.core.metadata.table.TableMetas; import org.apache.shardingsphere.core.rewrite.feature.encrypt.parameter.impl.EncryptAssignmentParameterRewriter; import org.apache.shardingsphere.core.rewrite.feature.encrypt.parameter.impl.EncryptInsertValueParameterRewriter; import org.apache.shardingsphere.core.rewrite.feature.encrypt.parameter.impl.EncryptPredicateParameterRewriter; -import org.apache.shardingsphere.core.rewrite.feature.encrypt.token.generator.EncryptRuleAware; -import org.apache.shardingsphere.core.rewrite.feature.encrypt.token.generator.QueryWithCipherColumnAware; +import org.apache.shardingsphere.core.rewrite.feature.encrypt.aware.EncryptRuleAware; +import org.apache.shardingsphere.core.rewrite.feature.encrypt.aware.QueryWithCipherColumnAware; import org.apache.shardingsphere.core.rewrite.parameter.rewriter.ParameterRewriter; import org.apache.shardingsphere.core.rewrite.parameter.rewriter.ParameterRewriterBuilder; import org.apache.shardingsphere.core.rewrite.sql.token.generator.aware.TableMetasAware; diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/parameter/impl/EncryptAssignmentParameterRewriter.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/parameter/impl/EncryptAssignmentParameterRewriter.java index 9f498b997ddde32560d14d884e00f17e7b2af68c..1d855acbe377095302002ad14279b56a9c1634f3 100644 --- a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/parameter/impl/EncryptAssignmentParameterRewriter.java +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/parameter/impl/EncryptAssignmentParameterRewriter.java @@ -28,7 +28,7 @@ import org.apache.shardingsphere.core.parse.sql.statement.dml.InsertStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.UpdateStatement; import org.apache.shardingsphere.core.preprocessor.statement.SQLStatementContext; import org.apache.shardingsphere.core.preprocessor.statement.impl.InsertSQLStatementContext; -import org.apache.shardingsphere.core.rewrite.feature.encrypt.token.generator.EncryptRuleAware; +import org.apache.shardingsphere.core.rewrite.feature.encrypt.aware.EncryptRuleAware; import org.apache.shardingsphere.core.rewrite.parameter.builder.ParameterBuilder; import org.apache.shardingsphere.core.rewrite.parameter.builder.impl.GroupedParameterBuilder; import org.apache.shardingsphere.core.rewrite.parameter.builder.impl.StandardParameterBuilder; diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/parameter/impl/EncryptInsertValueParameterRewriter.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/parameter/impl/EncryptInsertValueParameterRewriter.java index 2c39b381ad3371a30faf21ec3f18f328fe81ceef..b228efdb70a797d79679b4e52d108109b14dd33c 100644 --- a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/parameter/impl/EncryptInsertValueParameterRewriter.java +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/parameter/impl/EncryptInsertValueParameterRewriter.java @@ -23,7 +23,7 @@ import lombok.Setter; import org.apache.shardingsphere.core.parse.sql.statement.dml.InsertStatement; import org.apache.shardingsphere.core.preprocessor.statement.SQLStatementContext; import org.apache.shardingsphere.core.preprocessor.statement.impl.InsertSQLStatementContext; -import org.apache.shardingsphere.core.rewrite.feature.encrypt.token.generator.EncryptRuleAware; +import org.apache.shardingsphere.core.rewrite.feature.encrypt.aware.EncryptRuleAware; import org.apache.shardingsphere.core.rewrite.parameter.builder.ParameterBuilder; import org.apache.shardingsphere.core.rewrite.parameter.builder.impl.GroupedParameterBuilder; import org.apache.shardingsphere.core.rewrite.parameter.builder.impl.StandardParameterBuilder; diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/parameter/impl/EncryptPredicateParameterRewriter.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/parameter/impl/EncryptPredicateParameterRewriter.java index db8a0988bfd58f000c7973b934df3e7f76728041..109df0cf3ab61d53e2691ce61c524617cd72d858 100644 --- a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/parameter/impl/EncryptPredicateParameterRewriter.java +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/parameter/impl/EncryptPredicateParameterRewriter.java @@ -25,8 +25,8 @@ import org.apache.shardingsphere.core.rewrite.feature.encrypt.EncryptConditionEn import org.apache.shardingsphere.core.rewrite.parameter.builder.ParameterBuilder; import org.apache.shardingsphere.core.rewrite.parameter.builder.impl.StandardParameterBuilder; import org.apache.shardingsphere.core.rewrite.parameter.rewriter.ParameterRewriter; -import org.apache.shardingsphere.core.rewrite.feature.encrypt.token.generator.EncryptRuleAware; -import org.apache.shardingsphere.core.rewrite.feature.encrypt.token.generator.QueryWithCipherColumnAware; +import org.apache.shardingsphere.core.rewrite.feature.encrypt.aware.EncryptRuleAware; +import org.apache.shardingsphere.core.rewrite.feature.encrypt.aware.QueryWithCipherColumnAware; import org.apache.shardingsphere.core.rewrite.sql.token.generator.aware.TableMetasAware; import org.apache.shardingsphere.core.rule.EncryptRule; diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/token/EncryptTokenGenerateBuilder.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/token/EncryptTokenGenerateBuilder.java index 650eab07bab8e74001b5ad2d1a30e204530ad36b..c13e54c10371a5c171df075857ba38f5fe19a7a0 100644 --- a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/token/EncryptTokenGenerateBuilder.java +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/token/EncryptTokenGenerateBuilder.java @@ -18,8 +18,8 @@ package org.apache.shardingsphere.core.rewrite.feature.encrypt.token; import lombok.RequiredArgsConstructor; -import org.apache.shardingsphere.core.rewrite.feature.encrypt.token.generator.EncryptRuleAware; -import org.apache.shardingsphere.core.rewrite.feature.encrypt.token.generator.QueryWithCipherColumnAware; +import org.apache.shardingsphere.core.rewrite.feature.encrypt.aware.EncryptRuleAware; +import org.apache.shardingsphere.core.rewrite.feature.encrypt.aware.QueryWithCipherColumnAware; import org.apache.shardingsphere.core.rewrite.feature.encrypt.token.generator.impl.AssistQueryAndPlainInsertColumnsTokenGenerator; import org.apache.shardingsphere.core.rewrite.feature.encrypt.token.generator.impl.EncryptAssignmentTokenGenerator; import org.apache.shardingsphere.core.rewrite.feature.encrypt.token.generator.impl.EncryptForUseDefaultInsertColumnsTokenGenerator; diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/token/generator/BaseEncryptSQLTokenGenerator.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/token/generator/BaseEncryptSQLTokenGenerator.java new file mode 100644 index 0000000000000000000000000000000000000000..3d655ce1fc2d88ee9fc9adb0327f81faa7b4223b --- /dev/null +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/token/generator/BaseEncryptSQLTokenGenerator.java @@ -0,0 +1,53 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.shardingsphere.core.rewrite.feature.encrypt.token.generator; + +import lombok.Getter; +import lombok.Setter; +import org.apache.shardingsphere.core.preprocessor.statement.SQLStatementContext; +import org.apache.shardingsphere.core.rewrite.feature.encrypt.aware.EncryptRuleAware; +import org.apache.shardingsphere.core.rewrite.sql.token.generator.SQLTokenGenerator; +import org.apache.shardingsphere.core.rule.EncryptRule; + +/** + * Base SQL token generator for encrypt. + * + * @author zhangliang + */ +@Getter +@Setter +public abstract class BaseEncryptSQLTokenGenerator implements SQLTokenGenerator, EncryptRuleAware { + + private EncryptRule encryptRule; + + @Override + public final boolean isGenerateSQLToken(final SQLStatementContext sqlStatementContext) { + return isGenerateSQLTokenForEncrypt(sqlStatementContext) && needEncrypt(sqlStatementContext); + } + + protected abstract boolean isGenerateSQLTokenForEncrypt(SQLStatementContext sqlStatementContext); + + private boolean needEncrypt(final SQLStatementContext sqlStatementContext) { + for (String each : sqlStatementContext.getTablesContext().getTableNames()) { + if (encryptRule.findEncryptTable(each).isPresent()) { + return true; + } + } + return false; + } +} diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/token/generator/impl/AssistQueryAndPlainInsertColumnsTokenGenerator.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/token/generator/impl/AssistQueryAndPlainInsertColumnsTokenGenerator.java index 873898b0a24c893e209b68fb9a19ac866ddbd03b..3bf7d8c3933e6a17d6b85edcd1886a66793e8e15 100644 --- a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/token/generator/impl/AssistQueryAndPlainInsertColumnsTokenGenerator.java +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/token/generator/impl/AssistQueryAndPlainInsertColumnsTokenGenerator.java @@ -19,16 +19,14 @@ package org.apache.shardingsphere.core.rewrite.feature.encrypt.token.generator.i import com.google.common.base.Optional; import com.google.common.base.Preconditions; -import lombok.Setter; import org.apache.shardingsphere.core.parse.sql.segment.dml.column.ColumnSegment; import org.apache.shardingsphere.core.parse.sql.segment.dml.column.InsertColumnsSegment; import org.apache.shardingsphere.core.parse.sql.statement.dml.InsertStatement; import org.apache.shardingsphere.core.preprocessor.statement.SQLStatementContext; import org.apache.shardingsphere.core.preprocessor.statement.impl.InsertSQLStatementContext; -import org.apache.shardingsphere.core.rewrite.feature.encrypt.token.generator.EncryptRuleAware; -import org.apache.shardingsphere.core.rewrite.sql.token.pojo.generic.InsertColumnsToken; +import org.apache.shardingsphere.core.rewrite.feature.encrypt.token.generator.BaseEncryptSQLTokenGenerator; import org.apache.shardingsphere.core.rewrite.sql.token.generator.CollectionSQLTokenGenerator; -import org.apache.shardingsphere.core.rule.EncryptRule; +import org.apache.shardingsphere.core.rewrite.sql.token.pojo.generic.InsertColumnsToken; import org.apache.shardingsphere.core.strategy.encrypt.EncryptTable; import java.util.Collection; @@ -41,22 +39,18 @@ import java.util.List; * @author panjuan * @author zhangliang */ -@Setter -public final class AssistQueryAndPlainInsertColumnsTokenGenerator implements CollectionSQLTokenGenerator, EncryptRuleAware { - - private EncryptRule encryptRule; +public final class AssistQueryAndPlainInsertColumnsTokenGenerator extends BaseEncryptSQLTokenGenerator implements CollectionSQLTokenGenerator { @Override - public boolean isGenerateSQLToken(final SQLStatementContext sqlStatementContext) { + protected boolean isGenerateSQLTokenForEncrypt(final SQLStatementContext sqlStatementContext) { return sqlStatementContext instanceof InsertSQLStatementContext && sqlStatementContext.getSqlStatement().findSQLSegment(InsertColumnsSegment.class).isPresent() - && !((InsertStatement) sqlStatementContext.getSqlStatement()).useDefaultColumns() - && encryptRule.findEncryptTable(sqlStatementContext.getTablesContext().getSingleTableName()).isPresent(); + && !((InsertStatement) sqlStatementContext.getSqlStatement()).useDefaultColumns(); } @Override public Collection generateSQLTokens(final SQLStatementContext sqlStatementContext) { Collection result = new LinkedList<>(); - Optional encryptTable = encryptRule.findEncryptTable(sqlStatementContext.getTablesContext().getSingleTableName()); + Optional encryptTable = getEncryptRule().findEncryptTable(sqlStatementContext.getTablesContext().getSingleTableName()); Preconditions.checkState(encryptTable.isPresent()); for (ColumnSegment each : ((InsertStatement) sqlStatementContext.getSqlStatement()).getColumns()) { List columns = getColumns(encryptTable.get(), each); diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/token/generator/impl/EncryptAssignmentTokenGenerator.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/token/generator/impl/EncryptAssignmentTokenGenerator.java index ff5ec0492915a04ebe6c98ccae908d9dec15b0a9..177826189d2fe5d4c39904f4ae0995579021a974 100644 --- a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/token/generator/impl/EncryptAssignmentTokenGenerator.java +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/token/generator/impl/EncryptAssignmentTokenGenerator.java @@ -19,7 +19,6 @@ package org.apache.shardingsphere.core.rewrite.feature.encrypt.token.generator.i import com.google.common.base.Optional; import com.google.common.base.Preconditions; -import lombok.Setter; import org.apache.shardingsphere.core.parse.sql.segment.dml.assignment.AssignmentSegment; import org.apache.shardingsphere.core.parse.sql.segment.dml.assignment.SetAssignmentsSegment; import org.apache.shardingsphere.core.parse.sql.segment.dml.expr.simple.LiteralExpressionSegment; @@ -29,12 +28,11 @@ import org.apache.shardingsphere.core.parse.sql.statement.dml.InsertStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.UpdateStatement; import org.apache.shardingsphere.core.preprocessor.statement.SQLStatementContext; import org.apache.shardingsphere.core.preprocessor.statement.impl.InsertSQLStatementContext; -import org.apache.shardingsphere.core.rewrite.feature.encrypt.token.generator.EncryptRuleAware; +import org.apache.shardingsphere.core.rewrite.feature.encrypt.token.generator.BaseEncryptSQLTokenGenerator; import org.apache.shardingsphere.core.rewrite.feature.encrypt.token.pojo.EncryptAssignmentToken; import org.apache.shardingsphere.core.rewrite.feature.encrypt.token.pojo.EncryptLiteralAssignmentToken; import org.apache.shardingsphere.core.rewrite.feature.encrypt.token.pojo.EncryptParameterAssignmentToken; import org.apache.shardingsphere.core.rewrite.sql.token.generator.CollectionSQLTokenGenerator; -import org.apache.shardingsphere.core.rule.EncryptRule; import java.util.Collection; import java.util.Collections; @@ -45,17 +43,10 @@ import java.util.LinkedList; * * @author panjuan */ -@Setter -public final class EncryptAssignmentTokenGenerator implements CollectionSQLTokenGenerator, EncryptRuleAware { - - private EncryptRule encryptRule; +public final class EncryptAssignmentTokenGenerator extends BaseEncryptSQLTokenGenerator implements CollectionSQLTokenGenerator { @Override - public boolean isGenerateSQLToken(final SQLStatementContext sqlStatementContext) { - return isSetAssignmentStatement(sqlStatementContext); - } - - private boolean isSetAssignmentStatement(final SQLStatementContext sqlStatementContext) { + protected boolean isGenerateSQLTokenForEncrypt(final SQLStatementContext sqlStatementContext) { return sqlStatementContext.getSqlStatement() instanceof UpdateStatement || sqlStatementContext instanceof InsertSQLStatementContext && sqlStatementContext.getSqlStatement().findSQLSegment(SetAssignmentsSegment.class).isPresent(); } @@ -65,7 +56,7 @@ public final class EncryptAssignmentTokenGenerator implements CollectionSQLToken Collection result = new LinkedList<>(); String tableName = sqlStatementContext.getTablesContext().getSingleTableName(); for (AssignmentSegment each : getSetAssignmentsSegment(sqlStatementContext.getSqlStatement()).getAssignments()) { - if (encryptRule.findShardingEncryptor(tableName, each.getColumn().getName()).isPresent()) { + if (getEncryptRule().findShardingEncryptor(tableName, each.getColumn().getName()).isPresent()) { Optional sqlToken = generateSQLToken(tableName, each); if (sqlToken.isPresent()) { result.add(sqlToken.get()); @@ -104,18 +95,18 @@ public final class EncryptAssignmentTokenGenerator implements CollectionSQLToken } private void addCipherColumn(final String tableName, final String columnName, final EncryptParameterAssignmentToken token) { - token.addColumnName(encryptRule.getCipherColumn(tableName, columnName)); + token.addColumnName(getEncryptRule().getCipherColumn(tableName, columnName)); } private void addAssistedQueryColumn(final String tableName, final String columnName, final EncryptParameterAssignmentToken token) { - Optional assistedQueryColumn = encryptRule.findAssistedQueryColumn(tableName, columnName); + Optional assistedQueryColumn = getEncryptRule().findAssistedQueryColumn(tableName, columnName); if (assistedQueryColumn.isPresent()) { token.addColumnName(assistedQueryColumn.get()); } } private void addPlainColumn(final String tableName, final String columnName, final EncryptParameterAssignmentToken token) { - Optional plainColumn = encryptRule.findPlainColumn(tableName, columnName); + Optional plainColumn = getEncryptRule().findPlainColumn(tableName, columnName); if (plainColumn.isPresent()) { token.addColumnName(plainColumn.get()); } @@ -131,22 +122,22 @@ public final class EncryptAssignmentTokenGenerator implements CollectionSQLToken private void addCipherAssignment(final String tableName, final AssignmentSegment assignmentSegment, final EncryptLiteralAssignmentToken token) { Object originalValue = ((LiteralExpressionSegment) assignmentSegment.getValue()).getLiterals(); - Object cipherValue = encryptRule.getEncryptValues(tableName, assignmentSegment.getColumn().getName(), Collections.singletonList(originalValue)).iterator().next(); - token.addAssignment(encryptRule.getCipherColumn(tableName, assignmentSegment.getColumn().getName()), cipherValue); + Object cipherValue = getEncryptRule().getEncryptValues(tableName, assignmentSegment.getColumn().getName(), Collections.singletonList(originalValue)).iterator().next(); + token.addAssignment(getEncryptRule().getCipherColumn(tableName, assignmentSegment.getColumn().getName()), cipherValue); } private void addAssistedQueryAssignment(final String tableName, final AssignmentSegment assignmentSegment, final EncryptLiteralAssignmentToken token) { Object originalValue = ((LiteralExpressionSegment) assignmentSegment.getValue()).getLiterals(); - Optional assistedQueryColumn = encryptRule.findAssistedQueryColumn(tableName, assignmentSegment.getColumn().getName()); + Optional assistedQueryColumn = getEncryptRule().findAssistedQueryColumn(tableName, assignmentSegment.getColumn().getName()); if (assistedQueryColumn.isPresent()) { - Object assistedQueryValue = encryptRule.getEncryptAssistedQueryValues(tableName, assignmentSegment.getColumn().getName(), Collections.singletonList(originalValue)).iterator().next(); + Object assistedQueryValue = getEncryptRule().getEncryptAssistedQueryValues(tableName, assignmentSegment.getColumn().getName(), Collections.singletonList(originalValue)).iterator().next(); token.addAssignment(assistedQueryColumn.get(), assistedQueryValue); } } private void addPlainAssignment(final String tableName, final AssignmentSegment assignmentSegment, final EncryptLiteralAssignmentToken token) { Object originalValue = ((LiteralExpressionSegment) assignmentSegment.getValue()).getLiterals(); - Optional plainColumn = encryptRule.findPlainColumn(tableName, assignmentSegment.getColumn().getName()); + Optional plainColumn = getEncryptRule().findPlainColumn(tableName, assignmentSegment.getColumn().getName()); if (plainColumn.isPresent()) { token.addAssignment(plainColumn.get(), originalValue); } diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/token/generator/impl/EncryptForUseDefaultInsertColumnsTokenGenerator.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/token/generator/impl/EncryptForUseDefaultInsertColumnsTokenGenerator.java index c77306b4bfd1d3f3cfdf6d174f74d1086ff8acb4..e24f2da32521cadfbf6d8367788f273d7d333916 100644 --- a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/token/generator/impl/EncryptForUseDefaultInsertColumnsTokenGenerator.java +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/token/generator/impl/EncryptForUseDefaultInsertColumnsTokenGenerator.java @@ -24,12 +24,11 @@ import org.apache.shardingsphere.core.parse.sql.segment.dml.column.InsertColumns import org.apache.shardingsphere.core.parse.sql.statement.dml.InsertStatement; import org.apache.shardingsphere.core.preprocessor.statement.SQLStatementContext; import org.apache.shardingsphere.core.preprocessor.statement.impl.InsertSQLStatementContext; -import org.apache.shardingsphere.core.rewrite.feature.encrypt.token.generator.EncryptRuleAware; +import org.apache.shardingsphere.core.rewrite.feature.encrypt.token.generator.BaseEncryptSQLTokenGenerator; import org.apache.shardingsphere.core.rewrite.sql.token.generator.OptionalSQLTokenGenerator; import org.apache.shardingsphere.core.rewrite.sql.token.generator.aware.PreviousSQLTokensAware; import org.apache.shardingsphere.core.rewrite.sql.token.pojo.SQLToken; import org.apache.shardingsphere.core.rewrite.sql.token.pojo.generic.UseDefaultInsertColumnsToken; -import org.apache.shardingsphere.core.rule.EncryptRule; import org.apache.shardingsphere.core.strategy.encrypt.EncryptTable; import java.util.Iterator; @@ -43,16 +42,13 @@ import java.util.List; * @author zhangliang */ @Setter -public final class EncryptForUseDefaultInsertColumnsTokenGenerator implements OptionalSQLTokenGenerator, EncryptRuleAware, PreviousSQLTokensAware { - - private EncryptRule encryptRule; +public final class EncryptForUseDefaultInsertColumnsTokenGenerator extends BaseEncryptSQLTokenGenerator implements OptionalSQLTokenGenerator, PreviousSQLTokensAware { private List previousSQLTokens; @Override - public boolean isGenerateSQLToken(final SQLStatementContext sqlStatementContext) { - return sqlStatementContext instanceof InsertSQLStatementContext && ((InsertStatement) sqlStatementContext.getSqlStatement()).useDefaultColumns() - && encryptRule.findEncryptTable(sqlStatementContext.getTablesContext().getSingleTableName()).isPresent(); + protected boolean isGenerateSQLTokenForEncrypt(final SQLStatementContext sqlStatementContext) { + return sqlStatementContext instanceof InsertSQLStatementContext && ((InsertStatement) sqlStatementContext.getSqlStatement()).useDefaultColumns(); } @Override @@ -76,7 +72,7 @@ public final class EncryptForUseDefaultInsertColumnsTokenGenerator implements Op } private void processPreviousSQLToken(final UseDefaultInsertColumnsToken previousSQLToken, final InsertSQLStatementContext sqlStatementContext, final String tableName) { - Optional encryptTable = encryptRule.findEncryptTable(tableName); + Optional encryptTable = getEncryptRule().findEncryptTable(tableName); Preconditions.checkState(encryptTable.isPresent()); List columnNames = getColumnNames(sqlStatementContext, encryptTable.get(), previousSQLToken.getColumns()); previousSQLToken.getColumns().clear(); @@ -86,7 +82,7 @@ public final class EncryptForUseDefaultInsertColumnsTokenGenerator implements Op private UseDefaultInsertColumnsToken generateNewSQLToken(final InsertSQLStatementContext sqlStatementContext, final String tableName) { Optional insertColumnsSegment = sqlStatementContext.getSqlStatement().findSQLSegment(InsertColumnsSegment.class); Preconditions.checkState(insertColumnsSegment.isPresent()); - Optional encryptTable = encryptRule.findEncryptTable(tableName); + Optional encryptTable = getEncryptRule().findEncryptTable(tableName); Preconditions.checkState(encryptTable.isPresent()); return new UseDefaultInsertColumnsToken(insertColumnsSegment.get().getStopIndex(), getColumnNames(sqlStatementContext, encryptTable.get(), sqlStatementContext.getColumnNames())); } diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/token/generator/impl/EncryptInsertValuesTokenGenerator.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/token/generator/impl/EncryptInsertValuesTokenGenerator.java index e1eafb775c7617f26b6069b1fc8960dee2ab9c89..64c3fc74dba6a30c7d002f09668f1dd6e36f6fbc 100644 --- a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/token/generator/impl/EncryptInsertValuesTokenGenerator.java +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/token/generator/impl/EncryptInsertValuesTokenGenerator.java @@ -29,7 +29,7 @@ import org.apache.shardingsphere.core.preprocessor.segment.insert.expression.Der import org.apache.shardingsphere.core.preprocessor.segment.insert.expression.DerivedSimpleExpressionSegment; import org.apache.shardingsphere.core.preprocessor.statement.SQLStatementContext; import org.apache.shardingsphere.core.preprocessor.statement.impl.InsertSQLStatementContext; -import org.apache.shardingsphere.core.rewrite.feature.encrypt.token.generator.EncryptRuleAware; +import org.apache.shardingsphere.core.rewrite.feature.encrypt.token.generator.BaseEncryptSQLTokenGenerator; import org.apache.shardingsphere.core.rewrite.sql.token.generator.OptionalSQLTokenGenerator; import org.apache.shardingsphere.core.rewrite.sql.token.generator.aware.PreviousSQLTokensAware; import org.apache.shardingsphere.core.rewrite.sql.token.pojo.SQLToken; @@ -37,7 +37,6 @@ import org.apache.shardingsphere.core.rewrite.sql.token.pojo.generic.InsertValue import org.apache.shardingsphere.core.rewrite.sql.token.pojo.generic.InsertValuesToken.InsertValueToken; import org.apache.shardingsphere.core.rewrite.sql.token.pojo.generic.UseDefaultInsertColumnsToken; import org.apache.shardingsphere.core.rule.DataNode; -import org.apache.shardingsphere.core.rule.EncryptRule; import org.apache.shardingsphere.spi.encrypt.ShardingEncryptor; import org.apache.shardingsphere.spi.encrypt.ShardingQueryAssistedEncryptor; @@ -52,16 +51,13 @@ import java.util.List; * @author panjuan */ @Setter -public final class EncryptInsertValuesTokenGenerator implements OptionalSQLTokenGenerator, EncryptRuleAware, PreviousSQLTokensAware { - - private EncryptRule encryptRule; +public final class EncryptInsertValuesTokenGenerator extends BaseEncryptSQLTokenGenerator implements OptionalSQLTokenGenerator, PreviousSQLTokensAware { private List previousSQLTokens; @Override - public boolean isGenerateSQLToken(final SQLStatementContext sqlStatementContext) { - return sqlStatementContext instanceof InsertSQLStatementContext && !sqlStatementContext.getSqlStatement().findSQLSegments(InsertValuesSegment.class).isEmpty() - && encryptRule.findEncryptTable(sqlStatementContext.getTablesContext().getSingleTableName()).isPresent(); + protected boolean isGenerateSQLTokenForEncrypt(final SQLStatementContext sqlStatementContext) { + return sqlStatementContext instanceof InsertSQLStatementContext && !sqlStatementContext.getSqlStatement().findSQLSegments(InsertValuesSegment.class).isEmpty(); } @Override @@ -125,7 +121,7 @@ public final class EncryptInsertValuesTokenGenerator implements OptionalSQLToken Iterator descendingColumnNames = sqlStatementContext.getDescendingColumnNames(); while (descendingColumnNames.hasNext()) { String columnName = descendingColumnNames.next(); - Optional encryptor = encryptRule.findShardingEncryptor(tableName, columnName); + Optional encryptor = getEncryptRule().findShardingEncryptor(tableName, columnName); if (encryptor.isPresent()) { int columnIndex = useDefaultInsertColumnsToken.isPresent() ? ((UseDefaultInsertColumnsToken) useDefaultInsertColumnsToken.get()).getColumns().indexOf(columnName) : sqlStatementContext.getColumnNames().indexOf(columnName); @@ -139,7 +135,7 @@ public final class EncryptInsertValuesTokenGenerator implements OptionalSQLToken private void addPlainColumn(final InsertValueToken insertValueToken, final int columnIndex, final String tableName, final String columnName, final InsertValueContext insertValueContext, final Object originalValue) { - if (encryptRule.findPlainColumn(tableName, columnName).isPresent()) { + if (getEncryptRule().findPlainColumn(tableName, columnName).isPresent()) { DerivedSimpleExpressionSegment derivedExpressionSegment = insertValueContext.getParameters().isEmpty() ? new DerivedLiteralExpressionSegment(originalValue) : new DerivedParameterMarkerExpressionSegment(getParameterIndexCount(insertValueToken)); insertValueToken.getValues().add(columnIndex + 1, derivedExpressionSegment); @@ -148,7 +144,7 @@ public final class EncryptInsertValuesTokenGenerator implements OptionalSQLToken private void addAssistedQueryColumn(final InsertValueToken insertValueToken, final ShardingEncryptor encryptor, final int columnIndex, final String tableName, final String columnName, final InsertValueContext insertValueContext, final Object originalValue) { - if (encryptRule.findAssistedQueryColumn(tableName, columnName).isPresent()) { + if (getEncryptRule().findAssistedQueryColumn(tableName, columnName).isPresent()) { DerivedSimpleExpressionSegment derivedExpressionSegment = insertValueContext.getParameters().isEmpty() ? new DerivedLiteralExpressionSegment(((ShardingQueryAssistedEncryptor) encryptor).queryAssistedEncrypt(null == originalValue ? null : originalValue.toString())) : new DerivedParameterMarkerExpressionSegment(getParameterIndexCount(insertValueToken)); diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/token/generator/impl/EncryptPredicateColumnTokenGenerator.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/token/generator/impl/EncryptPredicateColumnTokenGenerator.java index 1a87e330c5e747c470fb668547b7aa925b69a794..70bb53adbd31cbaa62f4e158e114cabc9fa1f7d4 100644 --- a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/token/generator/impl/EncryptPredicateColumnTokenGenerator.java +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/token/generator/impl/EncryptPredicateColumnTokenGenerator.java @@ -25,12 +25,11 @@ import org.apache.shardingsphere.core.parse.sql.segment.dml.predicate.AndPredica import org.apache.shardingsphere.core.parse.sql.segment.dml.predicate.PredicateSegment; import org.apache.shardingsphere.core.parse.sql.statement.generic.WhereSegmentAvailable; import org.apache.shardingsphere.core.preprocessor.statement.SQLStatementContext; -import org.apache.shardingsphere.core.rewrite.feature.encrypt.token.generator.EncryptRuleAware; -import org.apache.shardingsphere.core.rewrite.feature.encrypt.token.generator.QueryWithCipherColumnAware; +import org.apache.shardingsphere.core.rewrite.feature.encrypt.token.generator.BaseEncryptSQLTokenGenerator; +import org.apache.shardingsphere.core.rewrite.feature.encrypt.aware.QueryWithCipherColumnAware; import org.apache.shardingsphere.core.rewrite.sql.token.generator.CollectionSQLTokenGenerator; import org.apache.shardingsphere.core.rewrite.sql.token.generator.aware.TableMetasAware; import org.apache.shardingsphere.core.rewrite.sql.token.pojo.generic.SubstitutableColumnNameToken; -import org.apache.shardingsphere.core.rule.EncryptRule; import org.apache.shardingsphere.core.strategy.encrypt.EncryptTable; import java.util.Collection; @@ -43,16 +42,14 @@ import java.util.LinkedList; * @author zhangliang */ @Setter -public final class EncryptPredicateColumnTokenGenerator implements CollectionSQLTokenGenerator, TableMetasAware, EncryptRuleAware, QueryWithCipherColumnAware { +public final class EncryptPredicateColumnTokenGenerator extends BaseEncryptSQLTokenGenerator implements CollectionSQLTokenGenerator, TableMetasAware, QueryWithCipherColumnAware { private TableMetas tableMetas; - private EncryptRule encryptRule; - private boolean queryWithCipherColumn; @Override - public boolean isGenerateSQLToken(final SQLStatementContext sqlStatementContext) { + protected boolean isGenerateSQLTokenForEncrypt(final SQLStatementContext sqlStatementContext) { return sqlStatementContext.getSqlStatement() instanceof WhereSegmentAvailable && ((WhereSegmentAvailable) sqlStatementContext.getSqlStatement()).getWhere().isPresent(); } @@ -92,6 +89,6 @@ public final class EncryptPredicateColumnTokenGenerator implements CollectionSQL private Optional findEncryptTable(final SQLStatementContext sqlStatementContext, final PredicateSegment segment) { Optional tableName = sqlStatementContext.getTablesContext().findTableName(segment.getColumn(), tableMetas); - return tableName.isPresent() ? encryptRule.findEncryptTable(tableName.get()) : Optional.absent(); + return tableName.isPresent() ? getEncryptRule().findEncryptTable(tableName.get()) : Optional.absent(); } } diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/token/generator/impl/EncryptPredicateRightValueTokenGenerator.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/token/generator/impl/EncryptPredicateRightValueTokenGenerator.java index 3f6897b4e040ee84cc7be13f48fccd0aa1452d53..b46215865b51f6b988ab10adb40a54931961a4a4 100644 --- a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/token/generator/impl/EncryptPredicateRightValueTokenGenerator.java +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/token/generator/impl/EncryptPredicateRightValueTokenGenerator.java @@ -24,13 +24,12 @@ import org.apache.shardingsphere.core.parse.sql.statement.generic.WhereSegmentAv import org.apache.shardingsphere.core.preprocessor.statement.SQLStatementContext; import org.apache.shardingsphere.core.rewrite.feature.encrypt.EncryptCondition; import org.apache.shardingsphere.core.rewrite.feature.encrypt.EncryptConditionEngine; -import org.apache.shardingsphere.core.rewrite.feature.encrypt.token.generator.EncryptRuleAware; -import org.apache.shardingsphere.core.rewrite.feature.encrypt.token.generator.QueryWithCipherColumnAware; +import org.apache.shardingsphere.core.rewrite.feature.encrypt.token.generator.BaseEncryptSQLTokenGenerator; +import org.apache.shardingsphere.core.rewrite.feature.encrypt.aware.QueryWithCipherColumnAware; import org.apache.shardingsphere.core.rewrite.feature.encrypt.token.pojo.EncryptPredicateRightValueToken; import org.apache.shardingsphere.core.rewrite.sql.token.generator.CollectionSQLTokenGenerator; import org.apache.shardingsphere.core.rewrite.sql.token.generator.aware.ParametersAware; import org.apache.shardingsphere.core.rewrite.sql.token.generator.aware.TableMetasAware; -import org.apache.shardingsphere.core.rule.EncryptRule; import java.util.Collection; import java.util.Collections; @@ -46,24 +45,22 @@ import java.util.Map; * @author zhangliang */ @Setter -public final class EncryptPredicateRightValueTokenGenerator implements CollectionSQLTokenGenerator, TableMetasAware, EncryptRuleAware, ParametersAware, QueryWithCipherColumnAware { +public final class EncryptPredicateRightValueTokenGenerator extends BaseEncryptSQLTokenGenerator implements CollectionSQLTokenGenerator, TableMetasAware, ParametersAware, QueryWithCipherColumnAware { private TableMetas tableMetas; - private EncryptRule encryptRule; - private List parameters; private boolean queryWithCipherColumn; @Override - public boolean isGenerateSQLToken(final SQLStatementContext sqlStatementContext) { + protected boolean isGenerateSQLTokenForEncrypt(final SQLStatementContext sqlStatementContext) { return sqlStatementContext.getSqlStatement() instanceof WhereSegmentAvailable && ((WhereSegmentAvailable) sqlStatementContext.getSqlStatement()).getWhere().isPresent(); } @Override public Collection generateSQLTokens(final SQLStatementContext sqlStatementContext) { - List encryptConditions = new EncryptConditionEngine(encryptRule, tableMetas).createEncryptConditions(sqlStatementContext); + List encryptConditions = new EncryptConditionEngine(getEncryptRule(), tableMetas).createEncryptConditions(sqlStatementContext); return encryptConditions.isEmpty() ? Collections.emptyList() : generateSQLTokens(encryptConditions); } @@ -87,10 +84,10 @@ public final class EncryptPredicateRightValueTokenGenerator implements Collectio } private List getEncryptedValues(final EncryptCondition encryptCondition, final List originalValues) { - Optional assistedQueryColumn = encryptRule.findAssistedQueryColumn(encryptCondition.getTableName(), encryptCondition.getColumnName()); + Optional assistedQueryColumn = getEncryptRule().findAssistedQueryColumn(encryptCondition.getTableName(), encryptCondition.getColumnName()); return assistedQueryColumn.isPresent() - ? encryptRule.getEncryptAssistedQueryValues(encryptCondition.getTableName(), encryptCondition.getColumnName(), originalValues) - : encryptRule.getEncryptValues(encryptCondition.getTableName(), encryptCondition.getColumnName(), originalValues); + ? getEncryptRule().getEncryptAssistedQueryValues(encryptCondition.getTableName(), encryptCondition.getColumnName(), originalValues) + : getEncryptRule().getEncryptValues(encryptCondition.getTableName(), encryptCondition.getColumnName(), originalValues); } private EncryptPredicateRightValueToken generateSQLTokenForQueryWithoutCipherColumn(final EncryptCondition encryptCondition, final List originalValues) { diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/token/generator/impl/EncryptProjectionTokenGenerator.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/token/generator/impl/EncryptProjectionTokenGenerator.java index 59b6b198016a11f567cd285a42f89335d7b68e4f..6acc8be9cbe2ca2125c6d2ee798de5829683b6dd 100644 --- a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/token/generator/impl/EncryptProjectionTokenGenerator.java +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/token/generator/impl/EncryptProjectionTokenGenerator.java @@ -25,11 +25,10 @@ import org.apache.shardingsphere.core.parse.sql.segment.dml.item.SelectItemSegme import org.apache.shardingsphere.core.parse.sql.segment.dml.item.SelectItemsSegment; import org.apache.shardingsphere.core.parse.sql.statement.dml.SelectStatement; import org.apache.shardingsphere.core.preprocessor.statement.SQLStatementContext; -import org.apache.shardingsphere.core.rewrite.feature.encrypt.token.generator.EncryptRuleAware; -import org.apache.shardingsphere.core.rewrite.feature.encrypt.token.generator.QueryWithCipherColumnAware; +import org.apache.shardingsphere.core.rewrite.feature.encrypt.token.generator.BaseEncryptSQLTokenGenerator; +import org.apache.shardingsphere.core.rewrite.feature.encrypt.aware.QueryWithCipherColumnAware; import org.apache.shardingsphere.core.rewrite.sql.token.generator.CollectionSQLTokenGenerator; import org.apache.shardingsphere.core.rewrite.sql.token.pojo.generic.SubstitutableColumnNameToken; -import org.apache.shardingsphere.core.rule.EncryptRule; import org.apache.shardingsphere.core.strategy.encrypt.EncryptTable; import java.util.Collection; @@ -37,19 +36,17 @@ import java.util.Collections; import java.util.LinkedList; /** - * Encrypt projection token generator. + * Projection token generator for encrypt. * * @author panjuan */ @Setter -public final class EncryptProjectionTokenGenerator implements CollectionSQLTokenGenerator, EncryptRuleAware, QueryWithCipherColumnAware { - - private EncryptRule encryptRule; +public final class EncryptProjectionTokenGenerator extends BaseEncryptSQLTokenGenerator implements CollectionSQLTokenGenerator, QueryWithCipherColumnAware { private boolean queryWithCipherColumn; @Override - public boolean isGenerateSQLToken(final SQLStatementContext sqlStatementContext) { + protected boolean isGenerateSQLTokenForEncrypt(final SQLStatementContext sqlStatementContext) { if (!(sqlStatementContext.getSqlStatement() instanceof SelectStatement && !sqlStatementContext.getTablesContext().isEmpty())) { return false; } @@ -63,7 +60,7 @@ public final class EncryptProjectionTokenGenerator implements CollectionSQLToken Optional selectItemsSegment = sqlStatementContext.getSqlStatement().findSQLSegment(SelectItemsSegment.class); Preconditions.checkState(selectItemsSegment.isPresent()); String tableName = sqlStatementContext.getTablesContext().getSingleTableName(); - Optional encryptTable = encryptRule.findEncryptTable(tableName); + Optional encryptTable = getEncryptRule().findEncryptTable(tableName); if (!encryptTable.isPresent()) { return Collections.emptyList(); } @@ -80,8 +77,8 @@ public final class EncryptProjectionTokenGenerator implements CollectionSQLToken } private SubstitutableColumnNameToken generateSQLToken(final ColumnSelectItemSegment segment, final String tableName) { - Optional plainColumn = encryptRule.findPlainColumn(tableName, segment.getName()); - String columnName = plainColumn.isPresent() && !queryWithCipherColumn ? plainColumn.get() : encryptRule.getCipherColumn(tableName, segment.getName()); + Optional plainColumn = getEncryptRule().findPlainColumn(tableName, segment.getName()); + String columnName = plainColumn.isPresent() && !queryWithCipherColumn ? plainColumn.get() : getEncryptRule().getCipherColumn(tableName, segment.getName()); return segment.getOwner().isPresent() ? new SubstitutableColumnNameToken(segment.getOwner().get().getStopIndex() + 2, segment.getStopIndex(), columnName) : new SubstitutableColumnNameToken(segment.getStartIndex(), segment.getStopIndex(), columnName); } diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/token/generator/impl/InsertCipherNameTokenGenerator.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/token/generator/impl/InsertCipherNameTokenGenerator.java index 677c959b0ae9ad9e9b4f29b39121e2cc461a6428..293eea0fa04e295f8033979ecd2c38aeaa95575d 100644 --- a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/token/generator/impl/InsertCipherNameTokenGenerator.java +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/encrypt/token/generator/impl/InsertCipherNameTokenGenerator.java @@ -19,15 +19,13 @@ package org.apache.shardingsphere.core.rewrite.feature.encrypt.token.generator.i import com.google.common.base.Optional; import com.google.common.base.Preconditions; -import lombok.Setter; -import org.apache.shardingsphere.core.preprocessor.statement.SQLStatementContext; -import org.apache.shardingsphere.core.preprocessor.statement.impl.InsertSQLStatementContext; import org.apache.shardingsphere.core.parse.sql.segment.dml.column.ColumnSegment; import org.apache.shardingsphere.core.parse.sql.segment.dml.column.InsertColumnsSegment; -import org.apache.shardingsphere.core.rewrite.feature.encrypt.token.generator.EncryptRuleAware; +import org.apache.shardingsphere.core.preprocessor.statement.SQLStatementContext; +import org.apache.shardingsphere.core.preprocessor.statement.impl.InsertSQLStatementContext; +import org.apache.shardingsphere.core.rewrite.feature.encrypt.token.generator.BaseEncryptSQLTokenGenerator; import org.apache.shardingsphere.core.rewrite.sql.token.generator.CollectionSQLTokenGenerator; import org.apache.shardingsphere.core.rewrite.sql.token.pojo.generic.SubstitutableColumnNameToken; -import org.apache.shardingsphere.core.rule.EncryptRule; import java.util.Collection; import java.util.LinkedList; @@ -38,13 +36,10 @@ import java.util.Map; * * @author panjuan */ -@Setter -public final class InsertCipherNameTokenGenerator implements CollectionSQLTokenGenerator, EncryptRuleAware { - - private EncryptRule encryptRule; +public final class InsertCipherNameTokenGenerator extends BaseEncryptSQLTokenGenerator implements CollectionSQLTokenGenerator { @Override - public boolean isGenerateSQLToken(final SQLStatementContext sqlStatementContext) { + protected boolean isGenerateSQLTokenForEncrypt(final SQLStatementContext sqlStatementContext) { Optional insertColumnsSegment = sqlStatementContext.getSqlStatement().findSQLSegment(InsertColumnsSegment.class); return sqlStatementContext instanceof InsertSQLStatementContext && insertColumnsSegment.isPresent() && !insertColumnsSegment.get().getColumns().isEmpty(); } @@ -53,7 +48,7 @@ public final class InsertCipherNameTokenGenerator implements CollectionSQLTokenG public Collection generateSQLTokens(final SQLStatementContext sqlStatementContext) { Optional sqlSegment = sqlStatementContext.getSqlStatement().findSQLSegment(InsertColumnsSegment.class); Preconditions.checkState(sqlSegment.isPresent()); - Map logicAndCipherColumns = encryptRule.getLogicAndCipherColumns(sqlStatementContext.getTablesContext().getSingleTableName()); + Map logicAndCipherColumns = getEncryptRule().getLogicAndCipherColumns(sqlStatementContext.getTablesContext().getSingleTableName()); Collection result = new LinkedList<>(); for (ColumnSegment each : sqlSegment.get().getColumns()) { if (logicAndCipherColumns.keySet().contains(each.getName())) { diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/sharding/token/generator/SQLRouteResultAware.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/sharding/aware/SQLRouteResultAware.java similarity index 98% rename from sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/sharding/token/generator/SQLRouteResultAware.java rename to sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/sharding/aware/SQLRouteResultAware.java index 548c9a9419510728e27c41d06338228b20e6153c..079e92612c0954450a84528464221debefd3c403 100644 --- a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/sharding/token/generator/SQLRouteResultAware.java +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/sharding/aware/SQLRouteResultAware.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.shardingsphere.core.rewrite.feature.sharding.token.generator; +package org.apache.shardingsphere.core.rewrite.feature.sharding.aware; import org.apache.shardingsphere.core.route.SQLRouteResult; diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/sharding/token/generator/ShardingRuleAware.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/sharding/aware/ShardingRuleAware.java similarity index 98% rename from sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/sharding/token/generator/ShardingRuleAware.java rename to sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/sharding/aware/ShardingRuleAware.java index 2832ba43ed7faf699cf0db17853fdcf1eb4ff07f..03b0c6b5f49a3f40bc1d53f9151f1358abf758d6 100644 --- a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/sharding/token/generator/ShardingRuleAware.java +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/sharding/aware/ShardingRuleAware.java @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.apache.shardingsphere.core.rewrite.feature.sharding.token.generator; +package org.apache.shardingsphere.core.rewrite.feature.sharding.aware; import org.apache.shardingsphere.core.rule.ShardingRule; diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/sharding/parameter/ShardingParameterRewriterBuilder.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/sharding/parameter/ShardingParameterRewriterBuilder.java index c23773870f3db6c859d15a5f14d5a625f251e2d4..5792efb718ceaabde2956be5259e3b85708f9e70 100644 --- a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/sharding/parameter/ShardingParameterRewriterBuilder.java +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/sharding/parameter/ShardingParameterRewriterBuilder.java @@ -21,8 +21,8 @@ import lombok.RequiredArgsConstructor; import org.apache.shardingsphere.core.metadata.table.TableMetas; import org.apache.shardingsphere.core.rewrite.feature.sharding.parameter.impl.ShardingGeneratedKeyInsertValueParameterRewriter; import org.apache.shardingsphere.core.rewrite.feature.sharding.parameter.impl.ShardingPaginationParameterRewriter; -import org.apache.shardingsphere.core.rewrite.feature.sharding.token.generator.SQLRouteResultAware; -import org.apache.shardingsphere.core.rewrite.feature.sharding.token.generator.ShardingRuleAware; +import org.apache.shardingsphere.core.rewrite.feature.sharding.aware.SQLRouteResultAware; +import org.apache.shardingsphere.core.rewrite.feature.sharding.aware.ShardingRuleAware; import org.apache.shardingsphere.core.rewrite.parameter.rewriter.ParameterRewriter; import org.apache.shardingsphere.core.rewrite.parameter.rewriter.ParameterRewriterBuilder; import org.apache.shardingsphere.core.rewrite.sql.token.generator.aware.TableMetasAware; diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/sharding/parameter/impl/ShardingGeneratedKeyInsertValueParameterRewriter.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/sharding/parameter/impl/ShardingGeneratedKeyInsertValueParameterRewriter.java index 08ce8b66e3fc564f7656e49b6efbb5f8ce937faf..95833191bc035f4c54f0645eb9da16427b97eba1 100644 --- a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/sharding/parameter/impl/ShardingGeneratedKeyInsertValueParameterRewriter.java +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/sharding/parameter/impl/ShardingGeneratedKeyInsertValueParameterRewriter.java @@ -21,7 +21,7 @@ import com.google.common.collect.Lists; import lombok.Setter; import org.apache.shardingsphere.core.preprocessor.statement.SQLStatementContext; import org.apache.shardingsphere.core.preprocessor.statement.impl.InsertSQLStatementContext; -import org.apache.shardingsphere.core.rewrite.feature.sharding.token.generator.SQLRouteResultAware; +import org.apache.shardingsphere.core.rewrite.feature.sharding.aware.SQLRouteResultAware; import org.apache.shardingsphere.core.rewrite.parameter.builder.ParameterBuilder; import org.apache.shardingsphere.core.rewrite.parameter.builder.impl.GroupedParameterBuilder; import org.apache.shardingsphere.core.rewrite.parameter.rewriter.ParameterRewriter; diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/sharding/parameter/impl/ShardingPaginationParameterRewriter.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/sharding/parameter/impl/ShardingPaginationParameterRewriter.java index a5e622b5d96181e0679baa55e052f5316b0f4ad6..3af751b7013e2e6e91f1084e90fe5b19979e8b6f 100644 --- a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/sharding/parameter/impl/ShardingPaginationParameterRewriter.java +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/sharding/parameter/impl/ShardingPaginationParameterRewriter.java @@ -25,7 +25,7 @@ import org.apache.shardingsphere.core.preprocessor.statement.impl.SelectSQLState import org.apache.shardingsphere.core.rewrite.parameter.builder.ParameterBuilder; import org.apache.shardingsphere.core.rewrite.parameter.builder.impl.StandardParameterBuilder; import org.apache.shardingsphere.core.rewrite.parameter.rewriter.ParameterRewriter; -import org.apache.shardingsphere.core.rewrite.feature.sharding.token.generator.SQLRouteResultAware; +import org.apache.shardingsphere.core.rewrite.feature.sharding.aware.SQLRouteResultAware; import org.apache.shardingsphere.core.route.SQLRouteResult; import java.util.List; diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/sharding/token/ShardingTokenGenerateBuilder.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/sharding/token/ShardingTokenGenerateBuilder.java index 5949a05dfcf1aded6f2453ee655427e9e4668b73..6f2d8f0e5e605c3993d854e906634965ee000a35 100644 --- a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/sharding/token/ShardingTokenGenerateBuilder.java +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/sharding/token/ShardingTokenGenerateBuilder.java @@ -20,9 +20,9 @@ package org.apache.shardingsphere.core.rewrite.feature.sharding.token; import lombok.RequiredArgsConstructor; import org.apache.shardingsphere.core.rewrite.sql.token.generator.builder.SQLTokenGeneratorBuilder; import org.apache.shardingsphere.core.rewrite.feature.sharding.token.generator.IgnoreForSingleRoute; -import org.apache.shardingsphere.core.rewrite.feature.sharding.token.generator.SQLRouteResultAware; +import org.apache.shardingsphere.core.rewrite.feature.sharding.aware.SQLRouteResultAware; import org.apache.shardingsphere.core.rewrite.sql.token.generator.SQLTokenGenerator; -import org.apache.shardingsphere.core.rewrite.feature.sharding.token.generator.ShardingRuleAware; +import org.apache.shardingsphere.core.rewrite.feature.sharding.aware.ShardingRuleAware; import org.apache.shardingsphere.core.rewrite.feature.sharding.token.generator.impl.AggregationDistinctTokenGenerator; import org.apache.shardingsphere.core.rewrite.feature.sharding.token.generator.impl.IndexTokenGenerator; import org.apache.shardingsphere.core.rewrite.feature.sharding.token.generator.impl.TableTokenGenerator; diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/sharding/token/generator/impl/InsertValuesTokenGenerator.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/sharding/token/generator/impl/InsertValuesTokenGenerator.java index 6ddec6396941ff8b0a4d26ddc1081734b08013ee..89334c061e0ddb89a64538b5fa24595782cff541 100644 --- a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/sharding/token/generator/impl/InsertValuesTokenGenerator.java +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/sharding/token/generator/impl/InsertValuesTokenGenerator.java @@ -24,7 +24,7 @@ import org.apache.shardingsphere.core.parse.sql.statement.dml.InsertStatement; import org.apache.shardingsphere.core.preprocessor.segment.insert.InsertValueContext; import org.apache.shardingsphere.core.preprocessor.statement.SQLStatementContext; import org.apache.shardingsphere.core.preprocessor.statement.impl.InsertSQLStatementContext; -import org.apache.shardingsphere.core.rewrite.feature.sharding.token.generator.SQLRouteResultAware; +import org.apache.shardingsphere.core.rewrite.feature.sharding.aware.SQLRouteResultAware; import org.apache.shardingsphere.core.rewrite.sql.token.generator.OptionalSQLTokenGenerator; import org.apache.shardingsphere.core.rewrite.sql.token.pojo.generic.InsertValuesToken; import org.apache.shardingsphere.core.rewrite.sql.token.pojo.generic.InsertValuesToken.InsertValueToken; diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/sharding/token/generator/impl/TableTokenGenerator.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/sharding/token/generator/impl/TableTokenGenerator.java index da6261fcc91bab564977af58a4700eb5519b5ec6..4fa3891f990682f4bbca5e3d3e1f463ec9c6b898 100644 --- a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/sharding/token/generator/impl/TableTokenGenerator.java +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/sharding/token/generator/impl/TableTokenGenerator.java @@ -32,7 +32,7 @@ import org.apache.shardingsphere.core.parse.sql.segment.generic.TableSegment; import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement; import org.apache.shardingsphere.core.parse.sql.statement.dml.SelectStatement; import org.apache.shardingsphere.core.rewrite.sql.token.generator.CollectionSQLTokenGenerator; -import org.apache.shardingsphere.core.rewrite.feature.sharding.token.generator.ShardingRuleAware; +import org.apache.shardingsphere.core.rewrite.feature.sharding.aware.ShardingRuleAware; import org.apache.shardingsphere.core.rewrite.feature.sharding.token.pojo.TableToken; import org.apache.shardingsphere.core.rule.ShardingRule; diff --git a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/sharding/token/generator/impl/keygen/BaseGeneratedKeyTokenGenerator.java b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/sharding/token/generator/impl/keygen/BaseGeneratedKeyTokenGenerator.java index d6baeddd658d006972c2a09745ec47d5860eb251..70b83ddabdcff0cfb47290c77ff063b3cf4c7566 100644 --- a/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/sharding/token/generator/impl/keygen/BaseGeneratedKeyTokenGenerator.java +++ b/sharding-core/sharding-core-rewrite/src/main/java/org/apache/shardingsphere/core/rewrite/feature/sharding/token/generator/impl/keygen/BaseGeneratedKeyTokenGenerator.java @@ -22,7 +22,7 @@ import lombok.Setter; import org.apache.shardingsphere.core.preprocessor.statement.SQLStatementContext; import org.apache.shardingsphere.core.preprocessor.statement.impl.InsertSQLStatementContext; import org.apache.shardingsphere.core.parse.sql.statement.dml.InsertStatement; -import org.apache.shardingsphere.core.rewrite.feature.sharding.token.generator.SQLRouteResultAware; +import org.apache.shardingsphere.core.rewrite.feature.sharding.aware.SQLRouteResultAware; import org.apache.shardingsphere.core.rewrite.sql.token.generator.OptionalSQLTokenGenerator; import org.apache.shardingsphere.core.rewrite.sql.token.pojo.SQLToken; import org.apache.shardingsphere.core.route.SQLRouteResult;