All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.javaclub.cdl.client.matrix.parser.SQLParseEngine Maven / Gradle / Ivy

There is a newer version: 2.3.9
Show newest version
/**
 * Copyright 1999-2015 dangdang.com.
 * 

* 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. *

*/ package com.github.javaclub.cdl.client.matrix.parser; import java.util.List; import java.util.Map; import lombok.RequiredArgsConstructor; import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.visitor.SQLASTOutputVisitor; import com.github.javaclub.cdl.client.matrix.parser.visitor.SQLVisitor; import com.github.javaclub.cdl.client.matrix.parser.visitor.bash.mysql.AbstractMySQLVisitor; import com.github.javaclub.cdl.client.matrix.parser.visitor.or.OrParser; import com.github.javaclub.cdl.client.parameter.ParameterContext; import com.google.common.base.Preconditions; /** * 不包含OR语句的SQL构建器解析. * * @author gaohongtao, zhangliang */ @RequiredArgsConstructor public final class SQLParseEngine { private final SQLStatement sqlStatement; private final List parameters; private final SQLASTOutputVisitor visitor; private final Map shardingColumns; private Map parameterSettings; /** *  解析SQL. * * @return SQL解析结果 */ public SQLParsedResult parse() { Preconditions.checkArgument(visitor instanceof SQLVisitor); SQLVisitor sqlVisitor = (SQLVisitor) visitor; visitor.setParameters(parameters); sqlVisitor.getParseContext().setShardingColumns(shardingColumns); if(visitor instanceof AbstractMySQLVisitor){ AbstractMySQLVisitor abstractMySQLVisitor = (AbstractMySQLVisitor)visitor; abstractMySQLVisitor.setParameterSettings(parameterSettings); } sqlStatement.accept(visitor); SQLParsedResult result; if (sqlVisitor.getParseContext().isHasOrCondition()) { result = new OrParser(sqlStatement, visitor).parse(); } else { sqlVisitor.getParseContext().mergeCurrentConditionContext(); result = sqlVisitor.getParseContext().getParsedResult(); } result.getRouteContext().setSqlBuilder(sqlVisitor.getSQLBuilder()); return result; } public void setParameterSettings(Map parameterSettings) { this.parameterSettings = parameterSettings; } }