This is an automated email from the ASF dual-hosted git repository.

jhyde pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/calcite.git

commit d64fd60477b7c9a15473d89b350fc80c2151ee6e
Author: Liu Enze <[email protected]>
AuthorDate: Wed Aug 11 13:50:25 2021 +0800

    [CALCITE-4724] In JDBC adapter for ClickHouse, implement Values by 
generating SELECT without FROM (Liu Enze)
    
    Fix by making SqlDialect.supportsAliasedValues return false
    in the ClickHouse dialect, similar to MySQL.
    
    Close apache/calcite#2480
---
 .../calcite/sql/dialect/ClickHouseSqlDialect.java    |  4 ++++
 .../calcite/rel/rel2sql/RelToSqlConverterTest.java   | 20 ++++++++++++++++++--
 2 files changed, 22 insertions(+), 2 deletions(-)

diff --git 
a/core/src/main/java/org/apache/calcite/sql/dialect/ClickHouseSqlDialect.java 
b/core/src/main/java/org/apache/calcite/sql/dialect/ClickHouseSqlDialect.java
index 14f93c2..6674310 100644
--- 
a/core/src/main/java/org/apache/calcite/sql/dialect/ClickHouseSqlDialect.java
+++ 
b/core/src/main/java/org/apache/calcite/sql/dialect/ClickHouseSqlDialect.java
@@ -68,6 +68,10 @@ public class ClickHouseSqlDialect extends SqlDialect {
     return false;
   }
 
+  @Override public boolean supportsAliasedValues() {
+    return false;
+  }
+
   @Override public CalendarPolicy getCalendarPolicy() {
     return CalendarPolicy.SHIFT;
   }
diff --git 
a/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java 
b/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java
index 98f75c9..3539c31 100644
--- 
a/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java
+++ 
b/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java
@@ -4817,6 +4817,10 @@ class RelToSqlConverterTest {
   @Test void testValues() {
     final String sql = "select \"a\"\n"
         + "from (values (1, 'x'), (2, 'yy')) as t(\"a\", \"b\")";
+    final String expectedClickHouse = "SELECT `a`\n"
+        + "FROM (SELECT 1 AS `a`, 'x ' AS `b`\n"
+        + "UNION ALL\n"
+        + "SELECT 2 AS `a`, 'yy' AS `b`)"; // almost the same as MySQL
     final String expectedHsqldb = "SELECT a\n"
         + "FROM (VALUES (1, 'x '),\n"
         + "(2, 'yy')) AS t (a, b)";
@@ -4844,6 +4848,7 @@ class RelToSqlConverterTest {
     final String expectedSnowflake = expectedPostgresql;
     final String expectedRedshift = expectedPostgresql;
     sql(sql)
+        .withClickHouse().ok(expectedClickHouse)
         .withBigQuery().ok(expectedBigQuery)
         .withHive().ok(expectedHive)
         .withHsqldb().ok(expectedHsqldb)
@@ -4869,24 +4874,33 @@ class RelToSqlConverterTest {
     final String expectedPostgresql = "SELECT *\n"
         + "FROM (VALUES (NULL, NULL)) AS \"t\" (\"X\", \"Y\")\n"
         + "WHERE 1 = 0";
+    final String expectedClickHouse = expectedMysql;
     sql(sql)
         .optimize(rules, null)
+        .withClickHouse().ok(expectedClickHouse)
         .withMysql().ok(expectedMysql)
         .withOracle().ok(expectedOracle)
         .withPostgresql().ok(expectedPostgresql);
   }
 
   /** Tests SELECT without FROM clause; effectively the same as a VALUES
-   * query. */
+   * query.
+   *
+   * <p>Test case for
+   * <a 
href="https://issues.apache.org/jira/browse/CALCITE-4724";>[CALCITE-4724]
+   * In JDBC adapter for ClickHouse, implement Values by generating SELECT
+   * without FROM</a>. */
   @Test void testSelectWithoutFrom() {
     final String query = "select 2 + 2";
     final String expectedBigQuery = "SELECT 2 + 2";
+    final String expectedClickHouse = expectedBigQuery;
     final String expectedHive = expectedBigQuery;
-    final String expectedMysql = "SELECT 2 + 2";
+    final String expectedMysql = expectedBigQuery;
     final String expectedPostgresql = "SELECT 2 + 2\n"
         + "FROM (VALUES (0)) AS \"t\" (\"ZERO\")";
     sql(query)
         .withBigQuery().ok(expectedBigQuery)
+        .withClickHouse().ok(expectedClickHouse)
         .withHive().ok(expectedHive)
         .withMysql().ok(expectedMysql)
         .withPostgresql().ok(expectedPostgresql);
@@ -4895,12 +4909,14 @@ class RelToSqlConverterTest {
   @Test void testSelectOne() {
     final String query = "select 1";
     final String expectedBigQuery = "SELECT 1";
+    final String expectedClickHouse = expectedBigQuery;
     final String expectedHive = expectedBigQuery;
     final String expectedMysql = expectedBigQuery;
     final String expectedPostgresql = "SELECT *\n"
         + "FROM (VALUES (1)) AS \"t\" (\"EXPR$0\")";
     sql(query)
         .withBigQuery().ok(expectedBigQuery)
+        .withClickHouse().ok(expectedClickHouse)
         .withHive().ok(expectedHive)
         .withMysql().ok(expectedMysql)
         .withPostgresql().ok(expectedPostgresql);

Reply via email to