bug fixed for sql parser

This commit is contained in:
温少
2012-03-08 23:52:22 +08:00
parent 19d1eccb91
commit 96e8a83a37
43 changed files with 1674 additions and 317 deletions
@@ -41,6 +41,7 @@ public class OracleParameter extends OracleSQLObjectImpl {
if (visitor.visit(this)) {
acceptChild(visitor, name);
acceptChild(visitor, dataType);
acceptChild(visitor, defaultValue);
}
visitor.endVisit(this);
}
@@ -6,12 +6,40 @@ public class OracleCommitStatement extends OracleStatementImpl {
private static final long serialVersionUID = 1L;
private boolean write;
private Boolean wait;
private Boolean immediate;
@Override
public void accept0(OracleASTVisitor visitor) {
if (visitor.visit(this)) {
}
visitor.endVisit(this);
}
public boolean isWrite() {
return write;
}
public void setWrite(boolean write) {
this.write = write;
}
public Boolean getWait() {
return wait;
}
public void setWait(Boolean wait) {
this.wait = wait;
}
public Boolean getImmediate() {
return immediate;
}
public void setImmediate(Boolean immediate) {
this.immediate = immediate;
}
}
@@ -0,0 +1,61 @@
package com.alibaba.druid.sql.dialect.oracle.ast.stmt;
import java.util.ArrayList;
import java.util.List;
import com.alibaba.druid.sql.ast.SQLName;
import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleParameter;
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor;
public class OracleCreateProcedureStatement extends OracleStatementImpl {
private static final long serialVersionUID = 1L;
private boolean orReplace;
private SQLName name;
private OracleBlockStatement block;
private List<OracleParameter> parameters = new ArrayList<OracleParameter>();
@Override
public void accept0(OracleASTVisitor visitor) {
if (visitor.visit(this)) {
acceptChild(visitor, name);
acceptChild(visitor, parameters);
acceptChild(visitor, block);
}
visitor.endVisit(this);
}
public List<OracleParameter> getParameters() {
return parameters;
}
public void setParameters(List<OracleParameter> parameters) {
this.parameters = parameters;
}
public SQLName getName() {
return name;
}
public void setName(SQLName name) {
this.name = name;
}
public OracleBlockStatement getBlock() {
return block;
}
public void setBlock(OracleBlockStatement block) {
this.block = block;
}
public boolean isOrReplace() {
return orReplace;
}
public void setOrReplace(boolean orReplace) {
this.orReplace = orReplace;
}
}
@@ -23,9 +23,9 @@ public class OracleExceptionStatement extends OracleSQLObjectImpl implements Ora
public static class Item extends OracleSQLObjectImpl {
private static final long serialVersionUID = 1L;
private SQLExpr when;
private SQLStatement statement;
private static final long serialVersionUID = 1L;
private SQLExpr when;
private List<SQLStatement> statements = new ArrayList<SQLStatement>();
public SQLExpr getWhen() {
return when;
@@ -35,19 +35,19 @@ public class OracleExceptionStatement extends OracleSQLObjectImpl implements Ora
this.when = when;
}
public SQLStatement getStatement() {
return statement;
public List<SQLStatement> getStatements() {
return statements;
}
public void setStatement(SQLStatement statement) {
this.statement = statement;
public void setStatements(List<SQLStatement> statements) {
this.statements = statements;
}
@Override
public void accept0(OracleASTVisitor visitor) {
if (visitor.visit(this)) {
acceptChild(visitor, when);
acceptChild(visitor, statement);
acceptChild(visitor, statements);
}
visitor.endVisit(this);
}
@@ -0,0 +1,43 @@
package com.alibaba.druid.sql.dialect.oracle.ast.stmt;
import java.util.ArrayList;
import java.util.List;
import com.alibaba.druid.sql.ast.SQLExpr;
import com.alibaba.druid.sql.ast.SQLName;
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor;
public class OracleFetchStatement extends OracleStatementImpl {
private static final long serialVersionUID = 1L;
private SQLName cursorName;
private List<SQLExpr> into = new ArrayList<SQLExpr>();
@Override
public void accept0(OracleASTVisitor visitor) {
if (visitor.visit(this)) {
acceptChild(visitor, cursorName);
acceptChild(visitor, into);
}
visitor.endVisit(this);
}
public SQLName getCursorName() {
return cursorName;
}
public void setCursorName(SQLName cursorName) {
this.cursorName = cursorName;
}
public List<SQLExpr> getInto() {
return into;
}
public void setInto(List<SQLExpr> into) {
this.into = into;
}
}
@@ -15,10 +15,9 @@
*/
package com.alibaba.druid.sql.dialect.oracle.ast.stmt;
import com.alibaba.druid.sql.ast.SQLStatementImpl;
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor;
public class OraclePLSQLCommitStatement extends SQLStatementImpl {
public class OraclePLSQLCommitStatement extends OracleStatementImpl {
private static final long serialVersionUID = 1L;
@@ -26,7 +25,7 @@ public class OraclePLSQLCommitStatement extends SQLStatementImpl {
}
protected void accept0(OracleASTVisitor visitor) {
public void accept0(OracleASTVisitor visitor) {
visitor.visit(this);
visitor.endVisit(this);
}
@@ -0,0 +1,28 @@
package com.alibaba.druid.sql.dialect.oracle.ast.stmt;
import com.alibaba.druid.sql.ast.SQLName;
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor;
public class OracleRollbackStatement extends OracleStatementImpl {
private static final long serialVersionUID = 1L;
private SQLName to;
@Override
public void accept0(OracleASTVisitor visitor) {
if (visitor.visit(this)) {
acceptChild(visitor, to);
}
visitor.endVisit(this);
}
public SQLName getTo() {
return to;
}
public void setTo(SQLName to) {
this.to = to;
}
}
@@ -0,0 +1,28 @@
package com.alibaba.druid.sql.dialect.oracle.ast.stmt;
import com.alibaba.druid.sql.ast.SQLName;
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor;
public class OracleSavePointStatement extends OracleStatementImpl {
private static final long serialVersionUID = 1L;
private SQLName to;
@Override
public void accept0(OracleASTVisitor visitor) {
if (visitor.visit(this)) {
acceptChild(visitor, to);
}
visitor.endVisit(this);
}
public SQLName getTo() {
return to;
}
public void setTo(SQLName to) {
this.to = to;
}
}
@@ -18,6 +18,8 @@ package com.alibaba.druid.sql.dialect.oracle.parser;
import java.math.BigInteger;
import java.util.List;
import com.alibaba.druid.sql.ast.SQLDataType;
import com.alibaba.druid.sql.ast.SQLDataTypeImpl;
import com.alibaba.druid.sql.ast.SQLExpr;
import com.alibaba.druid.sql.ast.SQLName;
import com.alibaba.druid.sql.ast.SQLOrderingSpecification;
@@ -65,24 +67,21 @@ import com.alibaba.druid.sql.parser.SQLExprParser;
import com.alibaba.druid.sql.parser.Token;
public class OracleExprParser extends SQLExprParser {
public boolean allowStringAdditive = false;
/**
* @formatter:off
*/
private static final String[] _aggregateFunctions = { "AVG", "CORR", "COVAR_POP", "COVAR_SAMP", "COUNT", "CUME_DIST", "DENSE_RANK", "FIRST", "FIRST_VALUE", "LAG", "LAST", "LAST_VALUE", "LEAD", "MAX", "MIN", "NTILE", "PERCENT_RANK", "PERCENTILE_CONT", "PERCENTILE_DISC", "RANK", "RATIO_TO_REPORT", "REGR_SLOPE", "REGR_INTERCEPT", "REGR_COUNT", "REGR_R2", "REGR_AVGX",
"REGR_AVGY", "REGR_SXX", "REGR_SYY", "REGR_SXY", "ROW_NUMBER", "STDDEV", "STDDEV_POP", "STDDEV_SAMP", "SUM", "VAR_POP", "VAR_SAMP", "VARIANCE" };
private static final String[] _aggregateFunctions = { //
"AVG", "CORR", "COVAR_POP", "COVAR_SAMP", "COUNT", //
"CUME_DIST", "DENSE_RANK", "FIRST", "FIRST_VALUE", //
"LAG", "LAST", "LAST_VALUE", "LEAD", "MAX", "MIN", //
"NTILE", "PERCENT_RANK", "PERCENTILE_CONT", "PERCENTILE_DISC", "RANK", //
"RATIO_TO_REPORT", "REGR_SLOPE", "REGR_INTERCEPT", "REGR_COUNT", "REGR_R2", //
"REGR_AVGX", "REGR_AVGY", "REGR_SXX", "REGR_SYY", "REGR_SXY", //
"ROW_NUMBER", "STDDEV", "STDDEV_POP", "STDDEV_SAMP", "SUM", //
"VAR_POP", "VAR_SAMP", "VARIANCE" //
};
public OracleExprParser(Lexer lexer){
super(lexer);
@@ -92,6 +91,33 @@ public class OracleExprParser extends SQLExprParser {
super(new OracleLexer(text));
this.lexer.nextToken();
}
public SQLDataType parseDataType() throws ParserException {
if (lexer.token() == Token.DEFAULT || lexer.token() == Token.NOT || lexer.token() == Token.NULL) {
return null;
}
SQLName typeExpr = name();
String typeName = typeExpr.toString();
if (lexer.token() == Token.PERCENT) {
lexer.nextToken();
if (identifierEquals("TYPE")) {
lexer.nextToken();
typeName += "%TYPE";
} else if (identifierEquals("ROWTYPE")) {
lexer.nextToken();
typeName += "%ROWTYPE";
} else {
throw new ParserException("syntax error : " + lexer.token() + " " + lexer.stringVal());
}
}
SQLDataType dataType = new SQLDataTypeImpl(typeName);
parseDataTypeRest(dataType);
return dataType;
}
public boolean isAggreateFunction(String word) {
for (int i = 0; i < _aggregateFunctions.length; ++i) {
@@ -139,6 +139,8 @@ public class OracleLexer extends Lexer {
map.put("ELSE", Token.ELSE);
map.put("GOTO", Token.GOTO);
map.put("COMMIT", Token.COMMIT);
map.put("ROLLBACK", Token.ROLLBACK);
map.put("SAVEPOINT", Token.SAVEPOINT);
DEFAULT_ORACLE_KEYWORDS = new Keywords(map);
}
@@ -217,7 +219,6 @@ public class OracleLexer extends Lexer {
np = bp;
sp = 0;
scanChar();
sp++;
// /*+ */
if (ch == '*') {
@@ -277,7 +278,7 @@ public class OracleLexer extends Lexer {
break;
}
if (ch == '\r') {
if (ch == '\n') {
scanChar();
sp++;
break;
@@ -18,14 +18,18 @@ package com.alibaba.druid.sql.dialect.oracle.parser;
import java.util.ArrayList;
import java.util.List;
import com.alibaba.druid.sql.ast.SQLDataTypeImpl;
import com.alibaba.druid.sql.ast.SQLExpr;
import com.alibaba.druid.sql.ast.SQLName;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr;
import com.alibaba.druid.sql.ast.expr.SQLBinaryOperator;
import com.alibaba.druid.sql.ast.expr.SQLCharExpr;
import com.alibaba.druid.sql.ast.expr.SQLNullExpr;
import com.alibaba.druid.sql.ast.expr.SQLQueryExpr;
import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition;
import com.alibaba.druid.sql.ast.statement.SQLConstaint;
import com.alibaba.druid.sql.ast.statement.SQLDropTableStatement;
import com.alibaba.druid.sql.ast.statement.SQLInsertInto;
import com.alibaba.druid.sql.ast.statement.SQLSelect;
import com.alibaba.druid.sql.ast.statement.SQLSelectOrderByItem;
@@ -61,12 +65,14 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterViewStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleBlockStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCommitStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateIndexStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateProcedureStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateSequenceStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDeleteStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExceptionStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExitStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExplainStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExprStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleFetchStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleFileSpecification;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleForStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleGotoStatement;
@@ -80,6 +86,8 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleLoopStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleMergeStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleMultiInsertStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OraclePLSQLCommitStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleRollbackStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSavePointStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSetTransactionStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleTruncateStatement;
@@ -240,7 +248,7 @@ public class OracleStatementParser extends SQLStatementParser {
statementList.add(this.parseException());
continue;
}
if (identifierEquals("EXIT")) {
lexer.nextToken();
OracleExitStatement stmt = new OracleExitStatement();
@@ -252,6 +260,24 @@ public class OracleStatementParser extends SQLStatementParser {
continue;
}
if (identifierEquals("FETCH")) {
lexer.nextToken();
OracleFetchStatement stmt = new OracleFetchStatement();
stmt.setCursorName(this.exprParser.name());
accept(Token.INTO);
for (;;) {
stmt.getInto().add(this.exprParser.name());
if (lexer.token() == Token.COMMA) {
lexer.nextToken();
continue;
}
break;
}
statementList.add(stmt);
continue;
}
if (lexer.token() == Token.IDENTIFIER) {
if (identifierEquals("EXPLAIN")) {
statementList.add(this.parseExplain());
@@ -319,6 +345,62 @@ public class OracleStatementParser extends SQLStatementParser {
lexer.nextToken();
}
OracleCommitStatement stmt = new OracleCommitStatement();
if (identifierEquals("WRITE")) {
stmt.setWrite(true);
lexer.nextToken();
for (;;) {
if (lexer.token() == Token.WAIT) {
lexer.nextToken();
stmt.setWait(Boolean.TRUE);
continue;
} else if (lexer.token() == Token.NOWAIT) {
lexer.nextToken();
stmt.setWait(Boolean.FALSE);
continue;
} else if (identifierEquals("IMMEDIATE")) {
lexer.nextToken();
stmt.setImmediate(Boolean.TRUE);
continue;
} else if (identifierEquals("BATCH")) {
lexer.nextToken();
stmt.setImmediate(Boolean.FALSE);
continue;
}
break;
}
}
statementList.add(stmt);
continue;
}
if (lexer.token() == Token.ROLLBACK) {
lexer.nextToken();
OracleRollbackStatement stmt = new OracleRollbackStatement();
if (lexer.token() == Token.TO) {
lexer.nextToken();
stmt.setTo(this.exprParser.name());
}
statementList.add(stmt);
continue;
}
if (lexer.token() == Token.SAVEPOINT) {
lexer.nextToken();
OracleSavePointStatement stmt = new OracleSavePointStatement();
if (lexer.token() == Token.TO) {
lexer.nextToken();
stmt.setTo(this.exprParser.name());
}
statementList.add(stmt);
continue;
}
@@ -331,7 +413,26 @@ public class OracleStatementParser extends SQLStatementParser {
statementList.add(stmt);
continue;
}
if (lexer.token() == Token.DROP) {
lexer.nextToken();
if (lexer.token() == Token.TABLE) {
SQLDropTableStatement stmt = parseDropTable(false);
statementList.add(stmt);
continue;
}
throw new ParserException("TODO : " + lexer.token() + " " + lexer.stringVal());
}
if (lexer.token() == Token.NULL) {
lexer.nextToken();
OracleExprStatement stmt = new OracleExprStatement(new SQLNullExpr());
statementList.add(stmt);
continue;
}
throw new ParserException("TODO : " + lexer.token() + " " + lexer.stringVal());
}
}
@@ -390,12 +491,12 @@ public class OracleStatementParser extends SQLStatementParser {
accept(Token.LOOP);
return stmt;
}
public OracleLoopStatement parseLoop() {
accept(Token.LOOP);
OracleLoopStatement stmt = new OracleLoopStatement();
this.parseStatementList(stmt.getStatements());
accept(Token.END);
accept(Token.LOOP);
@@ -457,17 +558,17 @@ public class OracleStatementParser extends SQLStatementParser {
public SQLStatement parseSet() {
accept(Token.SET);
acceptIdentifier("TRANSACTION");
OracleSetTransactionStatement stmt = new OracleSetTransactionStatement();
if (identifierEquals("READ")) {
lexer.nextToken();
acceptIdentifier("ONLY");
stmt.setReadOnly(true);
}
acceptIdentifier("NAME");
stmt.setName(this.exprParser.expr());
return stmt;
}
@@ -479,10 +580,10 @@ public class OracleStatementParser extends SQLStatementParser {
SQLName name = this.exprParser.name();
stmt.getTableNames().add(name);
if (identifierEquals("PURGE")) {
lexer.nextToken();
if (identifierEquals("SNAPSHOT")) {
lexer.nextToken();
accept(Token.LOG);
@@ -952,30 +1053,15 @@ public class OracleStatementParser extends SQLStatementParser {
return stmt;
}
public OracleStatement parseBlock() {
public OracleBlockStatement parseBlock() {
OracleBlockStatement block = new OracleBlockStatement();
if (lexer.token() == Token.DECLARE) {
lexer.nextToken();
for (;;) {
OracleParameter parameter = new OracleParameter();
parameter.setName(this.exprParser.name());
parameter.setDataType(this.exprParser.parseDataType());
block.getParameters().add(parameter);
if (lexer.token() == Token.COLONEQ) {
lexer.nextToken();
parameter.setDefaultValue(this.exprParser.expr());
}
parameter.setParent(block);
accept(Token.SEMI);
if (lexer.token() != Token.BEGIN) {
continue;
}
break;
parserParameters(block.getParameters());
for (OracleParameter param : block.getParameters()) {
param.setParent(block);
}
}
@@ -988,6 +1074,46 @@ public class OracleStatementParser extends SQLStatementParser {
return block;
}
private void parserParameters(List<OracleParameter> parameters) {
for (;;) {
OracleParameter parameter = new OracleParameter();
if (lexer.token() == Token.CURSOR) {
lexer.nextToken();
parameter.setName(this.exprParser.name());
accept(Token.IS);
SQLSelect select = this.createSQLSelectParser().select();
SQLDataTypeImpl dataType = new SQLDataTypeImpl();
dataType.setName("CURSOR");
parameter.setDataType(dataType);
parameter.setDefaultValue(new SQLQueryExpr(select));
} else {
parameter.setName(this.exprParser.name());
parameter.setDataType(this.exprParser.parseDataType());
if (lexer.token() == Token.COLONEQ) {
lexer.nextToken();
parameter.setDefaultValue(this.exprParser.expr());
}
}
parameters.add(parameter);
if (lexer.token() == Token.COMMA || lexer.token() == Token.SEMI) {
lexer.nextToken();
}
if (lexer.token() != Token.BEGIN && lexer.token() != Token.RPAREN) {
continue;
}
break;
}
}
public OracleSelectParser createSQLSelectParser() {
return new OracleSelectParser(this.lexer);
}
@@ -1187,9 +1313,7 @@ public class OracleStatementParser extends SQLStatementParser {
OracleExceptionStatement.Item item = new OracleExceptionStatement.Item();
item.setWhen(this.exprParser.expr());
accept(Token.THEN);
List<SQLStatement> statements = new ArrayList<SQLStatement>();
parseStatementList(statements, 1);
item.setStatement(statements.get(0));
parseStatementList(item.getStatements());
stmt.getItems().add(item);
@@ -1404,12 +1528,12 @@ public class OracleStatementParser extends SQLStatementParser {
if (acceptCreate) {
accept(Token.CREATE);
}
acceptIdentifier("SEQUENCE");
OracleCreateSequenceStatement stmt = new OracleCreateSequenceStatement();
stmt.setName(this.exprParser.name());
for (;;) {
if (lexer.token() == Token.START) {
lexer.nextToken();
@@ -1437,10 +1561,38 @@ public class OracleStatementParser extends SQLStatementParser {
lexer.nextToken();
stmt.setCycle(Boolean.FALSE);
continue;
}
}
break;
}
return stmt;
}
public OracleCreateProcedureStatement parseCreateProcedure() {
OracleCreateProcedureStatement stmt = new OracleCreateProcedureStatement();
accept(Token.CREATE);
if (lexer.token() == Token.OR) {
lexer.nextToken();
acceptIdentifier("REPLACE");
stmt.setOrReplace(true);
}
accept(Token.PROCEDURE);
stmt.setName(this.exprParser.name());
if (lexer.token() == Token.LPAREN) {
lexer.nextToken();
parserParameters(stmt.getParameters());
accept(Token.RPAREN);
}
accept(Token.AS);
OracleBlockStatement block = this.parseBlock();
stmt.setBlock(block);
return stmt;
}
}
@@ -67,6 +67,7 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleBlockStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCommitStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleConstraintState;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateIndexStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateProcedureStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateSequenceStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateTableStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDeleteStatement;
@@ -74,6 +75,7 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExceptionStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExitStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExplainStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExprStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleFetchStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleFileSpecification;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleForStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleGotoStatement;
@@ -95,6 +97,8 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleMultiInsertStatement.
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleOrderByItem;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OraclePLSQLCommitStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OraclePrimaryKey;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleRollbackStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSavePointStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelect;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectForUpdate;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectHierachicalQueryClause;
@@ -1257,55 +1261,55 @@ public class OracleASTVIsitorAdapter extends SQLASTVisitorAdapter implements Ora
public void endVisit(OracleAlterTableMoveTablespace x) {
}
@Override
public boolean visit(OracleSizeExpr x) {
return true;
}
@Override
public void endVisit(OracleSizeExpr x) {
}
@Override
public boolean visit(OracleFileSpecification x) {
return true;
}
@Override
public void endVisit(OracleFileSpecification x) {
}
@Override
public boolean visit(OracleAlterTablespaceAddDataFile x) {
return true;
}
@Override
public void endVisit(OracleAlterTablespaceAddDataFile x) {
}
@Override
public boolean visit(OracleAlterTablespaceStatement x) {
return true;
}
@Override
public void endVisit(OracleAlterTablespaceStatement x) {
}
@Override
public boolean visit(OracleTruncateStatement x) {
return true;
}
@Override
public void endVisit(OracleTruncateStatement x) {
}
@Override
@@ -1315,17 +1319,17 @@ public class OracleASTVIsitorAdapter extends SQLASTVisitorAdapter implements Ora
@Override
public void endVisit(OracleCreateSequenceStatement x) {
}
@Override
public boolean visit(OracleRangeValuesClause x) {
return true;
}
@Override
public void endVisit(OracleRangeValuesClause x) {
}
@Override
@@ -1335,16 +1339,17 @@ public class OracleASTVIsitorAdapter extends SQLASTVisitorAdapter implements Ora
@Override
public void endVisit(OraclePartitionByRangeClause x) {
}
@Override
public boolean visit(OracleLoopStatement x) {
return true;
}
@Override
public void endVisit(OracleLoopStatement x) {
}
@Override
@@ -1354,6 +1359,46 @@ public class OracleASTVIsitorAdapter extends SQLASTVisitorAdapter implements Ora
@Override
public void endVisit(OracleExitStatement x) {
}
@Override
public boolean visit(OracleFetchStatement x) {
return true;
}
@Override
public void endVisit(OracleFetchStatement x) {
}
@Override
public boolean visit(OracleRollbackStatement x) {
return true;
}
@Override
public void endVisit(OracleRollbackStatement x) {
}
@Override
public boolean visit(OracleSavePointStatement x) {
return true;
}
@Override
public void endVisit(OracleSavePointStatement x) {
}
@Override
public boolean visit(OracleCreateProcedureStatement x) {
return true;
}
@Override
public void endVisit(OracleCreateProcedureStatement x) {
}
@@ -73,6 +73,7 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleBlockStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCommitStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleConstraintState;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateIndexStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateProcedureStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateSequenceStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateTableStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDeleteStatement;
@@ -80,6 +81,7 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExceptionStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExitStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExplainStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExprStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleFetchStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleFileSpecification;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleForStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleGotoStatement;
@@ -99,6 +101,8 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleMultiInsertStatement.
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleOrderByItem;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OraclePLSQLCommitStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OraclePrimaryKey;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleRollbackStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSavePointStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelect;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectForUpdate;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectHierachicalQueryClause;
@@ -600,4 +604,20 @@ public interface OracleASTVisitor extends SQLASTVisitor {
boolean visit(OracleExitStatement x);
void endVisit(OracleExitStatement x);
boolean visit(OracleFetchStatement x);
void endVisit(OracleFetchStatement x);
boolean visit(OracleRollbackStatement x);
void endVisit(OracleRollbackStatement x);
boolean visit(OracleSavePointStatement x);
void endVisit(OracleSavePointStatement x);
boolean visit(OracleCreateProcedureStatement x);
void endVisit(OracleCreateProcedureStatement x);
}
@@ -28,6 +28,7 @@ import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr;
import com.alibaba.druid.sql.ast.expr.SQLLiteralExpr;
import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr;
import com.alibaba.druid.sql.ast.expr.SQLObjectCreateExpr;
import com.alibaba.druid.sql.ast.expr.SQLQueryExpr;
import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition;
import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement;
import com.alibaba.druid.sql.ast.statement.SQLInsertStatement;
@@ -107,6 +108,7 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleBlockStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCommitStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleConstraintState;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateIndexStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateProcedureStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateSequenceStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateTableStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDeleteStatement;
@@ -114,6 +116,7 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExceptionStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExitStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExplainStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExprStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleFetchStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleFileSpecification;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleForStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleGotoStatement;
@@ -135,6 +138,8 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleMultiInsertStatement.
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleOrderByItem;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OraclePLSQLCommitStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OraclePrimaryKey;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleRollbackStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSavePointStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelect;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectForUpdate;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectHierachicalQueryClause;
@@ -169,6 +174,9 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS
if (x instanceof OraclePLSQLCommitStatement) {
return;
}
if (x.getParent() instanceof OracleCreateProcedureStatement) {
return;
}
if (x.getParent() != null) {
print(";");
@@ -357,6 +365,7 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS
public boolean visit(OraclePLSQLCommitStatement astNode) {
print("/");
println();
return false;
}
@@ -446,13 +455,13 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS
if (isRoot) {
incrementIndent();
}
println();
print(JoinType.toString(x.getJoinType()));
print(" ");
x.getRight().accept(this);
if (isRoot) {
decrementIndent();
}
@@ -1749,12 +1758,17 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS
incrementIndent();
println();
for (OracleParameter param : x.getParameters()) {
for (int i = 0, size = x.getParameters().size(); i < size; ++i) {
if (i != 0) {
println();
}
OracleParameter param = x.getParameters().get(i);
param.accept(this);
println();
print(";");
}
decrementIndent();
println();
}
print("BEGIN");
incrementIndent();
@@ -1870,8 +1884,13 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS
print("WHEN ");
x.getWhen().accept(this);
incrementIndent();
println();
x.getStatement().accept(this);
for (int i = 0, size = x.getStatements().size(); i < size; ++i) {
println();
SQLStatement stmt = x.getStatements().get(i);
stmt.setParent(x);
stmt.accept(this);
}
decrementIndent();
return false;
}
@@ -2576,14 +2595,28 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS
@Override
public boolean visit(OracleParameter x) {
x.getName().accept(this);
print(" ");
x.getDataType().accept(this);
if (x.getDataType().getName().equalsIgnoreCase("CURSOR")) {
print("CURSOR ");
x.getName().accept(this);
print(" IS");
incrementIndent();
println();
SQLSelect select = ((SQLQueryExpr) x.getDefaultValue()).getSubQuery();
select.accept(this);
decrementIndent();
if (x.getDefaultValue() != null) {
print(" := ");
x.getDefaultValue().accept(this);
} else {
x.getName().accept(this);
print(" ");
x.getDataType().accept(this);
if (x.getDefaultValue() != null) {
print(" := ");
x.getDefaultValue().accept(this);
}
}
return false;
}
@@ -2595,6 +2628,26 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS
@Override
public boolean visit(OracleCommitStatement x) {
print("COMMIT");
if (x.isWrite()) {
print(" WRITE");
if (x.getWait() != null) {
if (x.getWait().booleanValue()) {
print(" WAIT");
} else {
print(" NOWAIT");
}
}
if (x.getImmediate() != null) {
if (x.getImmediate().booleanValue()) {
print(" IMMEDIATE");
} else {
print(" BATCH");
}
}
}
return false;
}
@@ -2919,4 +2972,89 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS
public void endVisit(OracleExitStatement x) {
}
@Override
public boolean visit(OracleFetchStatement x) {
print("FETCH ");
x.getCursorName().accept(this);
print(" INTO ");
printAndAccept(x.getInto(), ", ");
return false;
}
@Override
public void endVisit(OracleFetchStatement x) {
}
@Override
public boolean visit(OracleRollbackStatement x) {
print("ROLLBACK");
if (x.getTo() != null) {
print(" TO ");
x.getTo().accept(this);
}
return false;
}
@Override
public void endVisit(OracleRollbackStatement x) {
}
@Override
public boolean visit(OracleSavePointStatement x) {
print("ROLLBACK");
if (x.getTo() != null) {
print(" TO ");
x.getTo().accept(this);
}
return false;
}
@Override
public void endVisit(OracleSavePointStatement x) {
}
@Override
public boolean visit(OracleCreateProcedureStatement x) {
if (x.isOrReplace()) {
print("CREATE OR REPLACE PROCEDURE ");
} else {
print("CREATE PROCEDURE ");
}
x.getName().accept(this);
int paramSize = x.getParameters().size();
if (paramSize > 0) {
print(" (");
incrementIndent();
println();
for (int i = 0; i < paramSize; ++i) {
if (i != 0) {
print(", ");
println();
}
OracleParameter param = x.getParameters().get(i);
param.accept(this);
}
decrementIndent();
println();
print(")");
}
println();
x.getBlock().setParent(x);
x.getBlock().accept(this);
return false;
}
@Override
public void endVisit(OracleCreateProcedureStatement x) {
}
}
@@ -41,10 +41,10 @@ import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleParameter;
import com.alibaba.druid.sql.dialect.oracle.ast.clause.OraclePartitionByRangeClause;
import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleRangeValuesClause;
import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleReturningClause;
import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleStorageClause;
import com.alibaba.druid.sql.dialect.oracle.ast.clause.PartitionExtensionClause;
import com.alibaba.druid.sql.dialect.oracle.ast.clause.SampleClause;
import com.alibaba.druid.sql.dialect.oracle.ast.clause.SearchClause;
import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleStorageClause;
import com.alibaba.druid.sql.dialect.oracle.ast.clause.SubqueryFactoringClause;
import com.alibaba.druid.sql.dialect.oracle.ast.clause.SubqueryFactoringClause.Entry;
import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleAggregateExpr;
@@ -86,6 +86,7 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleBlockStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCommitStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleConstraintState;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateIndexStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateProcedureStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateSequenceStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateTableStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDeleteStatement;
@@ -93,6 +94,7 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExceptionStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExitStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExplainStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExprStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleFetchStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleFileSpecification;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleForStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleGotoStatement;
@@ -114,6 +116,8 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleMultiInsertStatement.
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleOrderByItem;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OraclePLSQLCommitStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OraclePrimaryKey;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleRollbackStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSavePointStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelect;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectForUpdate;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectHierachicalQueryClause;
@@ -143,7 +147,8 @@ import com.alibaba.druid.stat.TableStat.Relationship;
public class OracleSchemaStatVisitor extends SchemaStatVisitor implements OracleASTVisitor {
public OracleSchemaStatVisitor(){
this.aliasMap.put("DUAL", null);
this.variants.put("DUAL", null);
this.variants.put("NOTFOUND", null);
}
protected Column getColumn(SQLExpr expr) {
@@ -317,15 +322,16 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle
x.getWhere().setParent(x);
}
visit((SQLSelectQueryBlock) x);
if (x.getInto() instanceof SQLName) {
TableStat stat = getTableStat(x.getInto().toString());
String tableName = x.getInto().toString();
TableStat stat = getTableStat(tableName);
if (stat != null) {
stat.incrementInsertCount();
}
}
visit((SQLSelectQueryBlock) x);
return true;
}
@@ -1610,7 +1616,7 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle
@Override
public boolean visit(OracleParameter x) {
return false;
return true;
}
@Override
@@ -1755,7 +1761,7 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle
@Override
public void endVisit(OraclePartitionByRangeClause x) {
}
@Override
@@ -1765,7 +1771,7 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle
@Override
public void endVisit(OracleLoopStatement x) {
}
@Override
@@ -1775,6 +1781,49 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle
@Override
public void endVisit(OracleExitStatement x) {
}
@Override
public boolean visit(OracleFetchStatement x) {
return true;
}
@Override
public void endVisit(OracleFetchStatement x) {
}
@Override
public boolean visit(OracleRollbackStatement x) {
return false;
}
@Override
public void endVisit(OracleRollbackStatement x) {
}
@Override
public boolean visit(OracleSavePointStatement x) {
return false;
}
@Override
public void endVisit(OracleSavePointStatement x) {
}
@Override
public boolean visit(OracleCreateProcedureStatement x) {
String name = x.getName().toString();
this.variants.put(name, x);
accept(x.getBlock());
return false;
}
@Override
public void endVisit(OracleCreateProcedureStatement x) {
}
}
@@ -1,35 +0,0 @@
package com.alibaba.druid.sql.dialect.postgresql.ast;
import com.alibaba.druid.sql.ast.SQLExpr;
import com.alibaba.druid.sql.dialect.postgresql.visitor.PGASTVisitor;
public class PGCurrentOfExpr extends PGSQLObjectImpl implements SQLExpr {
private static final long serialVersionUID = 1L;
private SQLExpr cursor;
public PGCurrentOfExpr() {
}
public PGCurrentOfExpr(SQLExpr cursor) {
this.cursor = cursor;
}
public SQLExpr getCursor() {
return cursor;
}
public void setCursor(SQLExpr cursor) {
this.cursor = cursor;
}
@Override
public void accept0(PGASTVisitor visitor) {
if (visitor.visit(this)) {
acceptChild(visitor, cursor);
}
visitor.endVisit(this);
}
}
@@ -5,12 +5,12 @@ import java.util.List;
import com.alibaba.druid.sql.ast.SQLExpr;
import com.alibaba.druid.sql.ast.SQLName;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.ast.expr.SQLCurrentOfCursorExpr;
import com.alibaba.druid.sql.ast.expr.SQLQueryExpr;
import com.alibaba.druid.sql.ast.statement.SQLInsertStatement;
import com.alibaba.druid.sql.ast.statement.SQLTableSource;
import com.alibaba.druid.sql.ast.statement.SQLUpdateSetItem;
import com.alibaba.druid.sql.ast.statement.SQLUpdateStatement;
import com.alibaba.druid.sql.dialect.postgresql.ast.PGCurrentOfExpr;
import com.alibaba.druid.sql.dialect.postgresql.ast.PGWithClause;
import com.alibaba.druid.sql.dialect.postgresql.ast.PGWithQuery;
import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGDeleteStatement;
@@ -169,7 +169,7 @@ public class PGSQLStatementParser extends SQLStatementParser {
lexer.nextToken();
accept(Token.OF);
SQLName cursorName = this.exprParser.name();
SQLExpr where = new PGCurrentOfExpr(cursorName);
SQLExpr where = new SQLCurrentOfCursorExpr(cursorName);
deleteStatement.setWhere(where);
} else {
SQLExpr where = this.exprParser.expr();
@@ -1,6 +1,5 @@
package com.alibaba.druid.sql.dialect.postgresql.visitor;
import com.alibaba.druid.sql.dialect.postgresql.ast.PGCurrentOfExpr;
import com.alibaba.druid.sql.dialect.postgresql.ast.PGWithClause;
import com.alibaba.druid.sql.dialect.postgresql.ast.PGWithQuery;
import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGDeleteStatement;
@@ -45,10 +44,6 @@ public interface PGASTVisitor extends SQLASTVisitor {
boolean visit(PGDeleteStatement x);
void endVisit(PGCurrentOfExpr x);
boolean visit(PGCurrentOfExpr x);
void endVisit(PGInsertStatement x);
boolean visit(PGInsertStatement x);
@@ -1,6 +1,5 @@
package com.alibaba.druid.sql.dialect.postgresql.visitor;
import com.alibaba.druid.sql.dialect.postgresql.ast.PGCurrentOfExpr;
import com.alibaba.druid.sql.dialect.postgresql.ast.PGWithClause;
import com.alibaba.druid.sql.dialect.postgresql.ast.PGWithQuery;
import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGDeleteStatement;
@@ -104,16 +103,6 @@ public class PGASTVisitorAdapter extends SQLASTVisitorAdapter implements PGASTVi
return true;
}
@Override
public void endVisit(PGCurrentOfExpr x) {
}
@Override
public boolean visit(PGCurrentOfExpr x) {
return true;
}
@Override
public void endVisit(PGInsertStatement x) {
@@ -3,7 +3,6 @@ package com.alibaba.druid.sql.dialect.postgresql.visitor;
import com.alibaba.druid.sql.ast.SQLSetQuantifier;
import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock;
import com.alibaba.druid.sql.ast.statement.SQLSelectStatement;
import com.alibaba.druid.sql.dialect.postgresql.ast.PGCurrentOfExpr;
import com.alibaba.druid.sql.dialect.postgresql.ast.PGWithClause;
import com.alibaba.druid.sql.dialect.postgresql.ast.PGWithQuery;
import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGDeleteStatement;
@@ -318,19 +317,6 @@ public class PGOutputVisitor extends SQLASTOutputVisitor implements PGASTVisitor
return false;
}
@Override
public void endVisit(PGCurrentOfExpr x) {
}
@Override
public boolean visit(PGCurrentOfExpr x) {
print("CURRENT OF ");
x.getCursor().accept(this);
return false;
}
@Override
public void endVisit(PGInsertStatement x) {
@@ -6,7 +6,6 @@ import com.alibaba.druid.sql.ast.SQLName;
import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr;
import com.alibaba.druid.sql.ast.statement.SQLSelectStatement;
import com.alibaba.druid.sql.ast.statement.SQLTruncateStatement;
import com.alibaba.druid.sql.dialect.postgresql.ast.PGCurrentOfExpr;
import com.alibaba.druid.sql.dialect.postgresql.ast.PGWithClause;
import com.alibaba.druid.sql.dialect.postgresql.ast.PGWithQuery;
import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGDeleteStatement;
@@ -152,16 +151,6 @@ public class PGSchemaStatVisitor extends SchemaStatVisitor implements PGASTVisit
return false;
}
@Override
public void endVisit(PGCurrentOfExpr x) {
}
@Override
public boolean visit(PGCurrentOfExpr x) {
return false;
}
@Override
public void endVisit(PGInsertStatement x) {
@@ -225,7 +214,7 @@ public class PGSchemaStatVisitor extends SchemaStatVisitor implements PGASTVisit
@Override
public boolean visit(PGUpdateStatement x) {
Map<String, String> oldAliasMap = getAliasMap();
setAliasMap();
if (x.getWith() != null) {
@@ -243,7 +232,7 @@ public class PGSchemaStatVisitor extends SchemaStatVisitor implements PGASTVisit
accept(x.getItems());
accept(x.getWhere());
setAliasMap(oldAliasMap);
return false;