提交 db9b5df4 编写于 作者: T terrymanu

refactor parseInternal for select

上级 cf3afa71
......@@ -42,6 +42,25 @@ public final class OracleSelectParser extends AbstractSelectParser {
super(shardingRule, sqlParser);
}
@Override
protected SelectStatement parseInternal() {
SelectStatement result = new SelectStatement();
getSqlParser().getLexer().nextToken();
parseDistinct();
parseBeforeSelectList(result);
parseSelectList(result);
parseFrom(result);
parseWhere(result);
skipHierarchicalQueryClause(result);
parseGroupBy(result);
parseHaving();
skipModelClause();
parseOrderBy(result);
parseRest(result);
parseUnsupportedTokens();
return result;
}
@Override
protected Collection<Keyword> getCustomizedDistinctKeywords() {
return Collections.<Keyword>singletonList(DefaultKeyword.UNIQUE);
......@@ -52,11 +71,6 @@ public final class OracleSelectParser extends AbstractSelectParser {
return new Keyword[] {OracleKeyword.CONNECT_BY_ROOT};
}
@Override
protected void parseBetweenWhereAndGroupBy(final SelectStatement selectStatement) {
skipHierarchicalQueryClause(selectStatement);
}
private void skipHierarchicalQueryClause(final SelectStatement selectStatement) {
skipConnect(selectStatement);
skipStart(selectStatement);
......@@ -81,11 +95,6 @@ public final class OracleSelectParser extends AbstractSelectParser {
}
}
@Override
protected void parseBetweenGroupByAndOrderBy(final SelectStatement selectStatement) {
skipModelClause();
}
private void skipModelClause() {
if (!getSqlParser().skipIfEqual(OracleKeyword.MODEL)) {
return;
......
......@@ -93,7 +93,7 @@ public abstract class AbstractSelectParser implements SQLStatementParser {
return result;
}
private SelectStatement parseInternal() {
protected SelectStatement parseInternal() {
SelectStatement result = new SelectStatement();
sqlParser.getLexer().nextToken();
parseDistinct();
......@@ -101,17 +101,15 @@ public abstract class AbstractSelectParser implements SQLStatementParser {
parseSelectList(result);
parseFrom(result);
parseWhere(result);
parseBetweenWhereAndGroupBy(result);
parseGroupBy(result);
parseHaving();
parseBetweenGroupByAndOrderBy(result);
parseOrderBy(result);
parseRest(result);
processUnsupportedTokens();
parseUnsupportedTokens();
return result;
}
private void parseDistinct() {
protected final void parseDistinct() {
sqlParser.skipAll(DefaultKeyword.ALL);
Collection<Keyword> distinctKeywords = Lists.newLinkedList(getCustomizedDistinctKeywords());
distinctKeywords.add(DefaultKeyword.DISTINCT);
......@@ -127,7 +125,7 @@ public abstract class AbstractSelectParser implements SQLStatementParser {
protected void parseBeforeSelectList(final SelectStatement selectStatement) {
}
private void parseSelectList(final SelectStatement selectStatement) {
protected final void parseSelectList(final SelectStatement selectStatement) {
do {
selectStatement.getItems().add(parseSelectItem(selectStatement));
} while (sqlParser.skipIfEqual(Symbol.COMMA));
......@@ -215,7 +213,7 @@ public abstract class AbstractSelectParser implements SQLStatementParser {
return result.toString();
}
private void parseFrom(final SelectStatement selectStatement) {
protected final void parseFrom(final SelectStatement selectStatement) {
if (getSqlParser().equalAny(DefaultKeyword.INTO)) {
throw new SQLParsingUnsupportedException(DefaultKeyword.INTO);
}
......@@ -284,15 +282,12 @@ public abstract class AbstractSelectParser implements SQLStatementParser {
}
}
private void parseWhere(final SelectStatement selectStatement) {
protected final void parseWhere(final SelectStatement selectStatement) {
sqlParser.parseWhere(shardingRule, selectStatement, items);
parametersIndex = sqlParser.getParametersIndex();
}
protected void parseBetweenWhereAndGroupBy(final SelectStatement selectStatement) {
}
private void parseGroupBy(final SelectStatement selectStatement) {
protected final void parseGroupBy(final SelectStatement selectStatement) {
if (sqlParser.skipIfEqual(DefaultKeyword.GROUP)) {
sqlParser.accept(DefaultKeyword.BY);
while (true) {
......@@ -342,15 +337,12 @@ public abstract class AbstractSelectParser implements SQLStatementParser {
return new Keyword[0];
}
private void parseHaving() {
protected final void parseHaving() {
if (sqlParser.equalAny(DefaultKeyword.HAVING)) {
throw new SQLParsingUnsupportedException(DefaultKeyword.HAVING);
}
}
protected void parseBetweenGroupByAndOrderBy(final SelectStatement selectStatement) {
}
protected final void parseOrderBy(final SelectStatement selectStatement) {
if (!sqlParser.skipIfEqual(DefaultKeyword.ORDER)) {
return;
......@@ -414,7 +406,7 @@ public abstract class AbstractSelectParser implements SQLStatementParser {
protected abstract void parseRest(final SelectStatement selectStatement);
private void processUnsupportedTokens() {
protected final void parseUnsupportedTokens() {
if (sqlParser.equalAny(DefaultKeyword.UNION, DefaultKeyword.EXCEPT, DefaultKeyword.INTERSECT, DefaultKeyword.MINUS)) {
throw new SQLParsingUnsupportedException(sqlParser.getLexer().getCurrentToken().getType());
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册