From eb7471eb47b8d93ee9bccac65b9e3bb6a53deda6 Mon Sep 17 00:00:00 2001 From: wenshao Date: Fri, 1 Dec 2017 20:53:53 +0800 Subject: [PATCH] add testcase for issue #2119 --- .../alibaba/druid/sql/ast/SQLCommentHint.java | 5 +++ .../select/MySqlSelectTest_91_hints.java | 44 +++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/mysql/select/MySqlSelectTest_91_hints.java diff --git a/src/main/java/com/alibaba/druid/sql/ast/SQLCommentHint.java b/src/main/java/com/alibaba/druid/sql/ast/SQLCommentHint.java index b5f7c24867..20d1450964 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/SQLCommentHint.java +++ b/src/main/java/com/alibaba/druid/sql/ast/SQLCommentHint.java @@ -15,6 +15,7 @@ */ package com.alibaba.druid.sql.ast; +import com.alibaba.druid.sql.visitor.SQLASTOutputVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; public class SQLCommentHint extends SQLObjectImpl implements SQLHint { @@ -46,4 +47,8 @@ public class SQLCommentHint extends SQLObjectImpl implements SQLHint { public SQLCommentHint clone() { return new SQLCommentHint(text); } + + public void output(StringBuffer buf) { + new SQLASTOutputVisitor(buf).visit(this); + } } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/select/MySqlSelectTest_91_hints.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/select/MySqlSelectTest_91_hints.java new file mode 100644 index 0000000000..1101b26962 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/select/MySqlSelectTest_91_hints.java @@ -0,0 +1,44 @@ +/* + * Copyright 1999-2017 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.sql.mysql.select; + +import com.alibaba.druid.sql.MysqlTest; +import com.alibaba.druid.sql.ast.SQLCommentHint; +import com.alibaba.druid.sql.ast.SQLHint; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.ast.statement.SQLSelectStatement; +import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; +import org.junit.Assert; + +import java.util.List; + +public class MySqlSelectTest_91_hints extends MysqlTest { + + public void test_0() throws Exception { + String sql = "select id from a /*+ xxx */ "; + + MySqlStatementParser parser = new MySqlStatementParser(sql); + List statementList = parser.parseStatementList(); + + assertEquals(1, statementList.size()); + + SQLSelectStatement stmt = (SQLSelectStatement) statementList.get(0); + assertEquals("SELECT id\n" + + "FROM a/*+ xxx */", stmt.toString()); + SQLCommentHint hint = (SQLCommentHint) stmt.getSelect().getHints().get(0); + assertEquals("+ xxx ", hint.getText()); + } +}