提交 d8262453 编写于 作者: T tuohai666

for #887, complete Parser test

上级 41deabb4
......@@ -157,6 +157,10 @@ public final class Tokenizer {
int length = getLengthUntilTerminatedChar('"');
return new Token(Literals.IDENTIFIER, input.substring(offset, offset + length), offset + length);
}
if ('[' == charAt(offset)) {
int length = getLengthUntilTerminatedChar(']');
return new Token(Literals.IDENTIFIER, input.substring(offset, offset + length), offset + length);
}
int length = 0;
while (isIdentifierChar(charAt(offset + length))) {
length++;
......
......@@ -18,6 +18,7 @@
package io.shardingsphere.core.parsing.lexer.dialect.oracle;
import io.shardingsphere.core.parsing.lexer.Lexer;
import io.shardingsphere.core.parsing.lexer.analyzer.CharType;
import io.shardingsphere.core.parsing.lexer.analyzer.Dictionary;
/**
......@@ -37,4 +38,14 @@ public final class OracleLexer extends Lexer {
protected boolean isHintBegin() {
return '/' == getCurrentChar(0) && '*' == getCurrentChar(1) && '+' == getCurrentChar(2);
}
@Override
protected boolean isIdentifierBegin(final char ch) {
return CharType.isAlphabet(ch) || '\"' == ch || '_' == ch || '$' == ch;
}
@Override
protected boolean isCharsBegin() {
return '\'' == getCurrentChar(0);
}
}
......@@ -18,6 +18,7 @@
package io.shardingsphere.core.parsing.lexer.dialect.sqlserver;
import io.shardingsphere.core.parsing.lexer.Lexer;
import io.shardingsphere.core.parsing.lexer.analyzer.CharType;
import io.shardingsphere.core.parsing.lexer.analyzer.Dictionary;
/**
......@@ -47,4 +48,9 @@ public final class SQLServerLexer extends Lexer {
protected boolean isSupportNChars() {
return true;
}
@Override
protected boolean isIdentifierBegin(final char ch) {
return CharType.isAlphabet(ch) || '[' == ch || '_' == ch || '$' == ch;
}
}
......@@ -279,6 +279,84 @@
</order-by-columns>
</parser-result>
<parser-result sql-case-id="select_keyword_table_name_with_back_quotes" parameters="1, 2, 9, 10, 'init'">
<tables>
<table name="t_order" alias="o"/>
<table name="t_order_item" alias="i"/>
</tables>
<tokens>
<table-token begin-position="16" original-literals="t_order" />
<table-token begin-position="31" original-literals="t_order_item" />
</tokens>
<or-condition>
<and-condition>
<condition column-name="user_id" table-name="t_order" operator="IN">
<value index="0" literal="1" type="int" />
<value index="1" literal="2" type="int" />
</condition>
<condition column-name="order_id" table-name="t_order" operator="BETWEEN">
<value index="2" literal="9" type="int" />
<value index="3" literal="10" type="int" />
</condition>
</and-condition>
</or-condition>
<order-by-columns>
<order-by-column owner="i" name="item_id" order-direction="ASC" />
</order-by-columns>
</parser-result>
<parser-result sql-case-id="select_keyword_table_name_with_double_quotes" parameters="1, 2, 9, 10, 'init'">
<tables>
<table name="t_order" alias="o"/>
<table name="t_order_item" alias="i"/>
</tables>
<tokens>
<table-token begin-position="16" original-literals="t_order" />
<table-token begin-position="31" original-literals="t_order_item" />
</tokens>
<or-condition>
<and-condition>
<condition column-name="user_id" table-name="t_order" operator="IN">
<value index="0" literal="1" type="int" />
<value index="1" literal="2" type="int" />
</condition>
<condition column-name="order_id" table-name="t_order" operator="BETWEEN">
<value index="2" literal="9" type="int" />
<value index="3" literal="10" type="int" />
</condition>
</and-condition>
</or-condition>
<order-by-columns>
<order-by-column owner="i" name="item_id" order-direction="ASC" />
</order-by-columns>
</parser-result>
<parser-result sql-case-id="select_keyword_table_name_with_square_brackets" parameters="1, 2, 9, 10, 'init'">
<tables>
<table name="t_order" alias="o"/>
<table name="t_order_item" alias="i"/>
</tables>
<tokens>
<table-token begin-position="16" original-literals="t_order" />
<table-token begin-position="31" original-literals="t_order_item" />
</tokens>
<or-condition>
<and-condition>
<condition column-name="user_id" table-name="t_order" operator="IN">
<value index="0" literal="1" type="int" />
<value index="1" literal="2" type="int" />
</condition>
<condition column-name="order_id" table-name="t_order" operator="BETWEEN">
<value index="2" literal="9" type="int" />
<value index="3" literal="10" type="int" />
</condition>
</and-condition>
</or-condition>
<order-by-columns>
<order-by-column owner="i" name="item_id" order-direction="ASC" />
</order-by-columns>
</parser-result>
<parser-result sql-case-id="select_alias_as_keyword" parameters="1">
<tables>
<table name="t_order_item" alias="length" />
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册