bug fixed for issue 709

This commit is contained in:
wenshao
2014-11-15 23:33:38 +08:00
parent 986bdc21bb
commit 95b6133d5a
3 changed files with 107 additions and 20 deletions
@@ -23,6 +23,7 @@ import com.alibaba.druid.sql.ast.SQLObject;
import com.alibaba.druid.sql.ast.SQLSetQuantifier;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.ast.expr.SQLAllColumnExpr;
import com.alibaba.druid.sql.ast.expr.SQLCharExpr;
import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr;
import com.alibaba.druid.sql.ast.expr.SQLLiteralExpr;
import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr;
@@ -3417,4 +3418,14 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS
return super.visit(x);
}
public boolean visit(SQLCharExpr x) {
if (x.getText() != null && x.getText().length() == 0) {
print("NULL");
} else {
super.visit(x);
}
return false;
}
}
@@ -452,7 +452,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
}
public boolean visit(SQLCharExpr x) {
if ((x.getText() == null) || (x.getText().length() == 0)) {
if (x.getText() == null) {
print("NULL");
} else {
print("'");
@@ -541,7 +541,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
visitAggreateRest(x);
print(")");
if (x.getWithinGroup() != null) {
print(" WITHIN GROUP (");
x.getWithinGroup().accept(this);
@@ -577,7 +577,31 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
public boolean visit(SQLNotExpr x) {
print("NOT ");
x.getExpr().accept(this);
SQLExpr expr = x.getExpr();
boolean needQuote = false;
if (expr instanceof SQLBinaryOpExpr) {
SQLBinaryOpExpr binaryOpExpr = (SQLBinaryOpExpr) expr;
switch (binaryOpExpr.getOperator()) {
case BooleanAnd:
case BooleanOr:
case BooleanXor:
needQuote = true;
break;
default:
break;
}
}
if (needQuote) {
print('(');
}
expr.accept(this);
if (needQuote) {
print(')');
}
return false;
}
@@ -699,7 +723,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
}
public boolean visit(SQLSelectItem x) {
if(x.isConnectByRoot()) {
if (x.isConnectByRoot()) {
print("CONNECT_BY_ROOT ");
}
x.getExpr().accept(this);
@@ -1150,12 +1174,12 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
public boolean visit(SQLSetStatement x) {
print("SET ");
printAndAccept(x.getItems(), ", ");
if (x.getHints() != null && x.getHints().size() > 0) {
print(" ");
printAndAccept(x.getHints(), " ");
}
return false;
}
@@ -1433,24 +1457,24 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
x.getName().accept(this);
return false;
}
@Override
public boolean visit(SQLCreateViewStatement x) {
print("CREATE ");
if(x.isOrReplace()) {
if (x.isOrReplace()) {
print("OR REPLACE ");
}
print("VIEW ");
x.getName().accept(this);
if (x.getColumns().size() > 0) {
print(" (");
printAndAccept(x.getColumns(), ", ");
print(")");
}
print(" AS ");
x.getSubQuery().accept(this);
return false;
}
@@ -1852,28 +1876,28 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
return false;
}
@Override
public boolean visit(SQLRevokeStatement x) {
print("ROVOKE ");
printAndAccept(x.getPrivileges(), ", ");
if (x.getOn() != null) {
print(" ON ");
if (x.getObjectType() != null) {
print(x.getObjectType().name());
print(' ');
}
x.getOn().accept(this);
}
if (x.getFrom() != null) {
print(" FROM ");
x.getFrom().accept(this);
}
return false;
}
@@ -2006,7 +2030,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
x.getBody().accept(this);
return false;
}
public boolean visit(SQLBooleanExpr x) {
print(x.getValue() ? "true" : "false");
@@ -2036,11 +2060,11 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
@Override
public boolean visit(SQLTimestampExpr x) {
print("TIMESTAMP ");
if (x.isWithTimeZone()) {
print(" WITH TIME ZONE ");
}
print('\'');
print(x.getLiteral());
print('\'');