improve sql wall

This commit is contained in:
wenshao
2013-08-26 11:32:43 +08:00
parent a3da32dadc
commit 3d8bfacefb
2 changed files with 13 additions and 0 deletions
@@ -37,6 +37,7 @@ import com.alibaba.druid.sql.ast.expr.SQLAllColumnExpr;
import com.alibaba.druid.sql.ast.expr.SQLBetweenExpr;
import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr;
import com.alibaba.druid.sql.ast.expr.SQLBinaryOperator;
import com.alibaba.druid.sql.ast.expr.SQLCaseExpr;
import com.alibaba.druid.sql.ast.expr.SQLCaseExpr.Item;
import com.alibaba.druid.sql.ast.expr.SQLCharExpr;
import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr;
@@ -1022,6 +1023,17 @@ public class WallVisitorUtils {
return SQLEvalVisitorUtils.eval(dbType, x, Collections.emptyList(), false);
}
if (x instanceof SQLCaseExpr) {
SQLCaseExpr caseExpr = (SQLCaseExpr) x;
if (caseExpr.getItems().size() > 0) {
SQLCaseExpr.Item item = caseExpr.getItems().get(0);
Object conditionVal = getValue(visitor, item.getConditionExpr());
if (conditionVal instanceof Boolean) {
addViolation(visitor, ErrorCode.CONST_CASE_CONDITION, "const case condition", caseExpr);
}
}
}
return null;
}
@@ -63,6 +63,7 @@ public interface ErrorCode {
public final static int EmptyQueryHasCondition = 2106;
public final static int DoubleConstCondition = 2107;
public final static int SameConstLike = 2108;
public final static int CONST_CASE_CONDITION = 2109;
public final static int NOT_PARAMETERIZED = 2200;
public final static int MULTI_TENANT = 2201;