diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLLockTableStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLLockTableStatement.java new file mode 100644 index 0000000000..8bf02acff7 --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLLockTableStatement.java @@ -0,0 +1,6 @@ +package com.alibaba.druid.sql.ast.statement; + +import com.alibaba.druid.sql.ast.SQLStatement; + +public interface SQLLockTableStatement extends SQLStatement { +} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlLockTableStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlLockTableStatement.java index 4a21f70e07..c756b5b4ca 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlLockTableStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlLockTableStatement.java @@ -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 items = new ArrayList(); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleLockTableStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleLockTableStatement.java index ca409eaa49..aaffc66fbe 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleLockTableStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleLockTableStatement.java @@ -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; diff --git a/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java b/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java index f2916b1d13..94ff7808e6 100644 --- a/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java +++ b/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java @@ -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; diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/oracle/OracleWallTest7.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/oracle/OracleWallTest7.java index d989e37396..c7e42cdd62 100644 --- a/src/test/java/com/alibaba/druid/bvt/filter/wall/oracle/OracleWallTest7.java +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/oracle/OracleWallTest7.java @@ -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)); + } }