improve Oracle SQL Parser

This commit is contained in:
wenshao
2012-12-28 12:56:38 +08:00
parent 539d297c98
commit ad114ac9cf
16 changed files with 380 additions and 21 deletions
@@ -113,6 +113,7 @@ public class Keywords {
map.put("XOR", Token.XOR);
map.put("OVER", Token.OVER);
map.put("TO", Token.TO);
DEFAULT_KEYWORDS = new Keywords(map);
}
@@ -234,7 +234,7 @@ public class SQLStatementParser extends SQLParser {
SQLRollbackStatement stmt = new SQLRollbackStatement();
if (identifierEquals("TO")) {
if (lexer.token() == Token.TO) {
lexer.nextToken();
if (identifierEquals("SAVEPOINT")) {
@@ -439,7 +439,7 @@ public class SQLStatementParser extends SQLParser {
exprParser.exprList(stmt.getParameters());
accept(Token.RPAREN);
}
if (brace) {
accept(Token.RBRACE);
}
@@ -496,12 +496,26 @@ public class SQLStatementParser extends SQLParser {
// lexer.reset(mark_bp, mark_ch, Token.CREATE);
throw new ParserException("TODO " + lexer.token() + " " + lexer.stringVal());
} else if (token == Token.DATABASE) {
lexer.nextToken();
if (identifierEquals("LINK")) {
lexer.reset(markBp, markChar, Token.CREATE);
return parseCreateDbLink();
}
lexer.reset(markBp, markChar, Token.CREATE);
return parseCreateDatabase();
} else if (identifierEquals("PUBLIC") || identifierEquals("SHARE")) {
lexer.reset(markBp, markChar, Token.CREATE);
return parseCreateDbLink();
}
throw new ParserException("TODO " + lexer.token());
}
public SQLStatement parseCreateDbLink() {
throw new ParserException("TODO " + lexer.token());
}
public SQLStatement parseCreateDatabase() {
if (lexer.token() == Token.CREATE) {
lexer.nextToken();
@@ -70,6 +70,7 @@ public enum Token {
COLUMN("COLUMN"),
USE("USE"),
DATABASE("DATABASE"),
TO("TO"),
AND("AND"),
OR("OR"),
@@ -154,7 +155,6 @@ public enum Token {
ADVISE("ADVISE"),
SESSION("SESSION"),
PROCEDURE("PROCEDURE"),
LOCAL("LOCAL"),
SYSDATE("SYSDATE"),
DECLARE("DECLARE"),
EXCEPTION("EXCEPTION"),