mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
bug fixed for oracle sql parser.
This commit is contained in:
@@ -16,6 +16,7 @@
|
||||
package com.alibaba.druid.sql.dialect.oracle.parser;
|
||||
|
||||
import java.math.BigInteger;
|
||||
import java.sql.Savepoint;
|
||||
|
||||
import com.alibaba.druid.sql.ast.*;
|
||||
import com.alibaba.druid.sql.ast.SQLKeep.DenseRank;
|
||||
@@ -599,19 +600,19 @@ public class OracleExprParser extends SQLExprParser {
|
||||
}
|
||||
|
||||
if (identifierEquals("DAY") || identifierEquals("YEAR")) {
|
||||
lexer.mark();
|
||||
Lexer.SavePoint savePoint = lexer.mark();
|
||||
|
||||
String name = lexer.stringVal();
|
||||
lexer.nextToken();
|
||||
|
||||
if (lexer.token() == Token.COMMA) {
|
||||
lexer.reset();
|
||||
lexer.reset(savePoint);
|
||||
return expr;
|
||||
}
|
||||
|
||||
OracleIntervalExpr interval = new OracleIntervalExpr();
|
||||
interval.setValue(expr);
|
||||
OracleIntervalType type = OracleIntervalType.valueOf(name);
|
||||
OracleIntervalType type = OracleIntervalType.valueOf(name.toUpperCase());
|
||||
interval.setType(type);
|
||||
|
||||
if (lexer.token() == Token.LPAREN) {
|
||||
@@ -623,8 +624,14 @@ public class OracleExprParser extends SQLExprParser {
|
||||
lexer.nextToken();
|
||||
accept(Token.RPAREN);
|
||||
}
|
||||
|
||||
accept(Token.TO);
|
||||
|
||||
if (lexer.token() == Token.TO) {
|
||||
lexer.nextToken();
|
||||
} else {
|
||||
lexer.reset(savePoint);
|
||||
return expr;
|
||||
}
|
||||
|
||||
if (identifierEquals("SECOND")) {
|
||||
lexer.nextToken();
|
||||
interval.setToType(OracleIntervalType.SECOND);
|
||||
|
||||
@@ -115,6 +115,10 @@ public class OracleLexer extends Lexer {
|
||||
map.put("TABLESPACE", Token.TABLESPACE);
|
||||
map.put("PARTITION", Token.PARTITION);
|
||||
|
||||
map.put(",", Token.COMMA);
|
||||
map.put("(", Token.LPAREN);
|
||||
map.put(")", Token.RPAREN);
|
||||
|
||||
DEFAULT_ORACLE_KEYWORDS = new Keywords(map);
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -767,7 +767,7 @@ public class OracleStatementParser extends SQLStatementParser {
|
||||
}
|
||||
|
||||
accept(Token.RETURN);
|
||||
SQLDataType returnDataType = this.exprParser.parseDataType();
|
||||
SQLDataType returnDataType = this.exprParser.parseDataType(false);
|
||||
stmt.setReturnDataType(returnDataType);
|
||||
|
||||
if (identifierEquals("AUTHID")) {
|
||||
@@ -2192,7 +2192,7 @@ public class OracleStatementParser extends SQLStatementParser {
|
||||
SQLName name = this.exprParser.name();
|
||||
varItem.setName(name);
|
||||
|
||||
varItem.setDataType(this.exprParser.parseDataType());
|
||||
varItem.setDataType(this.exprParser.parseDataType(false));
|
||||
varItem.setParent(varDecl);
|
||||
|
||||
varDecl.getItems().add(varItem);
|
||||
|
||||
Reference in New Issue
Block a user