From f0e702fe757be486f796e58a4a74c741685fbbf8 Mon Sep 17 00:00:00 2001 From: zoupeng Date: Thu, 23 May 2019 11:57:31 +0800 Subject: [PATCH] =?UTF-8?q?=E9=92=88=E5=AF=B9MySQL=20Cursor=20FETCH=20Synt?= =?UTF-8?q?ax=20=E8=AF=AD=E6=B3=95=E4=B8=AD=20=E5=8C=85=E5=90=AB=20NEXT=20?= =?UTF-8?q?FROM=20=E5=85=B3=E9=94=AE=E5=AD=97=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit FETCH [[NEXT] FROM] cursor_name INTO var_name [, var_name] ... --- .../mysql/parser/MySqlStatementParser.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) 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; + } }