提交 ef98bdbf 编写于 作者: T terrymanu

refactor select parser 5th version

上级 58e51714
......@@ -26,20 +26,21 @@ import com.dangdang.ddframe.rdb.sharding.parsing.lexer.token.Keyword;
*/
public enum SQLServerKeyword implements Keyword {
TOP,
OFFSET,
PERCENT,
ONLY,
IF,
OUTPUT,
AUTO,
BEGIN,
IDENTITY,
BROWSE,
TYPE,
ELEMENTS,
XML,
XSINIL,
XMLSCHEMA,
TOP,
TIES,
OFFSET,
PERCENT,
ONLY,
IF,
OUTPUT,
AUTO,
BEGIN,
IDENTITY,
BROWSE,
TYPE,
ELEMENTS,
XML,
XSINIL,
XMLSCHEMA,
TYP
}
......@@ -39,9 +39,9 @@ public class MySQLSelectParser extends AbstractSelectParser {
}
@Override
protected void parseBetweenSelectAndList() {
getSqlParser().skipAll(MySQLKeyword.HIGH_PRIORITY, DefaultKeyword.STRAIGHT_JOIN, MySQLKeyword.SQL_SMALL_RESULT, MySQLKeyword.SQL_BIG_RESULT, MySQLKeyword.SQL_BUFFER_RESULT,
MySQLKeyword.SQL_CACHE, MySQLKeyword.SQL_NO_CACHE, MySQLKeyword.SQL_CALC_FOUND_ROWS);
protected void parseBetweenSelectAndSelectList() {
getSqlParser().skipAll(DefaultKeyword.ALL, DefaultKeyword.DISTINCT, DefaultKeyword.DISTINCTROW, MySQLKeyword.HIGH_PRIORITY, DefaultKeyword.STRAIGHT_JOIN, MySQLKeyword.SQL_SMALL_RESULT,
MySQLKeyword.SQL_BIG_RESULT, MySQLKeyword.SQL_BUFFER_RESULT, MySQLKeyword.SQL_CACHE, MySQLKeyword.SQL_NO_CACHE, MySQLKeyword.SQL_CALC_FOUND_ROWS);
}
@Override
......
......@@ -32,6 +32,11 @@ public class OracleSelectParser extends AbstractSelectParser {
super(sqlParser);
}
@Override
protected void parseBetweenSelectAndSelectList() {
getSqlParser().skipAll(DefaultKeyword.ALL, DefaultKeyword.DISTINCT, DefaultKeyword.UNIQUE);
}
@Override
protected final void skipToFrom() {
if (getSqlParser().equalAny(DefaultKeyword.INTO)) {
......
......@@ -38,6 +38,14 @@ public class PostgreSQLSelectParser extends AbstractSelectParser {
super(sqlParser);
}
@Override
protected void parseBetweenSelectAndSelectList() {
getSqlParser().skipAll(DefaultKeyword.ALL, DefaultKeyword.DISTINCT);
if (getSqlParser().skipIfEqual(DefaultKeyword.ON)) {
getSqlParser().skipParentheses();
}
}
@Override
protected final void skipToFrom() {
if (getSqlParser().skipIfEqual(DefaultKeyword.INTO)) {
......
......@@ -42,7 +42,8 @@ public class SQLServerSelectParser extends AbstractSelectParser {
}
@Override
protected void parseBetweenSelectAndList() {
protected void parseBetweenSelectAndSelectList() {
getSqlParser().skipAll(DefaultKeyword.ALL, DefaultKeyword.DISTINCT);
parseTop();
}
......@@ -66,9 +67,10 @@ public class SQLServerSelectParser extends AbstractSelectParser {
} else {
throw new SQLParsingException(getSqlParser().getLexer());
}
if (getSqlParser().skipIfEqual(SQLServerKeyword.PERCENT)) {
return;
if (getSqlParser().equalAny(SQLServerKeyword.PERCENT)) {
throw new SQLParsingUnsupportedException(SQLServerKeyword.PERCENT);
}
getSqlParser().skipIfEqual(DefaultKeyword.WITH, SQLServerKeyword.TIES);
if (null == getSelectStatement().getLimit()) {
Limit limit = new Limit(false);
limit.setRowCount(rowCountValue);
......
......@@ -77,9 +77,8 @@ public abstract class AbstractSelectParser implements SQLStatementParser {
@Override
public final SelectStatement parse() {
getSqlParser().getLexer().nextToken();
parseDistinct();
parseBetweenSelectAndList();
sqlParser.getLexer().nextToken();
parseBetweenSelectAndSelectList();
parseSelectList();
skipToFrom();
parseFrom();
......@@ -96,23 +95,7 @@ public abstract class AbstractSelectParser implements SQLStatementParser {
return selectStatement;
}
private void parseDistinct() {
if (sqlParser.equalAny(DefaultKeyword.DISTINCT, DefaultKeyword.DISTINCTROW, DefaultKeyword.UNION)) {
sqlParser.getLexer().nextToken();
if (hasDistinctOn() && sqlParser.equalAny(DefaultKeyword.ON)) {
sqlParser.getLexer().nextToken();
sqlParser.skipParentheses();
}
} else if (sqlParser.equalAny(DefaultKeyword.ALL)) {
sqlParser.getLexer().nextToken();
}
}
protected boolean hasDistinctOn() {
return false;
}
protected void parseBetweenSelectAndList() {
protected void parseBetweenSelectAndSelectList() {
}
protected final void parseSelectList() {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册