Skip to content

Commit

Permalink
Modify ‘addUnit’ function in 'ShardingInsertOptimizedStatement.java' …
Browse files Browse the repository at this point in the history
…and related tests.
  • Loading branch information
wgy8283335 committed Jul 22, 2019
1 parent 864314f commit 44a0dea
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 14 deletions.
Expand Up @@ -79,7 +79,8 @@ public ShardingInsertOptimizedStatement optimize() {
int derivedColumnsCount = getDerivedColumnsCount(isGeneratedValue);
int parametersCount = 0;
for (InsertValue each : insertStatement.getValues()) {
InsertOptimizeResultUnit unit = result.addUnit(each.getValues(derivedColumnsCount), each.getParameters(parameters, parametersCount, derivedColumnsCount), each.getParametersCount());
InsertOptimizeResultUnit unit = result.createUnit(each.getValues(derivedColumnsCount), each.getParameters(parameters, parametersCount, derivedColumnsCount), each.getParametersCount());
result.addUnit(unit);
if (isGeneratedValue) {
unit.addInsertValue(generatedValues.next(), parameters);
}
Expand Down
Expand Up @@ -50,20 +50,28 @@ public ShardingInsertOptimizedStatement(
this.insertColumns = insertColumns;
this.generatedKey = generatedKey;
}

/**
* Add insert optimize result uint.
* Create insert optimize unit.
*
* @param insertValues insert values
* @param parameters SQL parameters
* @param startIndexOfAppendedParameters start index of appended parameters
* @return insert optimize result unit
*/
public InsertOptimizeResultUnit addUnit(final ExpressionSegment[] insertValues, final Object[] parameters, final int startIndexOfAppendedParameters) {
public InsertOptimizeResultUnit createUnit(final ExpressionSegment[] insertValues, final Object[] parameters, final int startIndexOfAppendedParameters) {
InsertOptimizeResultUnit result = new InsertOptimizeResultUnit(insertColumns.getAllColumnNames(), insertValues, parameters, startIndexOfAppendedParameters);
units.add(result);
return result;
}

/**
* Add insert optimize result unit into units.
*
* @param insertOptimizeResultUnit one insertOptimizeResultUnit object
*/
public void addUnit(final InsertOptimizeResultUnit insertOptimizeResultUnit) {
units.add(insertOptimizeResultUnit);
}

/**
* Get generated key.
Expand Down
Expand Up @@ -42,7 +42,8 @@ public void assertAddUnitWithSet() {
ShardingInsertOptimizedStatement insertClauseOptimizedStatement = new ShardingInsertOptimizedStatement(new InsertStatement(), Collections.<ShardingCondition>emptyList(), insertColumns, null);
ExpressionSegment[] expressions = {new LiteralExpressionSegment(0, 0, 1), new ParameterMarkerExpressionSegment(0, 0, 1), new LiteralExpressionSegment(0, 0, "test")};
Object[] parameters = {"parameter"};
insertClauseOptimizedStatement.addUnit(expressions, parameters, 1);
InsertOptimizeResultUnit unit = insertClauseOptimizedStatement.createUnit(expressions, parameters, 1);
insertClauseOptimizedStatement.addUnit(unit);
assertThat(insertClauseOptimizedStatement.getInsertColumns().getAllColumnNames().size(), is(3));
assertThat(insertClauseOptimizedStatement.getUnits().get(0).getValues(), is(expressions));
assertThat(insertClauseOptimizedStatement.getUnits().get(0).getParameters()[0], is((Object) "parameter"));
Expand Down
Expand Up @@ -27,6 +27,7 @@
import org.apache.shardingsphere.core.optimize.statement.sharding.dml.ShardingWhereOptimizedStatement;
import org.apache.shardingsphere.core.optimize.statement.sharding.dml.condition.ShardingCondition;
import org.apache.shardingsphere.core.optimize.statement.sharding.dml.condition.ShardingConditions;
import org.apache.shardingsphere.core.optimize.statement.sharding.dml.insert.InsertOptimizeResultUnit;
import org.apache.shardingsphere.core.optimize.statement.sharding.dml.insert.ShardingInsertColumns;
import org.apache.shardingsphere.core.optimize.statement.sharding.dml.insert.ShardingInsertOptimizedStatement;
import org.apache.shardingsphere.core.optimize.statement.sharding.dml.select.ShardingSelectOptimizedStatement;
Expand Down Expand Up @@ -223,7 +224,8 @@ private SQLRouteResult createRouteResultForAutoGeneratedKeyColumn() {
when(insertColumns.getAllColumnNames()).thenReturn(Arrays.asList("name", "age", "id"));
ShardingInsertOptimizedStatement optimizedStatement = new ShardingInsertOptimizedStatement(insertStatement, Collections.<ShardingCondition>emptyList(), insertColumns, null);
ExpressionSegment[] expressionSegments = {new ParameterMarkerExpressionSegment(0, 0, 0), new ParameterMarkerExpressionSegment(0, 0, 1), new ParameterMarkerExpressionSegment(0, 0, 2)};
optimizedStatement.addUnit(expressionSegments, new Object[] {"x", 1, 1}, 3);
InsertOptimizeResultUnit unit = optimizedStatement.createUnit(expressionSegments, new Object[] {"x", 1, 1}, 3);
optimizedStatement.addUnit(unit);
optimizedStatement.getUnits().get(0).getDataNodes().add(new DataNode("db0.table_1"));
SQLRouteResult result = new SQLRouteResult(optimizedStatement);
result.setRoutingResult(new RoutingResult());
Expand All @@ -249,7 +251,8 @@ private SQLRouteResult createRouteResultForAutoGeneratedKeyColumnWithoutColumnsW
when(insertColumns.getAllColumnNames()).thenReturn(Arrays.asList("name", "id"));
ShardingInsertOptimizedStatement optimizedStatement = new ShardingInsertOptimizedStatement(insertStatement, Collections.<ShardingCondition>emptyList(), insertColumns, null);
ExpressionSegment[] expressionSegments = {new ParameterMarkerExpressionSegment(0, 0, 0), new ParameterMarkerExpressionSegment(0, 0, 1)};
optimizedStatement.addUnit(expressionSegments, new Object[] {"Bill", 1}, 2);
InsertOptimizeResultUnit unit = optimizedStatement.createUnit(expressionSegments, new Object[] {"Bill", 1}, 2);
optimizedStatement.addUnit(unit);
optimizedStatement.getUnits().get(0).getDataNodes().add(new DataNode("db0.table_1"));
SQLRouteResult result = new SQLRouteResult(optimizedStatement);
result.setRoutingResult(new RoutingResult());
Expand All @@ -275,7 +278,8 @@ private SQLRouteResult createRouteResultForAutoGeneratedKeyColumnWithoutColumnsW
when(insertColumns.getAllColumnNames()).thenReturn(Arrays.asList("name", "id"));
ShardingInsertOptimizedStatement optimizedStatement = new ShardingInsertOptimizedStatement(insertStatement, Collections.<ShardingCondition>emptyList(), insertColumns, null);
ExpressionSegment[] expressionSegments = {new LiteralExpressionSegment(0, 0, 10), new LiteralExpressionSegment(0, 0, 1)};
optimizedStatement.addUnit(expressionSegments, new Object[0], 0);
InsertOptimizeResultUnit unit = optimizedStatement.createUnit(expressionSegments, new Object[0], 0);
optimizedStatement.addUnit(unit);
optimizedStatement.getUnits().get(0).getDataNodes().add(new DataNode("db0.table_1"));
SQLRouteResult result = new SQLRouteResult(optimizedStatement);
result.setRoutingResult(new RoutingResult());
Expand All @@ -301,7 +305,8 @@ private SQLRouteResult createRouteResultForDuplicateKeyWithoutColumnsWithoutPara
when(insertColumns.getAllColumnNames()).thenReturn(Arrays.asList("name", "id"));
ShardingInsertOptimizedStatement optimizedStatement = new ShardingInsertOptimizedStatement(insertStatement, Collections.<ShardingCondition>emptyList(), insertColumns, null);
ExpressionSegment[] expressionSegments = {new LiteralExpressionSegment(0, 0, 10), new LiteralExpressionSegment(0, 0, 1)};
optimizedStatement.addUnit(expressionSegments, new Object[0], 0);
InsertOptimizeResultUnit unit = optimizedStatement.createUnit(expressionSegments, new Object[0], 0);
optimizedStatement.addUnit(unit);
optimizedStatement.getUnits().get(0).getDataNodes().add(new DataNode("db0.table_1"));
SQLRouteResult result = new SQLRouteResult(optimizedStatement);
result.setRoutingResult(new RoutingResult());
Expand All @@ -326,7 +331,8 @@ private SQLRouteResult createRouteResultForDuplicateKeyWithSetWithoutParameter()
when(insertColumns.getAllColumnNames()).thenReturn(Arrays.asList("name", "id"));
ShardingInsertOptimizedStatement optimizedStatement = new ShardingInsertOptimizedStatement(insertStatement, Collections.<ShardingCondition>emptyList(), insertColumns, null);
ExpressionSegment[] expressionSegments = {new LiteralExpressionSegment(0, 0, 10), new LiteralExpressionSegment(0, 0, 1)};
optimizedStatement.addUnit(expressionSegments, new Object[0], 0);
InsertOptimizeResultUnit unit = optimizedStatement.createUnit(expressionSegments, new Object[0], 0);
optimizedStatement.addUnit(unit);
optimizedStatement.getUnits().get(0).getDataNodes().add(new DataNode("db0.table_1"));
SQLRouteResult result = new SQLRouteResult(optimizedStatement);
result.setRoutingResult(new RoutingResult());
Expand All @@ -353,7 +359,8 @@ private SQLRouteResult createRouteResultForColumnWithoutColumnsWithoutParameter(
when(insertColumns.getAllColumnNames()).thenReturn(Arrays.asList("name", "id"));
ShardingInsertOptimizedStatement optimizedStatement = new ShardingInsertOptimizedStatement(insertStatement, Collections.<ShardingCondition>emptyList(), insertColumns, null);
ExpressionSegment[] expressionSegments = {new LiteralExpressionSegment(0, 0, 10), new LiteralExpressionSegment(0, 0, 1)};
optimizedStatement.addUnit(expressionSegments, new Object[0], 0);
InsertOptimizeResultUnit unit = optimizedStatement.createUnit(expressionSegments, new Object[0], 0);
optimizedStatement.addUnit(unit);
optimizedStatement.getUnits().get(0).getDataNodes().add(new DataNode("db0.table_1"));
SQLRouteResult result = new SQLRouteResult(optimizedStatement);
result.setRoutingResult(new RoutingResult());
Expand All @@ -379,7 +386,8 @@ private SQLRouteResult createRouteResultForColumnWithoutColumnsWithParameter() {
when(insertColumns.getAllColumnNames()).thenReturn(Arrays.asList("name", "id"));
ShardingInsertOptimizedStatement optimizedStatement = new ShardingInsertOptimizedStatement(insertStatement, Collections.<ShardingCondition>emptyList(), insertColumns, null);
ExpressionSegment[] expressionSegments = {new ParameterMarkerExpressionSegment(0, 0, 0), new ParameterMarkerExpressionSegment(0, 0, 1)};
optimizedStatement.addUnit(expressionSegments, new Object[] {"x", 1}, 2);
InsertOptimizeResultUnit unit = optimizedStatement.createUnit(expressionSegments, new Object[] {"x", 1}, 2);
optimizedStatement.addUnit(unit);
optimizedStatement.getUnits().get(0).getDataNodes().add(new DataNode("db0.table_1"));
SQLRouteResult result = new SQLRouteResult(optimizedStatement);
result.setRoutingResult(new RoutingResult());
Expand Down Expand Up @@ -975,7 +983,8 @@ private SQLRouteResult createSQLRouteResultForInsertWithQueryAssistedShardingEnc
ShardingInsertOptimizedStatement optimizedStatement =
new ShardingInsertOptimizedStatement(insertStatement, Collections.<ShardingCondition>emptyList(), insertColumns, null);
ExpressionSegment[] expressionSegments = {new LiteralExpressionSegment(0, 0, 10), new LiteralExpressionSegment(0, 0, 1), new LiteralExpressionSegment(0, 0, 10)};
optimizedStatement.addUnit(expressionSegments, new Object[0], 0);
InsertOptimizeResultUnit unit = optimizedStatement.createUnit(expressionSegments, new Object[0], 0);
optimizedStatement.addUnit(unit);
optimizedStatement.getUnits().get(0).getDataNodes().add(new DataNode("db0.table_1"));
SQLRouteResult result = new SQLRouteResult(optimizedStatement);
result.setRoutingResult(new RoutingResult());
Expand Down

0 comments on commit 44a0dea

Please sign in to comment.