提交 39a0ceb6 编写于 作者: T terrymanu

refactor SQLParsedResult

上级 0e402179
......@@ -21,7 +21,7 @@ import com.dangdang.ddframe.rdb.sharding.executor.StatementExecutor;
import com.dangdang.ddframe.rdb.sharding.executor.wrapper.StatementExecutorWrapper;
import com.dangdang.ddframe.rdb.sharding.jdbc.adapter.AbstractStatementAdapter;
import com.dangdang.ddframe.rdb.sharding.merger.ResultSetFactory;
import com.dangdang.ddframe.rdb.sharding.parser.result.GeneratedKeyContext;
import com.dangdang.ddframe.rdb.sharding.parser.sql.context.GeneratedKeyContext;
import com.dangdang.ddframe.rdb.sharding.parser.result.SQLParsedResult;
import com.dangdang.ddframe.rdb.sharding.router.SQLExecutionUnit;
import com.dangdang.ddframe.rdb.sharding.router.SQLRouteResult;
......
......@@ -60,11 +60,10 @@ public final class SQLParseEngine {
}
private SQLParsedResult getSQLParsedResult(final SQLContext sqlContext) {
SQLParsedResult result = new SQLParsedResult(sqlContext.getConditionContext());
SQLParsedResult result = new SQLParsedResult(sqlContext.getType(), sqlContext.getConditionContext());
for (TableContext each : sqlContext.getTables()) {
result.getTables().add(each);
}
result.setSqlType(sqlContext.getType());
return result;
}
......
......@@ -21,6 +21,7 @@ import com.dangdang.ddframe.rdb.sharding.parser.contstant.SQLType;
import com.dangdang.ddframe.rdb.sharding.parser.result.router.ConditionContext;
import com.dangdang.ddframe.rdb.sharding.parser.result.router.SQLBuilder;
import com.dangdang.ddframe.rdb.sharding.parser.sql.context.AggregationSelectItemContext;
import com.dangdang.ddframe.rdb.sharding.parser.sql.context.GeneratedKeyContext;
import com.dangdang.ddframe.rdb.sharding.parser.sql.context.GroupByContext;
import com.dangdang.ddframe.rdb.sharding.parser.sql.context.LimitContext;
import com.dangdang.ddframe.rdb.sharding.parser.sql.context.OrderByContext;
......@@ -47,12 +48,14 @@ import java.util.List;
@ToString
public final class SQLParsedResult {
private SQLType sqlType;
private final SQLType sqlType;
private SQLBuilder sqlBuilder;
private GeneratedKeyContext generatedKeyContext = new GeneratedKeyContext();
private LimitContext limit;
private final ConditionContext conditionContext;
private final Collection<TableContext> tables = new LinkedHashSet<>();
......@@ -62,6 +65,4 @@ public final class SQLParsedResult {
private final List<GroupByContext> groupByContexts = new ArrayList<>();
private final List<AggregationSelectItemContext> aggregationColumns = new ArrayList<>();
private LimitContext limit;
}
......@@ -15,7 +15,7 @@
* </p>
*/
package com.dangdang.ddframe.rdb.sharding.parser.result;
package com.dangdang.ddframe.rdb.sharding.parser.sql.context;
import com.google.common.collect.Table;
import com.google.common.collect.TreeBasedTable;
......
......@@ -17,7 +17,6 @@
package com.dangdang.ddframe.rdb.sharding.parser.sql.context;
import com.dangdang.ddframe.rdb.sharding.parser.result.GeneratedKeyContext;
import com.dangdang.ddframe.rdb.sharding.parser.contstant.SQLType;
import lombok.Getter;
......
......@@ -19,7 +19,7 @@ package com.dangdang.ddframe.rdb.sharding.router;
import com.dangdang.ddframe.rdb.sharding.api.rule.ShardingRule;
import com.dangdang.ddframe.rdb.sharding.api.rule.TableRule;
import com.dangdang.ddframe.rdb.sharding.parser.result.GeneratedKeyContext;
import com.dangdang.ddframe.rdb.sharding.parser.sql.context.GeneratedKeyContext;
import com.dangdang.ddframe.rdb.sharding.parser.result.SQLParsedResult;
import com.google.common.base.Optional;
import lombok.RequiredArgsConstructor;
......
......@@ -97,8 +97,7 @@ public final class SQLRouteEngine {
}
private SQLParsedResult buildHintParsedResult(final String logicSql) {
SQLParsedResult result = new SQLParsedResult(new ConditionContext());
result.setSqlType(SQLUtil.getTypeByStart(logicSql));
SQLParsedResult result = new SQLParsedResult(SQLUtil.getTypeByStart(logicSql), new ConditionContext());
log.trace("Get {} SQL Statement", result.getSqlType());
SQLBuilder sqlBuilder = new SQLBuilder();
try {
......
......@@ -19,6 +19,7 @@ package com.dangdang.ddframe.rdb.sharding.merger;
import com.dangdang.ddframe.rdb.sharding.merger.fixture.MergerTestUtil;
import com.dangdang.ddframe.rdb.sharding.parser.contstant.AggregationType;
import com.dangdang.ddframe.rdb.sharding.parser.contstant.SQLType;
import com.dangdang.ddframe.rdb.sharding.parser.result.SQLParsedResult;
import com.dangdang.ddframe.rdb.sharding.parser.result.router.ConditionContext;
import com.dangdang.ddframe.rdb.sharding.parser.sql.context.GroupByContext;
......@@ -53,7 +54,7 @@ public final class ResultSetMergeContextTest {
}
private SQLParsedResult createSQLParsedResult() {
SQLParsedResult result = new SQLParsedResult(new ConditionContext());
SQLParsedResult result = new SQLParsedResult(SQLType.SELECT, new ConditionContext());
result.getOrderByContexts().add(new OrderByContext("order_col", OrderType.ASC, Optional.<String>absent()));
result.getGroupByContexts().add(new GroupByContext(Optional.<String>absent(), "group_col", OrderType.ASC, Optional.<String>absent()));
result.getAggregationColumns().add(MergerTestUtil.createAggregationColumn(AggregationType.COUNT, "count_col", "count_col", -1));
......@@ -64,13 +65,13 @@ public final class ResultSetMergeContextTest {
@Test
public void assertIsNotNeedMemorySortForGroupByWithoutGroupBy() throws SQLException {
ResultSetMergeContext actual = new ResultSetMergeContext(
new ShardingResultSets(Collections.singletonList(MergerTestUtil.mockResult(Collections.<String>emptyList()))), new SQLParsedResult(new ConditionContext()));
new ShardingResultSets(Collections.singletonList(MergerTestUtil.mockResult(Collections.<String>emptyList()))), new SQLParsedResult(SQLType.SELECT, new ConditionContext()));
assertFalse(actual.isNeedMemorySortForGroupBy());
}
@Test
public void assertIsNeedMemorySortForGroupByWithGroupByAndOrderBySame() throws SQLException {
SQLParsedResult sqlParsedResult = new SQLParsedResult(new ConditionContext());
SQLParsedResult sqlParsedResult = new SQLParsedResult(SQLType.SELECT, new ConditionContext());
sqlParsedResult.getOrderByContexts().add(new OrderByContext("col", OrderType.ASC, Optional.<String>absent()));
sqlParsedResult.getGroupByContexts().add(new GroupByContext(Optional.<String>absent(), "col", OrderType.ASC, Optional.<String>absent()));
ResultSetMergeContext actual = new ResultSetMergeContext(new ShardingResultSets(Collections.singletonList(MergerTestUtil.mockResult(Collections.singletonList("col")))), sqlParsedResult);
......@@ -79,7 +80,7 @@ public final class ResultSetMergeContextTest {
@Test
public void assertIsNeedMemorySortForGroupByWithGroupByAndOrderByDifferent() throws SQLException {
SQLParsedResult sqlParsedResult = new SQLParsedResult(new ConditionContext());
SQLParsedResult sqlParsedResult = new SQLParsedResult(SQLType.SELECT, new ConditionContext());
sqlParsedResult.getOrderByContexts().add(new OrderByContext("order_col", OrderType.ASC, Optional.<String>absent()));
sqlParsedResult.getGroupByContexts().add(new GroupByContext(Optional.<String>absent(), "group_col", OrderType.ASC, Optional.<String>absent()));
ResultSetMergeContext actual = new ResultSetMergeContext(
......@@ -89,7 +90,7 @@ public final class ResultSetMergeContextTest {
@Test
public void assertSetGroupByKeysToCurrentOrderByKeys() throws SQLException {
SQLParsedResult sqlParsedResult = new SQLParsedResult(new ConditionContext());
SQLParsedResult sqlParsedResult = new SQLParsedResult(SQLType.SELECT, new ConditionContext());
sqlParsedResult.getOrderByContexts().add(new OrderByContext("order_col", OrderType.ASC, Optional.<String>absent()));
sqlParsedResult.getGroupByContexts().add(new GroupByContext(Optional.<String>absent(), "group_col", OrderType.ASC, Optional.<String>absent()));
ResultSetMergeContext actual = new ResultSetMergeContext(
......@@ -102,13 +103,13 @@ public final class ResultSetMergeContextTest {
@Test
public void assertIsNotNeedMemorySortForOrderByWithoutOrderBy() throws SQLException {
ResultSetMergeContext actual = new ResultSetMergeContext(
new ShardingResultSets(Collections.singletonList(MergerTestUtil.mockResult(Collections.<String>emptyList()))), new SQLParsedResult(new ConditionContext()));
new ShardingResultSets(Collections.singletonList(MergerTestUtil.mockResult(Collections.<String>emptyList()))), new SQLParsedResult(SQLType.SELECT, new ConditionContext()));
assertFalse(actual.isNeedMemorySortForOrderBy());
}
@Test
public void assertIsNeedMemorySortForOrderByWithGroupByAndOrderBySame() throws SQLException {
SQLParsedResult sqlParsedResult = new SQLParsedResult(new ConditionContext());
SQLParsedResult sqlParsedResult = new SQLParsedResult(SQLType.SELECT, new ConditionContext());
sqlParsedResult.getOrderByContexts().add(new OrderByContext("col", OrderType.ASC, Optional.<String>absent()));
sqlParsedResult.getGroupByContexts().add(new GroupByContext(Optional.<String>absent(), "col", OrderType.ASC, Optional.<String>absent()));
ResultSetMergeContext actual = new ResultSetMergeContext(new ShardingResultSets(Collections.singletonList(MergerTestUtil.mockResult(Collections.singletonList("col")))), sqlParsedResult);
......@@ -117,7 +118,7 @@ public final class ResultSetMergeContextTest {
@Test
public void assertIsNeedMemorySortForOrderByWithGroupByAndOrderByDifferent() throws SQLException {
SQLParsedResult sqlParsedResult = new SQLParsedResult(new ConditionContext());
SQLParsedResult sqlParsedResult = new SQLParsedResult(SQLType.SELECT, new ConditionContext());
sqlParsedResult.getOrderByContexts().add(new OrderByContext("order_col", OrderType.ASC, Optional.<String>absent()));
sqlParsedResult.getGroupByContexts().add(new GroupByContext(Optional.<String>absent(), "group_col", OrderType.ASC, Optional.<String>absent()));
ResultSetMergeContext actual = new ResultSetMergeContext(
......@@ -128,7 +129,7 @@ public final class ResultSetMergeContextTest {
@Test
public void assertSetOrderByKeysToCurrentOrderByKeys() throws SQLException {
SQLParsedResult sqlParsedResult = new SQLParsedResult(new ConditionContext());
SQLParsedResult sqlParsedResult = new SQLParsedResult(SQLType.SELECT, new ConditionContext());
sqlParsedResult.getOrderByContexts().add(new OrderByContext("order_col", OrderType.ASC, Optional.<String>absent()));
sqlParsedResult.getGroupByContexts().add(new GroupByContext(Optional.<String>absent(), "group_col", OrderType.ASC, Optional.<String>absent()));
ResultSetMergeContext actual = new ResultSetMergeContext(
......
......@@ -22,6 +22,7 @@ import com.dangdang.ddframe.rdb.sharding.merger.fixture.MergerTestUtil;
import com.dangdang.ddframe.rdb.sharding.merger.fixture.TestResultSetRow;
import com.dangdang.ddframe.rdb.sharding.merger.resultset.memory.row.ResultSetRow;
import com.dangdang.ddframe.rdb.sharding.parser.contstant.AggregationType;
import com.dangdang.ddframe.rdb.sharding.parser.contstant.SQLType;
import com.dangdang.ddframe.rdb.sharding.parser.result.SQLParsedResult;
import com.dangdang.ddframe.rdb.sharding.parser.result.router.ConditionContext;
import lombok.RequiredArgsConstructor;
......@@ -68,7 +69,7 @@ public final class AggregationResultSetTest {
@Test
public void assertNext() throws SQLException {
SQLParsedResult sqlParsedResult = new SQLParsedResult(new ConditionContext());
SQLParsedResult sqlParsedResult = new SQLParsedResult(SQLType.SELECT, new ConditionContext());
sqlParsedResult.getAggregationColumns().add(MergerTestUtil.createAggregationColumn(aggregationType, columnNames.get(0), null, 1));
ResultSet resultSet = ResultSetFactory.getResultSet(Arrays.asList(
MergerTestUtil.mockResult(columnNames, Collections.<ResultSetRow>singletonList(new TestResultSetRow(resultSetData1))),
......
......@@ -20,6 +20,7 @@ package com.dangdang.ddframe.rdb.sharding.merger.pipeline.coupling;
import com.dangdang.ddframe.rdb.sharding.merger.ResultSetFactory;
import com.dangdang.ddframe.rdb.sharding.merger.fixture.MergerTestUtil;
import com.dangdang.ddframe.rdb.sharding.parser.contstant.AggregationType;
import com.dangdang.ddframe.rdb.sharding.parser.contstant.SQLType;
import com.dangdang.ddframe.rdb.sharding.parser.result.SQLParsedResult;
import com.dangdang.ddframe.rdb.sharding.parser.result.router.ConditionContext;
import lombok.RequiredArgsConstructor;
......@@ -53,7 +54,7 @@ public class NullableAggregationResultSetTest {
@Test
public void assertNullable() throws SQLException {
SQLParsedResult sqlParsedResult = new SQLParsedResult(new ConditionContext());
SQLParsedResult sqlParsedResult = new SQLParsedResult(SQLType.SELECT, new ConditionContext());
sqlParsedResult.getAggregationColumns().add(MergerTestUtil.createAggregationColumn(aggregationType, aggregationType.name() + "(*)", aggregationType.name(), 1));
ResultSet resultSet1;
ResultSet resultSet2;
......
......@@ -19,6 +19,7 @@ package com.dangdang.ddframe.rdb.sharding.merger.pipeline.coupling;
import com.dangdang.ddframe.rdb.sharding.merger.ResultSetFactory;
import com.dangdang.ddframe.rdb.sharding.merger.fixture.MockResultSet;
import com.dangdang.ddframe.rdb.sharding.parser.contstant.SQLType;
import com.dangdang.ddframe.rdb.sharding.parser.result.SQLParsedResult;
import com.dangdang.ddframe.rdb.sharding.parser.result.router.ConditionContext;
import com.dangdang.ddframe.rdb.sharding.parser.sql.context.OrderByContext;
......@@ -68,7 +69,7 @@ public final class OrderByResultSetTest {
}
private SQLParsedResult createSQLParsedResult(final OrderType orderType) {
SQLParsedResult result = new SQLParsedResult(new ConditionContext());
SQLParsedResult result = new SQLParsedResult(SQLType.SELECT, new ConditionContext());
result.getOrderByContexts().add(new OrderByContext("name", orderType, Optional.<String>absent()));
return result;
}
......
......@@ -19,6 +19,7 @@ package com.dangdang.ddframe.rdb.sharding.merger.pipeline.reducer;
import com.dangdang.ddframe.rdb.sharding.merger.ResultSetFactory;
import com.dangdang.ddframe.rdb.sharding.merger.fixture.MockResultSet;
import com.dangdang.ddframe.rdb.sharding.parser.contstant.SQLType;
import com.dangdang.ddframe.rdb.sharding.parser.result.SQLParsedResult;
import com.dangdang.ddframe.rdb.sharding.parser.result.router.ConditionContext;
import com.dangdang.ddframe.rdb.sharding.parser.sql.context.LimitContext;
......@@ -36,7 +37,7 @@ public final class IteratorResultSetTest {
@Test
public void assertNext() throws SQLException {
ResultSet resultSet = ResultSetFactory.getResultSet(
Arrays.<ResultSet>asList(new MockResultSet<>(1), new MockResultSet<>(2, 4), new MockResultSet<Integer>()), new SQLParsedResult(new ConditionContext()));
Arrays.<ResultSet>asList(new MockResultSet<>(1), new MockResultSet<>(2, 4), new MockResultSet<Integer>()), new SQLParsedResult(SQLType.SELECT, new ConditionContext()));
int count = 0;
while (resultSet.next()) {
count++;
......@@ -46,7 +47,7 @@ public final class IteratorResultSetTest {
@Test
public void assertNextWithLimitForAllData() throws SQLException {
SQLParsedResult sqlParsedResult = new SQLParsedResult(new ConditionContext());
SQLParsedResult sqlParsedResult = new SQLParsedResult(SQLType.SELECT, new ConditionContext());
sqlParsedResult.setLimit(new LimitContext(1, 10, -1, -1));
ResultSet resultSet = ResultSetFactory.getResultSet(Arrays.<ResultSet>asList(new MockResultSet<>(1), new MockResultSet<>(2, 4), new MockResultSet<Integer>()), sqlParsedResult);
int count = 0;
......@@ -58,7 +59,7 @@ public final class IteratorResultSetTest {
@Test
public void assertNextWithLimitForPartData() throws SQLException {
SQLParsedResult sqlParsedResult = new SQLParsedResult(new ConditionContext());
SQLParsedResult sqlParsedResult = new SQLParsedResult(SQLType.SELECT, new ConditionContext());
sqlParsedResult.setLimit(new LimitContext(1, 1, -1, -1));
ResultSet resultSet = ResultSetFactory.getResultSet(Arrays.<ResultSet>asList(new MockResultSet<>(1), new MockResultSet<>(2, 4), new MockResultSet<Integer>()), sqlParsedResult);
int count = 0;
......
......@@ -17,6 +17,7 @@
package com.dangdang.ddframe.rdb.sharding.parser;
import com.dangdang.ddframe.rdb.sharding.parser.contstant.SQLType;
import com.dangdang.ddframe.rdb.sharding.parser.jaxb.Assert;
import com.dangdang.ddframe.rdb.sharding.parser.jaxb.Asserts;
import com.dangdang.ddframe.rdb.sharding.parser.jaxb.Value;
......@@ -149,7 +150,7 @@ public abstract class AbstractBaseParseTest {
}
});
}
SQLParsedResult sqlParsedResult = new SQLParsedResult(new ConditionContext());
SQLParsedResult sqlParsedResult = new SQLParsedResult(SQLType.SELECT, new ConditionContext());
if (null != assertObj.getOrderByColumns()) {
sqlParsedResult.getOrderByContexts().addAll(Lists.transform(assertObj.getOrderByColumns(), new Function<com.dangdang.ddframe.rdb.sharding.parser.jaxb.OrderByColumn, OrderByContext>() {
......
......@@ -19,6 +19,7 @@ package com.dangdang.ddframe.rdb.sharding.parser.result;
import com.dangdang.ddframe.rdb.sharding.parser.contstant.AggregationType;
import com.dangdang.ddframe.rdb.sharding.parser.contstant.OrderType;
import com.dangdang.ddframe.rdb.sharding.parser.contstant.SQLType;
import com.dangdang.ddframe.rdb.sharding.parser.result.router.Condition;
import com.dangdang.ddframe.rdb.sharding.parser.result.router.Condition.BinaryOperator;
import com.dangdang.ddframe.rdb.sharding.parser.result.router.Condition.Column;
......@@ -44,7 +45,7 @@ public final class SQLParsedResultTest {
@Test
@Ignore
public void assertToString() throws IOException {
SQLParsedResult actual = new SQLParsedResult(generateConditionContext());
SQLParsedResult actual = new SQLParsedResult(SQLType.SELECT, generateConditionContext());
generateRouteContext(actual);
generateMergeContext(actual);
assertThat(actual.toString(), is("SQLParsedResult(routeContext=RouteContext(tables=[TableContext(originalLiterals=order, name=order, alias=Optional.of(o)), "
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册