提交 3118e420 编写于 作者: T terrymanu

fix page for SQLServer, add order by context to OrderByItems

上级 dd5f7bf4
......@@ -48,6 +48,7 @@ public final class LimitDecoratorResultSetMerger extends AbstractDecoratorResult
return true;
}
}
rowNumber = limit.isRowCountRewriteFlag() ? 0 : limit.getOffsetValue();
return false;
}
......
......@@ -150,7 +150,7 @@ public class SQLParser extends AbstractParser {
private void setTableToken(final SQLStatement sqlStatement, final int beginPosition, final SQLPropertyExpression propertyExpr) {
String owner = propertyExpr.getOwner().getName();
if (sqlStatement.getTables().getSingleTableName().equalsIgnoreCase(SQLUtil.getExactlyValue(owner))) {
if (!sqlStatement.getTables().isEmpty() && sqlStatement.getTables().getSingleTableName().equalsIgnoreCase(SQLUtil.getExactlyValue(owner))) {
sqlStatement.getSqlTokens().add(new TableToken(beginPosition - owner.length(), owner));
}
}
......
......@@ -25,6 +25,7 @@ import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.selectitem.Commo
import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.selectitem.SelectItem;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.exception.SQLParsingUnsupportedException;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.select.AbstractSelectParser;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.select.SelectStatement;
import com.google.common.base.Optional;
public class SQLServerSelectParser extends AbstractSelectParser {
......@@ -67,9 +68,14 @@ public class SQLServerSelectParser extends AbstractSelectParser {
}
@Override
protected SelectItem parseRowNumberSelectItem() {
protected SelectItem parseRowNumberSelectItem(final SelectStatement selectStatement) {
getSqlParser().getLexer().nextToken();
if (getSqlParser().equalAny(Symbol.LEFT_PAREN)) {
getSqlParser().skipUntil(DefaultKeyword.OVER);
getSqlParser().getLexer().nextToken();
getSqlParser().skipIfEqual(Symbol.LEFT_PAREN);
selectStatement.getOrderByItems().addAll(parseOrderBy());
getSqlParser().skipIfEqual(Symbol.RIGHT_PAREN);
getSqlParser().skipUntil(DefaultKeyword.AS);
getSqlParser().getLexer().nextToken();
SelectItem result = new CommonSelectItem("ROW_NUMBER", Optional.of(getSqlParser().getLexer().getCurrentToken().getLiterals()), false);
......
......@@ -123,7 +123,7 @@ public abstract class AbstractSelectParser implements SQLStatementParser {
private SelectItem parseSelectItem() {
if (isRowNumberSelectItem()) {
return parseRowNumberSelectItem();
return parseRowNumberSelectItem(selectStatement);
}
sqlParser.skipIfEqual(DefaultKeyword.CONNECT_BY_ROOT);
String literals = sqlParser.getLexer().getCurrentToken().getLiterals();
......@@ -153,7 +153,7 @@ public abstract class AbstractSelectParser implements SQLStatementParser {
return false;
}
protected SelectItem parseRowNumberSelectItem() {
protected SelectItem parseRowNumberSelectItem(final SelectStatement selectStatement) {
throw new UnsupportedOperationException("Cannot support special select item.");
}
......
......@@ -73,7 +73,7 @@ public final class ShardingTablesOnlyForPreparedStatementWithSelectTest extends
@Test
public void assertSelectPagingWithOffsetAndRowCountSql() throws SQLException, DatabaseUnitException {
if (currentDbType() == SQLServer) {
assertSelectPaging("SelectPagingWithOffsetAndRowCountSql.xml", replacePreparedStatement(getDatabaseTestSQL().getSelectPagingWithOffsetAndRowCountSql()), 2, 10, 19, 1000, 1909, 0);
assertSelectPaging("SelectPagingWithOffsetAndRowCountSql.xml", replacePreparedStatement(getDatabaseTestSQL().getSelectPagingWithOffsetAndRowCountSql()), 4, 10, 19, 1000, 1909, 2);
} else {
assertSelectPaging("SelectPagingWithOffsetAndRowCountSql.xml", replacePreparedStatement(getDatabaseTestSQL().getSelectPagingWithOffsetAndRowCountSql()), 10, 19, 1000, 1909, 2, 2);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册