提交 2de499aa 编写于 作者: T terrymanu

refactor Having

上级 7c7dc0dc
......@@ -31,6 +31,7 @@ import com.dangdang.ddframe.rdb.sharding.parsing.parser.exception.SQLParsingExce
import com.dangdang.ddframe.rdb.sharding.parsing.parser.sql.AbstractOrderBySQLParser;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.sql.DistinctSQLParser;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.sql.GroupBySQLParser;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.sql.HavingSQLParser;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.sql.SelectListSQLParser;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.sql.WhereSQLParser;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.dql.select.AbstractSelectParser;
......@@ -51,6 +52,8 @@ public final class MySQLSelectParser extends AbstractSelectParser {
private final GroupBySQLParser groupBySQLParser;
private final HavingSQLParser havingSQLParser;
private final AbstractOrderBySQLParser orderBySQLParser;
public MySQLSelectParser(final ShardingRule shardingRule, final LexerEngine lexerEngine) {
......@@ -58,6 +61,7 @@ public final class MySQLSelectParser extends AbstractSelectParser {
distinctSQLParser = new MySQLDistinctSQLParser(lexerEngine);
selectListSQLParser = new SelectListSQLParser(shardingRule, lexerEngine);
groupBySQLParser = new MySQLGroupBySQLParser(lexerEngine);
havingSQLParser = new HavingSQLParser(lexerEngine);
orderBySQLParser = new MySQLOrderBySQLParser(lexerEngine);
}
......@@ -69,7 +73,7 @@ public final class MySQLSelectParser extends AbstractSelectParser {
parseFrom(selectStatement);
parseWhere(selectStatement);
groupBySQLParser.parse(selectStatement);
parseHaving();
havingSQLParser.parse();
orderBySQLParser.parse(selectStatement);
parseLimit(selectStatement);
parseRest();
......
......@@ -27,6 +27,7 @@ import com.dangdang.ddframe.rdb.sharding.parsing.parser.exception.SQLParsingUnsu
import com.dangdang.ddframe.rdb.sharding.parsing.parser.sql.AbstractOrderBySQLParser;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.sql.DistinctSQLParser;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.sql.GroupBySQLParser;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.sql.HavingSQLParser;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.sql.SelectListSQLParser;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.dql.select.AbstractSelectParser;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.dql.select.SelectStatement;
......@@ -46,6 +47,8 @@ public final class OracleSelectParser extends AbstractSelectParser {
private final GroupBySQLParser groupBySQLParser;
private final HavingSQLParser havingSQLParser;
private final AbstractOrderBySQLParser orderBySQLParser;
public OracleSelectParser(final ShardingRule shardingRule, final LexerEngine lexerEngine) {
......@@ -53,6 +56,7 @@ public final class OracleSelectParser extends AbstractSelectParser {
distinctSQLParser = new OracleDistinctSQLParser(lexerEngine);
selectListSQLParser = new OracleSelectListSQLParser(shardingRule, lexerEngine);
groupBySQLParser = new OracleGroupBySQLParser(lexerEngine);
havingSQLParser = new HavingSQLParser(lexerEngine);
orderBySQLParser = new OracleOrderBySQLParser(lexerEngine);
}
......@@ -64,7 +68,7 @@ public final class OracleSelectParser extends AbstractSelectParser {
parseWhere(selectStatement);
skipHierarchicalQueryClause(selectStatement);
groupBySQLParser.parse(selectStatement);
parseHaving();
havingSQLParser.parse();
skipModelClause(selectStatement);
orderBySQLParser.parse(selectStatement);
skipFor(selectStatement);
......
......@@ -31,6 +31,7 @@ import com.dangdang.ddframe.rdb.sharding.parsing.parser.exception.SQLParsingUnsu
import com.dangdang.ddframe.rdb.sharding.parsing.parser.sql.AbstractOrderBySQLParser;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.sql.DistinctSQLParser;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.sql.GroupBySQLParser;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.sql.HavingSQLParser;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.sql.SelectListSQLParser;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.sql.WhereSQLParser;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.dql.select.AbstractSelectParser;
......@@ -53,6 +54,8 @@ public final class PostgreSQLSelectParser extends AbstractSelectParser {
private final GroupBySQLParser groupBySQLParser;
private final HavingSQLParser havingSQLParser;
private final AbstractOrderBySQLParser orderBySQLParser;
public PostgreSQLSelectParser(final ShardingRule shardingRule, final LexerEngine lexerEngine) {
......@@ -60,6 +63,7 @@ public final class PostgreSQLSelectParser extends AbstractSelectParser {
distinctSQLParser = new DistinctSQLParser(lexerEngine);
selectListSQLParser = new SelectListSQLParser(shardingRule, lexerEngine);
groupBySQLParser = new GroupBySQLParser(lexerEngine);
havingSQLParser = new HavingSQLParser(lexerEngine);
orderBySQLParser = new PostgreSQLOrderBySQLParser(lexerEngine);
}
......@@ -70,7 +74,7 @@ public final class PostgreSQLSelectParser extends AbstractSelectParser {
parseFrom(selectStatement);
parseWhere(selectStatement);
groupBySQLParser.parse(selectStatement);
parseHaving();
havingSQLParser.parse();
orderBySQLParser.parse(selectStatement);
parseLimit(selectStatement);
parseFor();
......
......@@ -34,6 +34,7 @@ import com.dangdang.ddframe.rdb.sharding.parsing.parser.expression.SQLPlaceholde
import com.dangdang.ddframe.rdb.sharding.parsing.parser.sql.AbstractOrderBySQLParser;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.sql.DistinctSQLParser;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.sql.GroupBySQLParser;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.sql.HavingSQLParser;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.sql.SelectListSQLParser;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.dql.select.AbstractSelectParser;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.dql.select.SelectStatement;
......@@ -52,6 +53,8 @@ public final class SQLServerSelectParser extends AbstractSelectParser {
private final GroupBySQLParser groupBySQLParser;
private final HavingSQLParser havingSQLParser;
private final AbstractOrderBySQLParser orderBySQLParser;
public SQLServerSelectParser(final ShardingRule shardingRule, final LexerEngine lexerEngine) {
......@@ -59,6 +62,7 @@ public final class SQLServerSelectParser extends AbstractSelectParser {
distinctSQLParser = new DistinctSQLParser(lexerEngine);
selectListSQLParser = new SQLServerSelectListSQLParser(shardingRule, lexerEngine);
groupBySQLParser = new GroupBySQLParser(lexerEngine);
havingSQLParser = new HavingSQLParser(lexerEngine);
orderBySQLParser = new MySQLOrderBySQLParser(lexerEngine);
}
......@@ -70,7 +74,7 @@ public final class SQLServerSelectParser extends AbstractSelectParser {
parseFrom(selectStatement);
parseWhere(selectStatement);
groupBySQLParser.parse(selectStatement);
parseHaving();
havingSQLParser.parse();
orderBySQLParser.parse(selectStatement);
parseOffset(selectStatement);
parseFor();
......
package com.dangdang.ddframe.rdb.sharding.parsing.parser.sql;
import com.dangdang.ddframe.rdb.sharding.parsing.lexer.LexerEngine;
import com.dangdang.ddframe.rdb.sharding.parsing.lexer.token.DefaultKeyword;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.exception.SQLParsingUnsupportedException;
import lombok.RequiredArgsConstructor;
/**
* Having解析器.
*
* @author zhangliang
*/
@RequiredArgsConstructor
public final class HavingSQLParser implements SQLParser {
private final LexerEngine lexerEngine;
/**
* 解析Having.
*/
public void parse() {
if (lexerEngine.equalAny(DefaultKeyword.HAVING)) {
throw new SQLParsingUnsupportedException(DefaultKeyword.HAVING);
}
}
}
......@@ -174,12 +174,6 @@ public abstract class AbstractSelectParser implements SQLStatementParser {
parametersIndex = selectStatement.getParametersIndex();
}
protected final void parseHaving() {
if (lexerEngine.equalAny(DefaultKeyword.HAVING)) {
throw new SQLParsingUnsupportedException(DefaultKeyword.HAVING);
}
}
protected final void parseRest() {
Collection<Keyword> unsupportedRestKeywords = new LinkedList<>();
unsupportedRestKeywords.addAll(Arrays.asList(DefaultKeyword.UNION, DefaultKeyword.INTERSECT, DefaultKeyword.EXCEPT, DefaultKeyword.MINUS));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册