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 9a371211d1..52487cf070 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 @@ -87,6 +87,7 @@ import com.alibaba.druid.sql.ast.statement.SQLCreateProcedureStatement; import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement; import com.alibaba.druid.sql.ast.statement.SQLExprStatement; import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; +import com.alibaba.druid.sql.ast.statement.SQLFetchStatement; import com.alibaba.druid.sql.ast.statement.SQLIfStatement; import com.alibaba.druid.sql.ast.statement.SQLInsertStatement; import com.alibaba.druid.sql.ast.statement.SQLLoopStatement; @@ -5542,4 +5543,33 @@ public class MySqlStatementParser extends SQLStatementParser { return stmt; } + + /** + * FETCH [[NEXT] FROM] cursor_name INTO var_name [, var_name] ... + */ + public SQLFetchStatement parseFetch() { + accept(Token.FETCH); + + if (lexer.identifierEquals("NEXT")) { + lexer.nextToken(); + accept(Token.FROM); + } else if (Token.FROM == lexer.token()) { + lexer.nextToken(); + } + + SQLFetchStatement stmt = new SQLFetchStatement(); + stmt.setCursorName(this.exprParser.name()); + + accept(Token.INTO); + for (;;) { + stmt.getInto().add(this.exprParser.name()); + if (lexer.token() == Token.COMMA) { + lexer.nextToken(); + continue; + } + break; + } + + return stmt; + } } 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 45573585f2..e2149b9f60 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 @@ -4412,7 +4412,7 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV @Override public boolean visit(MySqlChecksumTableStatement x) { print0(ucase ? "CHECKSUM TABLE " : "checksum table "); - printAndAccept(x.getTables(), ","); + printAndAccept(x.getTables(), ", "); return false; } } //