Skip to content

Commit 42e4f3c

Browse files
committed
for #701: split GeneratedKey to GeneratedKey and GeneratedKeyCondition
1 parent 84f0d43 commit 42e4f3c

File tree

12 files changed

+76
-32
lines changed

12 files changed

+76
-32
lines changed

sharding-core/src/main/java/io/shardingjdbc/core/parsing/parser/clause/InsertValuesClauseParser.java

+6-6
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
import io.shardingjdbc.core.parsing.lexer.token.Keyword;
2424
import io.shardingjdbc.core.parsing.lexer.token.Symbol;
2525
import io.shardingjdbc.core.parsing.parser.clause.expression.BasicExpressionParser;
26-
import io.shardingjdbc.core.parsing.parser.context.GeneratedKey;
26+
import io.shardingjdbc.core.parsing.parser.context.condition.GeneratedKeyCondition;
2727
import io.shardingjdbc.core.parsing.parser.context.condition.Column;
2828
import io.shardingjdbc.core.parsing.parser.context.condition.Condition;
2929
import io.shardingjdbc.core.parsing.parser.context.condition.Conditions;
@@ -93,19 +93,19 @@ private void parseValues(final InsertStatement insertStatement) {
9393
SQLExpression sqlExpression = sqlExpressions.get(count);
9494
insertStatement.getConditions().add(new Condition(each, sqlExpression), shardingRule);
9595
if (insertStatement.getGenerateKeyColumnIndex() == count) {
96-
insertStatement.setGeneratedKey(createGeneratedKey(each, sqlExpression));
96+
insertStatement.setGeneratedKeyCondition(createGeneratedKeyCondition(each, sqlExpression));
9797
}
9898
count++;
9999
}
100100
lexerEngine.accept(Symbol.RIGHT_PAREN);
101101
}
102102

