mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
improve sqlwall
This commit is contained in:
@@ -645,9 +645,7 @@ public abstract class WallProvider {
|
||||
}
|
||||
|
||||
WallVisitor visitor = createWallVisitor();
|
||||
if (!endOfComment) {
|
||||
visitor.getConfig().setSelectUnionCheck(false);
|
||||
}
|
||||
visitor.setSqlEndOfComment(endOfComment);
|
||||
|
||||
if (statementList.size() > 0) {
|
||||
boolean lastIsHint = false;
|
||||
|
||||
@@ -39,4 +39,8 @@ public interface WallVisitor extends SQLASTVisitor {
|
||||
void setSqlModified(boolean sqlModified);
|
||||
|
||||
String getDbType();
|
||||
|
||||
boolean isSqlEndOfComment();
|
||||
|
||||
void setSqlEndOfComment(boolean sqlEndOfComment);
|
||||
}
|
||||
|
||||
@@ -55,8 +55,9 @@ public class DB2WallVisitor extends DB2ASTVisitorAdapter implements WallVisitor
|
||||
|
||||
private final WallConfig config;
|
||||
private final WallProvider provider;
|
||||
private final List<Violation> violations = new ArrayList<Violation>();
|
||||
private boolean sqlModified = false;
|
||||
private final List<Violation> violations = new ArrayList<Violation>();
|
||||
private boolean sqlModified = false;
|
||||
private boolean sqlEndOfComment = false;
|
||||
|
||||
public DB2WallVisitor(WallProvider provider){
|
||||
this.config = provider.getConfig();
|
||||
@@ -274,4 +275,14 @@ public class DB2WallVisitor extends DB2ASTVisitorAdapter implements WallVisitor
|
||||
public boolean visit(SQLCreateTriggerStatement x) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSqlEndOfComment() {
|
||||
return this.sqlEndOfComment;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSqlEndOfComment(boolean sqlEndOfComment) {
|
||||
this.sqlEndOfComment = sqlEndOfComment;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -73,8 +73,9 @@ public class MySqlWallVisitor extends MySqlASTVisitorAdapter implements WallVisi
|
||||
|
||||
private final WallConfig config;
|
||||
private final WallProvider provider;
|
||||
private final List<Violation> violations = new ArrayList<Violation>();
|
||||
private boolean sqlModified = false;
|
||||
private final List<Violation> violations = new ArrayList<Violation>();
|
||||
private boolean sqlModified = false;
|
||||
private boolean sqlEndOfComment = false;
|
||||
|
||||
public MySqlWallVisitor(WallProvider provider){
|
||||
this.config = provider.getConfig();
|
||||
@@ -466,5 +467,15 @@ public class MySqlWallVisitor extends MySqlASTVisitorAdapter implements WallVisi
|
||||
public boolean visit(SQLCreateTriggerStatement x) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSqlEndOfComment() {
|
||||
return this.sqlEndOfComment;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSqlEndOfComment(boolean sqlEndOfComment) {
|
||||
this.sqlEndOfComment = sqlEndOfComment;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -63,8 +63,9 @@ public class OracleWallVisitor extends OracleASTVisitorAdapter implements WallVi
|
||||
|
||||
private final WallConfig config;
|
||||
private final WallProvider provider;
|
||||
private final List<Violation> violations = new ArrayList<Violation>();
|
||||
private boolean sqlModified = false;
|
||||
private final List<Violation> violations = new ArrayList<Violation>();
|
||||
private boolean sqlModified = false;
|
||||
private boolean sqlEndOfComment = false;
|
||||
|
||||
public OracleWallVisitor(WallProvider provider){
|
||||
this.config = provider.getConfig();
|
||||
@@ -347,4 +348,14 @@ public class OracleWallVisitor extends OracleASTVisitorAdapter implements WallVi
|
||||
public boolean visit(SQLCreateTriggerStatement x) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSqlEndOfComment() {
|
||||
return this.sqlEndOfComment;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSqlEndOfComment(boolean sqlEndOfComment) {
|
||||
this.sqlEndOfComment = sqlEndOfComment;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,8 +55,9 @@ public class PGWallVisitor extends PGASTVisitorAdapter implements WallVisitor {
|
||||
|
||||
private final WallConfig config;
|
||||
private final WallProvider provider;
|
||||
private final List<Violation> violations = new ArrayList<Violation>();
|
||||
private boolean sqlModified = false;
|
||||
private final List<Violation> violations = new ArrayList<Violation>();
|
||||
private boolean sqlModified = false;
|
||||
private boolean sqlEndOfComment = false;
|
||||
|
||||
public PGWallVisitor(WallProvider provider){
|
||||
this.config = provider.getConfig();
|
||||
@@ -276,4 +277,14 @@ public class PGWallVisitor extends PGASTVisitorAdapter implements WallVisitor {
|
||||
public boolean visit(SQLCreateTriggerStatement x) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSqlEndOfComment() {
|
||||
return this.sqlEndOfComment;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSqlEndOfComment(boolean sqlEndOfComment) {
|
||||
this.sqlEndOfComment = sqlEndOfComment;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -61,8 +61,9 @@ public class SQLServerWallVisitor extends SQLServerASTVisitorAdapter implements
|
||||
|
||||
private final WallConfig config;
|
||||
private final WallProvider provider;
|
||||
private final List<Violation> violations = new ArrayList<Violation>();
|
||||
private boolean sqlModified = false;
|
||||
private final List<Violation> violations = new ArrayList<Violation>();
|
||||
private boolean sqlModified = false;
|
||||
private boolean sqlEndOfComment = false;
|
||||
|
||||
public SQLServerWallVisitor(WallProvider provider){
|
||||
this.config = provider.getConfig();
|
||||
@@ -333,4 +334,14 @@ public class SQLServerWallVisitor extends SQLServerASTVisitorAdapter implements
|
||||
public boolean visit(SQLCreateTriggerStatement x) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSqlEndOfComment() {
|
||||
return this.sqlEndOfComment;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSqlEndOfComment(boolean sqlEndOfComment) {
|
||||
this.sqlEndOfComment = sqlEndOfComment;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -295,7 +295,8 @@ public class WallVisitorUtils {
|
||||
Object whereValue = getConditionValue(visitor, where, visitor.getConfig().isSelectWhereAlwayTrueCheck());
|
||||
|
||||
if (Boolean.TRUE == whereValue) {
|
||||
if (!isSimpleConstExpr(where)) {// 简单表达式
|
||||
if (visitor.getConfig().isSelectWhereAlwayTrueCheck() && visitor.isSqlEndOfComment()
|
||||
&& !isSimpleConstExpr(where)) {// 简单表达式
|
||||
addViolation(visitor, ErrorCode.ALWAYS_TRUE, "select alway true condition not allow", x);
|
||||
}
|
||||
}
|
||||
@@ -310,7 +311,8 @@ public class WallVisitorUtils {
|
||||
}
|
||||
|
||||
if (Boolean.TRUE == getConditionValue(visitor, x, visitor.getConfig().isSelectHavingAlwayTrueCheck())) {
|
||||
if (!isSimpleConstExpr(x)) {
|
||||
if (visitor.getConfig().isSelectHavingAlwayTrueCheck() && visitor.isSqlEndOfComment()
|
||||
&& !isSimpleConstExpr(x)) {
|
||||
addViolation(visitor, ErrorCode.ALWAYS_TRUE, "having alway true condition not allow", x);
|
||||
}
|
||||
}
|
||||
@@ -349,7 +351,7 @@ public class WallVisitorUtils {
|
||||
checkCondition(visitor, where);
|
||||
|
||||
if (Boolean.TRUE == getConditionValue(visitor, where, config.isDeleteWhereAlwayTrueCheck())) {
|
||||
if (!isSimpleConstExpr(where)) {
|
||||
if (config.isDeleteWhereAlwayTrueCheck() && visitor.isSqlEndOfComment() && !isSimpleConstExpr(where)) {
|
||||
addViolation(visitor, ErrorCode.ALWAYS_TRUE, "delete alway true condition not allow", x);
|
||||
}
|
||||
}
|
||||
@@ -942,7 +944,7 @@ public class WallVisitorUtils {
|
||||
checkCondition(visitor, where);
|
||||
|
||||
if (Boolean.TRUE == getConditionValue(visitor, where, config.isUpdateWhereAlayTrueCheck())) {
|
||||
if (!isSimpleConstExpr(where)) {
|
||||
if (config.isUpdateWhereAlayTrueCheck() && visitor.isSqlEndOfComment()&& !isSimpleConstExpr(where)) {
|
||||
addViolation(visitor, ErrorCode.ALWAYS_TRUE, "update alway true condition not allow", x);
|
||||
}
|
||||
}
|
||||
@@ -1388,7 +1390,7 @@ public class WallVisitorUtils {
|
||||
}
|
||||
}
|
||||
|
||||
if (current.hasPartAlwayTrue() && alwayTrueCheck && !visitor.getConfig().isConditionAndAlwayTrueAllow()) {
|
||||
if (current.hasPartAlwayTrue() && !visitor.getConfig().isConditionAndAlwayTrueAllow()) {
|
||||
addViolation(visitor, ErrorCode.ALWAYS_TRUE, "part alway true condition not allow", x);
|
||||
}
|
||||
|
||||
@@ -2198,7 +2200,8 @@ public class WallVisitorUtils {
|
||||
context.incrementUnionWarnings();
|
||||
}
|
||||
|
||||
if (((x.getOperator() == SQLUnionOperator.UNION || x.getOperator() == SQLUnionOperator.UNION_ALL || x.getOperator() == SQLUnionOperator.DISTINCT) && visitor.getConfig().isSelectUnionCheck())
|
||||
if (((x.getOperator() == SQLUnionOperator.UNION || x.getOperator() == SQLUnionOperator.UNION_ALL || x.getOperator() == SQLUnionOperator.DISTINCT)
|
||||
&& visitor.getConfig().isSelectUnionCheck() && visitor.isSqlEndOfComment())
|
||||
|| (x.getOperator() == SQLUnionOperator.MINUS && visitor.getConfig().isSelectMinusCheck())
|
||||
|| (x.getOperator() == SQLUnionOperator.INTERSECT && visitor.getConfig().isSelectIntersectCheck())
|
||||
|| (x.getOperator() == SQLUnionOperator.EXCEPT && visitor.getConfig().isSelectExceptCheck())) {
|
||||
|
||||
Reference in New Issue
Block a user