Skip to content

Commit

Permalink
Merge pull request #2817 from tuohai666/dev
Browse files Browse the repository at this point in the history
fix select_group_by_with_keyword_alias
  • Loading branch information
terrymanu committed Aug 7, 2019
2 parents 44b0213 + 9b95565 commit db5780b
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 6 deletions.
Expand Up @@ -38,10 +38,10 @@

<parser-result sql-case-id="insert_with_now_function" parameters="1, 1, 'init'">
<tables>
<table name="t_order" />
<table name="t_order_item" />
</tables>
<tokens>
<table-token start-index="12" table-name="t_order" length="7" />
<table-token start-index="12" table-name="t_order" length="12" />
</tokens>
<sharding-conditions>
<and-condition>
Expand Down
Expand Up @@ -21,7 +21,9 @@
import org.apache.shardingsphere.core.optimize.api.statement.OptimizedStatement;
import org.apache.shardingsphere.core.optimize.sharding.segment.select.orderby.OrderByItem;
import org.apache.shardingsphere.core.optimize.sharding.statement.dml.ShardingSelectOptimizedStatement;
import org.apache.shardingsphere.core.parse.sql.segment.dml.order.item.TextOrderByItemSegment;
import org.apache.shardingsphere.core.parse.core.constant.QuoteCharacter;
import org.apache.shardingsphere.core.parse.sql.segment.dml.order.item.ColumnOrderByItemSegment;
import org.apache.shardingsphere.core.parse.sql.segment.dml.order.item.ExpressionOrderByItemSegment;
import org.apache.shardingsphere.core.rewrite.builder.ParameterBuilder;
import org.apache.shardingsphere.core.rewrite.token.pojo.OrderByToken;
import org.apache.shardingsphere.core.rule.ShardingRule;
Expand All @@ -47,10 +49,19 @@ public Optional<OrderByToken> generateSQLToken(

private OrderByToken createOrderByToken(final ShardingSelectOptimizedStatement optimizedStatement) {
OrderByToken result = new OrderByToken(optimizedStatement.getGroupBy().getLastIndex() + 1);
String columnLabel;
for (OrderByItem each : optimizedStatement.getOrderBy().getItems()) {
String columnLabel = each.getSegment() instanceof TextOrderByItemSegment ? ((TextOrderByItemSegment) each.getSegment()).getText() : String.valueOf(each.getIndex());
if (each.getSegment() instanceof ColumnOrderByItemSegment) {
ColumnOrderByItemSegment columnOrderByItemSegment = (ColumnOrderByItemSegment) each.getSegment();
QuoteCharacter quoteCharacter = columnOrderByItemSegment.getColumn().getQuoteCharacter();
columnLabel = quoteCharacter.getStartDelimiter() + columnOrderByItemSegment.getText() + quoteCharacter.getEndDelimiter();
} else if (each.getSegment() instanceof ExpressionOrderByItemSegment) {
columnLabel = ((ExpressionOrderByItemSegment) each.getSegment()).getText();
} else {
columnLabel = String.valueOf(each.getIndex());
}
result.getColumnLabels().add(columnLabel);
result.getOrderDirections().add(each.getSegment().getOrderDirection());
result.getOrderDirections().add(each.getSegment().getOrderDirection());
}
return result;
}
Expand Down
Expand Up @@ -18,7 +18,7 @@

<sql-cases>
<sql-case id="insert_with_all_placeholders" value="INSERT INTO t_order (order_id, user_id, status) VALUES (?, ?, ?)" />
<sql-case id="insert_with_now_function" value="INSERT INTO t_order (order_id, user_id, status, creation_date) VALUES (?, ?, ?,now())" db-types="MySQL" />
<sql-case id="insert_with_now_function" value="INSERT INTO t_order_item (order_id, user_id, status, creation_date) VALUES (?, ?, ?,now())" db-types="MySQL" />
<sql-case id="insert_without_parameters" value="INSERT INTO t_order (order_id, user_id, status) VALUES (1, 1, 'insert')" />
<sql-case id="insert_with_special_characters" value="INSERT INTO `t_order` (`order_id`, `user_id`, `status`) VALUES (1, 1, 'insert')" db-types="MySQL" />
<sql-case id="insert_with_special_syntax" value="INSERT /*+ index(field1) */ INTO t_order (order_id, user_id, status) VALUES (1, 1, 'insert') RETURNING order_id" db-types="PostgreSQL" />
Expand Down

0 comments on commit db5780b

Please sign in to comment.