103-
private GeneratedKey createGeneratedKey(final Column column, final SQLExpression sqlExpression) {
104-
GeneratedKey result;
103+
private GeneratedKeyCondition createGeneratedKeyCondition(final Column column, final SQLExpression sqlExpression) {
104+
GeneratedKeyCondition result;
105105
if (sqlExpression instanceof SQLPlaceholderExpression) {
106-
result = new GeneratedKey(column.getName(), ((SQLPlaceholderExpression) sqlExpression).getIndex(), null);
106+
result = new GeneratedKeyCondition(column.getName(), ((SQLPlaceholderExpression) sqlExpression).getIndex(), null);
107107
} else if (sqlExpression instanceof SQLNumberExpression) {
108-
result = new GeneratedKey(column.getName(), -1, ((SQLNumberExpression) sqlExpression).getNumber());
108+
result = new GeneratedKeyCondition(column.getName(), -1, ((SQLNumberExpression) sqlExpression).getNumber());
109109
} else {
110110
throw new ShardingJdbcException("Generated key only support number.");
111111
}

sharding-core/src/main/java/io/shardingjdbc/core/parsing/parser/context/GeneratedKey.java renamed to sharding-core/src/main/java/io/shardingjdbc/core/parsing/parser/context/condition/GeneratedKeyCondition.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -15,21 +15,21 @@
1515
* </p>
1616
*/
1717

18-
package io.shardingjdbc.core.parsing.parser.context;
18+
package io.shardingjdbc.core.parsing.parser.context.condition;
1919

2020
import lombok.Getter;
2121
import lombok.RequiredArgsConstructor;
2222
import lombok.ToString;
2323

2424
/**
25-
* Generated key.
25+
* Generated key condition.
2626
*
2727
* @author zhangliang
2828
*/
2929
@RequiredArgsConstructor
3030
@Getter
3131
@ToString
32-
public final class GeneratedKey {
32+
public final class GeneratedKeyCondition {
3333

3434
private final String column;
3535

sharding-core/src/main/java/io/shardingjdbc/core/parsing/parser/sql/dml/insert/AbstractInsertParser.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -62,14 +62,14 @@ public final DMLStatement parse() {
6262
}
6363
insertClauseParserFacade.getInsertValuesClauseParser().parse(result);
6464
insertClauseParserFacade.getInsertSetClauseParser().parse(result);
65-
appendGenerateKey(result);
65+
appendGenerateKeyToken(result);
6666
return result;
6767
}
6868

69-
private void appendGenerateKey(final InsertStatement insertStatement) {
69+
private void appendGenerateKeyToken(final InsertStatement insertStatement) {
7070
String tableName = insertStatement.getTables().getSingleTableName();
7171
Optional<String> generateKeyColumn = shardingRule.getGenerateKeyColumn(tableName);
72-
if (!generateKeyColumn.isPresent() || null != insertStatement.getGeneratedKey()) {
72+
if (!generateKeyColumn.isPresent() || null != insertStatement.getGeneratedKeyCondition()) {
7373
return;
7474
}
7575
ItemsToken columnsToken = new ItemsToken(insertStatement.getColumnsListLastPosition());

sharding-core/src/main/java/io/shardingjdbc/core/parsing/parser/sql/dml/insert/InsertStatement.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
package io.shardingjdbc.core.parsing.parser.sql.dml.insert;
1919

2020
import com.google.common.base.Optional;
21-
import io.shardingjdbc.core.parsing.parser.context.GeneratedKey;
21+
import io.shardingjdbc.core.parsing.parser.context.condition.GeneratedKeyCondition;
2222
import io.shardingjdbc.core.parsing.parser.context.condition.Column;
2323
import io.shardingjdbc.core.parsing.parser.context.condition.Conditions;
2424
import io.shardingjdbc.core.parsing.parser.sql.dml.DMLStatement;
@@ -54,7 +54,7 @@ public final class InsertStatement extends DMLStatement {
5454

5555
private int valuesListLastPosition;
5656

57-
private GeneratedKey generatedKey;
57+
private GeneratedKeyCondition generatedKeyCondition;
5858

5959
/**
6060
* Find generated key token.

sharding-core/src/main/java/io/shardingjdbc/core/rewrite/SQLRewriteEngine.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import io.shardingjdbc.core.constant.DatabaseType;
2323
import io.shardingjdbc.core.parsing.lexer.token.DefaultKeyword;
2424
import io.shardingjdbc.core.parsing.lexer.token.Symbol;
25-
import io.shardingjdbc.core.parsing.parser.context.GeneratedKey;
2625
import io.shardingjdbc.core.parsing.parser.context.OrderItem;
2726
import io.shardingjdbc.core.parsing.parser.context.limit.Limit;
2827
import io.shardingjdbc.core.parsing.parser.sql.SQLStatement;
@@ -39,6 +38,7 @@
3938
import io.shardingjdbc.core.rewrite.placeholder.IndexPlaceholder;
4039
import io.shardingjdbc.core.rewrite.placeholder.SchemaPlaceholder;
4140
import io.shardingjdbc.core.rewrite.placeholder.TablePlaceholder;
41+
import io.shardingjdbc.core.routing.GeneratedKey;
4242
import io.shardingjdbc.core.routing.type.TableUnit;
4343
import io.shardingjdbc.core.routing.type.complex.CartesianTableReference;
4444
import io.shardingjdbc.core.rule.BindingTableRule;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/*
2+
* Copyright 1999-2015 dangdang.com.
3+
* <p>
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
* </p>
16+
*/
17+
18+
package io.shardingjdbc.core.routing;
19+
20+
import io.shardingjdbc.core.parsing.parser.context.condition.GeneratedKeyCondition;
21+
import lombok.Getter;
22+
import lombok.RequiredArgsConstructor;
23+
24+
import java.util.LinkedList;
25+
import java.util.List;
26+
27+
/**
28+
* Generated key.
29+
*
30+
* @author zhangliang
31+
*/
32+
@RequiredArgsConstructor
33+
@Getter
34+
public final class GeneratedKey {
35+
36+
private final String column;
37+
38+
private final int index;
39+
40+
private final Number value;
41+
42+
private final List<Number> generatedKeys = new LinkedList<>();
43+
44+
public GeneratedKey(final GeneratedKeyCondition generatedKeyCondition) {
45+
column = generatedKeyCondition.getColumn();
46+
index = generatedKeyCondition.getIndex();
47+
value = generatedKeyCondition.getValue();
48+
}
49+
}

sharding-core/src/main/java/io/shardingjdbc/core/routing/SQLRouteResult.java

-5
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,11 @@
1717

1818
package io.shardingjdbc.core.routing;
1919

20-
import io.shardingjdbc.core.parsing.parser.context.GeneratedKey;
2120
import io.shardingjdbc.core.parsing.parser.sql.SQLStatement;
2221
import lombok.Getter;
2322
import lombok.RequiredArgsConstructor;
2423

2524
import java.util.LinkedHashSet;
26-
import java.util.LinkedList;
27-
import java.util.List;
2825
import java.util.Set;
2926

3027
/**
@@ -42,6 +39,4 @@ public final class SQLRouteResult {
4239
private final GeneratedKey generatedKey;
4340

4441
private final Set<SQLExecutionUnit> executionUnits = new LinkedHashSet<>();
45-
46-
private final List<Number> generatedKeys = new LinkedList<>();
4742
}

sharding-core/src/main/java/io/shardingjdbc/core/routing/router/ParsingSQLRouter.java

+6-6
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import com.google.common.base.Preconditions;
2222
import io.shardingjdbc.core.constant.DatabaseType;
2323
import io.shardingjdbc.core.parsing.SQLParsingEngine;
24-
import io.shardingjdbc.core.parsing.parser.context.GeneratedKey;
2524
import io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.ShowDatabasesStatement;
2625
import io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.ShowTablesStatement;
2726
import io.shardingjdbc.core.parsing.parser.dialect.mysql.statement.UseStatement;
@@ -33,6 +32,7 @@
3332
import io.shardingjdbc.core.parsing.parser.token.GeneratedKeyToken;
3433
import io.shardingjdbc.core.rewrite.SQLBuilder;
3534
import io.shardingjdbc.core.rewrite.SQLRewriteEngine;
35+
import io.shardingjdbc.core.routing.GeneratedKey;
3636
import io.shardingjdbc.core.routing.SQLExecutionUnit;
3737
import io.shardingjdbc.core.routing.SQLRouteResult;
3838
import io.shardingjdbc.core.routing.type.RoutingEngine;
@@ -136,8 +136,8 @@ private RoutingResult route(final List<Object> parameters, final SQLStatement sq
136136
}
137137

138138
private GeneratedKey getGenerateKey(final ShardingRule shardingRule, final InsertStatement insertStatement) {
139-
if (null != insertStatement.getGeneratedKey()) {
140-
return insertStatement.getGeneratedKey();
139+
if (null != insertStatement.getGeneratedKeyCondition()) {
140+
return new GeneratedKey(insertStatement.getGeneratedKeyCondition());
141141
}
142142
Optional<TableRule> tableRule = shardingRule.tryFindTableRuleByLogicTable(insertStatement.getTables().getSingleTableName());
143143
if (!tableRule.isPresent()) {
@@ -156,7 +156,7 @@ private GeneratedKey getGenerateKey(final ShardingRule shardingRule, final Inser
156156

157157
private void processGeneratedKey(final List<Object> parameters, final GeneratedKey generatedKey, final String logicTableName, final SQLRouteResult sqlRouteResult) {
158158
if (parameters.isEmpty()) {
159-
sqlRouteResult.getGeneratedKeys().add(generatedKey.getValue());
159+
sqlRouteResult.getGeneratedKey().getGeneratedKeys().add(generatedKey.getValue());
160160
} else if (parameters.size() == generatedKey.getIndex()) {
161161
Number key = shardingRule.generateKey(logicTableName);
162162
parameters.add(key);
@@ -168,8 +168,8 @@ private void processGeneratedKey(final List<Object> parameters, final GeneratedK
168168

169169
private void setGeneratedKeys(final SQLRouteResult sqlRouteResult, final Number generatedKey) {
170170
generatedKeys.add(generatedKey);
171-
sqlRouteResult.getGeneratedKeys().clear();
172-
sqlRouteResult.getGeneratedKeys().addAll(generatedKeys);
171+
sqlRouteResult.getGeneratedKey().getGeneratedKeys().clear();
172+
sqlRouteResult.getGeneratedKey().getGeneratedKeys().addAll(generatedKeys);
173173
}
174174

175175
private void processLimit(final List<Object> parameters, final SelectStatement selectStatement, final boolean isSingleRouting) {

sharding-core/src/main/java/io/shardingjdbc/core/routing/type/standard/StandardRoutingEngine.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@
2323
import io.shardingjdbc.core.api.algorithm.sharding.ShardingValue;
2424
import io.shardingjdbc.core.hint.HintManagerHolder;
2525
import io.shardingjdbc.core.hint.ShardingKey;
26-
import io.shardingjdbc.core.parsing.parser.context.GeneratedKey;
2726
import io.shardingjdbc.core.parsing.parser.context.condition.Column;
2827
import io.shardingjdbc.core.parsing.parser.context.condition.Condition;
2928
import io.shardingjdbc.core.parsing.parser.sql.SQLStatement;
29+
import io.shardingjdbc.core.routing.GeneratedKey;
3030
import io.shardingjdbc.core.routing.strategy.ShardingStrategy;
3131
import io.shardingjdbc.core.routing.type.RoutingEngine;
3232
import io.shardingjdbc.core.routing.type.RoutingResult;

sharding-core/src/test/java/io/shardingjdbc/core/rewrite/SQLRewriteEngineTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import com.google.common.base.Preconditions;
2222
import io.shardingjdbc.core.constant.DatabaseType;
2323
import io.shardingjdbc.core.constant.OrderDirection;
24-
import io.shardingjdbc.core.parsing.parser.context.GeneratedKey;
2524
import io.shardingjdbc.core.parsing.parser.context.OrderItem;
2625
import io.shardingjdbc.core.parsing.parser.context.limit.Limit;
2726
import io.shardingjdbc.core.parsing.parser.context.limit.LimitValue;
@@ -36,6 +35,7 @@
3635
import io.shardingjdbc.core.parsing.parser.token.RowCountToken;
3736
import io.shardingjdbc.core.parsing.parser.token.SchemaToken;
3837
import io.shardingjdbc.core.parsing.parser.token.TableToken;
38+
import io.shardingjdbc.core.routing.GeneratedKey;
3939
import io.shardingjdbc.core.routing.type.TableUnit;
4040
import io.shardingjdbc.core.routing.type.complex.CartesianTableReference;
4141
import io.shardingjdbc.core.rule.ShardingRule;

sharding-jdbc-core/src/main/java/io/shardingjdbc/core/jdbc/core/statement/ShardingPreparedStatement.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,11 @@
3434
import io.shardingjdbc.core.merger.MergeEngine;
3535
import io.shardingjdbc.core.merger.MergeEngineFactory;
3636
import io.shardingjdbc.core.merger.QueryResult;
37-
import io.shardingjdbc.core.parsing.parser.context.GeneratedKey;
3837
import io.shardingjdbc.core.parsing.parser.sql.dal.DALStatement;
3938
import io.shardingjdbc.core.parsing.parser.sql.dml.insert.InsertStatement;
4039
import io.shardingjdbc.core.parsing.parser.sql.dql.DQLStatement;
4140
import io.shardingjdbc.core.parsing.parser.sql.dql.select.SelectStatement;
41+
import io.shardingjdbc.core.routing.GeneratedKey;
4242
import io.shardingjdbc.core.routing.PreparedStatementRoutingEngine;
4343
import io.shardingjdbc.core.routing.SQLExecutionUnit;
4444
import io.shardingjdbc.core.routing.SQLRouteResult;
@@ -255,7 +255,7 @@ public int[] executeBatch() throws SQLException {
255255
public ResultSet getGeneratedKeys() throws SQLException {
256256
Optional<GeneratedKey> generatedKey = getGeneratedKey();
257257
if (returnGeneratedKeys && generatedKey.isPresent()) {
258-
return new GeneratedKeysResultSet(routeResult.getGeneratedKeys().iterator(), generatedKey.get().getColumn(), this);
258+
return new GeneratedKeysResultSet(routeResult.getGeneratedKey().getGeneratedKeys().iterator(), generatedKey.get().getColumn(), this);
259259
}
260260
if (1 == routedStatements.size()) {
261261
return routedStatements.iterator().next().getGeneratedKeys();

sharding-jdbc-core/src/main/java/io/shardingjdbc/core/jdbc/core/statement/ShardingStatement.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,11 @@
3030
import io.shardingjdbc.core.merger.MergeEngine;
3131
import io.shardingjdbc.core.merger.MergeEngineFactory;
3232
import io.shardingjdbc.core.merger.QueryResult;
33-
import io.shardingjdbc.core.parsing.parser.context.GeneratedKey;
3433
import io.shardingjdbc.core.parsing.parser.sql.dal.DALStatement;
3534
import io.shardingjdbc.core.parsing.parser.sql.dml.insert.InsertStatement;
3635
import io.shardingjdbc.core.parsing.parser.sql.dql.DQLStatement;
3736
import io.shardingjdbc.core.parsing.parser.sql.dql.select.SelectStatement;
37+
import io.shardingjdbc.core.routing.GeneratedKey;
3838
import io.shardingjdbc.core.routing.SQLExecutionUnit;
3939
import io.shardingjdbc.core.routing.SQLRouteResult;
4040
import io.shardingjdbc.core.routing.StatementRoutingEngine;
@@ -230,7 +230,7 @@ private void clearPrevious() throws SQLException {
230230
public ResultSet getGeneratedKeys() throws SQLException {
231231
Optional<GeneratedKey> generatedKey = getGeneratedKey();
232232
if (returnGeneratedKeys && generatedKey.isPresent()) {
233-
return new GeneratedKeysResultSet(routeResult.getGeneratedKeys().iterator(), generatedKey.get().getColumn(), this);
233+
return new GeneratedKeysResultSet(routeResult.getGeneratedKey().getGeneratedKeys().iterator(), generatedKey.get().getColumn(), this);
234234
}
235235
if (1 == getRoutedStatements().size()) {
236236
return getRoutedStatements().iterator().next().getGeneratedKeys();

0 commit comments

Comments
 (0)