mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
refactor
This commit is contained in:
+1
-1
@@ -3,7 +3,6 @@ package com.alibaba.druid.sql.dialect.mysql.visitor;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import com.alibaba.druid.mapping.spi.ExportParameterVisitorUtils;
|
||||
import com.alibaba.druid.sql.ast.SQLOrderBy;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLBetweenExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr;
|
||||
@@ -13,6 +12,7 @@ import com.alibaba.druid.sql.ast.statement.SQLSelectGroupByClause;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLSelectItem;
|
||||
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock.Limit;
|
||||
import com.alibaba.druid.sql.visitor.ExportParameterVisitor;
|
||||
import com.alibaba.druid.sql.visitor.ExportParameterVisitorUtils;
|
||||
|
||||
public class MySqlExportParameterVisitor extends MySqlASTVisitorAdapter implements ExportParameterVisitor {
|
||||
|
||||
|
||||
+1
-1
@@ -3,7 +3,6 @@ package com.alibaba.druid.sql.dialect.oracle.visitor;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import com.alibaba.druid.mapping.spi.ExportParameterVisitorUtils;
|
||||
import com.alibaba.druid.sql.ast.SQLOrderBy;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLBetweenExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr;
|
||||
@@ -12,6 +11,7 @@ import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLSelectGroupByClause;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLSelectItem;
|
||||
import com.alibaba.druid.sql.visitor.ExportParameterVisitor;
|
||||
import com.alibaba.druid.sql.visitor.ExportParameterVisitorUtils;
|
||||
|
||||
public class OracleExportParameterVisitor extends OracleASTVIsitorAdapter implements ExportParameterVisitor {
|
||||
|
||||
|
||||
+1
-1
@@ -3,7 +3,6 @@ package com.alibaba.druid.sql.dialect.sqlserver.visitor;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import com.alibaba.druid.mapping.spi.ExportParameterVisitorUtils;
|
||||
import com.alibaba.druid.sql.ast.SQLOrderBy;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLBetweenExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr;
|
||||
@@ -12,6 +11,7 @@ import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLSelectGroupByClause;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLSelectItem;
|
||||
import com.alibaba.druid.sql.visitor.ExportParameterVisitor;
|
||||
import com.alibaba.druid.sql.visitor.ExportParameterVisitorUtils;
|
||||
|
||||
public class MSSQLServerExportParameterVisitor extends SQLServerASTVisitorAdapter implements ExportParameterVisitor {
|
||||
|
||||
|
||||
+2
-2
@@ -1,4 +1,4 @@
|
||||
package com.alibaba.druid.mapping.spi;
|
||||
package com.alibaba.druid.sql.visitor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -49,7 +49,7 @@ public class ExportParameterVisitorUtils {
|
||||
}
|
||||
|
||||
public static void exportParameter(final List<Object> parameters, SQLBinaryOpExpr x) {
|
||||
if (x.getLeft() instanceof SQLLiteralExpr && x.getRight() instanceof SQLLiteralExpr) {
|
||||
if (x.getLeft() instanceof SQLLiteralExpr && x.getRight() instanceof SQLLiteralExpr && x.getOperator().isRelational()) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -88,15 +88,7 @@ public class WallVisitorUtils {
|
||||
|
||||
// if (visitor.getConfig().isMustParameterized()) {
|
||||
if (where != null) {
|
||||
if (visitor.getConfig().isMustParameterized()) {
|
||||
ExportParameterVisitor exportParameterVisitor = visitor.getProvider().createExportParameterVisitor();
|
||||
where.accept(exportParameterVisitor);
|
||||
|
||||
if (exportParameterVisitor.getParameters().size() > 0) {
|
||||
addViolation(visitor, x);
|
||||
return;
|
||||
}
|
||||
}
|
||||
checkCondition(visitor, x.getWhere());
|
||||
|
||||
if (Boolean.TRUE == getValue(where)) {
|
||||
if (where instanceof SQLBinaryOpExpr) {
|
||||
@@ -144,6 +136,25 @@ public class WallVisitorUtils {
|
||||
|
||||
if (x.getWhere() == null || Boolean.TRUE == getValue(x.getWhere())) {
|
||||
addViolation(visitor, x);
|
||||
return;
|
||||
}
|
||||
|
||||
checkCondition(visitor, x.getWhere());
|
||||
}
|
||||
|
||||
private static void checkCondition(WallVisitor visitor, SQLExpr x) {
|
||||
if (x == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (visitor.getConfig().isMustParameterized()) {
|
||||
ExportParameterVisitor exportParameterVisitor = visitor.getProvider().createExportParameterVisitor();
|
||||
x.accept(exportParameterVisitor);
|
||||
|
||||
if (exportParameterVisitor.getParameters().size() > 0) {
|
||||
addViolation(visitor, x);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -183,7 +194,10 @@ public class WallVisitorUtils {
|
||||
|
||||
if (x.getWhere() == null || Boolean.TRUE == getValue(x.getWhere())) {
|
||||
addViolation(visitor, x);
|
||||
return;
|
||||
}
|
||||
|
||||
checkCondition(visitor, x.getWhere());
|
||||
}
|
||||
|
||||
@SuppressWarnings({ "unchecked", "rawtypes" })
|
||||
|
||||
@@ -18,6 +18,8 @@ public class MustParameterizedTest3 extends TestCase {
|
||||
public void testMySql() throws Exception {
|
||||
Assert.assertFalse(WallUtils.isValidateMySql("select * from t where id = (3 + 5 - 2 - 1)", config));
|
||||
Assert.assertFalse(WallUtils.isValidateMySql("select * from t where id != id + 3", config));
|
||||
Assert.assertFalse(WallUtils.isValidateMySql("delete from t where id != id + 3", config));
|
||||
Assert.assertFalse(WallUtils.isValidateMySql("delete from t where id = 'aa' + 'bbb'", config));
|
||||
Assert.assertTrue(WallUtils.isValidateMySql("select * from t where id = ? ORDER BY 1", config));
|
||||
Assert.assertTrue(WallUtils.isValidateMySql("select 1, 2, 3 from t where id = ?", config));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user