提交 24248533 编写于 作者: T terrymanu

refactor

上级 70330085
......@@ -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<Object> 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);
}
}
......@@ -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);
}
......
......@@ -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<Object> parameters, final SQLExprParser exprParser) {
public MySQLInsertParser(final ShardingRule shardingRule, final List<Object> parameters, final SQLParser exprParser) {
super(shardingRule, parameters, exprParser);
}
......
......@@ -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<Object> parameters, final String sql) {
super(shardingRule, parameters, new MySQLLexer(sql));
public MySQLParser(final String sql, final ShardingRule shardingRule, final List<Object> parameters) {
super( new MySQLLexer(sql), shardingRule, parameters);
getLexer().nextToken();
}
......
......@@ -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());
......
......@@ -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);
}
......
......@@ -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);
}
......
......@@ -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<Object> parameters, final SQLExprParser exprParser) {
public OracleInsertParser(final ShardingRule shardingRule, final List<Object> parameters, final SQLParser exprParser) {
super(shardingRule, parameters, exprParser);
}
......
......@@ -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<Object> parameters, final String sql) {
super(shardingRule, parameters, new OracleLexer(sql));
public OracleParser(final String sql, final ShardingRule shardingRule, final List<Object> parameters) {
super(new OracleLexer(sql), shardingRule, parameters);
getLexer().nextToken();
}
@Override
protected Optional<String> as() {
public Optional<String> as() {
if (equalAny(OracleKeyword.CONNECT)) {
return Optional.absent();
}
......
......@@ -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);
}
......
......@@ -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);
}
......
......@@ -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);
}
......
......@@ -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<Object> parameters, final SQLExprParser exprParser) {
public PostgreSQLInsertParser(final ShardingRule shardingRule, final List<Object> parameters, final SQLParser exprParser) {
super(shardingRule, parameters, exprParser);
}
}
......@@ -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<Object> parameters, final String sql) {
super(shardingRule, parameters, new PostgreSQLLexer(sql));
public PostgreSQLParser(final String sql, final ShardingRule shardingRule, final List<Object> parameters) {
super(new PostgreSQLLexer(sql), shardingRule, parameters);
getLexer().nextToken();
}
}
......@@ -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);
}
......
......@@ -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);
}
......
......@@ -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);
}
}
......@@ -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<Object> parameters, final SQLExprParser exprParser) {
public SQLServerInsertParser(final ShardingRule shardingRule, final List<Object> parameters, final SQLParser exprParser) {
super(shardingRule, parameters, exprParser);
}
}
......@@ -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<Object> parameters, final String sql) {
super(shardingRule, parameters, new SQLServerLexer(sql));
public SQLServerParser(final String sql, final ShardingRule shardingRule, final List<Object> parameters) {
super(new SQLServerLexer(sql), shardingRule, parameters);
getLexer().nextToken();
}
......
......@@ -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();
}
......
......@@ -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();
}
}
......@@ -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<Object> parameters, final Lexer lexer) {
public SQLParser(final Lexer lexer, final ShardingRule shardingRule, final List<Object> parameters) {
super(lexer);
this.shardingRule = shardingRule;
this.parameters = parameters;
}
protected Optional<String> as() {
public Optional<String> 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)) {
......
......@@ -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<Object> parameters;
private final SQLExprParser exprParser;
private final SQLParser exprParser;
public SQLStatementParser(final DatabaseType dbType, final ShardingRule shardingRule, final List<Object> parameters, final SQLExprParser exprParser) {
public SQLStatementParser(final DatabaseType dbType, final ShardingRule shardingRule, final List<Object> parameters, final SQLParser exprParser) {
this.dbType = dbType;
this.shardingRule = shardingRule;
this.parameters = parameters;
......
......@@ -15,11 +15,12 @@
* </p>
*/
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());
}
......
......@@ -15,13 +15,14 @@
* </p>
*/
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 :
......
......@@ -15,7 +15,7 @@
* </p>
*/
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<Object> parameters, final SQLExprParser exprParser) {
public AbstractInsertParser(final ShardingRule shardingRule, final List<Object> parameters, final SQLParser exprParser) {
this.exprParser = exprParser;
this.shardingRule = shardingRule;
this.parameters = parameters;
......
......@@ -15,7 +15,7 @@
* </p>
*/
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<Object> parameters, final SQLExprParser exprParser, final DatabaseType dbType) {
public static AbstractInsertParser newInstance(final ShardingRule shardingRule, final List<Object> parameters, final SQLParser exprParser, final DatabaseType dbType) {
switch (dbType) {
case H2 :
case MySQL :
......
......@@ -15,7 +15,7 @@
* </p>
*/
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());
}
......
......@@ -15,13 +15,14 @@
* </p>
*/
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 :
......
......@@ -15,13 +15,14 @@
* </p>
*/
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());
}
......
......@@ -15,13 +15,14 @@
* </p>
*/
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 :
......
......@@ -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<Object> 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() {
......
......@@ -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<Object> 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<Object> 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<Object> parameters = Arrays.<Object>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<Object> 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<Object> 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();
}
......
......@@ -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<Object> 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<Object> parameters = Lists.<Object>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<Object> 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<Object> parameters = Lists.<Object>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<Object> 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<Object> 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<Object> 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();
}
}
......@@ -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<Object> 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<Object> 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<Object> parameters = Arrays.<Object>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<Object> 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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册