提交 cb680e7d 编写于 作者: T terrymanu

refactor SQLStatementParser

上级 9b758419
/*
* 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.parsing.parser.statement;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.SQLContext;
/**
* SQL语句解析器.
*
* @author zhangliang
*/
public interface SQLStatementParser {
/**
* 解析SQL语句.
*
* @return 解析结果
*/
SQLContext parse();
}
......@@ -17,9 +17,10 @@
package com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.delete;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.DeleteSQLContext;
import com.dangdang.ddframe.rdb.sharding.parsing.lexer.token.DefaultKeyword;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.SQLParser;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.DeleteSQLContext;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.SQLStatementParser;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
......@@ -30,7 +31,7 @@ import lombok.RequiredArgsConstructor;
* @author zhangliang
*/
@RequiredArgsConstructor
public abstract class AbstractDeleteParser {
public abstract class AbstractDeleteParser implements SQLStatementParser {
@Getter(AccessLevel.PROTECTED)
private final SQLParser sqlParser;
......@@ -43,11 +44,7 @@ public abstract class AbstractDeleteParser {
sqlContext.setSqlBuilderContext(sqlParser.getSqlBuilderContext());
}
/**
* 解析Delete语句.
*
* @return 解析结果
*/
@Override
public DeleteSQLContext parse() {
sqlParser.getLexer().nextToken();
skipBetweenDeleteAndTable();
......
......@@ -31,6 +31,7 @@ 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.exception.SQLParsingUnsupportedException;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.SQLParser;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.SQLStatementParser;
import com.dangdang.ddframe.rdb.sharding.util.SQLUtil;
import com.google.common.collect.Sets;
import lombok.AccessLevel;
......@@ -48,7 +49,7 @@ import java.util.Set;
* @author zhangliang
*/
@Getter(AccessLevel.PROTECTED)
public abstract class AbstractInsertParser {
public abstract class AbstractInsertParser implements SQLStatementParser {
private final SQLParser sqlParser;
......@@ -66,11 +67,7 @@ public abstract class AbstractInsertParser {
sqlContext.setSqlBuilderContext(sqlParser.getSqlBuilderContext());
}
/**
* 解析Insert语句.
*
* @return 解析结果
*/
@Override
public final InsertSQLContext parse() {
sqlParser.getLexer().nextToken();
parseInto();
......
......@@ -36,6 +36,7 @@ import com.dangdang.ddframe.rdb.sharding.parsing.lexer.token.DefaultKeyword;
import com.dangdang.ddframe.rdb.sharding.parsing.lexer.token.Symbol;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.exception.SQLParsingUnsupportedException;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.SQLParser;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.SQLStatementParser;
import com.dangdang.ddframe.rdb.sharding.util.SQLUtil;
import com.google.common.base.Optional;
import lombok.AccessLevel;
......@@ -47,7 +48,7 @@ import java.util.LinkedList;
import java.util.List;
@Getter(AccessLevel.PROTECTED)
public abstract class AbstractSelectParser {
public abstract class AbstractSelectParser implements SQLStatementParser {
private static final String SHARDING_GEN_ALIAS = "sharding_gen_%s";
......@@ -68,11 +69,7 @@ public abstract class AbstractSelectParser {
sqlContext.setSqlBuilderContext(sqlParser.getSqlBuilderContext());
}
/**
* 解析查询.
*
* @return 解析结果
*/
@Override
public final SelectSQLContext parse() {
query();
sqlContext.getOrderByContexts().addAll(parseOrderBy(getSqlContext()));
......
......@@ -22,6 +22,7 @@ import com.dangdang.ddframe.rdb.sharding.parsing.parser.context.UpdateSQLContext
import com.dangdang.ddframe.rdb.sharding.parsing.lexer.token.DefaultKeyword;
import com.dangdang.ddframe.rdb.sharding.parsing.lexer.token.Symbol;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.SQLParser;
import com.dangdang.ddframe.rdb.sharding.parsing.parser.statement.SQLStatementParser;
import com.dangdang.ddframe.rdb.sharding.util.SQLUtil;
import lombok.AccessLevel;
import lombok.Getter;
......@@ -32,7 +33,7 @@ import lombok.Getter;
* @author zhangliang
*/
@Getter(AccessLevel.PROTECTED)
public abstract class AbstractUpdateParser {
public abstract class AbstractUpdateParser implements SQLStatementParser {
private final SQLParser sqlParser;
......@@ -46,11 +47,7 @@ public abstract class AbstractUpdateParser {
sqlContext.setSqlBuilderContext(sqlParser.getSqlBuilderContext());
}
/**
* 解析Update语句.
*
* @return 解析结果
*/
@Override
public UpdateSQLContext parse() {
sqlParser.getLexer().nextToken();
skipBetweenUpdateAndTable();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册