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)