提交 0c66fb71 编写于 作者: T terrymanu

refactor

上级 94b0ccad
......@@ -18,9 +18,9 @@
package com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.mysql.lexer;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.Dictionary;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.AbstractLexer;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.Lexer;
public final class MySQLLexer extends AbstractLexer {
public final class MySQLLexer extends Lexer {
private static Dictionary dictionary = new Dictionary();
......
......@@ -21,7 +21,7 @@ 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.Assist;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.DefaultKeyword;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.SpecialLiterals;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.GeneralLiterals;
import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.AbstractSelectParser;
import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.ParserUnsupportedException;
import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLExprParser;
......@@ -36,7 +36,7 @@ public class MySQLSelectParser extends AbstractSelectParser {
public void query() {
if (getExprParser().getLexer().equalToken(DefaultKeyword.SELECT)) {
getExprParser().getLexer().nextToken();
while (getExprParser().getLexer().equalToken(SpecialLiterals.HINT) || getExprParser().getLexer().equalToken(SpecialLiterals.COMMENT)) {
while (getExprParser().getLexer().equalToken(GeneralLiterals.HINT) || getExprParser().getLexer().equalToken(GeneralLiterals.COMMENT)) {
getExprParser().getLexer().nextToken();
}
parseDistinct();
......
......@@ -18,9 +18,9 @@
package com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.oracle.lexer;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.Dictionary;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.AbstractLexer;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.Lexer;
public final class OracleLexer extends AbstractLexer {
public final class OracleLexer extends Lexer {
private static Dictionary dictionary = new Dictionary();
......@@ -32,11 +32,6 @@ public final class OracleLexer extends AbstractLexer {
super(input, dictionary);
}
@Override
protected boolean isVariableBegin() {
return false;
}
@Override
protected boolean isHintBegin() {
return '/' == charAt(getPosition()) && '*' == charAt(getPosition() + 1) && '+' == charAt(getPosition() + 2);
......
......@@ -15,22 +15,16 @@
* </p>
*/
package com.dangdang.ddframe.rdb.sharding.parser.sql.lexer;
package com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.oracle.lexer;
public final class DefaultLexer extends AbstractLexer {
private static Dictionary dictionary = new Dictionary();
static {
dictionary.fill();
}
public DefaultLexer(final String input) {
super(input, dictionary);
}
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.Literals;
/**
* Oracle自定义字面量标记.
*
* @author zhangliang
*/
public enum OracleLiterals implements Literals {
@Override
protected boolean isVariableBegin() {
return false;
}
BINARY_FLOAT, BINARY_DOUBLE
}
......@@ -19,7 +19,7 @@ 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.DefaultKeyword;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.SpecialLiterals;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.GeneralLiterals;
import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.AbstractDeleteParser;
import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLExprParser;
......@@ -31,9 +31,9 @@ public class OracleDeleteParser extends AbstractDeleteParser {
@Override
protected void skipBetweenDeleteAndTable() {
getExprParser().getLexer().skipIfEqual(SpecialLiterals.HINT);
getExprParser().getLexer().skipIfEqual(GeneralLiterals.HINT);
getExprParser().getLexer().skipIfEqual(DefaultKeyword.FROM);
getExprParser().getLexer().skipIfEqual(SpecialLiterals.COMMENT);
getExprParser().getLexer().skipIfEqual(GeneralLiterals.COMMENT);
getExprParser().getLexer().skipIfEqual(OracleKeyword.ONLY);
}
}
......@@ -20,7 +20,7 @@ package com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.oracle.parser;
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.DefaultKeyword;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.SpecialLiterals;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.GeneralLiterals;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.Symbol;
import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.AbstractSelectParser;
import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.ParserUnsupportedException;
......@@ -49,11 +49,11 @@ public class OracleSelectParser extends AbstractSelectParser {
public void query() {
if (getExprParser().getLexer().equalToken(DefaultKeyword.SELECT)) {
getExprParser().getLexer().nextToken();
while (getExprParser().getLexer().equalToken(SpecialLiterals.HINT) || getExprParser().getLexer().equalToken(SpecialLiterals.COMMENT)) {
while (getExprParser().getLexer().equalToken(GeneralLiterals.HINT) || getExprParser().getLexer().equalToken(GeneralLiterals.COMMENT)) {
getExprParser().getLexer().nextToken();
}
parseDistinct();
getExprParser().getLexer().skipIfEqual(SpecialLiterals.HINT);
getExprParser().getLexer().skipIfEqual(GeneralLiterals.HINT);
parseSelectList();
}
skipInto();
......
......@@ -18,7 +18,7 @@
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.SpecialLiterals;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.GeneralLiterals;
import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.AbstractUpdateParser;
import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.SQLExprParser;
......@@ -30,7 +30,7 @@ public class OracleUpdateParser extends AbstractUpdateParser {
@Override
protected void skipBetweenUpdateAndTable() {
getExprParser().getLexer().skipIfEqual(SpecialLiterals.HINT);
getExprParser().getLexer().skipIfEqual(GeneralLiterals.HINT);
getExprParser().getLexer().skipIfEqual(OracleKeyword.ONLY);
}
}
......@@ -18,9 +18,9 @@
package com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.postgresql.lexer;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.Dictionary;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.AbstractLexer;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.Lexer;
public final class PostgreSQLLexer extends AbstractLexer {
public final class PostgreSQLLexer extends Lexer {
private static Dictionary dictionary = new Dictionary();
......@@ -31,9 +31,4 @@ public final class PostgreSQLLexer extends AbstractLexer {
public PostgreSQLLexer(final String input) {
super(input, dictionary);
}
@Override
protected boolean isVariableBegin() {
return false;
}
}
......@@ -21,7 +21,6 @@ import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.postgresql.lexer.Pos
import com.dangdang.ddframe.rdb.sharding.parser.sql.expr.SQLIdentifierExpr;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.DefaultKeyword;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.GeneralLiterals;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.SpecialLiterals;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.Symbol;
import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.AbstractSelectParser;
import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.ParserException;
......@@ -37,7 +36,7 @@ public class PostgreSQLSelectParser extends AbstractSelectParser {
@Override
public void query() {
if (getExprParser().getLexer().skipIfEqual(DefaultKeyword.SELECT)) {
getExprParser().getLexer().skipIfEqual(SpecialLiterals.COMMENT);
getExprParser().getLexer().skipIfEqual(GeneralLiterals.COMMENT);
parseDistinct();
parseSelectList();
if (getExprParser().getLexer().skipIfEqual(DefaultKeyword.INTO)) {
......
......@@ -17,11 +17,10 @@
package com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.sqlserver.lexer;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.GeneralLiterals;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.Dictionary;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.AbstractLexer;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.Lexer;
public final class SQLServerLexer extends AbstractLexer {
public final class SQLServerLexer extends Lexer {
private static Dictionary dictionary = new Dictionary();
......@@ -54,8 +53,7 @@ public final class SQLServerLexer extends AbstractLexer {
private void scanNChar() {
increaseCurrentPosition();
scanChars();
setToken(GeneralLiterals.NCHARS);
scanChars();
setToken(SQLServerLiterals.NCHARS);
}
@Override
......
......@@ -15,14 +15,16 @@
* </p>
*/
package com.dangdang.ddframe.rdb.sharding.parser.sql.lexer;
package com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.sqlserver.lexer;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.Literals;
/**
* 特殊字面量标记.
* SQLServer自定义字面量标记.
*
* @author zhangliang
*/
public enum SpecialLiterals implements Token {
public enum SQLServerLiterals implements Literals {
VARIANT, HINT, COMMENT
NCHARS
}
......@@ -19,7 +19,7 @@ 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.DefaultKeyword;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.SpecialLiterals;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.GeneralLiterals;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.Symbol;
import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.AbstractSelectParser;
import com.dangdang.ddframe.rdb.sharding.parser.sql.parser.ParserUnsupportedException;
......@@ -45,7 +45,7 @@ public class SQLServerSelectParser extends AbstractSelectParser {
public void query() {
if (getExprParser().getLexer().equalToken(DefaultKeyword.SELECT)) {
getExprParser().getLexer().nextToken();
if (getExprParser().getLexer().equalToken(SpecialLiterals.COMMENT)) {
if (getExprParser().getLexer().equalToken(GeneralLiterals.COMMENT)) {
getExprParser().getLexer().nextToken();
}
parseDistinct();
......
......@@ -17,16 +17,11 @@
package com.dangdang.ddframe.rdb.sharding.parser.sql.lexer;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
/**
* 辅助标记.
*
* @author zhangliang
*/
@RequiredArgsConstructor
@Getter
public enum Assist implements Token {
ERROR, EOF
......
......@@ -38,9 +38,6 @@ public final class Dictionary {
for (Symbol each : Symbol.values()) {
tokens.put(each.getLiterals(), each);
}
for (GeneralLiterals each : GeneralLiterals.values()) {
tokens.put(each.name(), each);
}
for (DefaultKeyword each : DefaultKeyword.values()) {
tokens.put(each.name(), each);
}
......
......@@ -17,25 +17,12 @@
package com.dangdang.ddframe.rdb.sharding.parser.sql.lexer;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
/**
* 常规字面量标记.
*
* @author zhangliang
*/
@RequiredArgsConstructor
@Getter
public enum GeneralLiterals implements Token {
public enum GeneralLiterals implements Literals {
INT,
FLOAT,
HEX,
CHARS,
NCHARS,
BINARY_FLOAT,
BINARY_DOUBLE,
IDENTIFIER,
ALIAS
INT, FLOAT, HEX, CHARS, IDENTIFIER, ALIAS, VARIANT, HINT, COMMENT
}
......@@ -30,7 +30,7 @@ import java.util.Set;
*
* @author zhangliang
*/
public abstract class AbstractLexer {
public class Lexer {
@Getter
private final String input;
......@@ -47,7 +47,7 @@ public abstract class AbstractLexer {
@Getter
private String literals;
public AbstractLexer(final String input, final Dictionary dictionary) {
public Lexer(final String input, final Dictionary dictionary) {
this.input = input;
term = new Term(input, dictionary);
}
......@@ -115,7 +115,9 @@ public abstract class AbstractLexer {
}
}
protected abstract boolean isVariableBegin();
protected boolean isVariableBegin() {
return false;
}
private void scanVariable() {
term.scanVariable(position);
......
package com.dangdang.ddframe.rdb.sharding.parser.sql.lexer;
/**
* 字面量标记.
*
* @author zhangliang
*/
public interface Literals extends Token {
}
......@@ -17,6 +17,7 @@
package com.dangdang.ddframe.rdb.sharding.parser.sql.lexer;
import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.oracle.lexer.OracleLiterals;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
......@@ -74,7 +75,7 @@ public final class Term {
length++;
}
literals = input.substring(offset, offset + length);
token = SpecialLiterals.VARIANT;
token = GeneralLiterals.VARIANT;
}
private boolean isVariableChar(final char ch) {
......@@ -178,13 +179,13 @@ public final class Term {
if ('f' == charAt(position) || 'F' == charAt(position)) {
length++;
literals = input.substring(offset, offset + length);
token = GeneralLiterals.BINARY_FLOAT;
token = OracleLiterals.BINARY_FLOAT;
return;
}
if ('d' == charAt(position) || 'D' == charAt(position)) {
length++;
literals = input.substring(offset, offset + length);
token = GeneralLiterals.BINARY_DOUBLE;
token = OracleLiterals.BINARY_DOUBLE;
return;
}
literals = input.substring(offset, offset + length);
......@@ -232,7 +233,7 @@ public final class Term {
}
length += 2;
literals = input.substring(offset + 4, offset + length - 2);
token = SpecialLiterals.HINT;
token = GeneralLiterals.HINT;
}
void scanSingleLineComment(final int currentPosition, final int commentFlagLength) {
......@@ -244,7 +245,7 @@ public final class Term {
length++;
}
literals = input.substring(offset, offset + length);
token = SpecialLiterals.COMMENT;
token = GeneralLiterals.COMMENT;
}
void scanMultiLineComment(final int currentPosition) {
......@@ -260,7 +261,7 @@ public final class Term {
}
length += 2;
literals = input.substring(offset, offset + length);
token = SpecialLiterals.COMMENT;
token = GeneralLiterals.COMMENT;
}
void scanSymbol(final int currentPosition, final int charLength) {
......
......@@ -28,7 +28,7 @@ import com.dangdang.ddframe.rdb.sharding.parser.sql.expr.SQLPlaceholderExpr;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.Assist;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.DefaultKeyword;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.Keyword;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.SpecialLiterals;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.GeneralLiterals;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.Symbol;
import com.dangdang.ddframe.rdb.sharding.parser.visitor.ParseContext;
import com.dangdang.ddframe.rdb.sharding.util.SQLUtil;
......@@ -90,7 +90,7 @@ public abstract class AbstractInsertParser {
}
private void parseInto() {
exprParser.getLexer().skipIfEqual(SpecialLiterals.HINT);
exprParser.getLexer().skipIfEqual(GeneralLiterals.HINT);
if (getUnsupportedKeywords().contains(exprParser.getLexer().getToken())) {
throw new ParserUnsupportedException(exprParser.getLexer().getToken());
}
......
......@@ -29,7 +29,7 @@ import com.dangdang.ddframe.rdb.sharding.parser.sql.expr.SQLExpr;
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.DefaultKeyword;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.SpecialLiterals;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.GeneralLiterals;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.Symbol;
import com.dangdang.ddframe.rdb.sharding.util.SQLUtil;
import com.google.common.base.Optional;
......@@ -71,7 +71,7 @@ public abstract class AbstractSelectParser {
protected void query() {
getExprParser().getLexer().accept(DefaultKeyword.SELECT);
getExprParser().getLexer().skipIfEqual(SpecialLiterals.COMMENT);
getExprParser().getLexer().skipIfEqual(GeneralLiterals.COMMENT);
parseDistinct();
parseSelectList();
parseFrom();
......@@ -194,7 +194,7 @@ public abstract class AbstractSelectParser {
}
protected void parseJoinTable() {
getExprParser().getLexer().skipIfEqual(SpecialLiterals.HINT);
getExprParser().getLexer().skipIfEqual(GeneralLiterals.HINT);
if (getExprParser().isJoin()) {
parseTable();
if (getExprParser().getLexer().skipIfEqual(DefaultKeyword.ON)) {
......
......@@ -17,7 +17,7 @@
package com.dangdang.ddframe.rdb.sharding.parser.sql.parser;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.AbstractLexer;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.Lexer;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.Token;
public class ParserException extends RuntimeException {
......@@ -28,11 +28,11 @@ public class ParserException extends RuntimeException {
private static final String TOKEN_ERROR_MESSAGE = "SQL syntax error, token is '%s', literals is '%s'.";
public ParserException(final AbstractLexer lexer, final Token expectedToken) {
public ParserException(final Lexer lexer, final Token expectedToken) {
super(String.format(UNMATCH_MESSAGE, expectedToken, lexer.getToken(), lexer.getLiterals()));
}
public ParserException(final AbstractLexer lexer) {
public ParserException(final Lexer lexer) {
super(String.format(TOKEN_ERROR_MESSAGE, lexer.getToken(), lexer.getLiterals()));
}
}
......@@ -30,6 +30,7 @@ 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.sql.context.TableToken;
import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.sqlserver.lexer.SQLServerLiterals;
import com.dangdang.ddframe.rdb.sharding.parser.sql.expr.SQLCharExpr;
import com.dangdang.ddframe.rdb.sharding.parser.sql.expr.SQLExpr;
import com.dangdang.ddframe.rdb.sharding.parser.sql.expr.SQLIdentifierExpr;
......@@ -39,7 +40,7 @@ import com.dangdang.ddframe.rdb.sharding.parser.sql.expr.SQLNCharExpr;
import com.dangdang.ddframe.rdb.sharding.parser.sql.expr.SQLNumberExpr;
import com.dangdang.ddframe.rdb.sharding.parser.sql.expr.SQLPlaceholderExpr;
import com.dangdang.ddframe.rdb.sharding.parser.sql.expr.SQLPropertyExpr;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.AbstractLexer;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.Lexer;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.Assist;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.DefaultKeyword;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.GeneralLiterals;
......@@ -62,7 +63,7 @@ import java.util.List;
public class SQLExprParser {
@Getter
private final AbstractLexer lexer;
private final Lexer lexer;
@Getter
private final ShardingRule shardingRule;
......@@ -74,7 +75,7 @@ public class SQLExprParser {
@Setter
private int parametersIndex;
public SQLExprParser(final ShardingRule shardingRule, final List<Object> parameters, final AbstractLexer lexer) {
public SQLExprParser(final ShardingRule shardingRule, final List<Object> parameters, final Lexer lexer) {
this.lexer = lexer;
this.shardingRule = shardingRule;
this.parameters = parameters;
......@@ -372,7 +373,7 @@ public class SQLExprParser {
if (lexer.equalToken(GeneralLiterals.CHARS)) {
return new SQLCharExpr(literals);
}
if (lexer.equalToken(GeneralLiterals.NCHARS)) {
if (lexer.equalToken(SQLServerLiterals.NCHARS)) {
return new SQLNCharExpr(literals);
}
if (lexer.equalToken(GeneralLiterals.INT)) {
......
......@@ -20,7 +20,6 @@ package com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.mysql.lexer;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.Assist;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.DefaultKeyword;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.GeneralLiterals;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.SpecialLiterals;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.Symbol;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.Token;
import org.junit.Test;
......@@ -37,7 +36,7 @@ public final class MySQLLexerTest {
assertThat(lexer.getToken(), is((Token) DefaultKeyword.SELECT));
assertThat(lexer.getLiterals(), is("SELECT"));
lexer.nextToken();
assertThat(lexer.getToken(), is((Token) SpecialLiterals.VARIANT));
assertThat(lexer.getToken(), is((Token) GeneralLiterals.VARIANT));
assertThat(lexer.getLiterals(), is("@x1"));
lexer.nextToken();
assertThat(lexer.getToken(), is((Token) Symbol.COLON_EQ));
......@@ -62,7 +61,7 @@ public final class MySQLLexerTest {
assertThat(lexer.getToken(), is((Token) Symbol.EQ));
assertThat(lexer.getLiterals(), is("="));
lexer.nextToken();
assertThat(lexer.getToken(), is((Token) SpecialLiterals.VARIANT));
assertThat(lexer.getToken(), is((Token) GeneralLiterals.VARIANT));
assertThat(lexer.getLiterals(), is("@@global.x1"));
lexer.nextToken();
assertThat(lexer.getToken(), is((Token) Assist.EOF));
......@@ -84,7 +83,7 @@ public final class MySQLLexerTest {
assertThat(lexer.getToken(), is((Token) GeneralLiterals.IDENTIFIER));
assertThat(lexer.getLiterals(), is("TABLE_XXX"));
lexer.nextToken();
assertThat(lexer.getToken(), is((Token) SpecialLiterals.COMMENT));
assertThat(lexer.getToken(), is((Token) GeneralLiterals.COMMENT));
assertThat(lexer.getLiterals(), is(" # xxx "));
lexer.nextToken();
assertThat(lexer.getToken(), is((Token) Assist.EOF));
......@@ -106,10 +105,10 @@ public final class MySQLLexerTest {
assertThat(lexer.getToken(), is((Token) GeneralLiterals.IDENTIFIER));
assertThat(lexer.getLiterals(), is("TABLE_XXX"));
lexer.nextToken();
assertThat(lexer.getToken(), is((Token) SpecialLiterals.COMMENT));
assertThat(lexer.getToken(), is((Token) GeneralLiterals.COMMENT));
assertThat(lexer.getLiterals(), is(" # comment 1 "));
lexer.nextToken();
assertThat(lexer.getToken(), is((Token) SpecialLiterals.COMMENT));
assertThat(lexer.getToken(), is((Token) GeneralLiterals.COMMENT));
assertThat(lexer.getLiterals(), is(" #comment 2 \r"));
lexer.nextToken();
assertThat(lexer.getToken(), is((Token) DefaultKeyword.WHERE));
......@@ -143,7 +142,7 @@ public final class MySQLLexerTest {
assertThat(lexer.getToken(), is((Token) GeneralLiterals.IDENTIFIER));
assertThat(lexer.getLiterals(), is("TABLE_XXX"));
lexer.nextToken();
assertThat(lexer.getToken(), is((Token) SpecialLiterals.HINT));
assertThat(lexer.getToken(), is((Token) GeneralLiterals.HINT));
assertThat(lexer.getLiterals(), is(" hint 1 \n xxx "));
lexer.nextToken();
assertThat(lexer.getToken(), is((Token) DefaultKeyword.WHERE));
......@@ -158,7 +157,7 @@ public final class MySQLLexerTest {
assertThat(lexer.getToken(), is((Token) GeneralLiterals.INT));
assertThat(lexer.getLiterals(), is("1"));
lexer.nextToken();
assertThat(lexer.getToken(), is((Token) SpecialLiterals.HINT));
assertThat(lexer.getToken(), is((Token) GeneralLiterals.HINT));
assertThat(lexer.getLiterals(), is("hint 2"));
lexer.nextToken();
assertThat(lexer.getToken(), is((Token) Assist.EOF));
......
......@@ -3,7 +3,6 @@ package com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.sqlserver.lexer;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.Assist;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.DefaultKeyword;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.GeneralLiterals;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.SpecialLiterals;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.Symbol;
import com.dangdang.ddframe.rdb.sharding.parser.sql.lexer.Token;
import org.junit.Test;
......@@ -20,7 +19,7 @@ public final class SQLServerLexerTest {
assertThat(lexer.getToken(), is((Token) DefaultKeyword.SELECT));
assertThat(lexer.getLiterals(), is("SELECT"));
lexer.nextToken();
assertThat(lexer.getToken(), is((Token) SpecialLiterals.VARIANT));
assertThat(lexer.getToken(), is((Token) GeneralLiterals.VARIANT));
assertThat(lexer.getLiterals(), is("@x1"));
lexer.nextToken();
assertThat(lexer.getToken(), is((Token) Symbol.COLON_EQ));
......@@ -32,7 +31,7 @@ public final class SQLServerLexerTest {
assertThat(lexer.getToken(), is((Token) Symbol.COMMA));
assertThat(lexer.getLiterals(), is(","));
lexer.nextToken();
assertThat(lexer.getToken(), is((Token) SpecialLiterals.VARIANT));
assertThat(lexer.getToken(), is((Token) GeneralLiterals.VARIANT));
assertThat(lexer.getLiterals(), is("@@global.x1"));
lexer.nextToken();
assertThat(lexer.getToken(), is((Token) DefaultKeyword.FROM));
......
......@@ -17,6 +17,7 @@
package com.dangdang.ddframe.rdb.sharding.parser.sql.lexer;
import com.dangdang.ddframe.rdb.sharding.parser.sql.dialect.oracle.lexer.OracleLiterals;
import org.junit.Test;
import static org.hamcrest.MatcherAssert.assertThat;
......@@ -24,9 +25,15 @@ import static org.hamcrest.core.Is.is;
public final class LexerTest {
private static Dictionary dictionary = new Dictionary();
static {
dictionary.fill(new Keyword[0]);
}
@Test
public void assertNextTokenForWhitespace() {
AbstractLexer lexer = new DefaultLexer("Select \t \n * from \r\n TABLE_XXX \t");
Lexer lexer = new Lexer("Select \t \n * from \r\n TABLE_XXX \t", dictionary);
lexer.nextToken();
assertThat(lexer.getToken(), is((Token) DefaultKeyword.SELECT));
assertThat(lexer.getLiterals(), is("Select"));
......@@ -45,7 +52,7 @@ public final class LexerTest {
@Test
public void assertNextTokenForOrderBy() {
AbstractLexer lexer = new DefaultLexer("SELECT * FROM ORDER ORDER \t BY XX DESC");
Lexer lexer = new Lexer("SELECT * FROM ORDER ORDER \t BY XX DESC", dictionary);
lexer.nextToken();
assertThat(lexer.getToken(), is((Token) DefaultKeyword.SELECT));
assertThat(lexer.getLiterals(), is("SELECT"));
......@@ -76,7 +83,7 @@ public final class LexerTest {
@Test
public void assertNextTokenForGroupBy() {
AbstractLexer lexer = new DefaultLexer("SELECT * FROM GROUP Group \n By XX DESC");
Lexer lexer = new Lexer("SELECT * FROM GROUP Group \n By XX DESC", dictionary);
lexer.nextToken();
assertThat(lexer.getToken(), is((Token) DefaultKeyword.SELECT));
assertThat(lexer.getLiterals(), is("SELECT"));
......@@ -118,15 +125,15 @@ public final class LexerTest {
assertNextTokenForNumber("123e-4", GeneralLiterals.FLOAT);
assertNextTokenForNumber("123E-4", GeneralLiterals.FLOAT);
assertNextTokenForNumber(".5", GeneralLiterals.FLOAT);
assertNextTokenForNumber("123f", GeneralLiterals.BINARY_FLOAT);
assertNextTokenForNumber("123F", GeneralLiterals.BINARY_FLOAT);
assertNextTokenForNumber(".5F", GeneralLiterals.BINARY_FLOAT);
assertNextTokenForNumber("123d", GeneralLiterals.BINARY_DOUBLE);
assertNextTokenForNumber("123D", GeneralLiterals.BINARY_DOUBLE);
assertNextTokenForNumber("123f", OracleLiterals.BINARY_FLOAT);
assertNextTokenForNumber("123F", OracleLiterals.BINARY_FLOAT);
assertNextTokenForNumber(".5F", OracleLiterals.BINARY_FLOAT);
assertNextTokenForNumber("123d", OracleLiterals.BINARY_DOUBLE);
assertNextTokenForNumber("123D", OracleLiterals.BINARY_DOUBLE);
}
private void assertNextTokenForNumber(final String number, final Token expectedToken) {
AbstractLexer lexer = new DefaultLexer(String.format("SELECT * FROM XXX_TABLE WHERE XX=%s AND YY=%s", number, number));
Lexer lexer = new Lexer(String.format("SELECT * FROM XXX_TABLE WHERE XX=%s AND YY=%s", number, number), dictionary);
lexer.nextToken();
assertThat(lexer.getToken(), is((Token) DefaultKeyword.SELECT));
assertThat(lexer.getLiterals(), is("SELECT"));
......@@ -174,7 +181,7 @@ public final class LexerTest {
}
private void assertNextTokenForString(final String str) {
AbstractLexer lexer = new DefaultLexer(String.format("SELECT * FROM XXX_TABLE WHERE XX=%s AND YY=%s", str, str));
Lexer lexer = new Lexer(String.format("SELECT * FROM XXX_TABLE WHERE XX=%s AND YY=%s", str, str), dictionary);
lexer.nextToken();
assertThat(lexer.getToken(), is((Token) DefaultKeyword.SELECT));
assertThat(lexer.getLiterals(), is("SELECT"));
......@@ -221,7 +228,7 @@ public final class LexerTest {
}
private void assertNextTokenForAlias(final String str) {
AbstractLexer lexer = new DefaultLexer(String.format("SELECT * FROM XXX_TABLE AS \"%s\"", str));
Lexer lexer = new Lexer(String.format("SELECT * FROM XXX_TABLE AS \"%s\"", str), dictionary);
lexer.nextToken();
assertThat(lexer.getToken(), is((Token) DefaultKeyword.SELECT));
assertThat(lexer.getLiterals(), is("SELECT"));
......@@ -251,7 +258,7 @@ public final class LexerTest {
}
private void assertNextTokenForSingleLineComment(final String comment) {
AbstractLexer lexer = new DefaultLexer(String.format("SELECT * FROM XXX_TABLE %s \n WHERE XX=1 %s", comment, comment));
Lexer lexer = new Lexer(String.format("SELECT * FROM XXX_TABLE %s \n WHERE XX=1 %s", comment, comment), dictionary);
lexer.nextToken();
assertThat(lexer.getToken(), is((Token) DefaultKeyword.SELECT));
assertThat(lexer.getLiterals(), is("SELECT"));
......@@ -265,7 +272,7 @@ public final class LexerTest {
assertThat(lexer.getToken(), is((Token) GeneralLiterals.IDENTIFIER));
assertThat(lexer.getLiterals(), is("XXX_TABLE"));
lexer.nextToken();
assertThat(lexer.getToken(), is((Token) SpecialLiterals.COMMENT));
assertThat(lexer.getToken(), is((Token) GeneralLiterals.COMMENT));
assertThat(lexer.getLiterals().trim(), is(comment));
lexer.nextToken();
assertThat(lexer.getToken(), is((Token) DefaultKeyword.WHERE));
......@@ -280,7 +287,7 @@ public final class LexerTest {
assertThat(lexer.getToken(), is((Token) GeneralLiterals.INT));
assertThat(lexer.getLiterals(), is("1"));
lexer.nextToken();
assertThat(lexer.getToken(), is((Token) SpecialLiterals.COMMENT));
assertThat(lexer.getToken(), is((Token) GeneralLiterals.COMMENT));
assertThat(lexer.getLiterals().trim(), is(comment));
lexer.nextToken();
assertThat(lexer.getToken(), is((Token) Assist.EOF));
......@@ -292,7 +299,7 @@ public final class LexerTest {
}
private void assertNextTokenForMultipleLineComment(final String commentStart, final String commentEnd) {
AbstractLexer lexer = new DefaultLexer(String.format("SELECT * FROM XXX_TABLE %s \n WHERE XX=1 %s WHERE YY>2 %s %s", commentStart, commentEnd, commentStart, commentEnd));
Lexer lexer = new Lexer(String.format("SELECT * FROM XXX_TABLE %s \n WHERE XX=1 %s WHERE YY>2 %s %s", commentStart, commentEnd, commentStart, commentEnd), dictionary);
lexer.nextToken();
assertThat(lexer.getToken(), is((Token) DefaultKeyword.SELECT));
assertThat(lexer.getLiterals(), is("SELECT"));
......@@ -306,7 +313,7 @@ public final class LexerTest {
assertThat(lexer.getToken(), is((Token) GeneralLiterals.IDENTIFIER));
assertThat(lexer.getLiterals(), is("XXX_TABLE"));
lexer.nextToken();
assertThat(lexer.getToken(), is((Token) SpecialLiterals.COMMENT));
assertThat(lexer.getToken(), is((Token) GeneralLiterals.COMMENT));
assertThat(lexer.getLiterals().trim(), is(commentStart + " \n WHERE XX=1 " + commentEnd));
lexer.nextToken();
assertThat(lexer.getToken(), is((Token) DefaultKeyword.WHERE));
......@@ -321,7 +328,7 @@ public final class LexerTest {
assertThat(lexer.getToken(), is((Token) GeneralLiterals.INT));
assertThat(lexer.getLiterals(), is("2"));
lexer.nextToken();
assertThat(lexer.getToken(), is((Token) SpecialLiterals.COMMENT));
assertThat(lexer.getToken(), is((Token) GeneralLiterals.COMMENT));
assertThat(lexer.getLiterals().trim(), is(commentStart + " " + commentEnd));
lexer.nextToken();
assertThat(lexer.getToken(), is((Token) Assist.EOF));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册