提交 735f5da6 编写于 作者: T terrymanu

remove ParserContext

上级 d0503268
......@@ -29,7 +29,6 @@ import com.dangdang.ddframe.rdb.sharding.parser.sql.context.SQLContext;
import com.dangdang.ddframe.rdb.sharding.parser.sql.context.SelectItemContext;
import com.dangdang.ddframe.rdb.sharding.parser.sql.context.SelectSQLContext;
import com.dangdang.ddframe.rdb.sharding.parser.sql.context.TableContext;
import com.dangdang.ddframe.rdb.sharding.parser.visitor.ParseContext;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
......@@ -52,39 +51,35 @@ public final class SQLParseEngine {
* @return SQL解析结果
*/
public SQLParsedResult parse() {
ParseContext parseContext = getParseContext(sqlContext);
SQLParsedResult result = getSQLParsedResult(sqlContext);
if (sqlContext instanceof SelectSQLContext) {
parseSelect(parseContext, (SelectSQLContext) sqlContext);
parseSelect(result, (SelectSQLContext) sqlContext);
} else if (sqlContext instanceof InsertSQLContext) {
parseInsert(parseContext, (InsertSQLContext) sqlContext);
parseInsert(result, (InsertSQLContext) sqlContext);
}
parseContext.getParsedResult().getRouteContext().setSqlBuilder(sqlContext.toSqlBuilder());
return parseContext.getParsedResult();
result.getRouteContext().setSqlBuilder(sqlContext.toSqlBuilder());
return result;
}
private ParseContext getParseContext(final SQLContext sqlContext) {
ParseContext result = new ParseContext();
SQLParsedResult sqlParsedResult = result.getParsedResult();
private SQLParsedResult getSQLParsedResult(final SQLContext sqlContext) {
SQLParsedResult result = new SQLParsedResult();
if (sqlContext.getConditionContexts().isEmpty()) {
sqlParsedResult.getConditionContexts().add(new ConditionContext());
result.getConditionContexts().add(new ConditionContext());
} else {
sqlParsedResult.getConditionContexts().addAll(sqlContext.getConditionContexts());
result.getConditionContexts().addAll(sqlContext.getConditionContexts());
}
for (TableContext each : sqlContext.getTables()) {
sqlParsedResult.getRouteContext().getTables().add(each);
result.getRouteContext().getTables().add(each);
}
sqlParsedResult.getRouteContext().setSqlStatementType(sqlContext.getType());
result.getRouteContext().setSqlStatementType(sqlContext.getType());
return result;
}
private void parseInsert(final ParseContext parseContext, final InsertSQLContext sqlContext) {
parseContext.getParsedResult().setGeneratedKeyContext(sqlContext.getGeneratedKeyContext());
private void parseInsert(final SQLParsedResult sqlParsedResult, final InsertSQLContext sqlContext) {
sqlParsedResult.setGeneratedKeyContext(sqlContext.getGeneratedKeyContext());
}
private void parseSelect(final ParseContext parseContext, final SelectSQLContext sqlContext) {
SQLParsedResult sqlParsedResult = parseContext.getParsedResult();
private void parseSelect(final SQLParsedResult sqlParsedResult, final SelectSQLContext sqlContext) {
for (SelectItemContext each : sqlContext.getItemContexts()) {
if (each instanceof AggregationSelectItemContext) {
AggregationSelectItemContext aggregationSelectItemContext = (AggregationSelectItemContext) each;
......@@ -105,22 +100,22 @@ public final class SQLParseEngine {
if (!sqlContext.getGroupByContexts().isEmpty()) {
for (GroupByContext each : sqlContext.getGroupByContexts()) {
parseContext.getParsedResult().getMergeContext().getGroupByContexts().add(each);
sqlParsedResult.getMergeContext().getGroupByContexts().add(each);
}
}
if (!sqlContext.getOrderByContexts().isEmpty()) {
for (OrderByContext each : sqlContext.getOrderByContexts()) {
if (each.getIndex().isPresent()) {
parseContext.getParsedResult().getMergeContext().getOrderByContexts().add(new OrderByContext(each.getIndex().get(), each.getOrderByType()));
sqlParsedResult.getMergeContext().getOrderByContexts().add(new OrderByContext(each.getIndex().get(), each.getOrderByType()));
} else {
parseContext.getParsedResult().getMergeContext().getOrderByContexts().add(each);
sqlParsedResult.getMergeContext().getOrderByContexts().add(each);
}
}
}
if (null != sqlContext.getLimitContext()) {
parseContext.getParsedResult().getMergeContext().setLimit(
sqlParsedResult.getMergeContext().setLimit(
new Limit(sqlContext.getLimitContext().getOffset().isPresent() ? sqlContext.getLimitContext().getOffset().get() : 0, sqlContext.getLimitContext().getRowCount(),
sqlContext.getLimitContext().getOffsetParameterIndex(), sqlContext.getLimitContext().getRowCountParameterIndex()));
}
......
/*
* Copyright 1999-2015 dangdang.com.
* <p>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* </p>
*/
package com.dangdang.ddframe.rdb.sharding.parser.visitor;
import com.dangdang.ddframe.rdb.sharding.parser.result.SQLParsedResult;
import lombok.Getter;
/**
* 解析过程的上下文对象.
*
* @author zhangliang
*/
@Getter
public final class ParseContext {
private final SQLParsedResult parsedResult = new SQLParsedResult();
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册