提交 dc35d382 编写于 作者: T terrymanu

for #2567, InsertValueEngine => InsertValuesFactory

上级 d34a2ab9
......@@ -23,7 +23,7 @@ import org.apache.shardingsphere.core.optimize.encrypt.engine.EncryptOptimizeEng
import org.apache.shardingsphere.core.optimize.encrypt.segment.EncryptInsertColumns;
import org.apache.shardingsphere.core.optimize.encrypt.statement.EncryptInsertOptimizedStatement;
import org.apache.shardingsphere.core.optimize.sharding.segment.insert.InsertOptimizeResultUnit;
import org.apache.shardingsphere.core.optimize.sharding.segment.insert.value.InsertValueEngine;
import org.apache.shardingsphere.core.optimize.sharding.segment.insert.value.InsertValuesFactory;
import org.apache.shardingsphere.core.parse.sql.statement.dml.InsertStatement;
import org.apache.shardingsphere.core.rule.EncryptRule;
......@@ -40,9 +40,8 @@ public final class EncryptInsertOptimizeEngine implements EncryptOptimizeEngine<
@Override
public EncryptInsertOptimizedStatement optimize(final EncryptRule encryptRule, final TableMetas tableMetas, final String sql, final List<Object> parameters, final InsertStatement sqlStatement) {
InsertValueEngine insertValueEngine = new InsertValueEngine();
EncryptInsertOptimizedStatement result = new EncryptInsertOptimizedStatement(
sqlStatement, new EncryptInsertColumns(tableMetas, sqlStatement), insertValueEngine.createInsertValues(sqlStatement));
sqlStatement, new EncryptInsertColumns(tableMetas, sqlStatement), InsertValuesFactory.createInsertValues(sqlStatement));
int derivedColumnsCount = encryptRule.getAssistedQueryAndPlainColumnCount(sqlStatement.getTable().getTableName());
int parametersCount = 0;
Collection<String> columnNames = getColumnNames(tableMetas, sqlStatement);
......
......@@ -27,7 +27,7 @@ import org.apache.shardingsphere.core.optimize.sharding.segment.condition.engine
import org.apache.shardingsphere.core.optimize.sharding.segment.insert.GeneratedKey;
import org.apache.shardingsphere.core.optimize.sharding.segment.insert.InsertOptimizeResultUnit;
import org.apache.shardingsphere.core.optimize.sharding.segment.insert.ShardingInsertColumns;
import org.apache.shardingsphere.core.optimize.sharding.segment.insert.value.InsertValueEngine;
import org.apache.shardingsphere.core.optimize.sharding.segment.insert.value.InsertValuesFactory;
import org.apache.shardingsphere.core.optimize.sharding.statement.dml.ShardingInsertOptimizedStatement;
import org.apache.shardingsphere.core.parse.sql.segment.dml.column.ColumnSegment;
import org.apache.shardingsphere.core.parse.sql.segment.dml.column.OnDuplicateKeyColumnsSegment;
......@@ -54,8 +54,7 @@ public final class ShardingInsertOptimizeEngine implements ShardingOptimizeEngin
final TableMetas tableMetas, final String sql, final List<Object> parameters, final InsertStatement sqlStatement) {
InsertClauseShardingConditionEngine shardingConditionEngine = new InsertClauseShardingConditionEngine(shardingRule);
ShardingInsertColumns insertColumns = new ShardingInsertColumns(shardingRule, tableMetas, sqlStatement);
InsertValueEngine insertValueEngine = new InsertValueEngine();
Collection<InsertValue> insertValues = insertValueEngine.createInsertValues(sqlStatement);
Collection<InsertValue> insertValues = InsertValuesFactory.createInsertValues(sqlStatement);
Optional<GeneratedKey> generatedKey = GeneratedKey.getGenerateKey(shardingRule, parameters, sqlStatement, insertColumns, insertValues);
boolean isGeneratedValue = generatedKey.isPresent() && generatedKey.get().isGenerated();
Iterator<Comparable<?>> generatedValues = isGeneratedValue ? generatedKey.get().getGeneratedValues().iterator() : null;
......@@ -66,7 +65,7 @@ public final class ShardingInsertOptimizeEngine implements ShardingOptimizeEngin
allColumnNames.addAll(shardingRule.getEncryptRule().getAssistedQueryAndPlainColumns(sqlStatement.getTable().getTableName()));
List<ShardingCondition> shardingConditions = shardingConditionEngine.createShardingConditions(sqlStatement, parameters, allColumnNames, insertValues, generatedKey.orNull());
ShardingInsertOptimizedStatement result = new ShardingInsertOptimizedStatement(
sqlStatement, shardingConditions, insertColumns, insertValueEngine.createInsertValues(sqlStatement), generatedKey.orNull());
sqlStatement, shardingConditions, insertColumns, InsertValuesFactory.createInsertValues(sqlStatement), generatedKey.orNull());
String tableName = sqlStatement.getTable().getTableName();
checkDuplicateKeyForShardingKey(shardingRule, sqlStatement, tableName);
int derivedColumnsCount = getDerivedColumnsCount(shardingRule, tableName, isGeneratedValue);
......
......@@ -17,6 +17,8 @@
package org.apache.shardingsphere.core.optimize.sharding.segment.insert.value;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.apache.shardingsphere.core.optimize.api.segment.InsertValue;
import org.apache.shardingsphere.core.parse.sql.segment.dml.assignment.AssignmentSegment;
import org.apache.shardingsphere.core.parse.sql.segment.dml.assignment.InsertValuesSegment;
......@@ -29,11 +31,12 @@ import java.util.LinkedList;
import java.util.List;
/**
* Insert value engine.
* Insert values factory.
*
* @author zhangliang
*/
public final class InsertValueEngine {
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class InsertValuesFactory {
/**
* Create insert values.
......@@ -41,11 +44,11 @@ public final class InsertValueEngine {
* @param insertStatement insert statement
* @return insert values
*/
public Collection<InsertValue> createInsertValues(final InsertStatement insertStatement) {
return (insertStatement.getSetAssignment().isPresent()) ? getInsertValues(insertStatement.getSetAssignment().get()) : getInsertValues(insertStatement.getValues());
public static Collection<InsertValue> createInsertValues(final InsertStatement insertStatement) {
return insertStatement.getSetAssignment().isPresent() ? getInsertValues(insertStatement.getSetAssignment().get()) : getInsertValues(insertStatement.getValues());
}
private Collection<InsertValue> getInsertValues(final SetAssignmentsSegment setAssignmentsSegment) {
private static Collection<InsertValue> getInsertValues(final SetAssignmentsSegment setAssignmentsSegment) {
Collection<InsertValue> result = new LinkedList<>();
List<ExpressionSegment> columnValues = new LinkedList<>();
for (AssignmentSegment each : setAssignmentsSegment.getAssignments()) {
......@@ -55,7 +58,7 @@ public final class InsertValueEngine {
return result;
}
private Collection<InsertValue> getInsertValues(final Collection<InsertValuesSegment> insertValuesSegments) {
private static Collection<InsertValue> getInsertValues(final Collection<InsertValuesSegment> insertValuesSegments) {
Collection<InsertValue> result = new LinkedList<>();
for (InsertValuesSegment each : insertValuesSegments) {
result.add(new InsertValue(each.getValues()));
......
......@@ -90,20 +90,20 @@ public final class SQLRewriteEngine {
}
private OptimizedStatement encryptOptimizedStatement(final EncryptRule encryptRule, final OptimizedStatement optimizedStatement) {
if (isNeededToEncrypt(encryptRule, optimizedStatement)) {
encryptInsertOptimizeResultUnit(encryptRule, optimizedStatement);
if (isEncryptWithInsert(encryptRule, optimizedStatement)) {
encryptInsertOptimizedStatement(encryptRule, (InsertOptimizedStatement) optimizedStatement);
}
return optimizedStatement;
}
private boolean isNeededToEncrypt(final EncryptRule encryptRule, final OptimizedStatement optimizedStatement) {
private boolean isEncryptWithInsert(final EncryptRule encryptRule, final OptimizedStatement optimizedStatement) {
return optimizedStatement instanceof InsertOptimizedStatement && !encryptRule.getEncryptTableNames().isEmpty();
}
private void encryptInsertOptimizeResultUnit(final EncryptRule encryptRule, final OptimizedStatement optimizedStatement) {
for (InsertOptimizeResultUnit unit : ((InsertOptimizedStatement) optimizedStatement).getUnits()) {
for (String each : ((InsertOptimizedStatement) optimizedStatement).getInsertColumns().getRegularColumnNames()) {
encryptInsertOptimizeResult(encryptRule, unit, optimizedStatement.getTables().getSingleTableName(), each);
private void encryptInsertOptimizedStatement(final EncryptRule encryptRule, final InsertOptimizedStatement insertOptimizedStatement) {
for (InsertOptimizeResultUnit unit : insertOptimizedStatement.getUnits()) {
for (String each : insertOptimizedStatement.getInsertColumns().getRegularColumnNames()) {
encryptInsertOptimizeResult(encryptRule, unit, insertOptimizedStatement.getTables().getSingleTableName(), each);
}
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册