bug fixed for oracle sql parser.

This commit is contained in:
wenshao
2017-07-14 15:48:49 +08:00
parent e4eef93022
commit 9e105a68f2
3 changed files with 93 additions and 9 deletions
@@ -987,19 +987,28 @@ public class OracleStatementParser extends SQLStatementParser {
public SQLStatement parseSet() {
accept(Token.SET);
acceptIdentifier("TRANSACTION");
OracleSetTransactionStatement stmt = new OracleSetTransactionStatement();
if (identifierEquals("READ")) {
if (identifierEquals("TRANSACTION")) {
lexer.nextToken();
acceptIdentifier("ONLY");
stmt.setReadOnly(true);
OracleSetTransactionStatement stmt = new OracleSetTransactionStatement();
if (identifierEquals("READ")) {
lexer.nextToken();
acceptIdentifier("ONLY");
stmt.setReadOnly(true);
}
acceptIdentifier("NAME");
stmt.setName(this.exprParser.expr());
return stmt;
}
acceptIdentifier("NAME");
SQLSetStatement stmt = new SQLSetStatement(getDbType());
parseAssignItems(stmt.getItems(), stmt);
stmt.setName(this.exprParser.expr());
stmt.putAttribute("parser.set", Boolean.TRUE);
return stmt;
}
@@ -2170,7 +2170,8 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet
@Override
public boolean visit(SQLSetStatement x) {
if (!JdbcConstants.ORACLE.equals(dbType)) {
boolean printSet = x.getAttribute("parser.set") == Boolean.TRUE || !JdbcConstants.ORACLE.equals(dbType);
if (printSet) {
print0(ucase ? "SET " : "set ");
}
printAndAccept(x.getItems(), ", ");