improved sql parser.

This commit is contained in:
wenshao
2017-06-22 23:52:06 +08:00
parent a679837026
commit 404166a565
6 changed files with 51 additions and 111 deletions
@@ -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);
@@ -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;