mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
improved sql parser.
This commit is contained in:
@@ -145,8 +145,8 @@ public class OracleExprParser extends SQLExprParser {
|
||||
//
|
||||
;
|
||||
}
|
||||
|
||||
public SQLDataType parseDataType() {
|
||||
|
||||
public SQLDataType parseDataType(boolean restrict) {
|
||||
|
||||
if (lexer.token() == Token.CONSTRAINT || lexer.token() == Token.COMMA) {
|
||||
return null;
|
||||
@@ -240,12 +240,12 @@ public class OracleExprParser extends SQLExprParser {
|
||||
|
||||
if (isCharType(typeName)) {
|
||||
SQLCharacterDataType charType = new SQLCharacterDataType(typeName);
|
||||
|
||||
|
||||
if (lexer.token() == Token.LPAREN) {
|
||||
lexer.nextToken();
|
||||
|
||||
|
||||
charType.addArgument(this.expr());
|
||||
|
||||
|
||||
if (identifierEquals("CHAR")) {
|
||||
lexer.nextToken();
|
||||
charType.setCharType(SQLCharacterDataType.CHAR_TYPE_CHAR);
|
||||
@@ -253,8 +253,10 @@ public class OracleExprParser extends SQLExprParser {
|
||||
lexer.nextToken();
|
||||
charType.setCharType(SQLCharacterDataType.CHAR_TYPE_BYTE);
|
||||
}
|
||||
|
||||
|
||||
accept(Token.RPAREN);
|
||||
} else if (restrict) {
|
||||
accept(Token.LPAREN);
|
||||
}
|
||||
|
||||
return parseCharTypeRest(charType);
|
||||
@@ -272,7 +274,6 @@ public class OracleExprParser extends SQLExprParser {
|
||||
throw new ParserException("syntax error : " + lexer.token() + " " + lexer.stringVal());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
SQLDataType dataType = new SQLDataTypeImpl(typeName);
|
||||
|
||||
+1
-1
@@ -1626,7 +1626,7 @@ public class OracleStatementParser extends SQLStatementParser {
|
||||
parameter.setConstant(true);
|
||||
}
|
||||
|
||||
dataType = this.exprParser.parseDataType();
|
||||
dataType = this.exprParser.parseDataType(false);
|
||||
|
||||
if (lexer.token() == Token.COLONEQ) {
|
||||
lexer.nextToken();
|
||||
|
||||
@@ -1781,6 +1781,10 @@ public class SQLExprParser extends SQLParser {
|
||||
}
|
||||
|
||||
public SQLDataType parseDataType() {
|
||||
return parseDataType(true);
|
||||
}
|
||||
|
||||
public SQLDataType parseDataType(boolean restrict) {
|
||||
|
||||
if (lexer.token() == Token.DEFAULT || lexer.token() == Token.NOT || lexer.token() == Token.NULL) {
|
||||
return null;
|
||||
|
||||
Reference in New Issue
Block a user