This is an automated email from the ASF dual-hosted git repository.
danny0405 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/calcite.git
The following commit(s) were added to refs/heads/master by this push:
new eed3d1b [CALCITE-3940] Hint item can not parse correctly if the name
is right after token /*+
eed3d1b is described below
commit eed3d1b408f7720b7dae1c8529a4236895617f67
Author: yuzhao.cyz <[email protected]>
AuthorDate: Mon Apr 20 12:07:18 2020 +0800
[CALCITE-3940] Hint item can not parse correctly if the name is right after
token /*+
---
core/src/main/codegen/templates/Parser.jj | 2 +-
.../java/org/apache/calcite/sql/parser/SqlParserTest.java | 13 ++++++++++---
.../java/org/apache/calcite/sql/test/SqlAdvisorTest.java | 12 +++++++-----
3 files changed, 18 insertions(+), 9 deletions(-)
diff --git a/core/src/main/codegen/templates/Parser.jj
b/core/src/main/codegen/templates/Parser.jj
index db60271..cefe343 100644
--- a/core/src/main/codegen/templates/Parser.jj
+++ b/core/src/main/codegen/templates/Parser.jj
@@ -7643,7 +7643,7 @@ of the 'normal states'.
<DEFAULT, DQID, BTID> TOKEN :
{
- < HINT_BEG: "/*+" ~["/"] >
+ < HINT_BEG: "/*+">
| < COMMENT_END: "*/" >
}
diff --git
a/core/src/test/java/org/apache/calcite/sql/parser/SqlParserTest.java
b/core/src/test/java/org/apache/calcite/sql/parser/SqlParserTest.java
index df6c180..8340105 100644
--- a/core/src/test/java/org/apache/calcite/sql/parser/SqlParserTest.java
+++ b/core/src/test/java/org/apache/calcite/sql/parser/SqlParserTest.java
@@ -8644,19 +8644,26 @@ public class SqlParserTest {
}
@Test void testQueryHint() {
- final String sql = "select "
+ final String sql1 = "select "
+ "/*+ properties(k1='v1', k2='v2', 'a.b.c'='v3'), "
+ "no_hash_join, Index(idx1, idx2), "
+ "repartition(3) */ "
+ "empno, ename, deptno from emps";
- final String expected = "SELECT\n"
+ final String expected1 = "SELECT\n"
+ "/*+ `PROPERTIES`(`K1` = 'v1', `K2` = 'v2', 'a.b.c' = 'v3'), "
+ "`NO_HASH_JOIN`, "
+ "`INDEX`(`IDX1`, `IDX2`), "
+ "`REPARTITION`(3) */\n"
+ "`EMPNO`, `ENAME`, `DEPTNO`\n"
+ "FROM `EMPS`";
- sql(sql).ok(expected);
+ sql(sql1).ok(expected1);
+ // Hint item right after the token "/*+"
+ final String sql2 = "select /*+properties(k1='v1', k2='v2')*/ empno from
emps";
+ final String expected2 = "SELECT\n"
+ + "/*+ `PROPERTIES`(`K1` = 'v1', `K2` = 'v2') */\n"
+ + "`EMPNO`\n"
+ + "FROM `EMPS`";
+ sql(sql2).ok(expected2);
}
@Test void testTableHintsInQuery() {
diff --git a/core/src/test/java/org/apache/calcite/sql/test/SqlAdvisorTest.java
b/core/src/test/java/org/apache/calcite/sql/test/SqlAdvisorTest.java
index d0f9788..ebfd102 100644
--- a/core/src/test/java/org/apache/calcite/sql/test/SqlAdvisorTest.java
+++ b/core/src/test/java/org/apache/calcite/sql/test/SqlAdvisorTest.java
@@ -58,7 +58,7 @@ class SqlAdvisorTest extends SqlValidatorTestCase {
SqlTestFactory.INSTANCE.withValidator(SqlAdvisorValidator::new);
private static final List<String> STAR_KEYWORD =
- Arrays.asList(
+ Collections.singletonList(
"KEYWORD(*)");
protected static final List<String> FROM_KEYWORDS =
@@ -105,7 +105,7 @@ class SqlAdvisorTest extends SqlValidatorTestCase {
"TABLE(B)");
private static final List<String> EMP_TABLE =
- Arrays.asList(
+ Collections.singletonList(
"TABLE(EMP)");
protected static final List<String> FETCH_OFFSET =
@@ -242,7 +242,8 @@ class SqlAdvisorTest extends SqlValidatorTestCase {
"KEYWORD(ALL)",
"KEYWORD(DISTINCT)",
"KEYWORD(STREAM)",
- "KEYWORD(*)");
+ "KEYWORD(*)",
+ "KEYWORD(/*+)");
private static final List<String> ORDER_KEYWORDS =
Arrays.asList(
@@ -325,7 +326,7 @@ class SqlAdvisorTest extends SqlValidatorTestCase {
"KEYWORD(WINDOW)");
private static final List<String> A_TABLE =
- Arrays.asList(
+ Collections.singletonList(
"TABLE(A)");
protected static final List<String> JOIN_KEYWORDS =
@@ -339,6 +340,7 @@ class SqlAdvisorTest extends SqlValidatorTestCase {
"KEYWORD(ORDER)",
"KEYWORD(()",
"KEYWORD(EXTEND)",
+ "KEYWORD(/*+)",
"KEYWORD(AS)",
"KEYWORD(USING)",
"KEYWORD(OUTER)",
@@ -1579,6 +1581,6 @@ class SqlAdvisorTest extends SqlValidatorTestCase {
String simplified =
"SELECT * FROM [DEPT] a WHERE _suggest_ and deptno < 5";
assertSimplify(sql, simplified);
- assertComplete(sql, EXPR_KEYWORDS, Arrays.asList("TABLE(a)"),
DEPT_COLUMNS);
+ assertComplete(sql, EXPR_KEYWORDS, Collections.singletonList("TABLE(a)"),
DEPT_COLUMNS);
}
}