mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
@@ -970,6 +970,21 @@ public class WallVisitorUtils {
|
||||
}
|
||||
}
|
||||
|
||||
if (x.getLeft() instanceof SQLName && !(x.getRight() instanceof SQLName)) {
|
||||
switch (x.getOperator()) {
|
||||
case Equality:
|
||||
case NotEqual:
|
||||
case GreaterThan:
|
||||
case GreaterThanOrEqual:
|
||||
case LessThan:
|
||||
case LessThanOrEqual:
|
||||
case LessThanOrGreater:
|
||||
return null;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (x.getOperator() == SQLBinaryOperator.BooleanOr) {
|
||||
List<SQLExpr> groupList = SQLUtils.split(x);
|
||||
|
||||
@@ -1043,16 +1058,15 @@ public class WallVisitorUtils {
|
||||
return null;
|
||||
}
|
||||
|
||||
SQLExpr left = x.getLeft();
|
||||
SQLExpr right = x.getRight();
|
||||
Object leftResult = getValue(visitor, left);
|
||||
Object rightResult = getValue(visitor, right);
|
||||
|
||||
if (x.getOperator() == SQLBinaryOperator.Like && leftResult instanceof String && leftResult.equals(rightResult)) {
|
||||
addViolation(visitor, ErrorCode.SAME_CONST_LIKE, "same const like", x);
|
||||
}
|
||||
|
||||
if (x.getOperator() == SQLBinaryOperator.Like || x.getOperator() == SQLBinaryOperator.NotLike) {
|
||||
Object leftResult = getValue(visitor, x.getLeft());
|
||||
Object rightResult = getValue(visitor, x.getRight());
|
||||
|
||||
if (x.getOperator() == SQLBinaryOperator.Like && leftResult instanceof String
|
||||
&& leftResult.equals(rightResult)) {
|
||||
addViolation(visitor, ErrorCode.SAME_CONST_LIKE, "same const like", x);
|
||||
}
|
||||
|
||||
WallContext context = WallContext.current();
|
||||
if (context != null) {
|
||||
if (rightResult instanceof Number || leftResult instanceof Number) {
|
||||
@@ -1508,6 +1522,10 @@ public class WallVisitorUtils {
|
||||
SQLEvalVisitor visitor = SQLEvalVisitorUtils.createEvalVisitor(dbType);
|
||||
visitor.setParameters(parameters);
|
||||
visitor.registerFunction("rand", Nil.instance);
|
||||
visitor.registerFunction("sin", Nil.instance);
|
||||
visitor.registerFunction("cos", Nil.instance);
|
||||
visitor.registerFunction("asin", Nil.instance);
|
||||
visitor.registerFunction("acos", Nil.instance);
|
||||
sqlObject.accept(visitor);
|
||||
|
||||
if (sqlObject instanceof SQLNumericLiteralExpr) {
|
||||
@@ -2182,16 +2200,25 @@ public class WallVisitorUtils {
|
||||
if (query instanceof SQLSelectQueryBlock) {
|
||||
SQLSelectQueryBlock queryBlock = (SQLSelectQueryBlock) query;
|
||||
SQLTableSource from = queryBlock.getFrom();
|
||||
|
||||
if (queryBlock.getSelectList().size() < 1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (from == null) {
|
||||
boolean itemIsConst = true;
|
||||
boolean itemHasAlias = false;
|
||||
for (SQLSelectItem item : queryBlock.getSelectList()) {
|
||||
if (item.getExpr() instanceof SQLIdentifierExpr || item.getExpr() instanceof SQLPropertyExpr) {
|
||||
itemIsConst = false;
|
||||
break;
|
||||
}
|
||||
if(item.getAlias() != null ) {
|
||||
itemHasAlias = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (itemIsConst) {
|
||||
if (itemIsConst && !itemHasAlias) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
|
||||
Reference in New Issue
Block a user