[ 
https://issues.apache.org/jira/browse/DRILL-7406?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17004215#comment-17004215
 ] 

ASF GitHub Bot commented on DRILL-7406:
---------------------------------------

vvysotskyi commented on pull request #1940: DRILL-7406: Update Calcite to 1.21.0
URL: https://github.com/apache/drill/pull/1940#discussion_r361656838
 
 

 ##########
 File path: 
contrib/storage-jdbc/src/test/java/org/apache/drill/exec/store/jdbc/TestJdbcWithMySQLandH2PluginsIT.java
 ##########
 @@ -0,0 +1,601 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.apache.drill.exec.store.jdbc;
+
+import java.io.FileReader;
+import java.math.BigDecimal;
+import java.net.URL;
+import java.nio.file.Paths;
+import java.sql.Connection;
+import java.sql.DriverManager;
+
+import com.wix.mysql.EmbeddedMysql;
+import com.wix.mysql.ScriptResolver;
+import com.wix.mysql.config.MysqldConfig;
+import com.wix.mysql.config.SchemaConfig;
+import com.wix.mysql.distribution.Version;
+import org.apache.drill.categories.JdbcStorageTest;
+import org.apache.drill.common.config.DrillProperties;
+import org.apache.drill.exec.ExecConstants;
+import org.apache.drill.exec.expr.fn.impl.DateUtility;
+import org.apache.drill.exec.util.StoragePluginTestUtils;
+import org.apache.drill.test.ClusterFixture;
+import org.apache.drill.test.ClusterTest;
+import org.apache.drill.test.QueryTestUtil;
+import org.h2.tools.RunScript;
+import org.joda.time.DateTimeZone;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Assume;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+import static org.hamcrest.CoreMatchers.containsString;
+import static org.hamcrest.core.IsNot.not;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertThat;
+
+/**
+ * JDBC storage plugin tests against H2 and MySQL data sources.
+ */
+@Category(JdbcStorageTest.class)
+public class TestJdbcWithMySQLandH2PluginsIT extends ClusterTest {
+
+  private static final String TABLE_PATH = "jdbcmulti/";
+  private static final String TABLE_NAME = String.format("%s.`%s`", 
StoragePluginTestUtils.DFS_PLUGIN_NAME, TABLE_PATH);
+
+  private static EmbeddedMysql mysqld;
+
+  @BeforeClass
+  public static void init() throws Exception {
+    startCluster(ClusterFixture.builder(dirTestWatcher));
+    dirTestWatcher.copyResourceToRoot(Paths.get(TABLE_PATH));
+    initH2();
+    initMySQL();
+  }
+
+  @AfterClass
+  public static void stopMysql() {
+    if (mysqld != null) {
+      mysqld.stop();
+    }
+  }
+
+  @After
+  public void resetSchema() {
+    client.resetSession(DrillProperties.SCHEMA);
+  }
+
+  private static void initH2() throws Exception {
+    Class.forName("org.h2.Driver");
+    String connString = "jdbc:h2:" + 
dirTestWatcher.getTmpDir().getCanonicalPath();
+    URL scriptFile = 
TestJdbcWithMySQLandH2PluginsIT.class.getClassLoader().getResource("h2-test-data.sql");
+    assertNotNull("Script for test tables generation 'h2-test-data.sql' cannot 
be found in test resources", scriptFile);
+    try (Connection connection = DriverManager.getConnection(connString, 
"root", "root");
+         FileReader fileReader = new FileReader(scriptFile.getFile())) {
+      RunScript.execute(connection, fileReader);
+    }
+    JdbcStorageConfig jdbcStorageConfig = new 
JdbcStorageConfig("org.h2.Driver", connString, "root", "root", true);
+    jdbcStorageConfig.setEnabled(true);
+    cluster.defineStoragePlugin(ctx -> new 
JdbcStoragePlugin(jdbcStorageConfig, ctx, "h2"));
+  }
+
+  private static void initMySQL() throws Exception {
+    String mysqlDBName = "drill_mysql_test";
+    int mysqlPort = QueryTestUtil.getFreePortNumber(2215, 300);
+
+    MysqldConfig config = MysqldConfig.aMysqldConfig(Version.v5_6_21)
+        .withPort(mysqlPort)
+        .withUser("mysqlUser", "mysqlPass")
+        .withTimeZone(DateTimeZone.UTC.toTimeZone())
+        .build();
+
+    SchemaConfig.Builder schemaConfig = SchemaConfig.aSchemaConfig(mysqlDBName)
+        .withScripts(ScriptResolver.classPathScript("mysql-test-data.sql"));
+
+    String osName = System.getProperty("os.name").toLowerCase();
+    if (osName.startsWith("linux")) {
+      
schemaConfig.withScripts(ScriptResolver.classPathScript("mysql-test-data-linux.sql"));
+    }
+
+    mysqld = 
EmbeddedMysql.anEmbeddedMysql(config).addSchema(schemaConfig.build()).start();
+
+    JdbcStorageConfig jdbcStorageConfig = new 
JdbcStorageConfig("com.mysql.cj.jdbc.Driver",
+        
String.format("jdbc:mysql://localhost:%s/%s?useJDBCCompliantTimezoneShift=true",
 mysqlPort, mysqlDBName),
+        "mysqlUser", "mysqlPass", false);
+    jdbcStorageConfig.setEnabled(true);
+
+    cluster.defineStoragePlugin(ctx -> new 
JdbcStoragePlugin(jdbcStorageConfig, ctx, "mysql"));
+
+    if (osName.startsWith("linux")) {
+      // adds storage plugin with case insensitive table names
+      JdbcStorageConfig jdbcCaseSensitiveStorageConfig = new 
JdbcStorageConfig("com.mysql.cj.jdbc.Driver",
+          
String.format("jdbc:mysql://localhost:%s/%s?useJDBCCompliantTimezoneShift=true",
 mysqlPort, mysqlDBName),
+          "mysqlUser", "mysqlPass", true);
+      jdbcCaseSensitiveStorageConfig.setEnabled(true);
+      cluster.defineStoragePlugin(ctx -> new 
JdbcStoragePlugin(jdbcCaseSensitiveStorageConfig, ctx, "mysqlCaseInsensitive"));
+    }
+  }
+
+  @Test
+  public void h2CrossSourceMultiFragmentJoin() throws Exception {
+    try {
+      client.alterSession(ExecConstants.SLICE_TARGET, 1);
+      run("select x.person_id, y.salary from h2.tmp.drill_h2_test.person x "
+          + "join %s y on x.person_id = y.person_id ", TABLE_NAME);
+    } finally {
+      client.resetSession(ExecConstants.SLICE_TARGET);
+    }
+  }
+
+  @Test
+  public void h2ValidateResult() throws Exception {
+    // Skip date, time, and timestamp types since h2 mangles these due to 
improper timezone support.
+    testBuilder()
+        .sqlQuery(
+            "select person_id, first_name, last_name, address, city, state, 
zip, json, bigint_field, smallint_field, " +
+                "numeric_field, boolean_field, double_field, float_field, 
real_field, time_field, timestamp_field, " +
+                "date_field, clob_field from h2.tmp.`drill_h2_test`.person")
+        .ordered()
+        .baselineColumns("person_id", "first_name", "last_name", "address", 
"city", "state", "zip", "json",
+            "bigint_field", "smallint_field", "numeric_field", 
"boolean_field", "double_field", "float_field",
+            "real_field", "time_field", "timestamp_field", "date_field", 
"clob_field")
+        .baselineValues(1, "first_name_1", "last_name_1", "1401 John F Kennedy 
Blvd", "Philadelphia", "PA", 19107,
+            "{ a : 5, b : 6 }", 123456L, 1, new BigDecimal("10.01"), false, 
1.0, 1.1, 111.00,
+            DateUtility.parseLocalTime("13:00:01.0"), 
DateUtility.parseLocalDateTime("2012-02-29 13:00:01.0"),
+            DateUtility.parseLocalDate("2012-02-29"), "some clob data 1")
+        .baselineValues(2, "first_name_2", "last_name_2", "One Ferry 
Building", "San Francisco", "CA", 94111,
+            "{ foo : \"abc\" }", 95949L, 2, new BigDecimal("20.02"), true, 
2.0, 2.1, 222.00,
+            DateUtility.parseLocalTime("23:59:59.0"), 
DateUtility.parseLocalDateTime("1999-09-09 23:59:59.0"),
+            DateUtility.parseLocalDate("1999-09-09"), "some more clob data")
+        .baselineValues(3, "first_name_3", "last_name_3", "176 Bowery", "New 
York", "NY", 10012, "{ z : [ 1, 2, 3 ] }",
+            45456L, 3, new BigDecimal("30.04"), true, 3.0, 3.1, 333.00, 
DateUtility.parseLocalTime("11:34:21.0"),
+            DateUtility.parseLocalDateTime("2011-10-30 11:34:21.0"), 
DateUtility.parseLocalDate("2011-10-30"), "clobber")
+        .baselineValues(4, null, null, "2 15th St NW", "Washington", "DC", 
20007, "{ z : { a : 1, b : 2, c : 3 } }",
+            -67L, 4, new BigDecimal("40.04"), false, 4.0, 4.1, 444.00, 
DateUtility.parseLocalTime("16:00:01.0"),
+            DateUtility.parseLocalDateTime("2015-06-01 16:00:01.0"), 
DateUtility.parseLocalDate("2015-06-01"), "xxx")
+        .baselineValues(5, null, null, null, null, null, null, null, null, 
null, null, null, null, null, null,
+            null, null, null, null)
+        .go();
+  }
+
+  @Test
+  public void h2PushdownJoin() throws Exception {
+    String query = "select x.person_id from (select person_id from 
h2.tmp.drill_h2_test.person) x "
+        + "join (select person_id from h2.tmp.drill_h2_test.person) y on 
x.person_id = y.person_id ";
+
+    String plan = queryBuilder().sql(query).explainText();
+
+    assertThat("Query plan shouldn't contain Join operator",
+        plan, not(containsString("Join")));
+  }
+
+  @Test
+  public void h2PushdownJoinAndFilterPushDown() throws Exception {
+    String query = "select * from \n" +
+        "h2.tmp.drill_h2_test.person e\n" +
+        "INNER JOIN \n" +
+        "h2.tmp.drill_h2_test.person s\n" +
+        "ON e.FIRST_NAME = s.FIRST_NAME\n" +
+        "WHERE e.LAST_NAME > 'hello'";
+
+    String plan = queryBuilder().sql(query).explainText();
+
+    assertThat("Query plan shouldn't contain Join operator",
+        plan, not(containsString("Join")));
+    assertThat("Query plan shouldn't contain Filter operator",
+        plan, not(containsString("Filter")));
+  }
+
+  @Test
+  public void h2PushdownAggregation() throws Exception {
+    String query = "select count(*) from h2.tmp.drill_h2_test.person";
+    String plan = queryBuilder().sql(query).explainText();
+
+    assertThat("Query plan shouldn't contain Aggregate operator",
+        plan, not(containsString("Aggregate")));
+  }
+
+  @Test
+  public void h2PushdownDoubleJoinAndFilter() throws Exception {
+    String query = "select * from \n" +
+        "h2.tmp.drill_h2_test.person e\n" +
+        "INNER JOIN \n" +
+        "h2.tmp.drill_h2_test.person s\n" +
+        "ON e.person_ID = s.person_ID\n" +
+        "INNER JOIN \n" +
+        "h2.tmp.drill_h2_test.person ed\n" +
+        "ON e.person_ID = ed.person_ID\n" +
+        "WHERE s.first_name > 'abc' and ed.first_name > 'efg'";
+
+    String plan = queryBuilder().sql(query).explainText();
+
+    assertThat("Query plan shouldn't contain Join operator",
+        plan, not(containsString("Join")));
+    assertThat("Query plan shouldn't contain Filter operator",
+        plan, not(containsString("Filter")));
+  }
+
+  @Test
+  public void h2ShowTablesDefaultSchema() throws Exception {
+    run("use h2.tmp.drill_h2_test");
+    assertEquals(1, queryBuilder().sql("show tables like 
'PERSON'").run().recordCount());
+
+    // check table names case insensitivity
+    assertEquals(1, queryBuilder().sql("show tables like 
'person'").run().recordCount());
+  }
+
+  @Test
+  public void h2Describe() throws Exception {
+    run("use h2.tmp.drill_h2_test");
+    assertEquals(19, queryBuilder().sql("describe 
PERSON").run().recordCount());
+
+    // check table names case insensitivity
+    assertEquals(19, queryBuilder().sql("describe 
person").run().recordCount());
+  }
+
+  @Test
+  public void h2EnsureDrillFunctionsAreNotPushedDown() throws Exception {
+    // This should verify that we're not trying to push CONVERT_FROM into the 
JDBC storage plugin. If were pushing
+    // this function down, the SQL query would fail.
+    run("select CONVERT_FROM(JSON, 'JSON') from h2.tmp.drill_h2_test.person 
where person_ID = 4");
+  }
+
+  @Test
+  public void h2PushdownFilter() throws Exception {
+    String query = "select * from h2.tmp.drill_h2_test.person where person_ID 
= 1";
+    String plan = queryBuilder().sql(query).explainText();
+
+    assertThat("Query plan shouldn't contain Filter operator",
+        plan, not(containsString("Filter")));
+  }
+
+  @Test
+  public void h2CaseInsensitiveTableNames() throws Exception {
+    assertEquals(5, queryBuilder().sql("select * from 
h2.tmp.drill_h2_test.PeRsOn").run().recordCount());
+    assertEquals(5, queryBuilder().sql("select * from 
h2.tmp.drill_h2_test.PERSON").run().recordCount());
+    assertEquals(5, queryBuilder().sql("select * from 
h2.tmp.drill_h2_test.person").run().recordCount());
+  }
+
+  @Test
+  public void h2JdbcStoragePluginSerDe() throws Exception {
+    String query = "select * from h2.tmp.drill_h2_test.PeRsOn";
+
+    String plan = queryBuilder().sql(query).explainJson();
+    assertEquals(5, queryBuilder().physical(plan).run().recordCount());
+  }
+
+  @Test
+  public void mySqlValidateResult() throws Exception {
+
+    testBuilder()
+        .sqlQuery(
+            "select person_id, " +
+                "first_name, last_name, address, city, state, zip, " +
+                "bigint_field, smallint_field, numeric_field, " +
+                "boolean_field, double_field, float_field, real_field, " +
+                "date_field, datetime_field, year_field, time_field, " +
+                "json, text_field, tiny_text_field, medium_text_field, 
long_text_field, " +
+                "blob_field, bit_field, enum_field " +
+                "from mysql.`drill_mysql_test`.person")
+        .ordered()
+        .baselineColumns("person_id",
+            "first_name", "last_name", "address", "city", "state", "zip",
+            "bigint_field", "smallint_field", "numeric_field",
+            "boolean_field",
+            "double_field", "float_field", "real_field",
+            "date_field", "datetime_field", "year_field", "time_field",
+            "json", "text_field", "tiny_text_field", "medium_text_field", 
"long_text_field",
+            "blob_field", "bit_field", "enum_field")
+        .baselineValues(1,
+            "first_name_1", "last_name_1", "1401 John F Kennedy Blvd", 
"Philadelphia", "PA", 19107,
+            123456789L, 1, new BigDecimal("10.01"),
+            false,
+            1.0, 1.1, 1.2,
+            DateUtility.parseLocalDate("2012-02-29"), 
DateUtility.parseLocalDateTime("2012-02-29 13:00:01.0"), 
DateUtility.parseLocalDate("2015-01-01"), 
DateUtility.parseLocalTime("13:00:01.0"),
+            "{ a : 5, b : 6 }",
+            "It is a long established fact that a reader will be distracted by 
the readable content of a page when looking at its layout",
+            "xxx",
+            "a medium piece of text",
+            "a longer piece of text this is going on.....",
+            "this is a test".getBytes(),
+            true, "XXX")
+        .baselineValues(2,
+            "first_name_2", "last_name_2", "One Ferry Building", "San 
Francisco", "CA", 94111,
+            45456767L, 3, new BigDecimal("30.04"),
+            true,
+            3.0, 3.1, 3.2,
+            DateUtility.parseLocalDate("2011-10-30"), 
DateUtility.parseLocalDateTime("2011-10-30 11:34:21.0"), 
DateUtility.parseLocalDate("2015-01-01"), 
DateUtility.parseLocalTime("11:34:21.0"),
+            "{ z : [ 1, 2, 3 ] }",
+            "It is a long established fact that a reader will be distracted by 
the readable content of a page when looking at its layout",
+            "abc",
+            "a medium piece of text 2",
+            "somewhat more text",
+            "this is a test 2".getBytes(),
+            false, "YYY")
+        .baselineValues(3,
+            "first_name_3", "last_name_3", "176 Bowery", "New York", "NY", 
10012,
+            123090L, -3, new BigDecimal("55.12"),
+            false,
+            5.0, 5.1, 5.55,
+            DateUtility.parseLocalDate("2015-06-01"), 
DateUtility.parseLocalDateTime("2015-09-22 15:46:10.0"), 
DateUtility.parseLocalDate("1901-01-01"), 
DateUtility.parseLocalTime("16:00:01.0"),
+            "{ [ a, b, c ] }",
+            "Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, 
consectetur, adipisci velit",
+            "abc",
+            "a medium piece of text 3",
+            "somewhat more text",
+            "this is a test 3".getBytes(),
+            true, "ZZZ")
+        .baselineValues(5,
+            null, null, null, null, null, null,
+            null, null, null,
+            null,
+            null, null, null,
+            null, null, null, null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null,
+            null, "XXX")
+        .go();
+  }
+
+  @Test
+  public void mySqlPushdownJoin() throws Exception {
+    String query = "select x.person_id from (select person_id from 
mysql.`drill_mysql_test`.person) x "
+        + "join (select person_id from mysql.`drill_mysql_test`.person) y on 
x.person_id = y.person_id";
+    queryBuilder()
+        .sql(query)
+        .planMatcher()
+        .exclude("Join")
+        .match();
+  }
+
+  @Test
+  public void mySqlPushdownJoinAndFilterPushDown() throws Exception {
+    String query = "select * from " +
+        "mysql.`drill_mysql_test`.person e " +
+        "INNER JOIN " +
+        "mysql.`drill_mysql_test`.person s " +
+        "ON e.first_name = s.first_name " +
+        "WHERE e.last_name > 'hello'";
+
+    queryBuilder()
+        .sql(query)
+        .planMatcher()
+        .exclude("Join", "Filter")
+        .match();
+  }
+
+  @Test
+  public void mySqlPhysicalPlanSubmission() throws Exception {
+    String query = "select * from mysql.`drill_mysql_test`.person";
+    String plan = queryBuilder().sql(query).explainJson();
+    assertEquals(4, queryBuilder().physical(plan).run().recordCount());
+  }
+
+  @Test
+  public void mySqlEmptyOutput() throws Exception {
+    String query = "select * from mysql.`drill_mysql_test`.person e limit 0";
+    run(query);
+  }
+
+  @Test
+  public void mySqlCaseSensitiveTableNames() throws Exception {
+    String osName = System.getProperty("os.name").toLowerCase();
+    Assume.assumeTrue(
+        "Skip tests for non-linux systems due to " +
+            "table names case-insensitivity problems on Windows and MacOS",
+        osName.startsWith("linux"));
+    run("use mysqlCaseInsensitive.`drill_mysql_test`");
+    // two table names match the filter ignoring the case
+    assertEquals(2, queryBuilder().sql("show tables like 
'caseSensitiveTable'").run().recordCount());
+
+    run("use mysql.`drill_mysql_test`");
+    // single table matches the filter considering table name the case
+    assertEquals(1, queryBuilder().sql("show tables like 
'caseSensitiveTable'").run().recordCount());
+
+    // checks that tables with names in different case are recognized correctly
+    assertEquals(1, queryBuilder().sql("describe 
caseSensitiveTable").run().recordCount());
+    assertEquals(2, queryBuilder().sql("describe 
CASESENSITIVETABLE").run().recordCount());
+  }
+
+  @Test // DRILL-6734
+  public void mySqlExpressionsWithoutAlias() throws Exception {
+    String query = "select count(*), 1+1+2+3+5+8+13+21+34, (1+sqrt(5))/2\n" +
+        "from mysql.`drill_mysql_test`.person";
+
+    testBuilder()
+        .sqlQuery(query)
+        .unOrdered()
+        .baselineColumns("EXPR$0", "EXPR$1", "EXPR$2")
+        .baselineValues(4L, 88L, 1.618033988749895)
+        .go();
+  }
+
+  @Test // DRILL-6734
+  public void mySqlExpressionsWithoutAliasesPermutations() throws Exception {
+    String query = "select EXPR$1, EXPR$0, EXPR$2\n" +
+        "from (select 1+1+2+3+5+8+13+21+34, (1+sqrt(5))/2, count(*) from 
mysql.`drill_mysql_test`.person)";
+
+    testBuilder()
+        .sqlQuery(query)
+        .unOrdered()
+        .baselineColumns("EXPR$1", "EXPR$0", "EXPR$2")
+        .baselineValues(1.618033988749895, 88L, 4L)
+        .go();
+  }
+
+  @Test // DRILL-6734
+  public void mySqlExpressionsWithAliases() throws Exception {
+    String query = "select person_id as ID, 1+1+2+3+5+8+13+21+34 as 
FIBONACCI_SUM, (1+sqrt(5))/2 as golden_ratio\n" +
+        "from mysql.`drill_mysql_test`.person limit 2";
+
+    testBuilder()
+        .sqlQuery(query)
+        .unOrdered()
+        .baselineColumns("ID", "FIBONACCI_SUM", "golden_ratio")
+        .baselineValues(1, 88L, 1.618033988749895)
+        .baselineValues(2, 88L, 1.618033988749895)
+        .go();
+  }
+
+  @Test // DRILL-6893
+  public void mySqlJoinStar() throws Exception {
+    String query = "select * from (select person_id from 
mysql.`drill_mysql_test`.person) t1 join " +
+        "(select person_id from mysql.`drill_mysql_test`.person) t2 on 
t1.person_id = t2.person_id";
+
+    testBuilder()
+        .sqlQuery(query)
+        .unOrdered()
+        .baselineColumns("person_id", "person_id0")
+        .baselineValues(1, 1)
+        .baselineValues(2, 2)
+        .baselineValues(3, 3)
+        .baselineValues(5, 5)
+        .go();
+  }
+
+  @Test
+  public void mySqlSemiJoin() throws Exception {
+    String query =
+        "select person_id from mysql.`drill_mysql_test`.person t1\n" +
+            "where exists (" +
+            "select person_id from mysql.`drill_mysql_test`.person\n" +
+            "where t1.person_id = person_id)";
+    testBuilder()
+        .sqlQuery(query)
+        .unOrdered()
+        .baselineColumns("person_id")
+        .baselineValuesForSingleColumn(1, 2, 3, 5)
+        .go();
+  }
+
+  @Test
+  public void mySqlInformationSchemaViews() throws Exception {
+    String query = "select * from information_schema.`views`";
+    run(query);
+  }
+
+  @Test // DRILL-7340
+  public void mySqlH2PredicatesPushdown() throws Exception {
+    String query = "SELECT * " +
+        "FROM mysql.`drill_mysql_test`.person m " +
+        "INNER JOIN h2.tmp.drill_h2_test.person h " +
+        "ON m.person_id = h.person_id " +
+        "WHERE m.first_name = 'first_name_1' AND h.last_name = 'last_name_1'";
+    String plan = queryBuilder().sql(query).explainText();
 
 Review comment:
   Please use `.planMatcher()`
 
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


> Update Calcite to 1.21.0
> ------------------------
>
>                 Key: DRILL-7406
>                 URL: https://issues.apache.org/jira/browse/DRILL-7406
>             Project: Apache Drill
>          Issue Type: Task
>          Components: Query Planning & Optimization, SQL Parser
>    Affects Versions: 1.17.0
>            Reporter: Igor Guzenko
>            Assignee: Igor Guzenko
>            Priority: Major
>             Fix For: 1.18.0
>
>
> DRILL-7340 should be fixed by this update.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to