Unverified Commit ae896656 authored by 张亮's avatar 张亮 Committed by GitHub
Browse files

Merge pull request #1049 from tuohai666/dev

for #993, distinguish PostgreSQL from other databases when parsing Identifier and Chars
parents 94d8dc67 16dd45b4
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -109,7 +109,7 @@ public class Lexer {
        return isIdentifierBegin(getCurrentChar(0));
    }
    
    private boolean isIdentifierBegin(final char ch) {
    protected boolean isIdentifierBegin(final char ch) {
        return CharType.isAlphabet(ch) || '`' == ch || '_' == ch || '$' == ch;
    }
    
@@ -126,7 +126,7 @@ public class Lexer {
        return CharType.isSymbol(getCurrentChar(0));
    }
    
    private boolean isCharsBegin() {
    protected boolean isCharsBegin() {
        return '\'' == getCurrentChar(0) || '\"' == getCurrentChar(0);
    }
    
+4 −0
Original line number Diff line number Diff line
@@ -153,6 +153,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++;
+11 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@
package io.shardingsphere.core.parsing.lexer.dialect.postgresql;

import io.shardingsphere.core.parsing.lexer.Lexer;
import io.shardingsphere.core.parsing.lexer.analyzer.CharType;
import io.shardingsphere.core.parsing.lexer.analyzer.Dictionary;

/**
@@ -32,4 +33,14 @@ public final class PostgreSQLLexer extends Lexer {
    public PostgreSQLLexer(final String input) {
        super(input, dictionary);
    }
    
    @Override
    protected boolean isIdentifierBegin(final char ch) {
        return CharType.isAlphabet(ch) || '\"' == ch || '_' == ch;
    }
    
    @Override
    protected boolean isCharsBegin() {
        return '\'' == getCurrentChar(0);
    }
}
+16 −3
Original line number Diff line number Diff line
@@ -361,4 +361,17 @@
            </and-condition>
        </or-condition>
    </parser-result>
    
    <parser-result sql-case-id="select_with_double_quotes" parameters="1">
        <tables>
            <table name="t_order_item" />
        </tables>
        <tokens>
            <table-token begin-position="14" original-literals="&quot;t_order_item&quot;" />
        </tokens>
        <order-by-columns>
            <order-by-column name="item_id" order-direction="ASC" />
        </order-by-columns>
    </parser-result>
    
</parser-result-sets>
+5 −0
Original line number Diff line number Diff line
@@ -296,4 +296,9 @@
    <dql-test-case sql-case-id="select_sub_query_with_group_by">
        <assertion expected-data-file="select_sub_query_with_group_by.xml" />
    </dql-test-case>
    
    <dql-test-case sql-case-id="select_with_double_quotes">
        <assertion parameters="100001:int" expected-data-file="select_not_equal_with_single_table.xml" />
    </dql-test-case>
    
</integrate-test-cases>
Loading