提交 6895e03c 编写于 作者: T terrymanu

for #2567, move appendDerivedOrderBy from parse's optimize to optimize module

上级 60199f6a
......@@ -79,6 +79,7 @@ public final class ShardingSelectOptimizeEngine implements OptimizeEngine {
ShardingSelectOptimizedStatement result = new ShardingSelectOptimizedStatement(selectStatement,
new ArrayList<>(shardingConditionEngine.createShardingConditions(selectStatement, parameters)),
encryptConditionEngine.createEncryptConditions(selectStatement), appendAverageDerivedColumns(items));
appendDerivedOrderBy(result);
setPagination(result);
return result;
}
......@@ -220,6 +221,13 @@ public final class ShardingSelectOptimizeEngine implements OptimizeEngine {
return !selectItem.getAlias().isPresent() && selectItem.getExpression().equalsIgnoreCase(orderItem.getText());
}
private void appendDerivedOrderBy(final ShardingSelectOptimizedStatement optimizedStatement) {
if (!optimizedStatement.getGroupByItems().isEmpty() && optimizedStatement.getOrderByItems().isEmpty()) {
optimizedStatement.getOrderByItems().addAll(optimizedStatement.getGroupByItems());
optimizedStatement.setToAppendOrderByItems(true);
}
}
private void setPagination(final ShardingSelectOptimizedStatement optimizedStatement) {
if (null != selectStatement.getOffset() || null != selectStatement.getRowCount()) {
optimizedStatement.setPagination(new Pagination(selectStatement.getOffset(), selectStatement.getRowCount(), parameters));
......
......@@ -61,6 +61,8 @@ public final class ShardingSelectOptimizedStatement extends ShardingWhereOptimiz
private final List<OrderByItem> groupByItems;
private boolean toAppendOrderByItems;
private Pagination pagination;
public ShardingSelectOptimizedStatement(final SQLStatement sqlStatement,
......
......@@ -19,7 +19,6 @@ package org.apache.shardingsphere.core.parse.optimizer.select;
import org.apache.shardingsphere.core.parse.optimizer.SQLStatementOptimizer;
import org.apache.shardingsphere.core.parse.sql.statement.SQLStatement;
import org.apache.shardingsphere.core.parse.sql.statement.dml.SelectStatement;
/**
* Select optimizer for sharding.
......@@ -31,13 +30,5 @@ public final class ShardingSelectOptimizer implements SQLStatementOptimizer {
@Override
public void optimize(final SQLStatement sqlStatement) {
appendDerivedOrderBy((SelectStatement) sqlStatement);
}
private void appendDerivedOrderBy(final SelectStatement selectStatement) {
if (!selectStatement.getGroupByItems().isEmpty() && selectStatement.getOrderByItems().isEmpty()) {
selectStatement.getOrderByItems().addAll(selectStatement.getGroupByItems());
selectStatement.setToAppendOrderByItems(true);
}
}
}
......@@ -50,8 +50,6 @@ public final class SelectStatement extends DMLStatement {
private final List<OrderByItemSegment> orderByItems = new LinkedList<>();
private boolean toAppendOrderByItems;
private boolean containStar;
private boolean containsSubquery;
......
......@@ -169,9 +169,6 @@
<group-by-columns>
<group-by-column name="user_id" owner="o" order-direction="ASC" />
</group-by-columns>
<order-by-columns>
<order-by-column name="user_id" owner="o" order-direction="ASC" />
</order-by-columns>
</parser-result>
<parser-result sql-case-id="select_group_by_with_limit" parameters="5">
......@@ -249,9 +246,6 @@
<group-by-columns>
<group-by-column name="date_format(creation_date,'%y-%m-%d')" order-direction="ASC" />
</group-by-columns>
<order-by-columns>
<order-by-column name="date_format(creation_date,'%y-%m-%d')" order-direction="ASC" />
</order-by-columns>
</parser-result>
<parser-result sql-case-id="select_group_by_with_keyword_alias">
......@@ -269,9 +263,6 @@
<group-by-columns>
<group-by-column name="key" alias="key" order-direction="ASC" />
</group-by-columns>
<order-by-columns>
<order-by-column name="key" alias="key" order-direction="ASC" />
</order-by-columns>
</parser-result>
<parser-result sql-case-id="select_group_by_with_count_without_column_name">
......
......@@ -81,8 +81,5 @@
<group-by-columns>
<group-by-column name="order_id" order-direction="ASC" />
</group-by-columns>
<order-by-columns>
<order-by-column name="order_id" order-direction="ASC" />
</order-by-columns>
</parser-result>
</parser-result-sets>
......@@ -39,7 +39,7 @@ public final class OrderByTokenGenerator implements OptionalSQLTokenGenerator<Sh
if (!(optimizedStatement instanceof ShardingSelectOptimizedStatement)) {
return Optional.absent();
}
if (((SelectStatement) optimizedStatement.getSQLStatement()).isToAppendOrderByItems()) {
if (((ShardingSelectOptimizedStatement) optimizedStatement).isToAppendOrderByItems()) {
return Optional.of(createOrderByToken((ShardingSelectOptimizedStatement) optimizedStatement));
}
return Optional.absent();
......
......@@ -533,7 +533,6 @@ public final class ShardingSQLRewriterTest {
@Test
public void assertRewriteForDerivedOrderBy() {
selectStatement.setGroupByLastIndex(60);
selectStatement.setToAppendOrderByItems(true);
ColumnSegment columnSegment1 = new ColumnSegment(0, 0, "id");
columnSegment1.setOwner(new TableSegment(0, 0, "x"));
ColumnSegment columnSegment2 = new ColumnSegment(0, 0, "name");
......@@ -543,7 +542,10 @@ public final class ShardingSQLRewriterTest {
selectStatement.getGroupByItems().add(new ColumnOrderByItemSegment(0, 0, columnSegment2, OrderDirection.DESC, OrderDirection.ASC));
selectStatement.getOrderByItems().add(new ColumnOrderByItemSegment(0, 0, columnSegment2, OrderDirection.DESC, OrderDirection.ASC));
selectStatement.getSQLSegments().add(new TableSegment(25, 31, "table_x"));
routeResult = new SQLRouteResult(new ShardingSelectOptimizedStatement(selectStatement, Collections.<ShardingCondition>emptyList(), new AndCondition(), selectStatement.getItems()));
ShardingSelectOptimizedStatement optimizedStatement = new ShardingSelectOptimizedStatement(
selectStatement, Collections.<ShardingCondition>emptyList(), new AndCondition(), selectStatement.getItems());
optimizedStatement.setToAppendOrderByItems(true);
routeResult = new SQLRouteResult(optimizedStatement);
routeResult.setRoutingResult(new RoutingResult());
selectStatement.setLogicSQL("SELECT x.id, x.name FROM table_x x GROUP BY x.id, x.name DESC");
SQLRewriteEngine rewriteEngine = createSQLRewriteEngine(Collections.emptyList());
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册