improved wall filter oracle support, support locktable fix #4292

This commit is contained in:
高铁
2021-06-07 00:44:15 +08:00
parent 8facd8a78c
commit bea6993888
5 changed files with 19 additions and 3 deletions
@@ -0,0 +1,6 @@
package com.alibaba.druid.sql.ast.statement;
import com.alibaba.druid.sql.ast.SQLStatement;
public interface SQLLockTableStatement extends SQLStatement {
}
@@ -19,13 +19,14 @@ import com.alibaba.druid.sql.ast.SQLCommentHint;
import com.alibaba.druid.sql.ast.SQLName;
import com.alibaba.druid.sql.ast.SQLObjectImpl;
import com.alibaba.druid.sql.ast.statement.SQLExprTableSource;
import com.alibaba.druid.sql.ast.statement.SQLLockTableStatement;
import com.alibaba.druid.sql.dialect.mysql.ast.MySqlObjectImpl;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor;
import java.util.ArrayList;
import java.util.List;
public class MySqlLockTableStatement extends MySqlStatementImpl {
public class MySqlLockTableStatement extends MySqlStatementImpl implements SQLLockTableStatement {
private List<Item> items = new ArrayList<Item>();
@@ -19,12 +19,13 @@ import com.alibaba.druid.sql.ast.SQLExpr;
import com.alibaba.druid.sql.ast.SQLName;
import com.alibaba.druid.sql.ast.SQLObject;
import com.alibaba.druid.sql.ast.statement.SQLExprTableSource;
import com.alibaba.druid.sql.ast.statement.SQLLockTableStatement;
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor;
import java.util.ArrayList;
import java.util.List;
public class OracleLockTableStatement extends OracleStatementImpl {
public class OracleLockTableStatement extends OracleStatementImpl implements SQLLockTableStatement {
private SQLExprTableSource table;
private LockMode lockMode;
@@ -26,6 +26,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlOutFileExpr;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.*;
import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExecuteImmediateStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleLockTableStatement;
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleMultiInsertStatement;
import com.alibaba.druid.sql.dialect.sqlserver.ast.stmt.SQLServerExecStatement;
import com.alibaba.druid.sql.dialect.sqlserver.ast.stmt.SQLServerInsertStatement;
@@ -2636,7 +2637,7 @@ public class WallVisitorUtils {
allow = config.isHintAllow();
denyMessage = "hint not allow";
errorCode = ErrorCode.HINT_NOT_ALLOW;
} else if (x instanceof MySqlLockTableStatement) {
} else if (x instanceof SQLLockTableStatement) {
allow = config.isLockTableAllow();
denyMessage = "lock table not allow";
errorCode = ErrorCode.LOCK_TABLE_NOT_ALLOW;
@@ -38,4 +38,11 @@ public class OracleWallTest7 extends TestCase {
assertTrue(WallUtils.isValidateOracle(sql));
}
public void test_lock() throws Exception {
String sql = //
"LOCK TABLE \"SFXT\".\"FLYWAY_SCHEMA_HISTORY\" IN EXCLUSIVE MODE";
assertTrue(WallUtils.isValidateOracle(sql));
}
}