提交 a6c47afa 编写于 作者: T terrymanu

remove parameters for InsertParser

上级 156a0248
......@@ -67,7 +67,7 @@ public final class SQLParsingEngine {
return SQLSelectParserFactory.newInstance(sqlParser).parse();
}
if (sqlParser.equalAny(DefaultKeyword.INSERT)) {
return SQLInsertParserFactory.newInstance(shardingRule, parameters, sqlParser).parse();
return SQLInsertParserFactory.newInstance(shardingRule, sqlParser).parse();
}
if (sqlParser.equalAny(DefaultKeyword.UPDATE)) {
return SQLUpdateParserFactory.newInstance(sqlParser).parse();
......
......@@ -18,25 +18,24 @@
package com.dangdang.ddframe.rdb.sharding.parsing.parser.dialect.mysql;
import com.dangdang.ddframe.rdb.sharding.api.rule.ShardingRule;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.ConditionContext;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.ShardingColumnContext;
import com.dangdang.ddframe.rdb.sharding.parsing.lexer.dialect.mysql.MySQLKeyword;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.expr.SQLTextExpr;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.expr.SQLExpr;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.expr.SQLIgnoreExpr;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.expr.SQLNumberExpr;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.expr.SQLPlaceholderExpr;
import com.dangdang.ddframe.rdb.sharding.parsing.lexer.token.Assist;
import com.dangdang.ddframe.rdb.sharding.parsing.lexer.token.DefaultKeyword;
import com.dangdang.ddframe.rdb.sharding.parsing.lexer.token.Literals;
import com.dangdang.ddframe.rdb.sharding.parsing.lexer.token.Symbol;
import com.dangdang.ddframe.rdb.sharding.parsing.lexer.token.TokenType;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.SQLParser;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.ConditionContext;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.ShardingColumnContext;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.expr.SQLExpr;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.expr.SQLIgnoreExpr;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.expr.SQLNumberExpr;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.expr.SQLPlaceholderExpr;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.expr.SQLTextExpr;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.insert.AbstractInsertParser;
import com.google.common.collect.Sets;
import java.util.Collection;
import java.util.List;
import java.util.Set;
/**
......@@ -46,8 +45,8 @@ import java.util.Set;
*/
public final class MySQLInsertParser extends AbstractInsertParser {
public MySQLInsertParser(final ShardingRule shardingRule, final List<Object> parameters, final SQLParser sqlParser) {
super(shardingRule, parameters, sqlParser);
public MySQLInsertParser(final ShardingRule shardingRule, final SQLParser sqlParser) {
super(shardingRule, sqlParser);
}
@Override
......
......@@ -21,11 +21,10 @@ import com.dangdang.ddframe.rdb.sharding.api.rule.ShardingRule;
import com.dangdang.ddframe.rdb.sharding.parsing.lexer.dialect.oracle.OracleKeyword;
import com.dangdang.ddframe.rdb.sharding.parsing.lexer.token.DefaultKeyword;
import com.dangdang.ddframe.rdb.sharding.parsing.lexer.token.TokenType;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.insert.AbstractInsertParser;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.SQLParser;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.insert.AbstractInsertParser;
import com.google.common.collect.Sets;
import java.util.List;
import java.util.Set;
/**
......@@ -35,8 +34,8 @@ import java.util.Set;
*/
public final class OracleInsertParser extends AbstractInsertParser {
public OracleInsertParser(final ShardingRule shardingRule, final List<Object> parameters, final SQLParser sqlParser) {
super(shardingRule, parameters, sqlParser);
public OracleInsertParser(final ShardingRule shardingRule, final SQLParser sqlParser) {
super(shardingRule, sqlParser);
}
@Override
......
......@@ -17,11 +17,9 @@
package com.dangdang.ddframe.rdb.sharding.parsing.parser.dialect.postgresql;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.insert.AbstractInsertParser;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.SQLParser;
import com.dangdang.ddframe.rdb.sharding.api.rule.ShardingRule;
import java.util.List;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.SQLParser;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.insert.AbstractInsertParser;
/**
* PostgreSQL Insert语句解析器.
......@@ -30,7 +28,7 @@ import java.util.List;
*/
public final class PostgreSQLInsertParser extends AbstractInsertParser {
public PostgreSQLInsertParser(final ShardingRule shardingRule, final List<Object> parameters, final SQLParser sqlParser) {
super(shardingRule, parameters, sqlParser);
public PostgreSQLInsertParser(final ShardingRule shardingRule, final SQLParser sqlParser) {
super(shardingRule, sqlParser);
}
}
......@@ -17,11 +17,9 @@
package com.dangdang.ddframe.rdb.sharding.parsing.parser.dialect.sqlserver;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.insert.AbstractInsertParser;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.SQLParser;
import com.dangdang.ddframe.rdb.sharding.api.rule.ShardingRule;
import java.util.List;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.SQLParser;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.insert.AbstractInsertParser;
/**
* SQLServer Insert语句解析器.
......@@ -30,7 +28,7 @@ import java.util.List;
*/
public final class SQLServerInsertParser extends AbstractInsertParser {
public SQLServerInsertParser(final ShardingRule shardingRule, final List<Object> parameters, final SQLParser sqlParser) {
super(shardingRule, parameters, sqlParser);
public SQLServerInsertParser(final ShardingRule shardingRule, final SQLParser sqlParser) {
super(shardingRule, sqlParser);
}
}
......@@ -55,14 +55,11 @@ public abstract class AbstractInsertParser implements SQLStatementParser {
private final ShardingRule shardingRule;
private final List<Object> parameters;
private final InsertSQLContext sqlContext;
public AbstractInsertParser(final ShardingRule shardingRule, final List<Object> parameters, final SQLParser sqlParser) {
public AbstractInsertParser(final ShardingRule shardingRule, final SQLParser sqlParser) {
this.sqlParser = sqlParser;
this.shardingRule = shardingRule;
this.parameters = parameters;
sqlContext = new InsertSQLContext();
sqlContext.setSqlBuilderContext(sqlParser.getSqlBuilderContext());
}
......@@ -160,17 +157,16 @@ public abstract class AbstractInsertParser implements SQLStatementParser {
ItemsToken itemsToken = new ItemsToken(sqlParser.getLexer().getCurrentToken().getEndPosition() - sqlParser.getLexer().getCurrentToken().getLiterals().length());
int count = 0;
int offset = 0;
int parametersSize = parameters.size();
for (ShardingColumnContext each : shardingColumnContexts) {
if (each.isAutoIncrement()) {
Number generatedId = getShardingRule().findTableRule(sqlContext.getTables().get(0).getName()).generateId(each.getColumnName());
if (parameters.isEmpty()) {
if (0 == sqlParser.getParametersIndex()) {
itemsToken.getItems().add(generatedId.toString());
sqlExprs.add(new SQLNumberExpr(generatedId));
} else {
itemsToken.getItems().add("?");
offset++;
sqlExprs.add(new SQLPlaceholderExpr(parametersSize + offset - 1));
sqlExprs.add(new SQLPlaceholderExpr(sqlParser.getParametersIndex() + offset - 1));
}
sqlContext.getGeneratedKeyContext().getColumns().add(each.getColumnName());
sqlContext.getGeneratedKeyContext().putValue(each.getColumnName(), generatedId);
......
......@@ -28,8 +28,6 @@ import com.dangdang.ddframe.rdb.sharding.parsing.parser.dialect.postgresql.Postg
import com.dangdang.ddframe.rdb.sharding.parsing.parser.dialect.sqlserver.SQLServerInsertParser;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.dialect.sqlserver.SQLServerParser;
import java.util.List;
/**
* Insert语句解析器工厂.
*
......@@ -41,22 +39,21 @@ public class SQLInsertParserFactory {
* 创建Insert语句解析器.
*
* @param shardingRule 分库分表规则配置
* @param parameters 参数列表
* @param sqlParser SQL解析器
* @return Insert语句解析器
*/
public static AbstractInsertParser newInstance(final ShardingRule shardingRule, final List<Object> parameters, final SQLParser sqlParser) {
public static AbstractInsertParser newInstance(final ShardingRule shardingRule, final SQLParser sqlParser) {
if (sqlParser instanceof MySQLParser) {
return new MySQLInsertParser(shardingRule, parameters, sqlParser);
return new MySQLInsertParser(shardingRule, sqlParser);
}
if (sqlParser instanceof OracleParser) {
return new OracleInsertParser(shardingRule, parameters, sqlParser);
return new OracleInsertParser(shardingRule, sqlParser);
}
if (sqlParser instanceof SQLServerParser) {
return new SQLServerInsertParser(shardingRule, parameters, sqlParser);
return new SQLServerInsertParser(shardingRule, sqlParser);
}
if (sqlParser instanceof PostgreSQLParser) {
return new PostgreSQLInsertParser(shardingRule, parameters, sqlParser);
return new PostgreSQLInsertParser(shardingRule, sqlParser);
}
throw new UnsupportedOperationException(String.format("Cannot support sqlParser class [%s].", sqlParser.getClass()));
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册