From 53a364aa13e89b3c9a4320466499ea8724df722b Mon Sep 17 00:00:00 2001 From: zoupeng Date: Thu, 23 May 2019 10:54:52 +0800 Subject: [PATCH 1/2] =?UTF-8?q?issue=20#3240=20visit(MySqlChecksumTableSta?= =?UTF-8?q?tement=20x)=20=E6=96=B9=E6=B3=95=E4=B8=AD=20=E4=B8=AD=E6=96=87?= =?UTF-8?q?=E9=80=97=E5=8F=B7=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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; } } // From f0e702fe757be486f796e58a4a74c741685fbbf8 Mon Sep 17 00:00:00 2001 From: zoupeng Date: Thu, 23 May 2019 11:57:31 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E9=92=88=E5=AF=B9MySQL=20Cursor=20FETCH=20?= =?UTF-8?q?Syntax=20=E8=AF=AD=E6=B3=95=E4=B8=AD=20=E5=8C=85=E5=90=AB=20NEX?= =?UTF-8?q?T=20FROM=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; + } }