You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@calcite.apache.org by "Marc Prud'hommeaux (JIRA)" <ji...@apache.org> on 2017/10/03 17:56:00 UTC

[jira] [Created] (CALCITE-1996) Executing RelBuilder.values with a projection sometimes fails

Marc Prud'hommeaux created CALCITE-1996:
-------------------------------------------

             Summary: Executing RelBuilder.values with a projection sometimes fails
                 Key: CALCITE-1996
                 URL: https://issues.apache.org/jira/browse/CALCITE-1996
             Project: Calcite
          Issue Type: Bug
          Components: core
    Affects Versions: 1.14.0
         Environment: MacOS 10.12.6
            Reporter: Marc Prud'hommeaux
            Assignee: Julian Hyde
            Priority: Minor



When executing a query created with RelBuilder.values() that includes a projection, it will fail if it has been executed after another query which accesses an underlying data store (in this case, the SCOTT HSQL database).

Interesting, if you first perform the values query, then access the data store, and then perform the values query again, it works fine. It seems like in this case, the query is executed directly in-memory.

The test case pasted below fails with the exception:

 {{org.apache.calcite.test.RelBuilderBugTest
testRelBuilderProjectBug(org.apache.calcite.test.RelBuilderBugTest)  Time elapsed: 0.186 sec  <<< ERROR!
java.sql.SQLException: 
exception while executing query: while executing SQL [SELECT "a"
FROM (VALUES  ('X', 1),
 ('Y', 2))]
	at org.apache.calcite.test.RelBuilderBugTest.testRelBuilderProjectBug(RelBuilderBugTest.java:65)
Caused by: java.lang.RuntimeException: 
while executing SQL [SELECT "a"
FROM (VALUES  ('X', 1),
 ('Y', 2))]
	at org.apache.calcite.test.RelBuilderBugTest.testRelBuilderProjectBug(RelBuilderBugTest.java:65)
Caused by: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: a
	at org.apache.calcite.test.RelBuilderBugTest.testRelBuilderProjectBug(RelBuilderBugTest.java:65)
Caused by: org.hsqldb.HsqlException: user lacks privilege or object not found: a
	at org.apache.calcite.test.RelBuilderBugTest.testRelBuilderProjectBug(RelBuilderBugTest.java:65)
}}


However, it only fails when run individually with:

{{
mvn test -pl core -Dtest=RelBuilderBugTest
}}

When run as part of the entire test suite, it passes, making one suspect that there might be some global state issue at play.

{{package org.apache.calcite.test;

import org.apache.calcite.adapter.jdbc.JdbcSchema;
import org.apache.calcite.jdbc.CalciteConnection;
import org.apache.calcite.rel.RelNode;
import org.apache.calcite.tools.FrameworkConfig;
import org.apache.calcite.tools.Frameworks;
import org.apache.calcite.tools.RelBuilder;
import org.apache.calcite.tools.RelRunner;

import org.junit.Test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties;
import javax.sql.DataSource;

/** Test case for a RelBuilder bug */
public class RelBuilderBugTest {

  /** Tests a bug view. */
  @Test public void testRelBuilderProjectBug() throws Exception {
    Class.forName("org.apache.calcite.jdbc.Driver");
    Connection connection = DriverManager
        .getConnection("jdbc:calcite:", new Properties());
    CalciteConnection conn = connection.unwrap(CalciteConnection.class);

    DataSource source = JdbcSchema.dataSource("jdbc:hsqldb:res:scott",
        "org.hsqldb.jdbcDriver", "SCOTT", "TIGER");
    JdbcSchema schema = JdbcSchema.create(conn.getRootSchema(),
        "SCOTT", source, null, null);
    conn.getRootSchema().add("SCOTT", schema);

    FrameworkConfig config = Frameworks.newConfigBuilder()
        .defaultSchema(conn.getRootSchema())
        .build();
    RelBuilder builder = RelBuilder.create(config);
    RelRunner runner = conn.unwrap(RelRunner.class);

    RelNode values = builder.values(new String[]{"a", "b"}, "X", 1, "Y", 2)
        .project(builder.field("a")).build();

    // run this *before* the scott query and it works fine
    // runner.prepare(values).executeQuery();

    runner.prepare(builder.scan("SCOTT", "EMP").build()).executeQuery();

    // running this after the scott query causes the exception
    runner.prepare(values).executeQuery();
  }
}
}}






--
This message was sent by Atlassian JIRA
(v6.4.14#64029)