提交 9661bba4 编写于 作者: T terrymanu

for #2567, remove ShardingInsertOptimizedStatement.createInsertValue()

上级 1447d3c0
......@@ -36,6 +36,7 @@ import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
/**
......@@ -69,9 +70,9 @@ public final class ShardingInsertOptimizeEngine implements ShardingOptimizeEngin
ShardingInsertOptimizedStatement result = new ShardingInsertOptimizedStatement(sqlStatement, shardingConditions, columnNames, generatedKey.orNull());
checkDuplicateKeyForShardingKey(shardingRule, sqlStatement, tableName);
int parametersOffset = 0;
Collection<String> encryptDerivedColumnNames = shardingRule.getEncryptRule().getAssistedQueryAndPlainColumns(tableName);
for (Collection<ExpressionSegment> each : sqlStatement.getAllValueExpressions()) {
Collection<String> encryptDerivedColumnNames = shardingRule.getEncryptRule().getAssistedQueryAndPlainColumns(tableName);
InsertValue insertValue = result.createInsertValue(generateKeyColumnName.orNull(), encryptDerivedColumnNames, each, derivedColumnsCount, parameters, parametersOffset);
InsertValue insertValue = createInsertValue(columnNames, generateKeyColumnName.orNull(), encryptDerivedColumnNames, each, derivedColumnsCount, parameters, parametersOffset);
result.addInsertValue(insertValue);
Object[] currentParameters = insertValue.getParameters();
if (isGeneratedValue) {
......@@ -118,6 +119,14 @@ public final class ShardingInsertOptimizeEngine implements ShardingOptimizeEngin
return false;
}
private InsertValue createInsertValue(final Collection<String> columnNames, final String generateKeyColumnName, final Collection<String> derivedColumnNames,
final Collection<ExpressionSegment> assignments, final int derivedColumnsCount, final List<Object> parameters, final int parametersOffset) {
List<String> allColumnNames = new LinkedList<>(columnNames);
allColumnNames.add(generateKeyColumnName);
allColumnNames.addAll(derivedColumnNames);
return new InsertValue(allColumnNames, assignments, derivedColumnsCount, parameters, parametersOffset);
}
private void fillAssistedQueryInsertValue(final ShardingRule shardingRule,
final String tableName, final Collection<String> columnNames, final InsertValue insertValue, final List<Object> parameters) {
for (String each : columnNames) {
......
......@@ -28,7 +28,6 @@ import org.apache.shardingsphere.core.optimize.encrypt.condition.EncryptConditio
import org.apache.shardingsphere.core.optimize.sharding.segment.condition.ShardingCondition;
import org.apache.shardingsphere.core.optimize.sharding.segment.condition.ShardingConditions;
import org.apache.shardingsphere.core.optimize.sharding.segment.insert.GeneratedKey;
import org.apache.shardingsphere.core.parse.sql.segment.dml.expr.ExpressionSegment;
import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement;
import java.util.Collection;
......@@ -61,25 +60,6 @@ public final class ShardingInsertOptimizedStatement extends ShardingConditionOpt
this.generatedKey = generatedKey;
}
/**
* Create insert value.
*
* @param generateKeyColumnName generate key column name
* @param derivedColumnNames derived column names
* @param assignments assignments
* @param derivedColumnsCount derived columns count
* @param parameters SQL parameters
* @param parametersOffset offset of SQL parameters
* @return insert value
*/
public InsertValue createInsertValue(final String generateKeyColumnName, final Collection<String> derivedColumnNames, final Collection<ExpressionSegment> assignments,
final int derivedColumnsCount, final List<Object> parameters, final int parametersOffset) {
List<String> allColumnNames = new LinkedList<>(columnNames);
allColumnNames.add(generateKeyColumnName);
allColumnNames.addAll(derivedColumnNames);
return new InsertValue(allColumnNames, assignments, derivedColumnsCount, parameters, parametersOffset);
}
/**
* Add insert value.
*
......
......@@ -27,9 +27,7 @@ import org.apache.shardingsphere.core.parse.sql.statement.dml.InsertStatement;
import org.junit.Test;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertNull;
......@@ -44,10 +42,8 @@ public final class InsertOptimizedStatementTest {
ExpressionSegment assignment1 = new LiteralExpressionSegment(0, 0, 1);
ExpressionSegment assignment2 = new ParameterMarkerExpressionSegment(0, 0, 1);
ExpressionSegment assignment3 = new LiteralExpressionSegment(0, 0, "test");
Collection<ExpressionSegment> assignments = Arrays.asList(assignment1, assignment2, assignment3);
List<Object> parameters = Collections.<Object>singletonList("parameter");
InsertValue insertValue = insertClauseOptimizedStatement.createInsertValue("id", Collections.<String>emptyList(), assignments, 1, parameters, 0);
insertClauseOptimizedStatement.addInsertValue(insertValue);
insertClauseOptimizedStatement.addInsertValue(
new InsertValue(Arrays.asList("id", "value", "status", "id"), Arrays.asList(assignment1, assignment2, assignment3), 1, Collections.<Object>singletonList("parameter"), 0));
assertThat(insertClauseOptimizedStatement.getInsertValues().get(0).getValueExpressions().length, is(4));
assertThat(insertClauseOptimizedStatement.getInsertValues().get(0).getValueExpressions()[0], is(assignment1));
assertThat(insertClauseOptimizedStatement.getInsertValues().get(0).getValueExpressions()[1], is(assignment2));
......
......@@ -221,9 +221,7 @@ public final class ShardingSQLRewriteEngineTest {
ShardingInsertOptimizedStatement shardingStatement = new ShardingInsertOptimizedStatement(insertStatement, Collections.<ShardingCondition>emptyList(), Arrays.asList("name", "age"), null);
Collection<ExpressionSegment> assignments = Arrays.<ExpressionSegment>asList(
new ParameterMarkerExpressionSegment(0, 0, 0), new ParameterMarkerExpressionSegment(0, 0, 1), new ParameterMarkerExpressionSegment(0, 0, 2));
List<Object> parameters = Arrays.<Object>asList("x", 1, 1);
InsertValue insertValue = shardingStatement.createInsertValue("id", Collections.<String>emptyList(), assignments, 0, parameters, 0);
shardingStatement.addInsertValue(insertValue);
shardingStatement.addInsertValue(new InsertValue(Arrays.asList("name", "age", "id"), assignments, 0, Arrays.<Object>asList("x", 1, 1), 0));
shardingStatement.getInsertValues().get(0).getDataNodes().add(new DataNode("db0.table_1"));
SQLRouteResult result = new SQLRouteResult(shardingStatement, new EncryptTransparentOptimizedStatement(insertStatement));
result.setRoutingResult(new RoutingResult());
......@@ -246,9 +244,7 @@ public final class ShardingSQLRewriteEngineTest {
insertStatement.getAllSQLSegments().add(new TableSegment(12, 20, "`table_x`"));
ShardingInsertOptimizedStatement shardingStatement = new ShardingInsertOptimizedStatement(insertStatement, Collections.<ShardingCondition>emptyList(), Collections.singletonList("name"), null);
Collection<ExpressionSegment> assignments = Arrays.<ExpressionSegment>asList(new ParameterMarkerExpressionSegment(0, 0, 0), new ParameterMarkerExpressionSegment(0, 0, 1));
List<Object> parameters = Arrays.<Object>asList("Bill", 1);
InsertValue insertValue = shardingStatement.createInsertValue("id", Collections.<String>emptyList(), assignments, 0, parameters, 0);
shardingStatement.addInsertValue(insertValue);
shardingStatement.addInsertValue(new InsertValue(Collections.singletonList("id"), assignments, 0, Arrays.<Object>asList("Bill", 1), 0));
shardingStatement.getInsertValues().get(0).getDataNodes().add(new DataNode("db0.table_1"));
SQLRouteResult result = new SQLRouteResult(shardingStatement, new EncryptTransparentOptimizedStatement(insertStatement));
result.setRoutingResult(new RoutingResult());
......@@ -271,9 +267,7 @@ public final class ShardingSQLRewriteEngineTest {
insertStatement.getAllSQLSegments().add(new TableSegment(12, 20, "`table_x`"));
ShardingInsertOptimizedStatement shardingStatement = new ShardingInsertOptimizedStatement(insertStatement, Collections.<ShardingCondition>emptyList(), Collections.singletonList("name"), null);
Collection<ExpressionSegment> assignments = Arrays.<ExpressionSegment>asList(new LiteralExpressionSegment(0, 0, 10), new LiteralExpressionSegment(0, 0, 1));
List<Object> parameters = Collections.emptyList();
InsertValue insertValue = shardingStatement.createInsertValue("id", Collections.<String>emptyList(), assignments, 0, parameters, 0);
shardingStatement.addInsertValue(insertValue);
shardingStatement.addInsertValue(new InsertValue(Collections.singletonList("id"), assignments, 0, Collections.emptyList(), 0));
shardingStatement.getInsertValues().get(0).getDataNodes().add(new DataNode("db0.table_1"));
SQLRouteResult result = new SQLRouteResult(shardingStatement, new EncryptTransparentOptimizedStatement(insertStatement));
result.setRoutingResult(new RoutingResult());
......@@ -296,9 +290,7 @@ public final class ShardingSQLRewriteEngineTest {
insertStatement.getAllSQLSegments().add(new TableSegment(12, 20, "`table_x`"));
ShardingInsertOptimizedStatement shardingStatement = new ShardingInsertOptimizedStatement(insertStatement, Collections.<ShardingCondition>emptyList(), Collections.singletonList("name"), null);
Collection<ExpressionSegment> assignments = Arrays.<ExpressionSegment>asList(new LiteralExpressionSegment(0, 0, 10), new LiteralExpressionSegment(0, 0, 1));
List<Object> parameters = Collections.emptyList();
InsertValue insertValue = shardingStatement.createInsertValue("id", Collections.<String>emptyList(), assignments, 0, parameters, 0);
shardingStatement.addInsertValue(insertValue);
shardingStatement.addInsertValue(new InsertValue(Collections.singletonList("id"), assignments, 0, Collections.emptyList(), 0));
shardingStatement.getInsertValues().get(0).getDataNodes().add(new DataNode("db0.table_1"));
SQLRouteResult result = new SQLRouteResult(shardingStatement, new EncryptTransparentOptimizedStatement(insertStatement));
result.setRoutingResult(new RoutingResult());
......@@ -320,9 +312,7 @@ public final class ShardingSQLRewriteEngineTest {
insertStatement.getAllSQLSegments().add(new TableSegment(12, 20, "`table_x`"));
ShardingInsertOptimizedStatement shardingStatement = new ShardingInsertOptimizedStatement(insertStatement, Collections.<ShardingCondition>emptyList(), Arrays.asList("name", "id"), null);
Collection<ExpressionSegment> assignments = Arrays.<ExpressionSegment>asList(new LiteralExpressionSegment(0, 0, 10), new LiteralExpressionSegment(0, 0, 1));
List<Object> parameters = Collections.emptyList();
InsertValue insertValue = shardingStatement.createInsertValue("id", Collections.<String>emptyList(), assignments, 1, parameters, 0);
shardingStatement.addInsertValue(insertValue);
shardingStatement.addInsertValue(new InsertValue(Arrays.asList("name", "id", "id"), assignments, 1, Collections.emptyList(), 0));
shardingStatement.getInsertValues().get(0).getDataNodes().add(new DataNode("db0.table_1"));
SQLRouteResult result = new SQLRouteResult(shardingStatement, new EncryptTransparentOptimizedStatement(insertStatement));
result.setRoutingResult(new RoutingResult());
......@@ -345,9 +335,7 @@ public final class ShardingSQLRewriteEngineTest {
insertStatement.getAllSQLSegments().add(new InsertValuesSegment(29, 35, Collections.<ExpressionSegment>emptyList()));
ShardingInsertOptimizedStatement shardingStatement = new ShardingInsertOptimizedStatement(insertStatement, Collections.<ShardingCondition>emptyList(), Arrays.asList("name", "id"), null);
Collection<ExpressionSegment> assignments = Arrays.<ExpressionSegment>asList(new LiteralExpressionSegment(0, 0, 10), new LiteralExpressionSegment(0, 0, 1));
List<Object> parameters = Collections.emptyList();
InsertValue insertValue = shardingStatement.createInsertValue("id", Collections.<String>emptyList(), assignments, 0, parameters, 0);
shardingStatement.addInsertValue(insertValue);
shardingStatement.addInsertValue(new InsertValue(Arrays.asList("name", "id", "id"), assignments, 0, Collections.emptyList(), 0));
shardingStatement.getInsertValues().get(0).getDataNodes().add(new DataNode("db0.table_1"));
SQLRouteResult result = new SQLRouteResult(shardingStatement, new EncryptTransparentOptimizedStatement(insertStatement));
result.setRoutingResult(new RoutingResult());
......@@ -369,9 +357,7 @@ public final class ShardingSQLRewriteEngineTest {
insertStatement.getAllSQLSegments().add(new TableSegment(12, 20, "`table_x`"));
ShardingInsertOptimizedStatement shardingStatement = new ShardingInsertOptimizedStatement(insertStatement, Collections.<ShardingCondition>emptyList(), Collections.singletonList("name"), null);
Collection<ExpressionSegment> assignments = Arrays.<ExpressionSegment>asList(new ParameterMarkerExpressionSegment(0, 0, 0), new ParameterMarkerExpressionSegment(0, 0, 1));
List<Object> parameters = Arrays.<Object>asList("x", 1);
InsertValue insertValue = shardingStatement.createInsertValue("id", Collections.<String>emptyList(), assignments, 0, parameters, 0);
shardingStatement.addInsertValue(insertValue);
shardingStatement.addInsertValue(new InsertValue(Collections.singletonList("id"), assignments, 0, Arrays.<Object>asList("x", 1), 0));
shardingStatement.getInsertValues().get(0).getDataNodes().add(new DataNode("db0.table_1"));
SQLRouteResult result = new SQLRouteResult(shardingStatement, new EncryptTransparentOptimizedStatement(insertStatement));
result.setRoutingResult(new RoutingResult());
......@@ -974,9 +960,7 @@ public final class ShardingSQLRewriteEngineTest {
ShardingInsertOptimizedStatement shardingStatement = new ShardingInsertOptimizedStatement(insertStatement, Collections.<ShardingCondition>emptyList(), Collections.singletonList("name"), null);
Collection<ExpressionSegment> assignments = Arrays.<ExpressionSegment>asList(
new LiteralExpressionSegment(0, 0, 10), new LiteralExpressionSegment(0, 0, 1), new LiteralExpressionSegment(0, 0, 1), new LiteralExpressionSegment(0, 0, 10));
List<Object> parameters = Collections.emptyList();
InsertValue insertValue = shardingStatement.createInsertValue("id", Arrays.asList("plain", "query"), assignments, 3, parameters, 0);
shardingStatement.addInsertValue(insertValue);
shardingStatement.addInsertValue(new InsertValue(Arrays.asList("name", "id", "plain", "query"), assignments, 3, Collections.emptyList(), 0));
shardingStatement.getInsertValues().get(0).getDataNodes().add(new DataNode("db0.table_1"));
SQLRouteResult result = new SQLRouteResult(shardingStatement, new EncryptTransparentOptimizedStatement(insertStatement));
result.setRoutingResult(new RoutingResult());
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册