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 1b2f042c7f280532dcd3012e312f8c21223f121b..5b566e4c25ef9c75fe88d1bb20e5d9e6557f6a05 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
*/
-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 2182ac0934690dcbed83b08ca8529e79444c426a..4732bc487ea80e584d072946234566c9c8d8dfe0 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 1be5d366573fd17db592e215c8c34581f91ba402..f8d0950d470e1e2af4cde2a88f63b69286ae78ea 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 e7c62d0b7dc7dfe8d8de87437e01f241db63e66f..392a14ac66952d160b46923662b4c43fac1ccb61 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 77bffb77af10cf582faf1304dcf1a783035945b7..1c16b28a9a08878534de49526722d77c1b97098f 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 1a9740d05319742f3d04fd903acb9f87815d0777..5cfebeef6f1d12a269d0ee764a003a20fdc2b87a 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 7e62ad17275cae5b267df2cef7991c43174af13d..7d5b4bcf7dc33b7895c17b840ee1a2ecb9c99585 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 6fec19093bf1de3d11accd9691a8635f0d6df646..68453383dbe3eded55ba4436b5b97575aa9e99bf 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 b769aca4672c41b96e2797921da77a060cf4e0e8..2a447ec4e098d9301076357cde7cf0eae533e2a9 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 a57ed64c07a3d0bbbfa2e4d7d29b79f30b29f07c..f3580ea82aa6f48b3f9bf235908631a79ec12afb 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 field1=? AND field5>? 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 field1=? AND field5>? 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 6b035eae1c23e04885ae371d78ee5461a505c77f..5aee6a5aac13141bea30ae341f3c168763e35477 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 c99c907f4e64f5e9cd2d4f7f5fc9ee7d1701a944..5fa5b3a9faa2adb5305e1bdb28b7f19bb7059338 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.field1=? AND field5>? 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.field1=? AND field5>? 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