mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
improved sql parser pg json operation support. #1592
This commit is contained in:
@@ -37,8 +37,11 @@ public enum SQLBinaryOperator {
|
||||
SubGt("->", 20),
|
||||
SubGtGt("->>", 20),
|
||||
PoundGt("#>", 20),
|
||||
PoundGtGt("#>>", 20),
|
||||
|
||||
PoundGtGt("#>>", 20),
|
||||
QuesQues("??", 20),
|
||||
QuesBar("?|", 20),
|
||||
QuesAmp("?&", 20),
|
||||
|
||||
LeftShift("<<", 80),
|
||||
RightShift(">>", 80),
|
||||
|
||||
|
||||
@@ -450,7 +450,18 @@ public class Lexer {
|
||||
return;
|
||||
case '?':
|
||||
scanChar();
|
||||
token = Token.QUES;
|
||||
if (ch == '?') {
|
||||
scanChar();
|
||||
token = Token.QUESQUES;
|
||||
} else if (ch == '|') {
|
||||
scanChar();
|
||||
token = Token.QUESBAR;
|
||||
} else if (ch == '&') {
|
||||
scanChar();
|
||||
token = Token.QUESAMP;
|
||||
} else {
|
||||
token = Token.QUES;
|
||||
}
|
||||
return;
|
||||
case ';':
|
||||
scanChar();
|
||||
|
||||
@@ -139,6 +139,21 @@ public class SQLExprParser extends SQLParser {
|
||||
SQLExpr rightExp = primary();
|
||||
expr = new SQLBinaryOpExpr(expr, SQLBinaryOperator.PoundGtGt, rightExp, getDbType());
|
||||
expr = bitXorRest(expr);
|
||||
} else if (token == Token.QUESQUES) {
|
||||
lexer.nextToken();
|
||||
SQLExpr rightExp = primary();
|
||||
expr = new SQLBinaryOpExpr(expr, SQLBinaryOperator.QuesQues, rightExp, getDbType());
|
||||
expr = bitXorRest(expr);
|
||||
} else if (token == Token.QUESBAR) {
|
||||
lexer.nextToken();
|
||||
SQLExpr rightExp = primary();
|
||||
expr = new SQLBinaryOpExpr(expr, SQLBinaryOperator.QuesBar, rightExp, getDbType());
|
||||
expr = bitXorRest(expr);
|
||||
} else if (token == Token.QUESAMP) {
|
||||
lexer.nextToken();
|
||||
SQLExpr rightExp = primary();
|
||||
expr = new SQLBinaryOpExpr(expr, SQLBinaryOperator.QuesAmp, rightExp, getDbType());
|
||||
expr = bitXorRest(expr);
|
||||
}
|
||||
|
||||
return expr;
|
||||
|
||||
@@ -305,7 +305,10 @@ public enum Token {
|
||||
TILDE("~"),
|
||||
TILDE_STAR("~*"),
|
||||
TILDE_EQ("~="),
|
||||
QUES("?"),
|
||||
QUES("?"),
|
||||
QUESQUES("??"),
|
||||
QUESBAR("?|"),
|
||||
QUESAMP("?&"),
|
||||
COLON(":"),
|
||||
COLONCOLON("::"),
|
||||
COLONEQ(":="),
|
||||
|
||||
Reference in New Issue
Block a user