diff --git a/src/main/java/com/alibaba/druid/sql/PagerUtils.java b/src/main/java/com/alibaba/druid/sql/PagerUtils.java index 939b6773f1..ede6dcf47c 100644 --- a/src/main/java/com/alibaba/druid/sql/PagerUtils.java +++ b/src/main/java/com/alibaba/druid/sql/PagerUtils.java @@ -41,7 +41,7 @@ import com.alibaba.druid.sql.ast.statement.SQLSubqueryTableSource; import com.alibaba.druid.sql.ast.statement.SQLUnionQuery; import com.alibaba.druid.sql.dialect.db2.ast.stmt.DB2SelectQueryBlock; 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.ast.SQLLimit; import com.alibaba.druid.sql.dialect.odps.ast.OdpsSelectQueryBlock; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectQueryBlock; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock; @@ -320,7 +320,7 @@ public class PagerUtils { throw new IllegalArgumentException("limit already exists."); } - Limit limit = new Limit(); + SQLLimit limit = new SQLLimit(); if (offset > 0) { limit.setOffset(new SQLNumberExpr(offset)); } @@ -470,7 +470,7 @@ public class PagerUtils { SQLSelectQuery query = selectStmt.getSelect().getQuery(); if (query instanceof SQLSelectQueryBlock) { if (query instanceof MySqlSelectQueryBlock) { - MySqlSelectQueryBlock.Limit limit = ((MySqlSelectQueryBlock) query).getLimit(); + SQLLimit limit = ((MySqlSelectQueryBlock) query).getLimit(); if (limit == null) { return -1; diff --git a/src/main/java/com/alibaba/druid/sql/ast/SQLLimit.java b/src/main/java/com/alibaba/druid/sql/ast/SQLLimit.java new file mode 100644 index 0000000000..19a7ae8372 --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/ast/SQLLimit.java @@ -0,0 +1,53 @@ +package com.alibaba.druid.sql.ast; + +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; +import com.alibaba.druid.sql.visitor.SQLASTVisitor; + +/** + * Created by wenshao on 16/9/25. + */ +public class SQLLimit extends SQLObjectImpl { + + public SQLLimit() { + + } + + public SQLLimit(SQLExpr rowCount) { + this.setRowCount(rowCount); + } + + private SQLExpr rowCount; + private SQLExpr offset; + + public SQLExpr getRowCount() { + return rowCount; + } + + public void setRowCount(SQLExpr rowCount) { + if (rowCount != null) { + rowCount.setParent(this); + } + this.rowCount = rowCount; + } + + public SQLExpr getOffset() { + return offset; + } + + public void setOffset(SQLExpr offset) { + if (offset != null) { + offset.setParent(this); + } + this.offset = offset; + } + + @Override + protected void accept0(SQLASTVisitor visitor) { + if (visitor.visit(this)) { + acceptChild(visitor, offset); + acceptChild(visitor, rowCount); + } + visitor.endVisit(this); + } + +} diff --git a/src/main/java/com/alibaba/druid/sql/builder/impl/SQLSelectBuilderImpl.java b/src/main/java/com/alibaba/druid/sql/builder/impl/SQLSelectBuilderImpl.java index ebff90c92b..73d7ca3433 100644 --- a/src/main/java/com/alibaba/druid/sql/builder/impl/SQLSelectBuilderImpl.java +++ b/src/main/java/com/alibaba/druid/sql/builder/impl/SQLSelectBuilderImpl.java @@ -35,7 +35,7 @@ import com.alibaba.druid.sql.ast.statement.SQLSelectStatement; import com.alibaba.druid.sql.builder.SQLSelectBuilder; import com.alibaba.druid.sql.dialect.db2.ast.stmt.DB2SelectQueryBlock; 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.ast.SQLLimit; import com.alibaba.druid.sql.dialect.odps.ast.OdpsSelectQueryBlock; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelect; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectQueryBlock; @@ -230,7 +230,7 @@ public class SQLSelectBuilderImpl implements SQLSelectBuilder { if (queryBlock instanceof MySqlSelectQueryBlock) { MySqlSelectQueryBlock mySqlQueryBlock = (MySqlSelectQueryBlock) queryBlock; - Limit limit = new Limit(); + SQLLimit limit = new SQLLimit(); limit.setRowCount(new SQLIntegerExpr(rowCount)); if (offset > 0) { limit.setOffset(new SQLIntegerExpr(offset)); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlDeleteStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlDeleteStatement.java index e4fe34bee7..4c6b95fdfa 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlDeleteStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlDeleteStatement.java @@ -22,7 +22,7 @@ import com.alibaba.druid.sql.ast.SQLCommentHint; import com.alibaba.druid.sql.ast.SQLOrderBy; import com.alibaba.druid.sql.ast.statement.SQLDeleteStatement; import com.alibaba.druid.sql.ast.statement.SQLTableSource; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock.Limit; +import com.alibaba.druid.sql.ast.SQLLimit; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; @@ -36,7 +36,7 @@ public class MySqlDeleteStatement extends SQLDeleteStatement { private SQLTableSource using; private SQLOrderBy orderBy; - private Limit limit; + private SQLLimit limit; private List hints; @@ -99,11 +99,11 @@ public class MySqlDeleteStatement extends SQLDeleteStatement { this.orderBy = orderBy; } - public Limit getLimit() { + public SQLLimit getLimit() { return limit; } - public void setLimit(Limit limit) { + public void setLimit(SQLLimit limit) { if (limit != null) { limit.setParent(this); } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlSelectQueryBlock.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlSelectQueryBlock.java index 4e1ca4d070..d52c3af03d 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlSelectQueryBlock.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlSelectQueryBlock.java @@ -18,10 +18,7 @@ package com.alibaba.druid.sql.dialect.mysql.ast.statement; import java.util.ArrayList; import java.util.List; -import com.alibaba.druid.sql.ast.SQLCommentHint; -import com.alibaba.druid.sql.ast.SQLExpr; -import com.alibaba.druid.sql.ast.SQLName; -import com.alibaba.druid.sql.ast.SQLObjectImpl; +import com.alibaba.druid.sql.ast.*; import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock; import com.alibaba.druid.sql.dialect.mysql.ast.MySqlObject; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; @@ -38,7 +35,7 @@ public class MySqlSelectQueryBlock extends SQLSelectQueryBlock implements MySqlO private Boolean cache; private boolean calcFoundRows; - private Limit limit; + private SQLLimit limit; private SQLName procedureName; private List procedureArgumentList; @@ -153,11 +150,11 @@ public class MySqlSelectQueryBlock extends SQLSelectQueryBlock implements MySqlO this.calcFoundRows = calcFoundRows; } - public Limit getLimit() { + public SQLLimit getLimit() { return limit; } - public void setLimit(Limit limit) { + public void setLimit(SQLLimit limit) { if (limit != null) { limit.setParent(this); } @@ -247,54 +244,4 @@ public class MySqlSelectQueryBlock extends SQLSelectQueryBlock implements MySqlO visitor.endVisit(this); } - public static class Limit extends SQLObjectImpl { - - public Limit(){ - - } - - public Limit(SQLExpr rowCount){ - this.setRowCount(rowCount); - } - - private SQLExpr rowCount; - private SQLExpr offset; - - public SQLExpr getRowCount() { - return rowCount; - } - - public void setRowCount(SQLExpr rowCount) { - if (rowCount != null) { - rowCount.setParent(this); - } - this.rowCount = rowCount; - } - - public SQLExpr getOffset() { - return offset; - } - - public void setOffset(SQLExpr offset) { - if (offset != null) { - offset.setParent(this); - } - this.offset = offset; - } - - @Override - protected void accept0(SQLASTVisitor visitor) { - if (visitor instanceof MySqlASTVisitor) { - MySqlASTVisitor mysqlVisitor = (MySqlASTVisitor) visitor; - - if (mysqlVisitor.visit(this)) { - acceptChild(visitor, offset); - acceptChild(visitor, rowCount); - } - mysqlVisitor.endVisit(this); - } - } - - } - } 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 a5b396f1b6..e04ccfe7d7 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 @@ -16,14 +16,14 @@ package com.alibaba.druid.sql.dialect.mysql.ast.statement; import com.alibaba.druid.sql.ast.SQLExpr; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock.Limit; +import com.alibaba.druid.sql.ast.SQLLimit; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; public class MySqlShowBinLogEventsStatement extends MySqlStatementImpl implements MySqlShowStatement { private SQLExpr in; private SQLExpr from; - private Limit limit; + private SQLLimit limit; public void accept0(MySqlASTVisitor visitor) { if (visitor.visit(this)) { @@ -50,11 +50,11 @@ public class MySqlShowBinLogEventsStatement extends MySqlStatementImpl implement this.from = from; } - public Limit getLimit() { + public SQLLimit getLimit() { return limit; } - public void setLimit(Limit limit) { + public void setLimit(SQLLimit limit) { if (limit != null) { limit.setParent(this); } 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 82742f5cbf..7697c285f5 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 @@ -15,13 +15,13 @@ */ 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.ast.SQLLimit; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; public class MySqlShowErrorsStatement extends MySqlStatementImpl implements MySqlShowStatement { private boolean count = false; - private Limit limit; + private SQLLimit limit; public boolean isCount() { return count; @@ -31,11 +31,11 @@ public class MySqlShowErrorsStatement extends MySqlStatementImpl implements MySq this.count = count; } - public Limit getLimit() { + public SQLLimit getLimit() { return limit; } - public void setLimit(Limit limit) { + public void setLimit(SQLLimit limit) { this.limit = limit; } 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 05bbbf2433..a9b1671860 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 @@ -19,7 +19,7 @@ import java.util.ArrayList; import java.util.List; import com.alibaba.druid.sql.ast.SQLExpr; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock.Limit; +import com.alibaba.druid.sql.ast.SQLLimit; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; public class MySqlShowProfileStatement extends MySqlStatementImpl implements MySqlShowStatement { @@ -28,7 +28,7 @@ public class MySqlShowProfileStatement extends MySqlStatementImpl implements MyS private SQLExpr forQuery; - private Limit limit; + private SQLLimit limit; public void accept0(MySqlASTVisitor visitor) { visitor.visit(this); @@ -47,11 +47,11 @@ public class MySqlShowProfileStatement extends MySqlStatementImpl implements MyS this.forQuery = forQuery; } - public Limit getLimit() { + public SQLLimit getLimit() { return limit; } - public void setLimit(Limit limit) { + public void setLimit(SQLLimit limit) { this.limit = limit; } 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 20f4d2f869..423d74f6e4 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 @@ -16,14 +16,14 @@ package com.alibaba.druid.sql.dialect.mysql.ast.statement; import com.alibaba.druid.sql.ast.SQLExpr; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock.Limit; +import com.alibaba.druid.sql.ast.SQLLimit; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; public class MySqlShowRelayLogEventsStatement extends MySqlStatementImpl implements MySqlShowStatement { private SQLExpr logName; private SQLExpr from; - private Limit limit; + private SQLLimit limit; public SQLExpr getLogName() { return logName; @@ -41,11 +41,11 @@ public class MySqlShowRelayLogEventsStatement extends MySqlStatementImpl impleme this.from = from; } - public Limit getLimit() { + public SQLLimit getLimit() { return limit; } - public void setLimit(Limit limit) { + public void setLimit(SQLLimit limit) { this.limit = limit; } 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 d5c7b928e1..ea42e62bdd 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 @@ -15,13 +15,13 @@ */ 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.ast.SQLLimit; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; public class MySqlShowWarningsStatement extends MySqlStatementImpl implements MySqlShowStatement { private boolean count = false; - private Limit limit; + private SQLLimit limit; public boolean isCount() { return count; @@ -31,11 +31,11 @@ public class MySqlShowWarningsStatement extends MySqlStatementImpl implements My this.count = count; } - public Limit getLimit() { + public SQLLimit getLimit() { return limit; } - public void setLimit(Limit limit) { + public void setLimit(SQLLimit limit) { this.limit = limit; } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlUnionQuery.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlUnionQuery.java index 80b6b3892a..0020e86179 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlUnionQuery.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlUnionQuery.java @@ -17,19 +17,19 @@ package com.alibaba.druid.sql.dialect.mysql.ast.statement; import com.alibaba.druid.sql.ast.statement.SQLUnionQuery; import com.alibaba.druid.sql.dialect.mysql.ast.MySqlObject; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock.Limit; +import com.alibaba.druid.sql.ast.SQLLimit; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; public class MySqlUnionQuery extends SQLUnionQuery implements MySqlObject { - private Limit limit; + private SQLLimit limit; - public Limit getLimit() { + public SQLLimit getLimit() { return limit; } - public void setLimit(Limit limit) { + public void setLimit(SQLLimit limit) { if (limit != null) { limit.setParent(this); } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlUpdateStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlUpdateStatement.java index 9a0ab0b49d..10814a833c 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlUpdateStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlUpdateStatement.java @@ -15,14 +15,10 @@ */ package com.alibaba.druid.sql.dialect.mysql.ast.statement; -import java.util.ArrayList; -import java.util.List; - import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.SQLOrderBy; -import com.alibaba.druid.sql.ast.statement.SQLSelectItem; import com.alibaba.druid.sql.ast.statement.SQLUpdateStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock.Limit; +import com.alibaba.druid.sql.ast.SQLLimit; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; import com.alibaba.druid.util.JdbcConstants; @@ -30,7 +26,7 @@ import com.alibaba.druid.util.JdbcConstants; public class MySqlUpdateStatement extends SQLUpdateStatement implements MySqlStatement { private SQLOrderBy orderBy; - private Limit limit; + private SQLLimit limit; private boolean lowPriority = false; private boolean ignore = false; @@ -43,11 +39,11 @@ public class MySqlUpdateStatement extends SQLUpdateStatement implements MySqlSta super(JdbcConstants.MYSQL); } - public Limit getLimit() { + public SQLLimit getLimit() { return limit; } - public void setLimit(Limit limit) { + public void setLimit(SQLLimit limit) { if (limit != null) { limit.setParent(this); } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlExprParser.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlExprParser.java index b3cccd7f44..97783e2c39 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlExprParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlExprParser.java @@ -51,8 +51,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlMatchAgainstExpr.Search import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlOrderingExpr; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlOutFileExpr; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlUserName; -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.ast.SQLLimit; import com.alibaba.druid.sql.parser.Lexer; import com.alibaba.druid.sql.parser.ParserException; import com.alibaba.druid.sql.parser.SQLExprParser; @@ -723,11 +722,11 @@ public class MySqlExprParser extends SQLExprParser { return super.nameRest(name); } - public Limit parseLimit() { + public SQLLimit parseLimit() { if (lexer.token() == Token.LIMIT) { lexer.nextToken(); - MySqlSelectQueryBlock.Limit limit = new MySqlSelectQueryBlock.Limit(); + SQLLimit limit = new SQLLimit(); SQLExpr temp = this.expr(); if (lexer.token() == (Token.COMMA)) { diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlSelectIntoParser.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlSelectIntoParser.java index 393043e6d7..e8050ba2c5 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlSelectIntoParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlSelectIntoParser.java @@ -36,7 +36,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.MySqlUseIndexHint; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlSelectIntoStatement; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlOutFileExpr; 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.ast.SQLLimit; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlUnionQuery; import com.alibaba.druid.sql.parser.ParserException; import com.alibaba.druid.sql.parser.SQLExprParser; @@ -349,7 +349,7 @@ public class MySqlSelectIntoParser extends SQLSelectParser { return super.unionRest(union); } - public Limit parseLimit() { + public SQLLimit parseLimit() { return ((MySqlExprParser) this.exprParser).parseLimit(); } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlSelectParser.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlSelectParser.java index e120acbd76..2347b3e129 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlSelectParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlSelectParser.java @@ -27,7 +27,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.MySqlIndexHintImpl; import com.alibaba.druid.sql.dialect.mysql.ast.MySqlUseIndexHint; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlOutFileExpr; 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.ast.SQLLimit; 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.ast.statement.MySqlUpdateTableSource; @@ -450,7 +450,7 @@ public class MySqlSelectParser extends SQLSelectParser { return super.unionRest(union); } - public Limit parseLimit() { + public SQLLimit parseLimit() { return ((MySqlExprParser) this.exprParser).parseLimit(); } 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 7b2dbc246f..3564966d0b 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 @@ -132,7 +132,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlRenameTableStateme import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlReplaceStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlResetStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlRollbackStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock.Limit; +import com.alibaba.druid.sql.ast.SQLLimit; 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.MySqlSetPasswordStatement; @@ -2312,7 +2312,7 @@ public class MySqlStatementParser extends SQLStatementParser { } } - public Limit parseLimit() { + public SQLLimit parseLimit() { return ((MySqlExprParser) this.exprParser).parseLimit(); } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlASTVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlASTVisitor.java index 0e1ea06f2f..ba533c7809 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlASTVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlASTVisitor.java @@ -130,10 +130,6 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MysqlDeallocatePrepareS import com.alibaba.druid.sql.visitor.SQLASTVisitor; public interface MySqlASTVisitor extends SQLASTVisitor { - boolean visit(MySqlSelectQueryBlock.Limit x); - - void endVisit(MySqlSelectQueryBlock.Limit x); - boolean visit(MySqlTableIndex x); void endVisit(MySqlTableIndex x); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlASTVisitorAdapter.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlASTVisitorAdapter.java index da27ed482a..b4ef679a85 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlASTVisitorAdapter.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlASTVisitorAdapter.java @@ -15,135 +15,17 @@ */ package com.alibaba.druid.sql.dialect.mysql.visitor; -import com.alibaba.druid.sql.dialect.mysql.ast.MySqlForceIndexHint; -import com.alibaba.druid.sql.dialect.mysql.ast.MySqlIgnoreIndexHint; -import com.alibaba.druid.sql.dialect.mysql.ast.MySqlKey; -import com.alibaba.druid.sql.dialect.mysql.ast.MySqlPrimaryKey; -import com.alibaba.druid.sql.dialect.mysql.ast.MySqlUnique; -import com.alibaba.druid.sql.dialect.mysql.ast.MySqlUseIndexHint; -import com.alibaba.druid.sql.dialect.mysql.ast.MysqlForeignKey; -import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCaseStatement; +import com.alibaba.druid.sql.dialect.mysql.ast.*; +import com.alibaba.druid.sql.dialect.mysql.ast.clause.*; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCaseStatement.MySqlWhenStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCursorDeclareStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlDeclareConditionStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlDeclareHandlerStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlDeclareStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlIterateStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlLeaveStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlRepeatStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlSelectIntoStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlWhileStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlCharExpr; -import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlExtractExpr; -import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlIntervalExpr; -import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlMatchAgainstExpr; -import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlOrderingExpr; -import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlOutFileExpr; -import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlUserName; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.CobarShowStatus; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterTableAlterColumn; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterTableChangeColumn; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterTableCharacter; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterTableDiscardTablespace; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterTableImportTablespace; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterTableModifyColumn; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterTableOption; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterUserStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAnalyzeStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlBinlogStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCommitStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateTableStatement; +import com.alibaba.druid.sql.dialect.mysql.ast.expr.*; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.*; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateTableStatement.TableSpaceOption; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateUserStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateUserStatement.UserSpecification; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDeleteStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDescribeStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlExecuteStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlHelpStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlHintStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlInsertStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlKillStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlLoadDataInFileStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlLoadXmlStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlLockTableStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlOptimizeStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlPartitionByKey; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlPrepareStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlRenameTableStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlReplaceStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlResetStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlRollbackStatement; -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.MySqlSetPasswordStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSetTransactionStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowAuthorsStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowBinLogEventsStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowBinaryLogsStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCharacterSetStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCollationStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowColumnsStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowContributorsStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCreateDatabaseStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCreateEventStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCreateFunctionStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCreateProcedureStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCreateTableStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCreateTriggerStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCreateViewStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowDatabasesStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowEngineStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowEnginesStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowErrorsStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowEventsStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowFunctionCodeStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowFunctionStatusStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowGrantsStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowIndexesStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowKeysStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowMasterLogsStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowMasterStatusStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowOpenTablesStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowPluginsStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowPrivilegesStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowProcedureCodeStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowProcedureStatusStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowProcessListStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowProfileStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowProfilesStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowRelayLogEventsStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowSlaveHostsStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowSlaveStatusStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowStatusStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowTableStatusStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowTriggersStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowVariantsStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowWarningsStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlStartTransactionStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSubPartitionByKey; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSubPartitionByList; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlTableIndex; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlUnionQuery; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlUnlockTablesStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlUpdateStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlUpdateTableSource; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MysqlDeallocatePrepareStatement; import com.alibaba.druid.sql.visitor.SQLASTVisitorAdapter; public class MySqlASTVisitorAdapter extends SQLASTVisitorAdapter implements MySqlASTVisitor { - @Override - public boolean visit(Limit x) { - return true; - } - - @Override - public void endVisit(Limit x) { - - } - @Override public boolean visit(MySqlTableIndex x) { return true; diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlExportParameterVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlExportParameterVisitor.java index b615637618..e99c9193d2 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlExportParameterVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlExportParameterVisitor.java @@ -25,7 +25,7 @@ import com.alibaba.druid.sql.ast.expr.SQLInListExpr; import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr; import com.alibaba.druid.sql.ast.statement.SQLSelectGroupByClause; import com.alibaba.druid.sql.ast.statement.SQLSelectItem; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock.Limit; +import com.alibaba.druid.sql.ast.SQLLimit; import com.alibaba.druid.sql.visitor.ExportParameterVisitor; import com.alibaba.druid.sql.visitor.ExportParameterVisitorUtils; @@ -34,7 +34,8 @@ public class MySqlExportParameterVisitor extends MySqlParameterizedOutputVisitor /** * true= if require parameterized sql output */ - private final boolean requireParameterizedOutput; + private boolean requireParameterizedOutput; + public MySqlExportParameterVisitor(List parameters, Appendable appender, boolean wantParameterizedOutput){ super(appender); @@ -68,7 +69,7 @@ public class MySqlExportParameterVisitor extends MySqlParameterizedOutputVisitor } @Override - public boolean visit(Limit x) { + public boolean visit(SQLLimit x) { if(requireParameterizedOutput){ return super.visit(x); } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java index 77efa363de..29c5677d96 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java @@ -30,7 +30,6 @@ import com.alibaba.druid.sql.ast.SQLSubPartitionBy; import com.alibaba.druid.sql.ast.expr.SQLAggregateExpr; import com.alibaba.druid.sql.ast.expr.SQLCharExpr; import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr; -import com.alibaba.druid.sql.ast.expr.SQLNullExpr; import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr; import com.alibaba.druid.sql.ast.statement.SQLAlterTableAddColumn; import com.alibaba.druid.sql.ast.statement.SQLAlterTableItem; @@ -108,7 +107,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlReplaceStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlResetStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlRollbackStatement; 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.ast.SQLLimit; 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.MySqlSetPasswordStatement; @@ -361,17 +360,6 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV return false; } - public boolean visit(MySqlSelectQueryBlock.Limit x) { - print0(ucase ? "LIMIT " : "limit "); - if (x.getOffset() != null) { - x.getOffset().accept(this); - print0(", "); - } - x.getRowCount().accept(this); - - return false; - } - public boolean visit(SQLDataType x) { print0(x.getName()); if (!x.getArguments().isEmpty()) { @@ -431,11 +419,6 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV return false; } - @Override - public void endVisit(Limit x) { - - } - @Override public void endVisit(MySqlTableIndex x) { diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlSchemaStatVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlSchemaStatVisitor.java index 96318315b2..e81fc42f91 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlSchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlSchemaStatVisitor.java @@ -26,7 +26,6 @@ import com.alibaba.druid.sql.ast.expr.SQLPropertyExpr; import com.alibaba.druid.sql.ast.statement.SQLAlterTableStatement; import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement; import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; -import com.alibaba.druid.sql.ast.statement.SQLSelectItem; import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock; import com.alibaba.druid.sql.ast.statement.SQLSelectStatement; import com.alibaba.druid.sql.ast.statement.SQLTableSource; @@ -91,7 +90,6 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlReplaceStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlResetStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlRollbackStatement; 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.MySqlSetPasswordStatement; @@ -239,17 +237,6 @@ public class MySqlSchemaStatVisitor extends SchemaStatVisitor implements MySqlAS return false; } - @Override - public boolean visit(Limit x) { - - return true; - } - - @Override - public void endVisit(Limit x) { - - } - @Override public boolean visit(MySqlTableIndex x) { diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java index 184cc57f2f..692fe059c1 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java @@ -26,28 +26,7 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; -import com.alibaba.druid.sql.ast.SQLCommentHint; -import com.alibaba.druid.sql.ast.SQLDataType; -import com.alibaba.druid.sql.ast.SQLDeclareItem; -import com.alibaba.druid.sql.ast.SQLExpr; -import com.alibaba.druid.sql.ast.SQLKeep; -import com.alibaba.druid.sql.ast.SQLName; -import com.alibaba.druid.sql.ast.SQLObject; -import com.alibaba.druid.sql.ast.SQLOrderBy; -import com.alibaba.druid.sql.ast.SQLOrderingSpecification; -import com.alibaba.druid.sql.ast.SQLOver; -import com.alibaba.druid.sql.ast.SQLParameter; -import com.alibaba.druid.sql.ast.SQLPartition; -import com.alibaba.druid.sql.ast.SQLPartitionBy; -import com.alibaba.druid.sql.ast.SQLPartitionByHash; -import com.alibaba.druid.sql.ast.SQLPartitionByList; -import com.alibaba.druid.sql.ast.SQLPartitionByRange; -import com.alibaba.druid.sql.ast.SQLPartitionValue; -import com.alibaba.druid.sql.ast.SQLSetQuantifier; -import com.alibaba.druid.sql.ast.SQLStatement; -import com.alibaba.druid.sql.ast.SQLSubPartition; -import com.alibaba.druid.sql.ast.SQLSubPartitionByHash; -import com.alibaba.druid.sql.ast.SQLSubPartitionByList; +import com.alibaba.druid.sql.ast.*; import com.alibaba.druid.sql.ast.expr.*; import com.alibaba.druid.sql.ast.statement.*; import com.alibaba.druid.sql.ast.statement.SQLCreateTriggerStatement.TriggerEvent; @@ -3277,4 +3256,15 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab print('\''); return false; } + + public boolean visit(SQLLimit x) { + print0(ucase ? "LIMIT " : "limit "); + if (x.getOffset() != null) { + x.getOffset().accept(this); + print0(", "); + } + x.getRowCount().accept(this); + + return false; + } } diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java index 911c9f41c6..9796379eec 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java @@ -679,4 +679,7 @@ public interface SQLASTVisitor { boolean visit(SQLDateExpr x); void endVisit(SQLDateExpr x); + + boolean visit(SQLLimit x); + void endVisit(SQLLimit x); } diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitorAdapter.java b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitorAdapter.java index 1923bf843d..59a663664c 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitorAdapter.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitorAdapter.java @@ -15,23 +15,7 @@ */ package com.alibaba.druid.sql.visitor; -import com.alibaba.druid.sql.ast.SQLCommentHint; -import com.alibaba.druid.sql.ast.SQLDataType; -import com.alibaba.druid.sql.ast.SQLDeclareItem; -import com.alibaba.druid.sql.ast.SQLExpr; -import com.alibaba.druid.sql.ast.SQLKeep; -import com.alibaba.druid.sql.ast.SQLObject; -import com.alibaba.druid.sql.ast.SQLOrderBy; -import com.alibaba.druid.sql.ast.SQLOver; -import com.alibaba.druid.sql.ast.SQLParameter; -import com.alibaba.druid.sql.ast.SQLPartition; -import com.alibaba.druid.sql.ast.SQLPartitionByHash; -import com.alibaba.druid.sql.ast.SQLPartitionByList; -import com.alibaba.druid.sql.ast.SQLPartitionByRange; -import com.alibaba.druid.sql.ast.SQLPartitionValue; -import com.alibaba.druid.sql.ast.SQLSubPartition; -import com.alibaba.druid.sql.ast.SQLSubPartitionByHash; -import com.alibaba.druid.sql.ast.SQLSubPartitionByList; +import com.alibaba.druid.sql.ast.*; import com.alibaba.druid.sql.ast.expr.*; import com.alibaba.druid.sql.ast.statement.*; import com.alibaba.druid.sql.ast.statement.SQLInsertStatement.ValuesClause; @@ -1560,4 +1544,14 @@ public class SQLASTVisitorAdapter implements SQLASTVisitor { public void endVisit(SQLDateExpr x) { } + + @Override + public boolean visit(SQLLimit x) { + return true; + } + + @Override + public void endVisit(SQLLimit x) { + + } } 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 aa3b5a5a1e..6a740f30ee 100644 --- a/src/main/java/com/alibaba/druid/wall/spi/MySqlWallVisitor.java +++ b/src/main/java/com/alibaba/druid/wall/spi/MySqlWallVisitor.java @@ -50,7 +50,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDeleteStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlInsertStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlReplaceStatement; 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.ast.SQLLimit; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowCreateTableStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlUnionQuery; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlUpdateStatement; @@ -207,7 +207,7 @@ public class MySqlWallVisitor extends MySqlASTVisitorAdapter implements WallVisi } @Override - public boolean visit(Limit x) { + public boolean visit(SQLLimit x) { if (x.getRowCount() instanceof SQLNumericLiteralExpr) { WallContext context = WallContext.current(); 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 3b90bc32c6..487307359c 100644 --- a/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java +++ b/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java @@ -73,7 +73,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlInsertStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlLockTableStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlRenameTableStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlReplaceStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock.Limit; +import com.alibaba.druid.sql.ast.SQLLimit; 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.MySqlShowGrantsStatement; @@ -1171,7 +1171,7 @@ public class WallVisitorUtils { return true; } else if (parent instanceof SQLOrderBy) { return true; - } else if (parent instanceof Limit) { + } else if (parent instanceof SQLLimit) { return true; } else if (parent instanceof MySqlOrderingExpr) { return true; diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlASTVisitorAdapterTest.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlASTVisitorAdapterTest.java index d4753001af..d8f4c71416 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlASTVisitorAdapterTest.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlASTVisitorAdapterTest.java @@ -35,7 +35,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlRenameTableStateme import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlReplaceStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlResetStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlRollbackStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock.Limit; +import com.alibaba.druid.sql.ast.SQLLimit; 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.MySqlSetTransactionStatement; @@ -94,7 +94,7 @@ public class MySqlASTVisitorAdapterTest extends TestCase { public void test_adapter() throws Exception { MySqlASTVisitorAdapter adapter = new MySqlASTVisitorAdapter(); new SQLBooleanExpr().accept(adapter); - new Limit().accept(adapter); + new SQLLimit().accept(adapter); new MySqlTableIndex().accept(adapter); new MySqlKey().accept(adapter); new MySqlPrimaryKey().accept(adapter);