diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowAuthorsStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowAuthorsStatement.java index 376304e5fc..7b0fdaa673 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowAuthorsStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowAuthorsStatement.java @@ -18,7 +18,7 @@ package com.alibaba.druid.sql.dialect.mysql.ast.statement; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -public class MySqlShowAuthorsStatement extends MySqlStatementImpl { +public class MySqlShowAuthorsStatement extends MySqlStatementImpl implements MySqlShowStatement { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowBinLogEventsStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowBinLogEventsStatement.java index 8f2dc2699d..5080bef506 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowBinLogEventsStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowBinLogEventsStatement.java @@ -19,7 +19,7 @@ import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock.Limit; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -public class MySqlShowBinLogEventsStatement extends MySqlStatementImpl { +public class MySqlShowBinLogEventsStatement extends MySqlStatementImpl implements MySqlShowStatement { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowBinaryLogsStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowBinaryLogsStatement.java index 16c44c1765..f18b3479e0 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowBinaryLogsStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowBinaryLogsStatement.java @@ -18,7 +18,7 @@ package com.alibaba.druid.sql.dialect.mysql.ast.statement; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -public class MySqlShowBinaryLogsStatement extends MySqlStatementImpl { +public class MySqlShowBinaryLogsStatement extends MySqlStatementImpl implements MySqlShowStatement { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowCharacterSetStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowCharacterSetStatement.java index 9010892e58..32137ca4c1 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowCharacterSetStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowCharacterSetStatement.java @@ -18,7 +18,7 @@ package com.alibaba.druid.sql.dialect.mysql.ast.statement; import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -public class MySqlShowCharacterSetStatement extends MySqlStatementImpl { +public class MySqlShowCharacterSetStatement extends MySqlStatementImpl implements MySqlShowStatement { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowCollationStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowCollationStatement.java index 961c53b02c..c6d56c8833 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowCollationStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowCollationStatement.java @@ -18,7 +18,7 @@ package com.alibaba.druid.sql.dialect.mysql.ast.statement; import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -public class MySqlShowCollationStatement extends MySqlStatementImpl { +public class MySqlShowCollationStatement extends MySqlStatementImpl implements MySqlShowStatement { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowColumnsStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowColumnsStatement.java index d765617ec1..3fc96fa099 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowColumnsStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowColumnsStatement.java @@ -21,7 +21,7 @@ import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr; import com.alibaba.druid.sql.ast.expr.SQLPropertyExpr; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -public class MySqlShowColumnsStatement extends MySqlStatementImpl { +public class MySqlShowColumnsStatement extends MySqlStatementImpl implements MySqlShowStatement { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowContributorsStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowContributorsStatement.java index 8023dac9b2..7163b9415f 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowContributorsStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowContributorsStatement.java @@ -18,7 +18,7 @@ package com.alibaba.druid.sql.dialect.mysql.ast.statement; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -public class MySqlShowContributorsStatement extends MySqlStatementImpl { +public class MySqlShowContributorsStatement extends MySqlStatementImpl implements MySqlShowStatement { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowCreateDatabaseStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowCreateDatabaseStatement.java index fd67aaf519..0b79f7facf 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowCreateDatabaseStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowCreateDatabaseStatement.java @@ -18,7 +18,7 @@ package com.alibaba.druid.sql.dialect.mysql.ast.statement; import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -public class MySqlShowCreateDatabaseStatement extends MySqlStatementImpl { +public class MySqlShowCreateDatabaseStatement extends MySqlStatementImpl implements MySqlShowStatement { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowCreateEventStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowCreateEventStatement.java index 34ec26ec6e..a2445e28d7 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowCreateEventStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowCreateEventStatement.java @@ -18,7 +18,7 @@ package com.alibaba.druid.sql.dialect.mysql.ast.statement; import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -public class MySqlShowCreateEventStatement extends MySqlStatementImpl { +public class MySqlShowCreateEventStatement extends MySqlStatementImpl implements MySqlShowStatement { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowCreateFunctionStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowCreateFunctionStatement.java index 291989ed43..9442970ddf 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowCreateFunctionStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowCreateFunctionStatement.java @@ -18,7 +18,7 @@ package com.alibaba.druid.sql.dialect.mysql.ast.statement; import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -public class MySqlShowCreateFunctionStatement extends MySqlStatementImpl { +public class MySqlShowCreateFunctionStatement extends MySqlStatementImpl implements MySqlShowStatement { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowCreateProcedureStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowCreateProcedureStatement.java index 14c3026801..9b80c7b3fd 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowCreateProcedureStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowCreateProcedureStatement.java @@ -18,7 +18,7 @@ package com.alibaba.druid.sql.dialect.mysql.ast.statement; import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -public class MySqlShowCreateProcedureStatement extends MySqlStatementImpl { +public class MySqlShowCreateProcedureStatement extends MySqlStatementImpl implements MySqlShowStatement { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowCreateTableStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowCreateTableStatement.java index 3055dd6033..a0c8b4d097 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowCreateTableStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowCreateTableStatement.java @@ -18,7 +18,7 @@ package com.alibaba.druid.sql.dialect.mysql.ast.statement; import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -public class MySqlShowCreateTableStatement extends MySqlStatementImpl { +public class MySqlShowCreateTableStatement extends MySqlStatementImpl implements MySqlShowStatement { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowCreateTriggerStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowCreateTriggerStatement.java index ac5460fd23..2e9611c8cb 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowCreateTriggerStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowCreateTriggerStatement.java @@ -18,7 +18,7 @@ package com.alibaba.druid.sql.dialect.mysql.ast.statement; import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -public class MySqlShowCreateTriggerStatement extends MySqlStatementImpl { +public class MySqlShowCreateTriggerStatement extends MySqlStatementImpl implements MySqlShowStatement { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowCreateViewStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowCreateViewStatement.java index 40f5c4dd91..5596f08ab0 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowCreateViewStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowCreateViewStatement.java @@ -18,7 +18,7 @@ package com.alibaba.druid.sql.dialect.mysql.ast.statement; import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -public class MySqlShowCreateViewStatement extends MySqlStatementImpl { +public class MySqlShowCreateViewStatement extends MySqlStatementImpl implements MySqlShowStatement { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowDatabasesStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowDatabasesStatement.java index 96491082ec..a48e64e8af 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowDatabasesStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowDatabasesStatement.java @@ -19,7 +19,7 @@ import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.SQLName; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -public class MySqlShowDatabasesStatement extends MySqlStatementImpl { +public class MySqlShowDatabasesStatement extends MySqlStatementImpl implements MySqlShowStatement { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowEngineStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowEngineStatement.java index 378c8131ad..b4cef94d1a 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowEngineStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowEngineStatement.java @@ -18,7 +18,7 @@ package com.alibaba.druid.sql.dialect.mysql.ast.statement; import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -public class MySqlShowEngineStatement extends MySqlStatementImpl { +public class MySqlShowEngineStatement extends MySqlStatementImpl implements MySqlShowStatement { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowEnginesStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowEnginesStatement.java index 386efc01c4..37cfd208a8 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowEnginesStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowEnginesStatement.java @@ -17,7 +17,7 @@ package com.alibaba.druid.sql.dialect.mysql.ast.statement; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -public class MySqlShowEnginesStatement extends MySqlStatementImpl { +public class MySqlShowEnginesStatement extends MySqlStatementImpl implements MySqlShowStatement { private static final long serialVersionUID = 1L; private boolean storage = false; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowErrorsStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowErrorsStatement.java index 0ba9db8a1e..5ffa444e8f 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowErrorsStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowErrorsStatement.java @@ -18,7 +18,7 @@ package com.alibaba.druid.sql.dialect.mysql.ast.statement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock.Limit; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -public class MySqlShowErrorsStatement extends MySqlStatementImpl { +public class MySqlShowErrorsStatement extends MySqlStatementImpl implements MySqlShowStatement { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowEventsStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowEventsStatement.java index 1b067482be..3656d7bdde 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowEventsStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowEventsStatement.java @@ -18,7 +18,7 @@ package com.alibaba.druid.sql.dialect.mysql.ast.statement; import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -public class MySqlShowEventsStatement extends MySqlStatementImpl { +public class MySqlShowEventsStatement extends MySqlStatementImpl implements MySqlShowStatement { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowFunctionCodeStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowFunctionCodeStatement.java index a1a7e8b2c2..68e12e900a 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowFunctionCodeStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowFunctionCodeStatement.java @@ -18,7 +18,7 @@ package com.alibaba.druid.sql.dialect.mysql.ast.statement; import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -public class MySqlShowFunctionCodeStatement extends MySqlStatementImpl { +public class MySqlShowFunctionCodeStatement extends MySqlStatementImpl implements MySqlShowStatement { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowFunctionStatusStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowFunctionStatusStatement.java index 12378b3c2b..53edb1910b 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowFunctionStatusStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowFunctionStatusStatement.java @@ -18,7 +18,7 @@ package com.alibaba.druid.sql.dialect.mysql.ast.statement; import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -public class MySqlShowFunctionStatusStatement extends MySqlStatementImpl { +public class MySqlShowFunctionStatusStatement extends MySqlStatementImpl implements MySqlShowStatement { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowGrantsStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowGrantsStatement.java index 768f9a522b..30754e44c1 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowGrantsStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowGrantsStatement.java @@ -18,7 +18,7 @@ package com.alibaba.druid.sql.dialect.mysql.ast.statement; import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -public class MySqlShowGrantsStatement extends MySqlStatementImpl { +public class MySqlShowGrantsStatement extends MySqlStatementImpl implements MySqlShowStatement { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowIndexesStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowIndexesStatement.java index 5eff5a0a35..b2e5e99371 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowIndexesStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowIndexesStatement.java @@ -20,7 +20,7 @@ import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr; import com.alibaba.druid.sql.ast.expr.SQLPropertyExpr; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -public class MySqlShowIndexesStatement extends MySqlStatementImpl { +public class MySqlShowIndexesStatement extends MySqlStatementImpl implements MySqlShowStatement { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowKeysStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowKeysStatement.java index aabdbf7f50..63af10c844 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowKeysStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowKeysStatement.java @@ -20,7 +20,7 @@ import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr; import com.alibaba.druid.sql.ast.expr.SQLPropertyExpr; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -public class MySqlShowKeysStatement extends MySqlStatementImpl { +public class MySqlShowKeysStatement extends MySqlStatementImpl implements MySqlShowStatement { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowMasterLogsStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowMasterLogsStatement.java index 7477f926b1..5e5ee43361 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowMasterLogsStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowMasterLogsStatement.java @@ -18,7 +18,7 @@ package com.alibaba.druid.sql.dialect.mysql.ast.statement; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -public class MySqlShowMasterLogsStatement extends MySqlStatementImpl { +public class MySqlShowMasterLogsStatement extends MySqlStatementImpl implements MySqlShowStatement { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowMasterStatusStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowMasterStatusStatement.java index b1389ababd..a99b49e88f 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowMasterStatusStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowMasterStatusStatement.java @@ -18,7 +18,7 @@ package com.alibaba.druid.sql.dialect.mysql.ast.statement; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -public class MySqlShowMasterStatusStatement extends MySqlStatementImpl { +public class MySqlShowMasterStatusStatement extends MySqlStatementImpl implements MySqlShowStatement { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowOpenTablesStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowOpenTablesStatement.java index 3637e27b4d..e2c1629773 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowOpenTablesStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowOpenTablesStatement.java @@ -18,7 +18,7 @@ package com.alibaba.druid.sql.dialect.mysql.ast.statement; import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -public class MySqlShowOpenTablesStatement extends MySqlStatementImpl { +public class MySqlShowOpenTablesStatement extends MySqlStatementImpl implements MySqlShowStatement { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowPluginsStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowPluginsStatement.java index 3dd093b413..19415b19a1 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowPluginsStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowPluginsStatement.java @@ -18,7 +18,7 @@ package com.alibaba.druid.sql.dialect.mysql.ast.statement; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -public class MySqlShowPluginsStatement extends MySqlStatementImpl { +public class MySqlShowPluginsStatement extends MySqlStatementImpl implements MySqlShowStatement { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowPrivilegesStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowPrivilegesStatement.java index ad172b1c98..08f4b6f0d1 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowPrivilegesStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowPrivilegesStatement.java @@ -18,7 +18,7 @@ package com.alibaba.druid.sql.dialect.mysql.ast.statement; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -public class MySqlShowPrivilegesStatement extends MySqlStatementImpl { +public class MySqlShowPrivilegesStatement extends MySqlStatementImpl implements MySqlShowStatement { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowProcedureCodeStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowProcedureCodeStatement.java index c827f6ee0a..8df39c6d7b 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowProcedureCodeStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowProcedureCodeStatement.java @@ -18,7 +18,7 @@ package com.alibaba.druid.sql.dialect.mysql.ast.statement; import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -public class MySqlShowProcedureCodeStatement extends MySqlStatementImpl { +public class MySqlShowProcedureCodeStatement extends MySqlStatementImpl implements MySqlShowStatement { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowProcedureStatusStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowProcedureStatusStatement.java index 6ad9403429..3ae6fce5a1 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowProcedureStatusStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowProcedureStatusStatement.java @@ -18,7 +18,7 @@ package com.alibaba.druid.sql.dialect.mysql.ast.statement; import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -public class MySqlShowProcedureStatusStatement extends MySqlStatementImpl { +public class MySqlShowProcedureStatusStatement extends MySqlStatementImpl implements MySqlShowStatement { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowProcessListStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowProcessListStatement.java index 6a2bb5af8f..e2a3da1607 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowProcessListStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowProcessListStatement.java @@ -17,7 +17,7 @@ package com.alibaba.druid.sql.dialect.mysql.ast.statement; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -public class MySqlShowProcessListStatement extends MySqlStatementImpl { +public class MySqlShowProcessListStatement extends MySqlStatementImpl implements MySqlShowStatement { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowProfileStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowProfileStatement.java index eb9023457b..fdbdf1151b 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowProfileStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowProfileStatement.java @@ -22,7 +22,7 @@ import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock.Limit; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -public class MySqlShowProfileStatement extends MySqlStatementImpl { +public class MySqlShowProfileStatement extends MySqlStatementImpl implements MySqlShowStatement { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowProfilesStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowProfilesStatement.java index 822e7fb324..7b2174f1dc 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowProfilesStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowProfilesStatement.java @@ -17,7 +17,7 @@ package com.alibaba.druid.sql.dialect.mysql.ast.statement; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -public class MySqlShowProfilesStatement extends MySqlStatementImpl { +public class MySqlShowProfilesStatement extends MySqlStatementImpl implements MySqlShowStatement { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowRelayLogEventsStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowRelayLogEventsStatement.java index a36e058655..5aa49da5f9 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowRelayLogEventsStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowRelayLogEventsStatement.java @@ -19,7 +19,7 @@ import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock.Limit; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -public class MySqlShowRelayLogEventsStatement extends MySqlStatementImpl { +public class MySqlShowRelayLogEventsStatement extends MySqlStatementImpl implements MySqlShowStatement { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowSlaveHostsStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowSlaveHostsStatement.java index d5539fe704..8ebce36046 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowSlaveHostsStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowSlaveHostsStatement.java @@ -17,7 +17,7 @@ package com.alibaba.druid.sql.dialect.mysql.ast.statement; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -public class MySqlShowSlaveHostsStatement extends MySqlStatementImpl { +public class MySqlShowSlaveHostsStatement extends MySqlStatementImpl implements MySqlShowStatement { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowSlaveStatusStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowSlaveStatusStatement.java index 239d763bfe..3d0065082e 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowSlaveStatusStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowSlaveStatusStatement.java @@ -17,7 +17,7 @@ package com.alibaba.druid.sql.dialect.mysql.ast.statement; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -public class MySqlShowSlaveStatusStatement extends MySqlStatementImpl { +public class MySqlShowSlaveStatusStatement extends MySqlStatementImpl implements MySqlShowStatement { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowStatement.java new file mode 100644 index 0000000000..b4227d9086 --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowStatement.java @@ -0,0 +1,21 @@ +/* + * Copyright 1999-2011 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.sql.dialect.mysql.ast.statement; + + +public interface MySqlShowStatement { + +} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowStatusStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowStatusStatement.java index 38328172e7..028f2f814e 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowStatusStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowStatusStatement.java @@ -18,7 +18,7 @@ package com.alibaba.druid.sql.dialect.mysql.ast.statement; import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -public class MySqlShowStatusStatement extends MySqlStatementImpl { +public class MySqlShowStatusStatement extends MySqlStatementImpl implements MySqlShowStatement { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowTableStatusStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowTableStatusStatement.java index e420148831..58f750fe9a 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowTableStatusStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowTableStatusStatement.java @@ -18,7 +18,7 @@ package com.alibaba.druid.sql.dialect.mysql.ast.statement; import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -public class MySqlShowTableStatusStatement extends MySqlStatementImpl { +public class MySqlShowTableStatusStatement extends MySqlStatementImpl implements MySqlShowStatement { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowTablesStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowTablesStatement.java index 43aa955026..ed917d31e0 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowTablesStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowTablesStatement.java @@ -19,7 +19,7 @@ import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.SQLName; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -public class MySqlShowTablesStatement extends MySqlStatementImpl { +public class MySqlShowTablesStatement extends MySqlStatementImpl implements MySqlShowStatement { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowTriggersStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowTriggersStatement.java index 0217f27022..edfba267df 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowTriggersStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowTriggersStatement.java @@ -19,7 +19,7 @@ import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.SQLName; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -public class MySqlShowTriggersStatement extends MySqlStatementImpl { +public class MySqlShowTriggersStatement extends MySqlStatementImpl implements MySqlShowStatement { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowVariantsStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowVariantsStatement.java index 6afdec2cd0..eb781472af 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowVariantsStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowVariantsStatement.java @@ -18,7 +18,7 @@ package com.alibaba.druid.sql.dialect.mysql.ast.statement; import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -public class MySqlShowVariantsStatement extends MySqlStatementImpl { +public class MySqlShowVariantsStatement extends MySqlStatementImpl implements MySqlShowStatement { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowWarningsStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowWarningsStatement.java index 34b82409d7..5cde0ee01a 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowWarningsStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowWarningsStatement.java @@ -18,7 +18,7 @@ package com.alibaba.druid.sql.dialect.mysql.ast.statement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock.Limit; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -public class MySqlShowWarningsStatement extends MySqlStatementImpl { +public class MySqlShowWarningsStatement extends MySqlStatementImpl implements MySqlShowStatement { private static final long serialVersionUID = 1L; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java index 58263c0956..a35ad13013 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java @@ -2236,9 +2236,6 @@ public class MySqlStatementParser extends SQLStatementParser { } else if (lexer.token() == Token.KEY) { throw new ParserException("TODO " + lexer.token() + " " + lexer.stringVal()); } else if (lexer.token() == Token.CONSTRAINT) { - int mark = lexer.bp(); - char markChar = lexer.current(); - lexer.nextToken(); SQLName constraintName = this.exprParser.name(); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlEvalVisitorImpl.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlEvalVisitorImpl.java index 86a33a7c2f..b1571f31fa 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlEvalVisitorImpl.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlEvalVisitorImpl.java @@ -16,7 +16,9 @@ package com.alibaba.druid.sql.dialect.mysql.visitor; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import com.alibaba.druid.sql.ast.expr.SQLBetweenExpr; import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr; @@ -33,14 +35,16 @@ import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlBooleanExpr; import com.alibaba.druid.sql.visitor.SQLEvalVisitor; import com.alibaba.druid.sql.visitor.SQLEvalVisitorUtils; +import com.alibaba.druid.sql.visitor.functions.Function; public class MySqlEvalVisitorImpl extends MySqlASTVisitorAdapter implements SQLEvalVisitor { - private List parameters = new ArrayList(); + private Map functions = new HashMap(); + private List parameters = new ArrayList(); - private int variantIndex = -1; + private int variantIndex = -1; - private boolean markVariantIndex = true; + private boolean markVariantIndex = true; public MySqlEvalVisitorImpl(){ this(new ArrayList(1)); @@ -77,7 +81,7 @@ public class MySqlEvalVisitorImpl extends MySqlASTVisitorAdapter implements SQLE public boolean visit(SQLBinaryOpExpr x) { return SQLEvalVisitorUtils.visit(this, x); } - + public boolean visit(SQLUnaryExpr x) { return SQLEvalVisitorUtils.visit(this, x); } @@ -134,4 +138,13 @@ public class MySqlEvalVisitorImpl extends MySqlASTVisitorAdapter implements SQLE this.markVariantIndex = markVariantIndex; } + @Override + public Function getFunction(String funcName) { + return functions.get(funcName); + } + + @Override + public void registerFunction(String funcName, Function function) { + functions.put(funcName, function); + } } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleEvalVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleEvalVisitor.java index dfa16a1b07..72fa05fca5 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleEvalVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleEvalVisitor.java @@ -16,7 +16,9 @@ package com.alibaba.druid.sql.dialect.oracle.visitor; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr; import com.alibaba.druid.sql.ast.expr.SQLCaseExpr; @@ -31,14 +33,16 @@ import com.alibaba.druid.sql.ast.expr.SQLUnaryExpr; import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr; import com.alibaba.druid.sql.visitor.SQLEvalVisitor; import com.alibaba.druid.sql.visitor.SQLEvalVisitorUtils; +import com.alibaba.druid.sql.visitor.functions.Function; public class OracleEvalVisitor extends OracleASTVisitorAdapter implements SQLEvalVisitor { - private List parameters = new ArrayList(); + private Map functions = new HashMap(); + private List parameters = new ArrayList(); - private int variantIndex = -1; + private int variantIndex = -1; - private boolean markVariantIndex = true; + private boolean markVariantIndex = true; public OracleEvalVisitor(){ this(new ArrayList(1)); @@ -75,7 +79,7 @@ public class OracleEvalVisitor extends OracleASTVisitorAdapter implements SQLEva public boolean visit(SQLBinaryOpExpr x) { return SQLEvalVisitorUtils.visit(this, x); } - + public boolean visit(SQLUnaryExpr x) { return SQLEvalVisitorUtils.visit(this, x); } @@ -121,4 +125,13 @@ public class OracleEvalVisitor extends OracleASTVisitorAdapter implements SQLEva this.markVariantIndex = markVariantIndex; } + @Override + public Function getFunction(String funcName) { + return functions.get(funcName); + } + + @Override + public void registerFunction(String funcName, Function function) { + functions.put(funcName, function); + } } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGEvalVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGEvalVisitor.java index 721c0e7326..dbd13b365a 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGEvalVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGEvalVisitor.java @@ -16,7 +16,9 @@ package com.alibaba.druid.sql.dialect.postgresql.visitor; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr; import com.alibaba.druid.sql.ast.expr.SQLCaseExpr; @@ -31,14 +33,16 @@ import com.alibaba.druid.sql.ast.expr.SQLUnaryExpr; import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr; import com.alibaba.druid.sql.visitor.SQLEvalVisitor; import com.alibaba.druid.sql.visitor.SQLEvalVisitorUtils; +import com.alibaba.druid.sql.visitor.functions.Function; public class PGEvalVisitor extends PGASTVisitorAdapter implements SQLEvalVisitor { - private List parameters = new ArrayList(); + private Map functions = new HashMap(); + private List parameters = new ArrayList(); - private int variantIndex = -1; + private int variantIndex = -1; - private boolean markVariantIndex = true; + private boolean markVariantIndex = true; public PGEvalVisitor(){ this(new ArrayList(1)); @@ -75,7 +79,7 @@ public class PGEvalVisitor extends PGASTVisitorAdapter implements SQLEvalVisitor public boolean visit(SQLBinaryOpExpr x) { return SQLEvalVisitorUtils.visit(this, x); } - + public boolean visit(SQLUnaryExpr x) { return SQLEvalVisitorUtils.visit(this, x); } @@ -121,4 +125,13 @@ public class PGEvalVisitor extends PGASTVisitorAdapter implements SQLEvalVisitor this.markVariantIndex = markVariantIndex; } + @Override + public Function getFunction(String funcName) { + return functions.get(funcName); + } + + @Override + public void registerFunction(String funcName, Function function) { + functions.put(funcName, function); + } } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerEvalVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerEvalVisitor.java index f4b5954e40..986f0dc6ae 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerEvalVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerEvalVisitor.java @@ -16,7 +16,9 @@ package com.alibaba.druid.sql.dialect.sqlserver.visitor; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr; import com.alibaba.druid.sql.ast.expr.SQLCaseExpr; @@ -31,14 +33,16 @@ import com.alibaba.druid.sql.ast.expr.SQLUnaryExpr; import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr; import com.alibaba.druid.sql.visitor.SQLEvalVisitor; import com.alibaba.druid.sql.visitor.SQLEvalVisitorUtils; +import com.alibaba.druid.sql.visitor.functions.Function; public class SQLServerEvalVisitor extends SQLServerASTVisitorAdapter implements SQLEvalVisitor { - private List parameters = new ArrayList(); + private Map functions = new HashMap(); + private List parameters = new ArrayList(); - private int variantIndex = -1; + private int variantIndex = -1; - private boolean markVariantIndex = true; + private boolean markVariantIndex = true; public SQLServerEvalVisitor(){ this(new ArrayList(1)); @@ -75,7 +79,7 @@ public class SQLServerEvalVisitor extends SQLServerASTVisitorAdapter implements public boolean visit(SQLBinaryOpExpr x) { return SQLEvalVisitorUtils.visit(this, x); } - + public boolean visit(SQLUnaryExpr x) { return SQLEvalVisitorUtils.visit(this, x); } @@ -121,4 +125,13 @@ public class SQLServerEvalVisitor extends SQLServerASTVisitorAdapter implements this.markVariantIndex = markVariantIndex; } + @Override + public Function getFunction(String funcName) { + return functions.get(funcName); + } + + @Override + public void registerFunction(String funcName, Function function) { + functions.put(funcName, function); + } } diff --git a/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java b/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java index fbd798ec4e..e3aefb6180 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java @@ -335,8 +335,12 @@ public class SQLExprParser extends SQLParser { sqlExpr = new SQLIdentifierExpr('-' + lexer.stringVal()); lexer.nextToken(); break; + case QUES: + sqlExpr = new SQLUnaryExpr(SQLUnaryOperator.Negative, new SQLVariantRefExpr("?")); + lexer.nextToken(); + break; default: - throw new ParserException("TODO"); + throw new ParserException("TODO : " + lexer.token()); } break; case PLUS: diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SQLEvalVisitor.java b/src/main/java/com/alibaba/druid/sql/visitor/SQLEvalVisitor.java index 68b042b97e..81a4404184 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLEvalVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLEvalVisitor.java @@ -17,17 +17,24 @@ package com.alibaba.druid.sql.visitor; import java.util.List; +import com.alibaba.druid.sql.visitor.functions.Function; + public interface SQLEvalVisitor extends SQLASTVisitor { - public static final String EVAL_VALUE = "eval.value"; + public static final String EVAL_VALUE = "eval.value"; + public static final Object EVAL_ERROR = new Object(); + + Function getFunction(String funcName); + + void registerFunction(String funcName, Function function); List getParameters(); - + void setParameters(List parameters); int incrementAndGetVariantIndex(); - + boolean isMarkVariantIndex(); - + void setMarkVariantIndex(boolean markVariantIndex); } diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SQLEvalVisitorImpl.java b/src/main/java/com/alibaba/druid/sql/visitor/SQLEvalVisitorImpl.java index 576dbb1063..013afb6af7 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLEvalVisitorImpl.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLEvalVisitorImpl.java @@ -16,7 +16,9 @@ package com.alibaba.druid.sql.visitor; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr; import com.alibaba.druid.sql.ast.expr.SQLCaseExpr; @@ -28,14 +30,17 @@ import com.alibaba.druid.sql.ast.expr.SQLNullExpr; import com.alibaba.druid.sql.ast.expr.SQLNumberExpr; import com.alibaba.druid.sql.ast.expr.SQLQueryExpr; import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr; +import com.alibaba.druid.sql.visitor.functions.Function; public class SQLEvalVisitorImpl extends SQLASTVisitorAdapter implements SQLEvalVisitor { - private List parameters = new ArrayList(); + private List parameters = new ArrayList(); - private int variantIndex = -1; + private Map functions = new HashMap(); - private boolean markVariantIndex = true; + private int variantIndex = -1; + + private boolean markVariantIndex = true; public SQLEvalVisitorImpl(){ this(new ArrayList(1)); @@ -114,4 +119,13 @@ public class SQLEvalVisitorImpl extends SQLASTVisitorAdapter implements SQLEvalV this.markVariantIndex = markVariantIndex; } + @Override + public Function getFunction(String funcName) { + return functions.get(funcName); + } + + @Override + public void registerFunction(String funcName, Function function) { + functions.put(funcName, function); + } } diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SQLEvalVisitorUtils.java b/src/main/java/com/alibaba/druid/sql/visitor/SQLEvalVisitorUtils.java index 51044dc3b7..3365af2f9b 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLEvalVisitorUtils.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLEvalVisitorUtils.java @@ -24,6 +24,7 @@ import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.regex.Pattern; @@ -53,12 +54,30 @@ import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlEvalVisitorImpl; import com.alibaba.druid.sql.dialect.oracle.visitor.OracleEvalVisitor; import com.alibaba.druid.sql.dialect.postgresql.visitor.PGEvalVisitor; import com.alibaba.druid.sql.dialect.sqlserver.visitor.SQLServerEvalVisitor; +import com.alibaba.druid.sql.visitor.functions.Ascii; +import com.alibaba.druid.sql.visitor.functions.Concat; +import com.alibaba.druid.sql.visitor.functions.Function; +import com.alibaba.druid.sql.visitor.functions.Instr; +import com.alibaba.druid.sql.visitor.functions.Lcase; +import com.alibaba.druid.sql.visitor.functions.Left; +import com.alibaba.druid.sql.visitor.functions.Length; +import com.alibaba.druid.sql.visitor.functions.Now; +import com.alibaba.druid.sql.visitor.functions.Reverse; +import com.alibaba.druid.sql.visitor.functions.Right; +import com.alibaba.druid.sql.visitor.functions.Trim; +import com.alibaba.druid.sql.visitor.functions.Ucase; import com.alibaba.druid.util.JdbcUtils; import com.alibaba.druid.wall.spi.WallVisitorUtils; import com.alibaba.druid.wall.spi.WallVisitorUtils.WallConditionContext; public class SQLEvalVisitorUtils { + private static Map functions = new HashMap(); + + static { + registerBaseFunctions(); + } + public static Object evalExpr(String dbType, String expr, Object... parameters) { SQLExpr sqlExpr = SQLUtils.toSQLExpr(expr, dbType); return eval(dbType, sqlExpr, parameters); @@ -124,205 +143,37 @@ public class SQLEvalVisitorUtils { return new SQLEvalVisitorImpl(); } + static void registerBaseFunctions() { + functions.put("now", Now.instance); + functions.put("concat", Concat.instance); + functions.put("ascii", Ascii.instance); + functions.put("instr", Instr.instance); + functions.put("left", Left.instance); + functions.put("right", Right.instance); + functions.put("reverse", Reverse.instance); + functions.put("len", Length.instance); + functions.put("length", Length.instance); + functions.put("trim", Trim.instance); + functions.put("ucase", Ucase.instance); + functions.put("upper", Ucase.instance); + functions.put("ucase", Lcase.instance); + functions.put("lower", Lcase.instance); + } + public static boolean visit(SQLEvalVisitor visitor, SQLMethodInvokeExpr x) { String methodName = x.getMethodName().toLowerCase(); - if ("concat".equals(methodName)) { - StringBuilder buf = new StringBuilder(); + Function function = functions.get(methodName); - for (SQLExpr item : x.getParameters()) { - item.accept(visitor); - - Object itemValue = item.getAttributes().get(EVAL_VALUE); - if (itemValue == null) { - continue; - } - buf.append(itemValue.toString()); + if (function != null) { + Object result = function.eval(visitor, x); + if (result != SQLEvalVisitor.EVAL_ERROR) { + x.getAttributes().put(EVAL_VALUE, result); } + return false; + } - x.getAttributes().put(EVAL_VALUE, buf.toString()); - } else if ("now".equals(methodName)) { - x.getAttributes().put(EVAL_VALUE, new Date()); - } else if ("ascii".equals(methodName)) { - if (x.getParameters().size() == 0) { - return false; - } - SQLExpr param = x.getParameters().get(0); - param.accept(visitor); - - Object paramValue = param.getAttributes().get(EVAL_VALUE); - if (paramValue == null) { - return false; - } - - String strValue = paramValue.toString(); - if (strValue.length() == 0) { - return false; - } - - int ascii = strValue.charAt(0); - x.getAttributes().put(EVAL_VALUE, ascii); - } else if ("instr".equals(methodName)) { - if (x.getParameters().size() != 2) { - return false; - } - - SQLExpr param0 = x.getParameters().get(0); - SQLExpr param1 = x.getParameters().get(1); - param0.accept(visitor); - param1.accept(visitor); - - Object param0Value = param0.getAttributes().get(EVAL_VALUE); - Object param1Value = param1.getAttributes().get(EVAL_VALUE); - if (param0Value == null || param1Value == null) { - return false; - } - - String strValue0 = param0Value.toString(); - String strValue1 = param1Value.toString(); - - int result = strValue0.indexOf(strValue1) + 1; - - x.putAttribute(EVAL_VALUE, result); - } else if ("left".equals(methodName)) { - if (x.getParameters().size() != 2) { - return false; - } - - SQLExpr param0 = x.getParameters().get(0); - SQLExpr param1 = x.getParameters().get(1); - param0.accept(visitor); - param1.accept(visitor); - - Object param0Value = param0.getAttributes().get(EVAL_VALUE); - Object param1Value = param1.getAttributes().get(EVAL_VALUE); - if (param0Value == null || param1Value == null) { - return false; - } - - String strValue = param0Value.toString(); - int intValue = castToInteger(param1Value); - - String result = strValue.substring(0, intValue); - - x.putAttribute(EVAL_VALUE, result); - } else if ("right".equals(methodName)) { - if (x.getParameters().size() != 2) { - return false; - } - - SQLExpr param0 = x.getParameters().get(0); - SQLExpr param1 = x.getParameters().get(1); - param0.accept(visitor); - param1.accept(visitor); - - Object param0Value = param0.getAttributes().get(EVAL_VALUE); - Object param1Value = param1.getAttributes().get(EVAL_VALUE); - if (param0Value == null || param1Value == null) { - return false; - } - - String strValue = param0Value.toString(); - int intValue = castToInteger(param1Value); - - String result = strValue.substring(strValue.length() - intValue, strValue.length()); - - x.putAttribute(EVAL_VALUE, result); - } else if ("reverse".equals(methodName)) { - if (x.getParameters().size() != 1) { - return false; - } - - SQLExpr param0 = x.getParameters().get(0); - param0.accept(visitor); - - Object param0Value = param0.getAttributes().get(EVAL_VALUE); - if (param0Value == null) { - return false; - } - - String strValue = param0Value.toString(); - - StringBuilder buf = new StringBuilder(); - for (int i = strValue.length() - 1; i >= 0; --i) { - buf.append(strValue.charAt(i)); - } - String result = buf.toString(); - - x.putAttribute(EVAL_VALUE, result); - } else if ("trim".equals(methodName)) { - if (x.getParameters().size() != 1) { - return false; - } - - SQLExpr param0 = x.getParameters().get(0); - param0.accept(visitor); - - Object param0Value = param0.getAttributes().get(EVAL_VALUE); - if (param0Value == null) { - return false; - } - - String strValue = param0Value.toString(); - String result = strValue.trim(); - - x.putAttribute(EVAL_VALUE, result); - } else if ("length".equals(methodName) || "len".equals(methodName)) { - if (x.getParameters().size() != 1) { - return false; - } - - SQLExpr param0 = x.getParameters().get(0); - param0.accept(visitor); - - Object param0Value = param0.getAttributes().get(EVAL_VALUE); - if (param0Value == null) { - return false; - } - - String strValue = param0Value.toString(); - - int result = strValue.length(); - - x.putAttribute(EVAL_VALUE, result); - } else if ("ucase".equals(methodName) || "upper".equals(methodName)) { - if (x.getParameters().size() != 1) { - return false; - } - - SQLExpr param0 = x.getParameters().get(0); - param0.accept(visitor); - - Object param0Value = param0.getAttributes().get(EVAL_VALUE); - if (param0Value == null) { - return false; - } - - String strValue = param0Value.toString(); - - String result = strValue.toUpperCase(); - - x.putAttribute(EVAL_VALUE, result); - } else if ("lcase".equals(methodName) || "lower".equals(methodName)) { - if (x.getParameters().size() != 1) { - return false; - } - - SQLExpr param0 = x.getParameters().get(0); - param0.accept(visitor); - - Object param0Value = param0.getAttributes().get(EVAL_VALUE); - if (param0Value == null) { - return false; - } - - String strValue = param0Value.toString(); - - String result = strValue.toLowerCase(); - - x.putAttribute(EVAL_VALUE, result); - - } else if ("mod".equals(methodName)) { + if ("mod".equals(methodName)) { if (x.getParameters().size() != 2) { return false; } diff --git a/src/main/java/com/alibaba/druid/sql/visitor/functions/Ascii.java b/src/main/java/com/alibaba/druid/sql/visitor/functions/Ascii.java new file mode 100644 index 0000000000..5423220687 --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/visitor/functions/Ascii.java @@ -0,0 +1,48 @@ +/* + * Copyright 1999-2011 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.sql.visitor.functions; + +import static com.alibaba.druid.sql.visitor.SQLEvalVisitor.EVAL_VALUE; + +import com.alibaba.druid.sql.ast.SQLExpr; +import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr; +import com.alibaba.druid.sql.visitor.SQLEvalVisitor; + +public class Ascii implements Function { + + public final static Ascii instance = new Ascii(); + + public Object eval(SQLEvalVisitor visitor, SQLMethodInvokeExpr x) { + if (x.getParameters().size() == 0) { + return SQLEvalVisitor.EVAL_ERROR; + } + SQLExpr param = x.getParameters().get(0); + param.accept(visitor); + + Object paramValue = param.getAttributes().get(EVAL_VALUE); + if (paramValue == null) { + return SQLEvalVisitor.EVAL_ERROR; + } + + String strValue = paramValue.toString(); + if (strValue.length() == 0) { + return SQLEvalVisitor.EVAL_ERROR; + } + + int ascii = strValue.charAt(0); + return ascii; + } +} diff --git a/src/main/java/com/alibaba/druid/sql/visitor/functions/Concat.java b/src/main/java/com/alibaba/druid/sql/visitor/functions/Concat.java new file mode 100644 index 0000000000..57aa04f7e7 --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/visitor/functions/Concat.java @@ -0,0 +1,43 @@ +/* + * Copyright 1999-2011 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.sql.visitor.functions; + +import static com.alibaba.druid.sql.visitor.SQLEvalVisitor.EVAL_VALUE; + +import com.alibaba.druid.sql.ast.SQLExpr; +import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr; +import com.alibaba.druid.sql.visitor.SQLEvalVisitor; + +public class Concat implements Function { + + public final static Concat instance = new Concat(); + + public Object eval(SQLEvalVisitor visitor, SQLMethodInvokeExpr x) { + StringBuilder buf = new StringBuilder(); + + for (SQLExpr item : x.getParameters()) { + item.accept(visitor); + + Object itemValue = item.getAttributes().get(EVAL_VALUE); + if (itemValue == null) { + continue; + } + buf.append(itemValue.toString()); + } + + return buf.toString(); + } +} diff --git a/src/main/java/com/alibaba/druid/sql/visitor/functions/Function.java b/src/main/java/com/alibaba/druid/sql/visitor/functions/Function.java new file mode 100644 index 0000000000..001ddf2edc --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/visitor/functions/Function.java @@ -0,0 +1,24 @@ +/* + * Copyright 1999-2011 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.sql.visitor.functions; + +import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr; +import com.alibaba.druid.sql.visitor.SQLEvalVisitor; + + +public interface Function { + Object eval(SQLEvalVisitor visitor, SQLMethodInvokeExpr x); +} diff --git a/src/main/java/com/alibaba/druid/sql/visitor/functions/Hex.java b/src/main/java/com/alibaba/druid/sql/visitor/functions/Hex.java new file mode 100644 index 0000000000..b749b6d4ae --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/visitor/functions/Hex.java @@ -0,0 +1,33 @@ +/* + * Copyright 1999-2011 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.sql.visitor.functions; + +import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr; +import com.alibaba.druid.sql.parser.ParserException; +import com.alibaba.druid.sql.visitor.SQLEvalVisitor; + + +public class Hex implements Function { + public final static Hex instance = new Hex(); + + public Object eval(SQLEvalVisitor visitor, SQLMethodInvokeExpr x) { + if(x.getParameters().size() != 1) { + throw new ParserException("argument's != 1, " + x.getParameters().size()); + } + + return null; + } +} diff --git a/src/main/java/com/alibaba/druid/sql/visitor/functions/Instr.java b/src/main/java/com/alibaba/druid/sql/visitor/functions/Instr.java new file mode 100644 index 0000000000..45a58f5cc2 --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/visitor/functions/Instr.java @@ -0,0 +1,50 @@ +/* + * Copyright 1999-2011 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.sql.visitor.functions; + +import static com.alibaba.druid.sql.visitor.SQLEvalVisitor.EVAL_VALUE; + +import com.alibaba.druid.sql.ast.SQLExpr; +import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr; +import com.alibaba.druid.sql.visitor.SQLEvalVisitor; + + +public class Instr implements Function { + public final static Instr instance = new Instr(); + + public Object eval(SQLEvalVisitor visitor, SQLMethodInvokeExpr x) { + if (x.getParameters().size() != 2) { + return SQLEvalVisitor.EVAL_ERROR; + } + + SQLExpr param0 = x.getParameters().get(0); + SQLExpr param1 = x.getParameters().get(1); + param0.accept(visitor); + param1.accept(visitor); + + Object param0Value = param0.getAttributes().get(EVAL_VALUE); + Object param1Value = param1.getAttributes().get(EVAL_VALUE); + if (param0Value == null || param1Value == null) { + return SQLEvalVisitor.EVAL_ERROR; + } + + String strValue0 = param0Value.toString(); + String strValue1 = param1Value.toString(); + + int result = strValue0.indexOf(strValue1) + 1; + return result; + } +} diff --git a/src/main/java/com/alibaba/druid/sql/visitor/functions/Lcase.java b/src/main/java/com/alibaba/druid/sql/visitor/functions/Lcase.java new file mode 100644 index 0000000000..71256e3ad6 --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/visitor/functions/Lcase.java @@ -0,0 +1,47 @@ +/* + * Copyright 1999-2011 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.sql.visitor.functions; + +import static com.alibaba.druid.sql.visitor.SQLEvalVisitor.EVAL_VALUE; + +import com.alibaba.druid.sql.ast.SQLExpr; +import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr; +import com.alibaba.druid.sql.visitor.SQLEvalVisitor; + + +public class Lcase implements Function { + public final static Lcase instance = new Lcase(); + + public Object eval(SQLEvalVisitor visitor, SQLMethodInvokeExpr x) { + if (x.getParameters().size() != 1) { + return SQLEvalVisitor.EVAL_ERROR; + } + + SQLExpr param0 = x.getParameters().get(0); + param0.accept(visitor); + + Object param0Value = param0.getAttributes().get(EVAL_VALUE); + if (param0Value == null) { + return SQLEvalVisitor.EVAL_ERROR; + } + + String strValue = param0Value.toString(); + + String result = strValue.toLowerCase(); + + return result; + } +} diff --git a/src/main/java/com/alibaba/druid/sql/visitor/functions/Left.java b/src/main/java/com/alibaba/druid/sql/visitor/functions/Left.java new file mode 100644 index 0000000000..5f117ddcf2 --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/visitor/functions/Left.java @@ -0,0 +1,52 @@ +/* + * Copyright 1999-2011 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.sql.visitor.functions; + +import static com.alibaba.druid.sql.visitor.SQLEvalVisitor.EVAL_VALUE; + +import com.alibaba.druid.sql.ast.SQLExpr; +import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr; +import com.alibaba.druid.sql.visitor.SQLEvalVisitor; +import com.alibaba.druid.sql.visitor.SQLEvalVisitorUtils; + +public class Left implements Function { + + public final static Left instance = new Left(); + + public Object eval(SQLEvalVisitor visitor, SQLMethodInvokeExpr x) { + if (x.getParameters().size() != 2) { + return SQLEvalVisitor.EVAL_ERROR; + } + + SQLExpr param0 = x.getParameters().get(0); + SQLExpr param1 = x.getParameters().get(1); + param0.accept(visitor); + param1.accept(visitor); + + Object param0Value = param0.getAttributes().get(EVAL_VALUE); + Object param1Value = param1.getAttributes().get(EVAL_VALUE); + if (param0Value == null || param1Value == null) { + return SQLEvalVisitor.EVAL_ERROR; + } + + String strValue = param0Value.toString(); + int intValue = SQLEvalVisitorUtils.castToInteger(param1Value); + + String result = strValue.substring(0, intValue); + + return result; + } +} diff --git a/src/main/java/com/alibaba/druid/sql/visitor/functions/Length.java b/src/main/java/com/alibaba/druid/sql/visitor/functions/Length.java new file mode 100644 index 0000000000..5def41c8c2 --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/visitor/functions/Length.java @@ -0,0 +1,46 @@ +/* + * Copyright 1999-2011 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.sql.visitor.functions; + +import static com.alibaba.druid.sql.visitor.SQLEvalVisitor.EVAL_VALUE; + +import com.alibaba.druid.sql.ast.SQLExpr; +import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr; +import com.alibaba.druid.sql.visitor.SQLEvalVisitor; + + +public class Length implements Function { + public final static Length instance = new Length(); + + public Object eval(SQLEvalVisitor visitor, SQLMethodInvokeExpr x) { + if (x.getParameters().size() != 1) { + return SQLEvalVisitor.EVAL_ERROR; + } + + SQLExpr param0 = x.getParameters().get(0); + param0.accept(visitor); + + Object param0Value = param0.getAttributes().get(EVAL_VALUE); + if (param0Value == null) { + return SQLEvalVisitor.EVAL_ERROR; + } + + String strValue = param0Value.toString(); + + int result = strValue.length(); + return result; + } +} diff --git a/src/main/java/com/alibaba/druid/sql/visitor/functions/Now.java b/src/main/java/com/alibaba/druid/sql/visitor/functions/Now.java new file mode 100644 index 0000000000..8df567540e --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/visitor/functions/Now.java @@ -0,0 +1,30 @@ +/* + * Copyright 1999-2011 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.sql.visitor.functions; + +import java.util.Date; + +import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr; +import com.alibaba.druid.sql.visitor.SQLEvalVisitor; + + +public class Now implements Function { + public final static Now instance = new Now(); + + public Object eval(SQLEvalVisitor visitor, SQLMethodInvokeExpr x) { + return new Date(); + } +} diff --git a/src/main/java/com/alibaba/druid/sql/visitor/functions/Reverse.java b/src/main/java/com/alibaba/druid/sql/visitor/functions/Reverse.java new file mode 100644 index 0000000000..e72db58cb6 --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/visitor/functions/Reverse.java @@ -0,0 +1,50 @@ +/* + * Copyright 1999-2011 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.sql.visitor.functions; + +import static com.alibaba.druid.sql.visitor.SQLEvalVisitor.EVAL_VALUE; + +import com.alibaba.druid.sql.ast.SQLExpr; +import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr; +import com.alibaba.druid.sql.visitor.SQLEvalVisitor; + + +public class Reverse implements Function { + public final static Reverse instance = new Reverse(); + + public Object eval(SQLEvalVisitor visitor, SQLMethodInvokeExpr x) { + if (x.getParameters().size() != 1) { + return SQLEvalVisitor.EVAL_ERROR; + } + + SQLExpr param0 = x.getParameters().get(0); + param0.accept(visitor); + + Object param0Value = param0.getAttributes().get(EVAL_VALUE); + if (param0Value == null) { + return SQLEvalVisitor.EVAL_ERROR; + } + + String strValue = param0Value.toString(); + + StringBuilder buf = new StringBuilder(); + for (int i = strValue.length() - 1; i >= 0; --i) { + buf.append(strValue.charAt(i)); + } + String result = buf.toString(); + return result; + } +} diff --git a/src/main/java/com/alibaba/druid/sql/visitor/functions/Right.java b/src/main/java/com/alibaba/druid/sql/visitor/functions/Right.java new file mode 100644 index 0000000000..718d554d3f --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/visitor/functions/Right.java @@ -0,0 +1,51 @@ +/* + * Copyright 1999-2011 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.sql.visitor.functions; + +import static com.alibaba.druid.sql.visitor.SQLEvalVisitor.EVAL_VALUE; + +import com.alibaba.druid.sql.ast.SQLExpr; +import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr; +import com.alibaba.druid.sql.visitor.SQLEvalVisitor; +import com.alibaba.druid.sql.visitor.SQLEvalVisitorUtils; + + +public class Right implements Function { + public final static Right instance = new Right(); + + public Object eval(SQLEvalVisitor visitor, SQLMethodInvokeExpr x) { + if (x.getParameters().size() != 2) { + return SQLEvalVisitor.EVAL_ERROR; + } + + SQLExpr param0 = x.getParameters().get(0); + SQLExpr param1 = x.getParameters().get(1); + param0.accept(visitor); + param1.accept(visitor); + + Object param0Value = param0.getAttributes().get(EVAL_VALUE); + Object param1Value = param1.getAttributes().get(EVAL_VALUE); + if (param0Value == null || param1Value == null) { + return SQLEvalVisitor.EVAL_ERROR; + } + + String strValue = param0Value.toString(); + int intValue = SQLEvalVisitorUtils.castToInteger(param1Value); + + String result = strValue.substring(strValue.length() - intValue, strValue.length()); + return result; + } +} diff --git a/src/main/java/com/alibaba/druid/sql/visitor/functions/Trim.java b/src/main/java/com/alibaba/druid/sql/visitor/functions/Trim.java new file mode 100644 index 0000000000..1bf16ba88f --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/visitor/functions/Trim.java @@ -0,0 +1,45 @@ +/* + * Copyright 1999-2011 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.sql.visitor.functions; + +import static com.alibaba.druid.sql.visitor.SQLEvalVisitor.EVAL_VALUE; + +import com.alibaba.druid.sql.ast.SQLExpr; +import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr; +import com.alibaba.druid.sql.visitor.SQLEvalVisitor; + +public class Trim implements Function { + + public final static Trim instance = new Trim(); + + public Object eval(SQLEvalVisitor visitor, SQLMethodInvokeExpr x) { + if (x.getParameters().size() != 1) { + return SQLEvalVisitor.EVAL_ERROR; + } + + SQLExpr param0 = x.getParameters().get(0); + param0.accept(visitor); + + Object param0Value = param0.getAttributes().get(EVAL_VALUE); + if (param0Value == null) { + return SQLEvalVisitor.EVAL_ERROR; + } + + String strValue = param0Value.toString(); + String result = strValue.trim(); + return result; + } +} diff --git a/src/main/java/com/alibaba/druid/sql/visitor/functions/Ucase.java b/src/main/java/com/alibaba/druid/sql/visitor/functions/Ucase.java new file mode 100644 index 0000000000..48b18d6eca --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/visitor/functions/Ucase.java @@ -0,0 +1,46 @@ +/* + * Copyright 1999-2011 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.sql.visitor.functions; + +import static com.alibaba.druid.sql.visitor.SQLEvalVisitor.EVAL_VALUE; + +import com.alibaba.druid.sql.ast.SQLExpr; +import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr; +import com.alibaba.druid.sql.visitor.SQLEvalVisitor; + + +public class Ucase implements Function { + public final static Ucase instance = new Ucase(); + + public Object eval(SQLEvalVisitor visitor, SQLMethodInvokeExpr x) { + if (x.getParameters().size() != 1) { + return SQLEvalVisitor.EVAL_ERROR; + } + + SQLExpr param0 = x.getParameters().get(0); + param0.accept(visitor); + + Object param0Value = param0.getAttributes().get(EVAL_VALUE); + if (param0Value == null) { + return SQLEvalVisitor.EVAL_ERROR; + } + + String strValue = param0Value.toString(); + + String result = strValue.toUpperCase(); + return result; + } +} diff --git a/src/main/java/com/alibaba/druid/wall/WallConfig.java b/src/main/java/com/alibaba/druid/wall/WallConfig.java index 56abcf3192..08e98d9097 100644 --- a/src/main/java/com/alibaba/druid/wall/WallConfig.java +++ b/src/main/java/com/alibaba/druid/wall/WallConfig.java @@ -47,7 +47,7 @@ public class WallConfig implements WallConfigMBean { private boolean minusAllow = false; private boolean intersectAllow = false; private boolean replaceAllow = true; - private boolean setAllow = true; + private boolean setAllow = true; private boolean multiStatementAllow = false; @@ -58,6 +58,7 @@ public class WallConfig implements WallConfigMBean { private boolean constArithmeticAllow = true; private boolean describeAllow = false; + private boolean showAllow = false; private boolean schemaCheck = true; private boolean tableCheck = true; @@ -244,6 +245,14 @@ public class WallConfig implements WallConfigMBean { this.describeAllow = describeAllow; } + public boolean isShowAllow() { + return showAllow; + } + + public void setShowAllow(boolean showAllow) { + this.showAllow = showAllow; + } + public boolean isTruncateAllow() { return truncateAllow; } diff --git a/src/main/java/com/alibaba/druid/wall/spi/MySqlWallVisitor.java b/src/main/java/com/alibaba/druid/wall/spi/MySqlWallVisitor.java index 29f48e9667..58b182629a 100644 --- a/src/main/java/com/alibaba/druid/wall/spi/MySqlWallVisitor.java +++ b/src/main/java/com/alibaba/druid/wall/spi/MySqlWallVisitor.java @@ -50,6 +50,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock.Limit; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSetCharSetStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSetNamesStatement; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlUnionQuery; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlUpdateStatement; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; @@ -254,10 +255,6 @@ public class MySqlWallVisitor extends MySqlASTVisitorAdapter implements WallVisi return; } - if (config.isNoneBaseStatementAllow()) { - return; - } - boolean allow = false; if (x instanceof SQLInsertStatement) { allow = true; @@ -279,6 +276,12 @@ public class MySqlWallVisitor extends MySqlASTVisitorAdapter implements WallVisi || x instanceof MySqlSetNamesStatement // || x instanceof SQLSetStatement) { allow = config.isSetAllow(); + } else if (x instanceof MySqlShowStatement) { + allow = config.isShowAllow(); + } else { + if (config.isNoneBaseStatementAllow()) { + return; + } } if (!allow) { 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 1218523a27..02abceec2f 100644 --- a/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java +++ b/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java @@ -58,6 +58,7 @@ import com.alibaba.druid.sql.ast.statement.SQLUnionOperator; import com.alibaba.druid.sql.ast.statement.SQLUnionQuery; import com.alibaba.druid.sql.ast.statement.SQLUpdateStatement; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlBooleanExpr; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlUpdateStatement; import com.alibaba.druid.sql.visitor.ExportParameterVisitor; import com.alibaba.druid.sql.visitor.SQLEvalVisitorUtils; import com.alibaba.druid.support.logging.Log; @@ -360,14 +361,29 @@ public class WallVisitorUtils { return; } - if (x.getWhere() == null - || Boolean.TRUE == getConditionValue(visitor, x.getWhere(), - visitor.getConfig().isUpdateWhereAlayTrueCheck())) { - addViolation(visitor, x); - return; + if (visitor.getConfig().isUpdateWhereAlayTrueCheck()) { + if (x.getWhere() == null) { + if (x instanceof MySqlUpdateStatement) { + MySqlUpdateStatement mysqlUpdate = (MySqlUpdateStatement) x; + if (mysqlUpdate.getLimit() == null) { + addViolation(visitor, x); + return; + } + } else { + addViolation(visitor, x); + return; + } + } + + if (Boolean.TRUE == getConditionValue(visitor, x.getWhere(), true)) { + addViolation(visitor, x); + return; + } } - x.getWhere().setParent(x); + if (x.getWhere() != null) { + x.getWhere().setParent(x); + } checkCondition(visitor, x.getWhere()); checkConditionForMultiTenant(visitor, x.getWhere(), x); } @@ -447,7 +463,7 @@ public class WallVisitorUtils { if (Boolean.FALSE == leftResult || Boolean.FALSE == rightResult) { return false; } - + if (leftResult == Boolean.TRUE) { if (!isFirst(x.getLeft())) { final WallConditionContext current = wallConditionContextLocal.get(); @@ -475,20 +491,24 @@ public class WallVisitorUtils { return SQLEvalVisitorUtils.eval(dbType, x, Collections.emptyList(), false); } - + public static boolean isFirst(SQLObject x) { + if (x == null) { + return true; + } + SQLObject parent = x.getParent(); if (!(parent instanceof SQLExpr)) { return true; } - + if (parent instanceof SQLBinaryOpExpr) { SQLBinaryOpExpr binaryExpr = (SQLBinaryOpExpr) parent; - if (isFirst(binaryExpr.getParent()) && x == binaryExpr.getLeft()) { + if (isFirst(binaryExpr) && x == binaryExpr.getLeft()) { return true; } } - + return false; } diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest22.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest22.java new file mode 100644 index 0000000000..02a16a1c79 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest22.java @@ -0,0 +1,42 @@ +/* + * Copyright 1999-2011 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.filter.wall; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.druid.wall.WallUtils; + +/** + * SQLServerWallTest + * + * @author RaymondXiu + * @version 1.0, 2012-3-18 + * @see + */ +public class MySqlWallTest22 extends TestCase { + + public void test_true() throws Exception { + Assert.assertTrue(WallUtils.isValidateMySql(// + "SELECT count(*) AS num FROM hkapp_goods WHERE 1=1 AND status=1 AND level=1")); // + } + + public void test_false() throws Exception { + Assert.assertFalse(WallUtils.isValidateMySql(// + "SELECT count(*) AS num FROM hkapp_goods WHERE status=1 AND level=1 AND 1=1")); // + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest23.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest23.java new file mode 100644 index 0000000000..a11a8f7054 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest23.java @@ -0,0 +1,42 @@ +/* + * Copyright 1999-2011 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.filter.wall; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.druid.wall.WallUtils; + +/** + * SQLServerWallTest + * + * @author RaymondXiu + * @version 1.0, 2012-3-18 + * @see + */ +public class MySqlWallTest23 extends TestCase { + + public void test_true() throws Exception { + Assert.assertTrue(WallUtils.isValidateMySql(// + "select count(*) total from utao_goods where 1=1 and pprice between 0 and 99999 and state=1")); // + } + + public void test_false() throws Exception { + Assert.assertFalse(WallUtils.isValidateMySql(// + "select count(*) total from utao_goods where pprice between 0 and 99999 and state=1 and 1=1")); // + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest24.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest24.java new file mode 100644 index 0000000000..196530155d --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest24.java @@ -0,0 +1,42 @@ +/* + * Copyright 1999-2011 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.filter.wall; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.druid.wall.WallUtils; + +/** + * SQLServerWallTest + * + * @author RaymondXiu + * @version 1.0, 2012-3-18 + * @see + */ +public class MySqlWallTest24 extends TestCase { + + public void test_true() throws Exception { + Assert.assertTrue(WallUtils.isValidateMySql(// + "SELECT count(*) AS num FROM hkapp_goods WHERE 1=1 AND status=1 AND level=1 AND xxx = 1")); // + } + + public void test_false() throws Exception { + Assert.assertFalse(WallUtils.isValidateMySql(// + "SELECT count(*) AS num FROM hkapp_goods WHERE status=1 AND level=1 AND xxx = 1 AND 1=1")); // + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest25.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest25.java new file mode 100644 index 0000000000..6409e866e6 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest25.java @@ -0,0 +1,42 @@ +/* + * Copyright 1999-2011 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.filter.wall; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.druid.wall.WallUtils; + +/** + * SQLServerWallTest + * + * @author RaymondXiu + * @version 1.0, 2012-3-18 + * @see + */ +public class MySqlWallTest25 extends TestCase { + + public void test_true() throws Exception { + Assert.assertTrue(WallUtils.isValidateMySql(// + "update test.dml_health_check set id=? limit ?")); // + } + + public void test_false() throws Exception { + Assert.assertFalse(WallUtils.isValidateMySql(// + "update test.dml_health_check set id=?")); // + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest26.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest26.java new file mode 100644 index 0000000000..21c1871f23 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/MySqlWallTest26.java @@ -0,0 +1,37 @@ +/* + * Copyright 1999-2011 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.filter.wall; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.druid.wall.WallUtils; + +/** + * SQLServerWallTest + * + * @author RaymondXiu + * @version 1.0, 2012-3-18 + * @see + */ +public class MySqlWallTest26 extends TestCase { + + public void test_true() throws Exception { + Assert.assertTrue(WallUtils.isValidateMySql(// + "delete from cmsdj_feed where DATEDIFF(DATE(cd_addtime),?)<=-?")); // + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/filter/wall/OracleWallTest1.java b/src/test/java/com/alibaba/druid/bvt/filter/wall/OracleWallTest1.java new file mode 100644 index 0000000000..5be821529a --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/filter/wall/OracleWallTest1.java @@ -0,0 +1,31 @@ +/* + * Copyright 1999-2011 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.druid.bvt.filter.wall; + +import junit.framework.TestCase; + +import org.junit.Assert; + +import com.alibaba.druid.wall.WallUtils; + +public class OracleWallTest1 extends TestCase { + + public void test_true() throws Exception { + Assert.assertTrue(WallUtils.isValidateOracle("SELECT DICT_ID,NAME,VALUE,STATUS FROM T_EBM_DICT WHERE T_EBM_DICT.PID=10 OR T_EBM_DICT.PID=11")); + Assert.assertTrue(WallUtils.isValidateMySql("SELECT DICT_ID,NAME,VALUE,STATUS FROM T_EBM_DICT WHERE T_EBM_DICT.PID=10 OR T_EBM_DICT.PID=11")); + + } +}