mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
improve sql parser
This commit is contained in:
@@ -81,7 +81,6 @@ public class Keywords {
|
||||
map.put("LIKE", Token.LIKE);
|
||||
map.put("LOCK", Token.LOCK);
|
||||
map.put("MINUS", Token.MINUS);
|
||||
map.put("NEW", Token.NEW);
|
||||
map.put("NOT", Token.NOT);
|
||||
|
||||
map.put("NULL", Token.NULL);
|
||||
|
||||
@@ -45,7 +45,7 @@ public class SQLParser {
|
||||
}
|
||||
}
|
||||
|
||||
protected String as() {
|
||||
protected String as() {
|
||||
String alias = null;
|
||||
|
||||
if (lexer.token() == Token.AS) {
|
||||
@@ -54,36 +54,38 @@ public class SQLParser {
|
||||
if (lexer.token() == Token.LITERAL_ALIAS) {
|
||||
alias = '"' + lexer.stringVal() + '"';
|
||||
lexer.nextToken();
|
||||
return alias;
|
||||
}
|
||||
|
||||
if (lexer.token() == Token.IDENTIFIER) {
|
||||
} else if (lexer.token() == Token.IDENTIFIER) {
|
||||
alias = lexer.stringVal();
|
||||
lexer.nextToken();
|
||||
return alias;
|
||||
}
|
||||
|
||||
if (lexer.token() == Token.LITERAL_CHARS) {
|
||||
} else if (lexer.token() == Token.LITERAL_CHARS) {
|
||||
alias = "'" + lexer.stringVal() + "'";
|
||||
lexer.nextToken();
|
||||
return alias;
|
||||
} else {
|
||||
switch (lexer.token()) {
|
||||
case KEY:
|
||||
case INDEX:
|
||||
case CASE:
|
||||
alias = lexer.token().name();
|
||||
lexer.nextToken();
|
||||
return alias;
|
||||
case QUES:
|
||||
alias = "?";
|
||||
lexer.nextToken();
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (lexer.token() == Token.KEY || lexer.token() == Token.CASE) {
|
||||
alias = lexer.token.name();
|
||||
lexer.nextToken();
|
||||
return alias;
|
||||
}
|
||||
|
||||
switch (lexer.token()) {
|
||||
case KEY:
|
||||
alias = lexer.token().name();
|
||||
if (alias != null) {
|
||||
while (lexer.token() == Token.DOT) {
|
||||
lexer.nextToken();
|
||||
return alias;
|
||||
default:
|
||||
break;
|
||||
alias += ('.' + lexer.token().name());
|
||||
lexer.nextToken();
|
||||
}
|
||||
|
||||
return alias;
|
||||
}
|
||||
|
||||
|
||||
if (lexer.token() == Token.LPAREN) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -386,6 +386,11 @@ public class SQLSelectParser extends SQLParser {
|
||||
if (lexer.token() == Token.ON) {
|
||||
lexer.nextToken();
|
||||
join.setCondition(expr());
|
||||
} else if (identifierEquals("USING")) {
|
||||
lexer.nextToken();
|
||||
accept(Token.LPAREN);
|
||||
this.exprParser.exprList(join.getUsing());
|
||||
accept(Token.RPAREN);
|
||||
}
|
||||
|
||||
return parseTableSourceRest(join);
|
||||
|
||||
Reference in New Issue
Block a user