From 242485339d4bc155420e06e70d0a5f304c70537a Mon Sep 17 00:00:00 2001 From: terrymanu Date: Thu, 16 Mar 2017 19:36:43 +0800 Subject: [PATCH] refactor --- .../rdb/sharding/parser/SQLParserFactory.java | 22 ++++++------- .../mysql/parser/MySQLDeleteParser.java | 6 ++-- .../mysql/parser/MySQLInsertParser.java | 6 ++-- ...{MySQLExprParser.java => MySQLParser.java} | 8 ++--- .../mysql/parser/MySQLSelectParser.java | 8 ++--- .../mysql/parser/MySQLUpdateParser.java | 6 ++-- .../oracle/parser/OracleDeleteParser.java | 6 ++-- .../oracle/parser/OracleInsertParser.java | 6 ++-- ...racleExprParser.java => OracleParser.java} | 10 +++--- .../oracle/parser/OracleSelectParser.java | 6 ++-- .../oracle/parser/OracleUpdateParser.java | 6 ++-- .../parser/PostgreSQLDeleteParser.java | 6 ++-- .../parser/PostgreSQLInsertParser.java | 6 ++-- ...LExprParser.java => PostgreSQLParser.java} | 8 ++--- .../parser/PostgreSQLSelectParser.java | 6 ++-- .../parser/PostgreSQLUpdateParser.java | 6 ++-- .../parser/SQLServerDeleteParser.java | 10 +++--- .../parser/SQLServerInsertParser.java | 6 ++-- ...erExprParser.java => SQLServerParser.java} | 8 ++--- .../parser/SQLServerSelectParser.java | 10 +++--- .../parser/SQLServerUpdateParser.java | 8 ++--- .../{SQLExprParser.java => SQLParser.java} | 11 +++---- .../parser/sql/parser/SQLStatementParser.java | 8 +++-- .../{ => delete}/AbstractDeleteParser.java | 7 ++-- .../{ => delete}/SQLDeleteParserFactory.java | 5 +-- .../{ => insert}/AbstractInsertParser.java | 8 +++-- .../{ => insert}/SQLInsertParserFactory.java | 5 +-- .../{ => select}/AbstractSelectParser.java | 8 +++-- .../{ => select}/SQLSelectParserFactory.java | 5 +-- .../{ => update}/AbstractUpdateParser.java | 7 ++-- .../{ => update}/SQLUpdateParserFactory.java | 5 +-- .../parser/AbstractStatementParserTest.java | 20 ++++++------ .../sql/parser/DeleteStatementParserTest.java | 17 +++++----- .../sql/parser/InsertStatementParserTest.java | 32 +++++++++---------- .../sql/parser/UpdateStatementParserTest.java | 21 ++++++------ 35 files changed, 169 insertions(+), 154 deletions(-) rename sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/mysql/parser/{MySQLExprParser.java => MySQLParser.java} (95%) rename sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/oracle/parser/{OracleExprParser.java => OracleParser.java} (84%) rename sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/postgresql/parser/{PostgreSQLExprParser.java => PostgreSQLParser.java} (74%) rename sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/sqlserver/parser/{SQLServerExprParser.java => SQLServerParser.java} (93%) rename sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/{SQLExprParser.java => SQLParser.java} (97%) rename sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/{ => delete}/AbstractDeleteParser.java (89%) rename sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/{ => delete}/SQLDeleteParserFactory.java (88%) rename sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/{ => insert}/AbstractInsertParser.java (96%) rename sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/{ => insert}/SQLInsertParserFactory.java (90%) rename sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/{ => select}/AbstractSelectParser.java (96%) rename sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/{ => select}/SQLSelectParserFactory.java (88%) rename sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/{ => update}/AbstractUpdateParser.java (93%) rename sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/{ => update}/SQLUpdateParserFactory.java (88%) diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/SQLParserFactory.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/SQLParserFactory.java index 1b2f042c7f..5b566e4c25 100644 --- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/SQLParserFactory.java +++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/SQLParserFactory.java @@ -18,11 +18,11 @@ package com.dangdang.ddframe.rdb.sharding.parser; import com.dangdang.ddframe.rdb.sharding.parser.sql.context.SQLContext; -import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.mysql.parser.MySQLExprParser; -import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.oracle.parser.OracleExprParser; -import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.postgresql.parser.PostgreSQLExprParser; -import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.sqlserver.parser.SQLServerExprParser; -import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLExprParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.mysql.parser.MySQLParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.oracle.parser.OracleParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.postgresql.parser.PostgreSQLParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.sqlserver.parser.SQLServerParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLParser; import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLStatementParser; import com.dangdang.ddframe.rdb.sharding.api.rule.ShardingRule; import com.dangdang.ddframe.rdb.sharding.constants.DatabaseType; @@ -61,24 +61,24 @@ public final class SQLParserFactory { } private static SQLStatementParser getSQLStatementParser(final DatabaseType dbType, final String sql, final ShardingRule shardingRule, final List parameters) { - SQLExprParser sqlExprParser; + SQLParser sqlParser; switch (dbType) { case H2: case MySQL: - sqlExprParser = new MySQLExprParser(shardingRule, parameters, sql); + sqlParser = new MySQLParser(sql, shardingRule, parameters); break; case Oracle: - sqlExprParser = new OracleExprParser(shardingRule, parameters, sql); + sqlParser = new OracleParser(sql, shardingRule, parameters); break; case SQLServer: - sqlExprParser = new SQLServerExprParser(shardingRule, parameters, sql); + sqlParser = new SQLServerParser(sql, shardingRule, parameters); break; case PostgreSQL: - sqlExprParser = new PostgreSQLExprParser(shardingRule, parameters, sql); + sqlParser = new PostgreSQLParser(sql, shardingRule, parameters); break; default: throw new UnsupportedOperationException(dbType.name()); } - return new SQLStatementParser(dbType, shardingRule, parameters, sqlExprParser); + return new SQLStatementParser(dbType, shardingRule, parameters, sqlParser); } } diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/mysql/parser/MySQLDeleteParser.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/mysql/parser/MySQLDeleteParser.java index a44350e2f7..cf4fc3485e 100644 --- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/mysql/parser/MySQLDeleteParser.java +++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/mysql/parser/MySQLDeleteParser.java @@ -19,8 +19,8 @@ package com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.mysql.parser; import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.mysql.lexer.MySQLKeyword; import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.token.DefaultKeyword; -import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.AbstractDeleteParser; -import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLExprParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.delete.AbstractDeleteParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLParser; /** * MySQL Delete语句解析器. @@ -29,7 +29,7 @@ import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLExprParser; */ public final class MySQLDeleteParser extends AbstractDeleteParser { - public MySQLDeleteParser(final SQLExprParser exprParser) { + public MySQLDeleteParser(final SQLParser exprParser) { super(exprParser); } diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/mysql/parser/MySQLInsertParser.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/mysql/parser/MySQLInsertParser.java index 36801393f7..35c760e911 100644 --- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/mysql/parser/MySQLInsertParser.java +++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/mysql/parser/MySQLInsertParser.java @@ -30,8 +30,8 @@ import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.token.DefaultKeyword; import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.token.Literals; import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.token.Symbol; import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.token.TokenType; -import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.AbstractInsertParser; -import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLExprParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.insert.AbstractInsertParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLParser; import com.dangdang.ddframe.rdb.sharding.parser.visitor.ParseContext; import com.google.common.collect.Sets; @@ -46,7 +46,7 @@ import java.util.Set; */ public final class MySQLInsertParser extends AbstractInsertParser { - public MySQLInsertParser(final ShardingRule shardingRule, final List parameters, final SQLExprParser exprParser) { + public MySQLInsertParser(final ShardingRule shardingRule, final List parameters, final SQLParser exprParser) { super(shardingRule, parameters, exprParser); } diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/mysql/parser/MySQLExprParser.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/mysql/parser/MySQLParser.java similarity index 95% rename from sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/mysql/parser/MySQLExprParser.java rename to sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/mysql/parser/MySQLParser.java index c34a07aaa2..7430ee1967 100755 --- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/mysql/parser/MySQLExprParser.java +++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/mysql/parser/MySQLParser.java @@ -26,16 +26,16 @@ import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.mysql.lexer.MySQLLex import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.token.Literals; import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.token.Symbol; import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.ParserException; -import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLExprParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLParser; import com.dangdang.ddframe.rdb.sharding.api.rule.ShardingRule; import com.dangdang.ddframe.rdb.sharding.exception.SQLParserException; import java.util.List; -public class MySQLExprParser extends SQLExprParser { +public class MySQLParser extends SQLParser { - public MySQLExprParser(final ShardingRule shardingRule, final List parameters, final String sql) { - super(shardingRule, parameters, new MySQLLexer(sql)); + public MySQLParser(final String sql, final ShardingRule shardingRule, final List parameters) { + super( new MySQLLexer(sql), shardingRule, parameters); getLexer().nextToken(); } diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/mysql/parser/MySQLSelectParser.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/mysql/parser/MySQLSelectParser.java index fac3c612b5..45dd642d7f 100755 --- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/mysql/parser/MySQLSelectParser.java +++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/mysql/parser/MySQLSelectParser.java @@ -21,13 +21,13 @@ import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.mysql.lexer.MySQLKey import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.oracle.lexer.OracleKeyword; import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.token.Assist; import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.token.DefaultKeyword; -import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.AbstractSelectParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.select.AbstractSelectParser; import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.ParserUnsupportedException; -import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLExprParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLParser; public class MySQLSelectParser extends AbstractSelectParser { - public MySQLSelectParser(final SQLExprParser exprParser) { + public MySQLSelectParser(final SQLParser exprParser) { super(exprParser); } @@ -46,7 +46,7 @@ public class MySQLSelectParser extends AbstractSelectParser { parseGroupBy(); getSqlContext().getOrderByContexts().addAll(getExprParser().parseOrderBy(getSqlContext())); if (getExprParser().equalAny(MySQLKeyword.LIMIT)) { - getSqlContext().setLimitContext(((MySQLExprParser) getExprParser()).parseLimit(getParametersIndex(), getSqlContext())); + getSqlContext().setLimitContext(((MySQLParser) getExprParser()).parseLimit(getParametersIndex(), getSqlContext())); } if (getExprParser().equalAny(DefaultKeyword.PROCEDURE)) { throw new ParserUnsupportedException(getExprParser().getLexer().getCurrentToken().getType()); diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/mysql/parser/MySQLUpdateParser.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/mysql/parser/MySQLUpdateParser.java index fcc8992626..5b589a442c 100644 --- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/mysql/parser/MySQLUpdateParser.java +++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/mysql/parser/MySQLUpdateParser.java @@ -18,8 +18,8 @@ package com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.mysql.parser; import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.mysql.lexer.MySQLKeyword; -import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.AbstractUpdateParser; -import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLExprParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.update.AbstractUpdateParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLParser; /** * MySQL Update语句解析器. @@ -28,7 +28,7 @@ import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLExprParser; */ public final class MySQLUpdateParser extends AbstractUpdateParser { - public MySQLUpdateParser(final SQLExprParser exprParser) { + public MySQLUpdateParser(final SQLParser exprParser) { super(exprParser); } diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/oracle/parser/OracleDeleteParser.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/oracle/parser/OracleDeleteParser.java index 52b882a944..e2c9749751 100755 --- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/oracle/parser/OracleDeleteParser.java +++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/oracle/parser/OracleDeleteParser.java @@ -19,12 +19,12 @@ package com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.oracle.parser; import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.oracle.lexer.OracleKeyword; import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.token.DefaultKeyword; -import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.AbstractDeleteParser; -import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLExprParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.delete.AbstractDeleteParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLParser; public class OracleDeleteParser extends AbstractDeleteParser { - public OracleDeleteParser(final SQLExprParser exprParser) { + public OracleDeleteParser(final SQLParser exprParser) { super(exprParser); } diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/oracle/parser/OracleInsertParser.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/oracle/parser/OracleInsertParser.java index ada852f230..f572d385a6 100644 --- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/oracle/parser/OracleInsertParser.java +++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/oracle/parser/OracleInsertParser.java @@ -21,8 +21,8 @@ import com.dangdang.ddframe.rdb.sharding.api.rule.ShardingRule; import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.oracle.lexer.OracleKeyword; import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.token.DefaultKeyword; import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.token.TokenType; -import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.AbstractInsertParser; -import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLExprParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.insert.AbstractInsertParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLParser; import com.google.common.collect.Sets; import java.util.List; @@ -35,7 +35,7 @@ import java.util.Set; */ public final class OracleInsertParser extends AbstractInsertParser { - public OracleInsertParser(final ShardingRule shardingRule, final List parameters, final SQLExprParser exprParser) { + public OracleInsertParser(final ShardingRule shardingRule, final List parameters, final SQLParser exprParser) { super(shardingRule, parameters, exprParser); } diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/oracle/parser/OracleExprParser.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/oracle/parser/OracleParser.java similarity index 84% rename from sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/oracle/parser/OracleExprParser.java rename to sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/oracle/parser/OracleParser.java index 3f3fdb6c1c..39f946bb2e 100755 --- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/oracle/parser/OracleExprParser.java +++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/oracle/parser/OracleParser.java @@ -22,21 +22,21 @@ import com.dangdang.ddframe.rdb.sharding.parser.sql.context.SQLContext; import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.oracle.lexer.OracleKeyword; import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.oracle.lexer.OracleLexer; import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.ParserUnsupportedException; -import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLExprParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLParser; import com.dangdang.ddframe.rdb.sharding.api.rule.ShardingRule; import com.google.common.base.Optional; import java.util.List; -public class OracleExprParser extends SQLExprParser { +public class OracleParser extends SQLParser { - public OracleExprParser(final ShardingRule shardingRule, final List parameters, final String sql) { - super(shardingRule, parameters, new OracleLexer(sql)); + public OracleParser(final String sql, final ShardingRule shardingRule, final List parameters) { + super(new OracleLexer(sql), shardingRule, parameters); getLexer().nextToken(); } @Override - protected Optional as() { + public Optional as() { if (equalAny(OracleKeyword.CONNECT)) { return Optional.absent(); } diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/oracle/parser/OracleSelectParser.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/oracle/parser/OracleSelectParser.java index 944315de99..7bd980ae79 100755 --- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/oracle/parser/OracleSelectParser.java +++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/oracle/parser/OracleSelectParser.java @@ -21,16 +21,16 @@ import com.dangdang.ddframe.rdb.sharding.parser.sql.context.TableContext; import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.oracle.lexer.OracleKeyword; import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.token.DefaultKeyword; import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.token.Symbol; -import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.AbstractSelectParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.select.AbstractSelectParser; import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.ParserUnsupportedException; -import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLExprParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLParser; import com.dangdang.ddframe.rdb.sharding.parser.visitor.ParseContext; import java.util.List; public class OracleSelectParser extends AbstractSelectParser { - public OracleSelectParser(final SQLExprParser exprParser) { + public OracleSelectParser(final SQLParser exprParser) { super(exprParser); } diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/oracle/parser/OracleUpdateParser.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/oracle/parser/OracleUpdateParser.java index 1952569ed8..36f7c542de 100755 --- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/oracle/parser/OracleUpdateParser.java +++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/oracle/parser/OracleUpdateParser.java @@ -18,12 +18,12 @@ package com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.oracle.parser; import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.oracle.lexer.OracleKeyword; -import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.AbstractUpdateParser; -import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLExprParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.update.AbstractUpdateParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLParser; public class OracleUpdateParser extends AbstractUpdateParser { - public OracleUpdateParser(final SQLExprParser exprParser) { + public OracleUpdateParser(final SQLParser exprParser) { super(exprParser); } diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/postgresql/parser/PostgreSQLDeleteParser.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/postgresql/parser/PostgreSQLDeleteParser.java index 6bf83cf63c..7570247139 100644 --- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/postgresql/parser/PostgreSQLDeleteParser.java +++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/postgresql/parser/PostgreSQLDeleteParser.java @@ -19,8 +19,8 @@ package com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.postgresql.parser; import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.postgresql.lexer.PostgreSQLKeyword; import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.token.DefaultKeyword; -import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.AbstractDeleteParser; -import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLExprParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.delete.AbstractDeleteParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLParser; /** * PostgreSQL Delete语句解析器. @@ -29,7 +29,7 @@ import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLExprParser; */ public final class PostgreSQLDeleteParser extends AbstractDeleteParser { - public PostgreSQLDeleteParser(final SQLExprParser exprParser) { + public PostgreSQLDeleteParser(final SQLParser exprParser) { super(exprParser); } diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/postgresql/parser/PostgreSQLInsertParser.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/postgresql/parser/PostgreSQLInsertParser.java index 1b81d53819..0329f73489 100644 --- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/postgresql/parser/PostgreSQLInsertParser.java +++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/postgresql/parser/PostgreSQLInsertParser.java @@ -17,8 +17,8 @@ package com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.postgresql.parser; -import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.AbstractInsertParser; -import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLExprParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.insert.AbstractInsertParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLParser; import com.dangdang.ddframe.rdb.sharding.api.rule.ShardingRule; import java.util.List; @@ -30,7 +30,7 @@ import java.util.List; */ public final class PostgreSQLInsertParser extends AbstractInsertParser { - public PostgreSQLInsertParser(final ShardingRule shardingRule, final List parameters, final SQLExprParser exprParser) { + public PostgreSQLInsertParser(final ShardingRule shardingRule, final List parameters, final SQLParser exprParser) { super(shardingRule, parameters, exprParser); } } diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/postgresql/parser/PostgreSQLExprParser.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/postgresql/parser/PostgreSQLParser.java similarity index 74% rename from sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/postgresql/parser/PostgreSQLExprParser.java rename to sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/postgresql/parser/PostgreSQLParser.java index bdc4f0b212..2e5eae4b7e 100755 --- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/postgresql/parser/PostgreSQLExprParser.java +++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/postgresql/parser/PostgreSQLParser.java @@ -18,15 +18,15 @@ package com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.postgresql.parser; import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.postgresql.lexer.PostgreSQLLexer; -import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLExprParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLParser; import com.dangdang.ddframe.rdb.sharding.api.rule.ShardingRule; import java.util.List; -public class PostgreSQLExprParser extends SQLExprParser { +public class PostgreSQLParser extends SQLParser { - public PostgreSQLExprParser(final ShardingRule shardingRule, final List parameters, final String sql) { - super(shardingRule, parameters, new PostgreSQLLexer(sql)); + public PostgreSQLParser(final String sql, final ShardingRule shardingRule, final List parameters) { + super(new PostgreSQLLexer(sql), shardingRule, parameters); getLexer().nextToken(); } } diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/postgresql/parser/PostgreSQLSelectParser.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/postgresql/parser/PostgreSQLSelectParser.java index ff97ba8728..049f0afe08 100755 --- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/postgresql/parser/PostgreSQLSelectParser.java +++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/postgresql/parser/PostgreSQLSelectParser.java @@ -22,14 +22,14 @@ import com.dangdang.ddframe.rdb.sharding.parser.sql.expr.SQLIdentifierExpr; import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.token.DefaultKeyword; import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.token.Literals; import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.token.Symbol; -import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.AbstractSelectParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.select.AbstractSelectParser; import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.ParserException; import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.ParserUnsupportedException; -import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLExprParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLParser; public class PostgreSQLSelectParser extends AbstractSelectParser { - public PostgreSQLSelectParser(final SQLExprParser exprParser) { + public PostgreSQLSelectParser(final SQLParser exprParser) { super(exprParser); } diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/postgresql/parser/PostgreSQLUpdateParser.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/postgresql/parser/PostgreSQLUpdateParser.java index 38026d2133..625e378779 100644 --- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/postgresql/parser/PostgreSQLUpdateParser.java +++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/postgresql/parser/PostgreSQLUpdateParser.java @@ -18,8 +18,8 @@ package com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.postgresql.parser; import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.postgresql.lexer.PostgreSQLKeyword; -import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.AbstractUpdateParser; -import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLExprParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.update.AbstractUpdateParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLParser; /** * PostgreSQL Update语句解析器. @@ -28,7 +28,7 @@ import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLExprParser; */ public final class PostgreSQLUpdateParser extends AbstractUpdateParser { - public PostgreSQLUpdateParser(final SQLExprParser exprParser) { + public PostgreSQLUpdateParser(final SQLParser exprParser) { super(exprParser); } diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/sqlserver/parser/SQLServerDeleteParser.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/sqlserver/parser/SQLServerDeleteParser.java index 346e09f095..ace644fd42 100644 --- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/sqlserver/parser/SQLServerDeleteParser.java +++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/sqlserver/parser/SQLServerDeleteParser.java @@ -18,8 +18,8 @@ package com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.sqlserver.parser; import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.token.DefaultKeyword; -import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.AbstractDeleteParser; -import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLExprParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.delete.AbstractDeleteParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLParser; /** * SQLServer Delete语句解析器. @@ -28,14 +28,14 @@ import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLExprParser; */ public final class SQLServerDeleteParser extends AbstractDeleteParser { - public SQLServerDeleteParser(final SQLExprParser exprParser) { + public SQLServerDeleteParser(final SQLParser exprParser) { super(exprParser); } @Override protected void skipBetweenDeleteAndTable() { - ((SQLServerExprParser) getExprParser()).parseTop(); - ((SQLServerExprParser) getExprParser()).skipOutput(); + ((SQLServerParser) getExprParser()).parseTop(); + ((SQLServerParser) getExprParser()).skipOutput(); getExprParser().skipIfEqual(DefaultKeyword.FROM); } } diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/sqlserver/parser/SQLServerInsertParser.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/sqlserver/parser/SQLServerInsertParser.java index 939668afdc..60ec3bd1b8 100644 --- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/sqlserver/parser/SQLServerInsertParser.java +++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/sqlserver/parser/SQLServerInsertParser.java @@ -17,8 +17,8 @@ package com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.sqlserver.parser; -import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.AbstractInsertParser; -import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLExprParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.insert.AbstractInsertParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLParser; import com.dangdang.ddframe.rdb.sharding.api.rule.ShardingRule; import java.util.List; @@ -30,7 +30,7 @@ import java.util.List; */ public final class SQLServerInsertParser extends AbstractInsertParser { - public SQLServerInsertParser(final ShardingRule shardingRule, final List parameters, final SQLExprParser exprParser) { + public SQLServerInsertParser(final ShardingRule shardingRule, final List parameters, final SQLParser exprParser) { super(shardingRule, parameters, exprParser); } } diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/sqlserver/parser/SQLServerExprParser.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/sqlserver/parser/SQLServerParser.java similarity index 93% rename from sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/sqlserver/parser/SQLServerExprParser.java rename to sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/sqlserver/parser/SQLServerParser.java index b438b4e7e9..fc99e58cba 100755 --- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/sqlserver/parser/SQLServerExprParser.java +++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/sqlserver/parser/SQLServerParser.java @@ -27,15 +27,15 @@ import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.token.DefaultKeyword; import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.token.Symbol; import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.ParserException; import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.ParserUnsupportedException; -import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLExprParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLParser; import com.dangdang.ddframe.rdb.sharding.api.rule.ShardingRule; import java.util.List; -public class SQLServerExprParser extends SQLExprParser { +public class SQLServerParser extends SQLParser { - public SQLServerExprParser(final ShardingRule shardingRule, final List parameters, final String sql) { - super(shardingRule, parameters, new SQLServerLexer(sql)); + public SQLServerParser(final String sql, final ShardingRule shardingRule, final List parameters) { + super(new SQLServerLexer(sql), shardingRule, parameters); getLexer().nextToken(); } diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/sqlserver/parser/SQLServerSelectParser.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/sqlserver/parser/SQLServerSelectParser.java index 98c53b253f..be924af224 100755 --- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/sqlserver/parser/SQLServerSelectParser.java +++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/sqlserver/parser/SQLServerSelectParser.java @@ -20,13 +20,13 @@ package com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.sqlserver.parser; import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.sqlserver.lexer.SQLServerKeyword; import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.token.DefaultKeyword; import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.token.Symbol; -import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.AbstractSelectParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.select.AbstractSelectParser; import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.ParserUnsupportedException; -import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLExprParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLParser; public class SQLServerSelectParser extends AbstractSelectParser { - public SQLServerSelectParser(final SQLExprParser exprParser) { + public SQLServerSelectParser(final SQLParser exprParser) { super(exprParser); } @@ -36,7 +36,7 @@ public class SQLServerSelectParser extends AbstractSelectParser { parseFor(); } if (getExprParser().equalAny(SQLServerKeyword.OFFSET)) { - ((SQLServerExprParser) getExprParser()).parseOffset(getSqlContext()); + ((SQLServerParser) getExprParser()).parseOffset(getSqlContext()); } } @@ -46,7 +46,7 @@ public class SQLServerSelectParser extends AbstractSelectParser { parseDistinct(); if (getExprParser().equalAny(SQLServerKeyword.TOP)) { // TODO save topContext - ((SQLServerExprParser) getExprParser()).parseTop(); + ((SQLServerParser) getExprParser()).parseTop(); } parseSelectList(); } diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/sqlserver/parser/SQLServerUpdateParser.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/sqlserver/parser/SQLServerUpdateParser.java index 6c2b1ae5d6..a5ad615b56 100644 --- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/sqlserver/parser/SQLServerUpdateParser.java +++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/dialect/sqlserver/parser/SQLServerUpdateParser.java @@ -17,8 +17,8 @@ package com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.sqlserver.parser; -import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.AbstractUpdateParser; -import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLExprParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.update.AbstractUpdateParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLParser; /** * SQLServer Update语句解析器. @@ -27,12 +27,12 @@ import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLExprParser; */ public final class SQLServerUpdateParser extends AbstractUpdateParser { - public SQLServerUpdateParser(final SQLExprParser exprParser) { + public SQLServerUpdateParser(final SQLParser exprParser) { super(exprParser); } @Override protected void skipBetweenUpdateAndTable() { - ((SQLServerExprParser) getExprParser()).parseTop(); + ((SQLServerParser) getExprParser()).parseTop(); } } diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/SQLExprParser.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/SQLParser.java similarity index 97% rename from sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/SQLExprParser.java rename to sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/SQLParser.java index 1b63dd97b0..29beac46f7 100755 --- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/SQLExprParser.java +++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/SQLParser.java @@ -58,7 +58,7 @@ import java.util.List; * * @author zhangliang */ -public class SQLExprParser extends Parser { +public class SQLParser extends Parser { @Getter private final ShardingRule shardingRule; @@ -70,16 +70,15 @@ public class SQLExprParser extends Parser { @Setter private int parametersIndex; - public SQLExprParser(final ShardingRule shardingRule, final List parameters, final Lexer lexer) { + public SQLParser(final Lexer lexer, final ShardingRule shardingRule, final List parameters) { super(lexer); this.shardingRule = shardingRule; this.parameters = parameters; } - protected Optional as() { + public Optional as() { if (skipIfEqual(DefaultKeyword.AS)) { - // TODO 判断Literals是符号则返回null, 目前仅判断为LEFT_PAREN - if (equalAny(Symbol.LEFT_PAREN)) { + if (equalAny(Symbol.values())) { return Optional.absent(); } String result = SQLUtil.getExactlyValue(getLexer().getCurrentToken().getLiterals()); @@ -138,7 +137,7 @@ public class SQLExprParser extends Parser { return null; } - protected final void parseSingleTable(final SQLContext sqlContext) { + public final void parseSingleTable(final SQLContext sqlContext) { boolean hasParentheses = false; if (skipIfEqual(Symbol.LEFT_PAREN)) { if (equalAny(DefaultKeyword.SELECT)) { diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/SQLStatementParser.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/SQLStatementParser.java index 1201850986..aba67c28e9 100755 --- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/SQLStatementParser.java +++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/SQLStatementParser.java @@ -22,6 +22,10 @@ import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.token.DefaultKeyword; import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.token.Symbol; import com.dangdang.ddframe.rdb.sharding.api.rule.ShardingRule; import com.dangdang.ddframe.rdb.sharding.constants.DatabaseType; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.delete.SQLDeleteParserFactory; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.insert.SQLInsertParserFactory; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.select.SQLSelectParserFactory; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.update.SQLUpdateParserFactory; import java.util.List; @@ -38,9 +42,9 @@ public final class SQLStatementParser { private final List parameters; - private final SQLExprParser exprParser; + private final SQLParser exprParser; - public SQLStatementParser(final DatabaseType dbType, final ShardingRule shardingRule, final List parameters, final SQLExprParser exprParser) { + public SQLStatementParser(final DatabaseType dbType, final ShardingRule shardingRule, final List parameters, final SQLParser exprParser) { this.dbType = dbType; this.shardingRule = shardingRule; this.parameters = parameters; diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/AbstractDeleteParser.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/delete/AbstractDeleteParser.java similarity index 89% rename from sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/AbstractDeleteParser.java rename to sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/delete/AbstractDeleteParser.java index 9df423351d..a2435528ee 100644 --- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/AbstractDeleteParser.java +++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/delete/AbstractDeleteParser.java @@ -15,11 +15,12 @@ *

*/ -package com.dangdang.ddframe.rdb.sharding.parser.sql.parser; +package com.dangdang.ddframe.rdb.sharding.parser.sql.parser.delete; import com.dangdang.ddframe.rdb.sharding.parser.sql.context.DeleteSQLContext; import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.token.DefaultKeyword; import com.dangdang.ddframe.rdb.sharding.parser.result.router.ConditionContext; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLParser; import com.google.common.base.Optional; import lombok.AccessLevel; import lombok.Getter; @@ -34,11 +35,11 @@ import lombok.RequiredArgsConstructor; public abstract class AbstractDeleteParser { @Getter(AccessLevel.PROTECTED) - private final SQLExprParser exprParser; + private final SQLParser exprParser; private final DeleteSQLContext sqlContext; - public AbstractDeleteParser(final SQLExprParser exprParser) { + public AbstractDeleteParser(final SQLParser exprParser) { this.exprParser = exprParser; sqlContext = new DeleteSQLContext(exprParser.getLexer().getInput()); } diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/SQLDeleteParserFactory.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/delete/SQLDeleteParserFactory.java similarity index 88% rename from sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/SQLDeleteParserFactory.java rename to sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/delete/SQLDeleteParserFactory.java index 2182ac0934..4732bc487e 100644 --- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/SQLDeleteParserFactory.java +++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/delete/SQLDeleteParserFactory.java @@ -15,13 +15,14 @@ *

*/ -package com.dangdang.ddframe.rdb.sharding.parser.sql.parser; +package com.dangdang.ddframe.rdb.sharding.parser.sql.parser.delete; import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.mysql.parser.MySQLDeleteParser; import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.oracle.parser.OracleDeleteParser; import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.postgresql.parser.PostgreSQLDeleteParser; import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.sqlserver.parser.SQLServerDeleteParser; import com.dangdang.ddframe.rdb.sharding.constants.DatabaseType; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLParser; /** * Delete语句解析器工厂. @@ -37,7 +38,7 @@ public class SQLDeleteParserFactory { * @param dbType 数据库类型 * @return Delete语句解析器 */ - public static AbstractDeleteParser newInstance(final SQLExprParser exprParser, final DatabaseType dbType) { + public static AbstractDeleteParser newInstance(final SQLParser exprParser, final DatabaseType dbType) { switch (dbType) { case H2 : case MySQL : diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/AbstractInsertParser.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/insert/AbstractInsertParser.java similarity index 96% rename from sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/AbstractInsertParser.java rename to sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/insert/AbstractInsertParser.java index 1be5d36657..f8d0950d47 100644 --- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/AbstractInsertParser.java +++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/insert/AbstractInsertParser.java @@ -15,7 +15,7 @@ *

*/ -package com.dangdang.ddframe.rdb.sharding.parser.sql.parser; +package com.dangdang.ddframe.rdb.sharding.parser.sql.parser.insert; import com.dangdang.ddframe.rdb.sharding.api.rule.ShardingRule; import com.dangdang.ddframe.rdb.sharding.parser.result.router.Condition; @@ -29,6 +29,8 @@ import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.token.Assist; import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.token.DefaultKeyword; import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.token.Symbol; import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.token.TokenType; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.ParserUnsupportedException; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLParser; import com.dangdang.ddframe.rdb.sharding.parser.visitor.ParseContext; import com.dangdang.ddframe.rdb.sharding.util.SQLUtil; import com.google.common.collect.Sets; @@ -49,7 +51,7 @@ import java.util.Set; @Getter(AccessLevel.PROTECTED) public abstract class AbstractInsertParser { - private final SQLExprParser exprParser; + private final SQLParser exprParser; private final ShardingRule shardingRule; @@ -57,7 +59,7 @@ public abstract class AbstractInsertParser { private final InsertSQLContext sqlContext; - public AbstractInsertParser(final ShardingRule shardingRule, final List parameters, final SQLExprParser exprParser) { + public AbstractInsertParser(final ShardingRule shardingRule, final List parameters, final SQLParser exprParser) { this.exprParser = exprParser; this.shardingRule = shardingRule; this.parameters = parameters; diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/SQLInsertParserFactory.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/insert/SQLInsertParserFactory.java similarity index 90% rename from sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/SQLInsertParserFactory.java rename to sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/insert/SQLInsertParserFactory.java index e7c62d0b7d..392a14ac66 100644 --- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/SQLInsertParserFactory.java +++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/insert/SQLInsertParserFactory.java @@ -15,7 +15,7 @@ *

*/ -package com.dangdang.ddframe.rdb.sharding.parser.sql.parser; +package com.dangdang.ddframe.rdb.sharding.parser.sql.parser.insert; import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.mysql.parser.MySQLInsertParser; import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.oracle.parser.OracleInsertParser; @@ -23,6 +23,7 @@ import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.postgresql.parser.Po import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.sqlserver.parser.SQLServerInsertParser; import com.dangdang.ddframe.rdb.sharding.api.rule.ShardingRule; import com.dangdang.ddframe.rdb.sharding.constants.DatabaseType; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLParser; import java.util.List; @@ -42,7 +43,7 @@ public class SQLInsertParserFactory { * @param dbType 数据库类型 * @return Insert语句解析器 */ - public static AbstractInsertParser newInstance(final ShardingRule shardingRule, final List parameters, final SQLExprParser exprParser, final DatabaseType dbType) { + public static AbstractInsertParser newInstance(final ShardingRule shardingRule, final List parameters, final SQLParser exprParser, final DatabaseType dbType) { switch (dbType) { case H2 : case MySQL : diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/AbstractSelectParser.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/select/AbstractSelectParser.java similarity index 96% rename from sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/AbstractSelectParser.java rename to sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/select/AbstractSelectParser.java index 77bffb77af..1c16b28a9a 100755 --- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/AbstractSelectParser.java +++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/select/AbstractSelectParser.java @@ -15,7 +15,7 @@ *

*/ -package com.dangdang.ddframe.rdb.sharding.parser.sql.parser; +package com.dangdang.ddframe.rdb.sharding.parser.sql.parser.select; import com.dangdang.ddframe.rdb.sharding.parser.result.merger.OrderByColumn; import com.dangdang.ddframe.rdb.sharding.parser.result.router.ConditionContext; @@ -30,6 +30,8 @@ import com.dangdang.ddframe.rdb.sharding.parser.sql.expr.SQLIdentifierExpr; import com.dangdang.ddframe.rdb.sharding.parser.sql.expr.SQLPropertyExpr; import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.token.DefaultKeyword; import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.token.Symbol; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.ParserUnsupportedException; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLParser; import com.dangdang.ddframe.rdb.sharding.util.SQLUtil; import com.google.common.base.Optional; import lombok.AccessLevel; @@ -41,14 +43,14 @@ import java.util.List; @Getter(AccessLevel.PROTECTED) public abstract class AbstractSelectParser { - private SQLExprParser exprParser; + private SQLParser exprParser; private final SelectSQLContext sqlContext; @Setter private int parametersIndex; - public AbstractSelectParser(final SQLExprParser exprParser) { + public AbstractSelectParser(final SQLParser exprParser) { this.exprParser = exprParser; sqlContext = new SelectSQLContext(getExprParser().getLexer().getInput()); } diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/SQLSelectParserFactory.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/select/SQLSelectParserFactory.java similarity index 88% rename from sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/SQLSelectParserFactory.java rename to sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/select/SQLSelectParserFactory.java index 1a9740d053..5cfebeef6f 100644 --- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/SQLSelectParserFactory.java +++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/select/SQLSelectParserFactory.java @@ -15,13 +15,14 @@ *

*/ -package com.dangdang.ddframe.rdb.sharding.parser.sql.parser; +package com.dangdang.ddframe.rdb.sharding.parser.sql.parser.select; import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.mysql.parser.MySQLSelectParser; import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.oracle.parser.OracleSelectParser; import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.postgresql.parser.PostgreSQLSelectParser; import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.sqlserver.parser.SQLServerSelectParser; import com.dangdang.ddframe.rdb.sharding.constants.DatabaseType; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLParser; /** * Select语句解析器工厂. @@ -37,7 +38,7 @@ public class SQLSelectParserFactory { * @param dbType 数据库类型 * @return Select语句解析器 */ - public static AbstractSelectParser newInstance(final SQLExprParser exprParser, final DatabaseType dbType) { + public static AbstractSelectParser newInstance(final SQLParser exprParser, final DatabaseType dbType) { switch (dbType) { case H2 : case MySQL : diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/AbstractUpdateParser.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/update/AbstractUpdateParser.java similarity index 93% rename from sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/AbstractUpdateParser.java rename to sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/update/AbstractUpdateParser.java index 7e62ad1727..7d5b4bcf7d 100644 --- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/AbstractUpdateParser.java +++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/update/AbstractUpdateParser.java @@ -15,13 +15,14 @@ *

*/ -package com.dangdang.ddframe.rdb.sharding.parser.sql.parser; +package com.dangdang.ddframe.rdb.sharding.parser.sql.parser.update; import com.dangdang.ddframe.rdb.sharding.parser.sql.context.TableToken; import com.dangdang.ddframe.rdb.sharding.parser.sql.context.UpdateSQLContext; import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.token.DefaultKeyword; import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.token.Symbol; import com.dangdang.ddframe.rdb.sharding.parser.result.router.ConditionContext; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLParser; import com.dangdang.ddframe.rdb.sharding.util.SQLUtil; import com.google.common.base.Optional; import lombok.AccessLevel; @@ -35,13 +36,13 @@ import lombok.Getter; @Getter(AccessLevel.PROTECTED) public abstract class AbstractUpdateParser { - private final SQLExprParser exprParser; + private final SQLParser exprParser; private final UpdateSQLContext sqlContext; private int parametersIndex; - public AbstractUpdateParser(final SQLExprParser exprParser) { + public AbstractUpdateParser(final SQLParser exprParser) { this.exprParser = exprParser; sqlContext = new UpdateSQLContext(exprParser.getLexer().getInput()); } diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/SQLUpdateParserFactory.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/update/SQLUpdateParserFactory.java similarity index 88% rename from sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/SQLUpdateParserFactory.java rename to sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/update/SQLUpdateParserFactory.java index 6fec19093b..68453383db 100644 --- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/SQLUpdateParserFactory.java +++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/update/SQLUpdateParserFactory.java @@ -15,13 +15,14 @@ *

*/ -package com.dangdang.ddframe.rdb.sharding.parser.sql.parser; +package com.dangdang.ddframe.rdb.sharding.parser.sql.parser.update; import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.mysql.parser.MySQLUpdateParser; import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.oracle.parser.OracleUpdateParser; import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.postgresql.parser.PostgreSQLUpdateParser; import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.sqlserver.parser.SQLServerUpdateParser; import com.dangdang.ddframe.rdb.sharding.constants.DatabaseType; +import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLParser; /** * Update语句解析器工厂. @@ -37,7 +38,7 @@ public class SQLUpdateParserFactory { * @param dbType 数据库类型 * @return Update语句解析器 */ - public static AbstractUpdateParser newInstance(final SQLExprParser exprParser, final DatabaseType dbType) { + public static AbstractUpdateParser newInstance(final SQLParser exprParser, final DatabaseType dbType) { switch (dbType) { case H2 : case MySQL : diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/AbstractStatementParserTest.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/AbstractStatementParserTest.java index b769aca467..2a447ec4e0 100644 --- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/AbstractStatementParserTest.java +++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/AbstractStatementParserTest.java @@ -17,10 +17,10 @@ package com.dangdang.ddframe.rdb.sharding.parser.sql.parser; -import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.mysql.parser.MySQLExprParser; -import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.oracle.parser.OracleExprParser; -import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.postgresql.parser.PostgreSQLExprParser; -import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.sqlserver.parser.SQLServerExprParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.mysql.parser.MySQLParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.oracle.parser.OracleParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.postgresql.parser.PostgreSQLParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.sqlserver.parser.SQLServerParser; import com.dangdang.ddframe.rdb.sharding.api.rule.DataSourceRule; import com.dangdang.ddframe.rdb.sharding.api.rule.ShardingRule; import com.dangdang.ddframe.rdb.sharding.api.rule.TableRule; @@ -46,25 +46,25 @@ public abstract class AbstractStatementParserTest { protected final SQLStatementParser getSqlStatementParser(final DatabaseType dbType, final String actualSQL) { ShardingRule shardingRule = createShardingRule(); List parameters = Collections.emptyList(); - SQLExprParser sqlExprParser; + SQLParser sqlParser; switch (dbType) { case H2: case MySQL: - sqlExprParser = new MySQLExprParser(shardingRule, parameters, actualSQL); + sqlParser = new MySQLParser(actualSQL, shardingRule, parameters); break; case Oracle: - sqlExprParser = new OracleExprParser(shardingRule, parameters, actualSQL); + sqlParser = new OracleParser(actualSQL, shardingRule, parameters); break; case SQLServer: - sqlExprParser = new SQLServerExprParser(shardingRule, parameters, actualSQL); + sqlParser = new SQLServerParser(actualSQL, shardingRule, parameters); break; case PostgreSQL: - sqlExprParser = new PostgreSQLExprParser(shardingRule, parameters, actualSQL); + sqlParser = new PostgreSQLParser(actualSQL, shardingRule, parameters); break; default: throw new UnsupportedOperationException(dbType.name()); } - return new SQLStatementParser(dbType, shardingRule, parameters, sqlExprParser); + return new SQLStatementParser(dbType, shardingRule, parameters, sqlParser); } protected final ShardingRule createShardingRule() { diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/DeleteStatementParserTest.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/DeleteStatementParserTest.java index a57ed64c07..f3580ea82a 100644 --- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/DeleteStatementParserTest.java +++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/DeleteStatementParserTest.java @@ -18,7 +18,7 @@ package com.dangdang.ddframe.rdb.sharding.parser.sql.parser; import com.dangdang.ddframe.rdb.sharding.parser.sql.context.DeleteSQLContext; -import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.mysql.parser.MySQLExprParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.mysql.parser.MySQLParser; import com.dangdang.ddframe.rdb.sharding.api.rule.ShardingRule; import com.dangdang.ddframe.rdb.sharding.constants.DatabaseType; import com.dangdang.ddframe.rdb.sharding.parser.result.router.Condition; @@ -41,7 +41,7 @@ public final class DeleteStatementParserTest extends AbstractStatementParserTest public void parseWithoutCondition() throws SQLException { ShardingRule shardingRule = createShardingRule(); List parameters = Collections.emptyList(); - SQLStatementParser statementParser = new SQLStatementParser(DatabaseType.MySQL, shardingRule, parameters, new MySQLExprParser(shardingRule, parameters, "DELETE FROM TABLE_XXX")); + SQLStatementParser statementParser = new SQLStatementParser(DatabaseType.MySQL, shardingRule, parameters, new MySQLParser("DELETE FROM TABLE_XXX", shardingRule, parameters)); DeleteSQLContext sqlContext = (DeleteSQLContext) statementParser.parseStatement(); assertThat(sqlContext.getTables().get(0).getName(), is("TABLE_XXX")); assertTrue(sqlContext.getConditionContexts().isEmpty()); @@ -52,8 +52,9 @@ public final class DeleteStatementParserTest extends AbstractStatementParserTest public void parseWithoutParameter() throws SQLException { ShardingRule shardingRule = createShardingRule(); List parameters = Collections.emptyList(); - SQLStatementParser statementParser = new SQLStatementParser(DatabaseType.MySQL, shardingRule, parameters, new MySQLExprParser(shardingRule, parameters, - "DELETE FROM TABLE_XXX xxx WHERE field4<10 AND TABLE_XXX.field1=1 AND field5>10 AND xxx.field2 IN (1,3) AND field6<=10 AND field3 BETWEEN 5 AND 20 AND field7>=10")); + SQLStatementParser statementParser = new SQLStatementParser(DatabaseType.MySQL, shardingRule, parameters, new MySQLParser( + "DELETE FROM TABLE_XXX xxx WHERE field4<10 AND TABLE_XXX.field1=1 AND field5>10 AND xxx.field2 IN (1,3) AND field6<=10 AND field3 BETWEEN 5 AND 20 AND field7>=10", + shardingRule, parameters)); DeleteSQLContext sqlContext = (DeleteSQLContext) statementParser.parseStatement(); assertDeleteStatement(sqlContext); assertThat(sqlContext.toSqlBuilder().toString(), is( @@ -64,8 +65,8 @@ public final class DeleteStatementParserTest extends AbstractStatementParserTest public void parseWithParameter() throws SQLException { ShardingRule shardingRule = createShardingRule(); List parameters = Arrays.asList(10, 1, 10, 1, 3, 10, 5, 20, 10); - SQLStatementParser statementParser = new SQLStatementParser(DatabaseType.MySQL, shardingRule, parameters, new MySQLExprParser(shardingRule, parameters, - "DELETE FROM TABLE_XXX xxx WHERE field4? AND field2 IN (?,?) AND field6<=? AND field3 BETWEEN ? AND ? AND field7>=?")); + SQLStatementParser statementParser = new SQLStatementParser(DatabaseType.MySQL, shardingRule, parameters, new MySQLParser( + "DELETE FROM TABLE_XXX xxx WHERE field4? AND field2 IN (?,?) AND field6<=? AND field3 BETWEEN ? AND ? AND field7>=?", shardingRule, parameters)); DeleteSQLContext sqlContext = (DeleteSQLContext) statementParser.parseStatement(); assertDeleteStatement(sqlContext); assertThat(sqlContext.toSqlBuilder().toString(), is( @@ -103,7 +104,7 @@ public final class DeleteStatementParserTest extends AbstractStatementParserTest public void parseStatementWithDeleteMultipleTable() { ShardingRule shardingRule = createShardingRule(); List parameters = Collections.emptyList(); - new SQLStatementParser(DatabaseType.MySQL, shardingRule, parameters, new MySQLExprParser(shardingRule, parameters, "DELETE TABLE_XXX1, TABLE_xxx2 FROM TABLE_XXX1 JOIN TABLE_XXX2")) + new SQLStatementParser(DatabaseType.MySQL, shardingRule, parameters, new MySQLParser("DELETE TABLE_XXX1, TABLE_xxx2 FROM TABLE_XXX1 JOIN TABLE_XXX2", shardingRule, parameters)) .parseStatement(); } @@ -111,7 +112,7 @@ public final class DeleteStatementParserTest extends AbstractStatementParserTest public void parseStatementWithDeleteMultipleTableWithUsing() { ShardingRule shardingRule = createShardingRule(); List parameters = Collections.emptyList(); - new SQLStatementParser(DatabaseType.MySQL, shardingRule, parameters, new MySQLExprParser(shardingRule, parameters, "DELETE FROM TABLE_XXX1, TABLE_xxx2 USING TABLE_XXX1 JOIN TABLE_XXX2")) + new SQLStatementParser(DatabaseType.MySQL, shardingRule, parameters, new MySQLParser("DELETE FROM TABLE_XXX1, TABLE_xxx2 USING TABLE_XXX1 JOIN TABLE_XXX2", shardingRule, parameters)) .parseStatement(); } diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/InsertStatementParserTest.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/InsertStatementParserTest.java index 6b035eae1c..5aee6a5aac 100644 --- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/InsertStatementParserTest.java +++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/InsertStatementParserTest.java @@ -18,8 +18,8 @@ package com.dangdang.ddframe.rdb.sharding.parser.sql.parser; import com.dangdang.ddframe.rdb.sharding.parser.sql.context.InsertSQLContext; -import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.mysql.parser.MySQLExprParser; -import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.oracle.parser.OracleExprParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.mysql.parser.MySQLParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.oracle.parser.OracleParser; import com.dangdang.ddframe.rdb.sharding.api.rule.DataSourceRule; import com.dangdang.ddframe.rdb.sharding.api.rule.ShardingRule; import com.dangdang.ddframe.rdb.sharding.api.rule.TableRule; @@ -54,8 +54,8 @@ public final class InsertStatementParserTest extends AbstractStatementParserTest public void parseWithoutParameter() throws SQLException { ShardingRule shardingRule = createShardingRule(); List parameters = Collections.emptyList(); - SQLStatementParser statementParser = new SQLStatementParser(DatabaseType.MySQL, shardingRule, parameters, new MySQLExprParser(shardingRule, parameters, - "INSERT INTO `TABLE_XXX` (`field1`, `field2`) VALUES (10, 1)")); + SQLStatementParser statementParser = new SQLStatementParser(DatabaseType.MySQL, shardingRule, parameters, new MySQLParser( + "INSERT INTO `TABLE_XXX` (`field1`, `field2`) VALUES (10, 1)", shardingRule, parameters)); InsertSQLContext sqlContext = (InsertSQLContext) statementParser.parseStatement(); assertInsertStatement(sqlContext); assertThat(sqlContext.toSqlBuilder().toString(), is("INSERT INTO [Token(TABLE_XXX)] (`field1`, `field2`) VALUES (10, 1)")); @@ -65,8 +65,8 @@ public final class InsertStatementParserTest extends AbstractStatementParserTest public void parseWithParameter() { ShardingRule shardingRule = createShardingRule(); List parameters = Lists.newArrayList(10, 1); - SQLStatementParser statementParser = new SQLStatementParser(DatabaseType.MySQL, shardingRule, parameters, new MySQLExprParser(shardingRule, parameters, - "INSERT INTO TABLE_XXX (field1, field2) VALUES (?, ?)")); + SQLStatementParser statementParser = new SQLStatementParser(DatabaseType.MySQL, shardingRule, parameters, new MySQLParser( + "INSERT INTO TABLE_XXX (field1, field2) VALUES (?, ?)", shardingRule, parameters)); InsertSQLContext sqlContext = (InsertSQLContext) statementParser.parseStatement(); assertInsertStatement(sqlContext); assertThat(sqlContext.toSqlBuilder().toString(), is("INSERT INTO [Token(TABLE_XXX)] (field1, field2) VALUES (?, ?)")); @@ -76,8 +76,8 @@ public final class InsertStatementParserTest extends AbstractStatementParserTest public void parseWithAutoIncrementColumnsWithoutParameter() throws SQLException { ShardingRule shardingRule = createShardingRuleWithAutoIncrementColumns(); List parameters = Collections.emptyList(); - SQLStatementParser statementParser = new SQLStatementParser(DatabaseType.MySQL, shardingRule, parameters, new MySQLExprParser(shardingRule, parameters, - "INSERT INTO `TABLE_XXX` (`field1`) VALUES (10)")); + SQLStatementParser statementParser = new SQLStatementParser(DatabaseType.MySQL, shardingRule, parameters, new MySQLParser( + "INSERT INTO `TABLE_XXX` (`field1`) VALUES (10)", shardingRule, parameters)); InsertSQLContext sqlContext = (InsertSQLContext) statementParser.parseStatement(); assertInsertStatement(sqlContext); assertThat(sqlContext.toSqlBuilder().toString(), is("INSERT INTO [Token(TABLE_XXX)] (`field1`, field2) VALUES (10, 1)")); @@ -87,8 +87,8 @@ public final class InsertStatementParserTest extends AbstractStatementParserTest public void parseWithAutoIncrementColumnsWithParameter() throws SQLException { ShardingRule shardingRule = createShardingRuleWithAutoIncrementColumns(); List parameters = Lists.newArrayList(10); - SQLStatementParser statementParser = new SQLStatementParser(DatabaseType.MySQL, shardingRule, parameters, new MySQLExprParser(shardingRule, parameters, - "INSERT INTO `TABLE_XXX` (`field1`) VALUES (?)")); + SQLStatementParser statementParser = new SQLStatementParser(DatabaseType.MySQL, shardingRule, parameters, new MySQLParser( + "INSERT INTO `TABLE_XXX` (`field1`) VALUES (?)", shardingRule, parameters)); InsertSQLContext sqlContext = (InsertSQLContext) statementParser.parseStatement(); assertInsertStatement(sqlContext); assertThat(sqlContext.toSqlBuilder().toString(), is("INSERT INTO [Token(TABLE_XXX)] (`field1`, field2) VALUES (?, ?)")); @@ -175,23 +175,23 @@ public final class InsertStatementParserTest extends AbstractStatementParserTest public void parseMultipleInsertForMySQL() { ShardingRule shardingRule = createShardingRule(); List parameters = Collections.emptyList(); - new SQLStatementParser(DatabaseType.Oracle, shardingRule, parameters, new OracleExprParser(shardingRule, parameters, - "INSERT INTO TABLE_XXX (`field1`, `field2`) VALUES (1, 'value_char'), (2, 'value_char')")).parseStatement(); + new SQLStatementParser(DatabaseType.Oracle, shardingRule, parameters, new OracleParser( + "INSERT INTO TABLE_XXX (`field1`, `field2`) VALUES (1, 'value_char'), (2, 'value_char')", shardingRule, parameters)).parseStatement(); } @Test(expected = ParserUnsupportedException.class) public void parseInsertAllForOracle() { ShardingRule shardingRule = createShardingRule(); List parameters = Collections.emptyList(); - new SQLStatementParser(DatabaseType.Oracle, shardingRule, parameters, new OracleExprParser(shardingRule, parameters, - "INSERT ALL INTO TABLE_XXX (field1) VALUES (field1) SELECT field1 FROM TABLE_XXX2")).parseStatement(); + new SQLStatementParser(DatabaseType.Oracle, shardingRule, parameters, new OracleParser( + "INSERT ALL INTO TABLE_XXX (field1) VALUES (field1) SELECT field1 FROM TABLE_XXX2", shardingRule, parameters)).parseStatement(); } @Test(expected = ParserUnsupportedException.class) public void parseInsertFirstForOracle() { ShardingRule shardingRule = createShardingRule(); List parameters = Collections.emptyList(); - new SQLStatementParser(DatabaseType.Oracle, shardingRule, parameters, new OracleExprParser(shardingRule, parameters, - "INSERT FIRST INTO TABLE_XXX (field1) VALUES (field1) SELECT field1 FROM TABLE_XXX2")).parseStatement(); + new SQLStatementParser(DatabaseType.Oracle, shardingRule, parameters, new OracleParser( + "INSERT FIRST INTO TABLE_XXX (field1) VALUES (field1) SELECT field1 FROM TABLE_XXX2", shardingRule, parameters)).parseStatement(); } } diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/UpdateStatementParserTest.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/UpdateStatementParserTest.java index c99c907f4e..5fa5b3a9fa 100644 --- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/UpdateStatementParserTest.java +++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parser/sql/parser/UpdateStatementParserTest.java @@ -18,8 +18,8 @@ package com.dangdang.ddframe.rdb.sharding.parser.sql.parser; import com.dangdang.ddframe.rdb.sharding.parser.sql.context.UpdateSQLContext; -import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.mysql.parser.MySQLExprParser; -import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.oracle.parser.OracleExprParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.mysql.parser.MySQLParser; +import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.oracle.parser.OracleParser; import com.dangdang.ddframe.rdb.sharding.api.rule.ShardingRule; import com.dangdang.ddframe.rdb.sharding.constants.DatabaseType; import com.dangdang.ddframe.rdb.sharding.parser.result.router.Condition; @@ -42,8 +42,7 @@ public final class UpdateStatementParserTest extends AbstractStatementParserTest public void parseWithoutCondition() throws SQLException { ShardingRule shardingRule = createShardingRule(); List parameters = Collections.emptyList(); - SQLStatementParser statementParser = new SQLStatementParser(DatabaseType.MySQL, shardingRule, parameters, new MySQLExprParser(shardingRule, parameters, - "UPDATE TABLE_XXX SET field1=field1+1")); + SQLStatementParser statementParser = new SQLStatementParser(DatabaseType.MySQL, shardingRule, parameters, new MySQLParser("UPDATE TABLE_XXX SET field1=field1+1", shardingRule, parameters)); UpdateSQLContext sqlContext = (UpdateSQLContext) statementParser.parseStatement(); assertThat(sqlContext.getTables().get(0).getName(), is("TABLE_XXX")); assertTrue(sqlContext.getConditionContexts().isEmpty()); @@ -54,9 +53,10 @@ public final class UpdateStatementParserTest extends AbstractStatementParserTest public void parseWithoutParameter() { ShardingRule shardingRule = createShardingRule(); List parameters = Collections.emptyList(); - SQLStatementParser statementParser = new SQLStatementParser(DatabaseType.MySQL, shardingRule, parameters, new MySQLExprParser(shardingRule, parameters, + SQLStatementParser statementParser = new SQLStatementParser(DatabaseType.MySQL, shardingRule, parameters, new MySQLParser( "UPDATE TABLE_XXX xxx SET TABLE_XXX.field1=field1+1,xxx.field2=2 WHERE " - + "TABLE_XXX.field4<10 AND TABLE_XXX.field1=1 AND xxx.field5>10 AND TABLE_XXX.field2 IN (1,3) AND xxx.field6<=10 AND TABLE_XXX.field3 BETWEEN 5 AND 20 AND xxx.field7>=10")); + + "TABLE_XXX.field4<10 AND TABLE_XXX.field1=1 AND xxx.field5>10 AND TABLE_XXX.field2 IN (1,3) AND xxx.field6<=10 AND TABLE_XXX.field3 BETWEEN 5 AND 20 AND xxx.field7>=10", + shardingRule, parameters)); UpdateSQLContext sqlContext = (UpdateSQLContext) statementParser.parseStatement(); assertUpdateStatement(sqlContext); assertThat(sqlContext.toSqlBuilder().toString(), is("UPDATE [Token(TABLE_XXX)] xxx SET [Token(TABLE_XXX)].field1=field1+1,xxx.field2=2 WHERE [Token(TABLE_XXX)].field4<10 " @@ -67,8 +67,9 @@ public final class UpdateStatementParserTest extends AbstractStatementParserTest public void parseWithParameter() { ShardingRule shardingRule = createShardingRule(); List parameters = Arrays.asList(2, 10, 1, 10, 1, 3, 10, 5, 20, 10); - SQLStatementParser statementParser = new SQLStatementParser(DatabaseType.MySQL, shardingRule, parameters, new MySQLExprParser(shardingRule, parameters, - "UPDATE TABLE_XXX AS xxx SET field1=field1+? WHERE field4? AND xxx.field2 IN (?, ?) AND field6<=? AND xxx.field3 BETWEEN ? AND ? AND field7>=?")); + SQLStatementParser statementParser = new SQLStatementParser(DatabaseType.MySQL, shardingRule, parameters, new MySQLParser( + "UPDATE TABLE_XXX AS xxx SET field1=field1+? WHERE field4? AND xxx.field2 IN (?, ?) AND field6<=? AND xxx.field3 BETWEEN ? AND ? AND field7>=?", + shardingRule, parameters)); UpdateSQLContext sqlContext = (UpdateSQLContext) statementParser.parseStatement(); assertUpdateStatement(sqlContext); assertThat(sqlContext.toSqlBuilder().toString(), is("UPDATE [Token(TABLE_XXX)] AS xxx SET field1=field1+? " @@ -106,8 +107,8 @@ public final class UpdateStatementParserTest extends AbstractStatementParserTest public void parseWithOr() { ShardingRule shardingRule = createShardingRule(); List parameters = Collections.emptyList(); - new SQLStatementParser(DatabaseType.Oracle, shardingRule, parameters, new OracleExprParser(shardingRule, parameters, - "UPDATE TABLE_XXX SET field1=1 WHERE field1<1 AND (field1 >2 OR field2 =1)")).parseStatement(); + new SQLStatementParser(DatabaseType.Oracle, shardingRule, parameters, new OracleParser("UPDATE TABLE_XXX SET field1=1 WHERE field1<1 AND (field1 >2 OR field2 =1)", + shardingRule, parameters)).parseStatement(); } @Test -- GitLab