[jira] [Created] (CALCITE-2428) cassandra unit test initialization failure
Andrei Sereda created CALCITE-2428: -- Summary: cassandra unit test initialization failure Key: CALCITE-2428 URL: https://issues.apache.org/jira/browse/CALCITE-2428 Project: Calcite Issue Type: Bug Components: cassandra Reporter: Andrei Sereda Unit test fails because {{java.version}} string is parsed incorrectly -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Resolved] (CALCITE-2422) Query with unnest of column from nested subquery fails when dynamic table is used
[ https://issues.apache.org/jira/browse/CALCITE-2422?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Volodymyr Vysotskyi resolved CALCITE-2422. -- Resolution: Fixed Fixed in [41a0677|https://github.com/apache/calcite/commit/41a06771876374474d46ef8d3a14886d742c66e9]. Thanks [~Sergey Nuyanzin] for the review! > Query with unnest of column from nested subquery fails when dynamic table is > used > - > > Key: CALCITE-2422 > URL: https://issues.apache.org/jira/browse/CALCITE-2422 > Project: Calcite > Issue Type: Bug >Reporter: Volodymyr Vysotskyi >Assignee: Julian Hyde >Priority: Major > Fix For: 1.18.0 > > > This test: > {code:java} > @Test public void testStarDynamicSchemaUnnestNestedSubquery() { > String sql3 = "select * \n" > + "from (select * from SALES.CUSTOMER) as t1,\n" > + "unnest(t1.fake_col) as t2"; > sql(sql3).with(getTesterWithDynamicTable()).ok(); > } > {code} > placed in {{SqlToRelConverterTest}} fails with {{AssertionError}}: > {noformat} > java.lang.AssertionError > at > org.apache.calcite.sql.SqlUnnestOperator.inferReturnType(SqlUnnestOperator.java:81) > at > org.apache.calcite.sql.SqlOperator.validateOperands(SqlOperator.java:437) > at > org.apache.calcite.sql.validate.UnnestNamespace.validateImpl(UnnestNamespace.java:67) > at > org.apache.calcite.sql.validate.AbstractNamespace.validate(AbstractNamespace.java:84) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.validateNamespace(SqlValidatorImpl.java:968) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.validateQuery(SqlValidatorImpl.java:944) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.validateFrom(SqlValidatorImpl.java:3032) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.validateFrom(SqlValidatorImpl.java:3017) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.validateJoin(SqlValidatorImpl.java:3069) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.validateFrom(SqlValidatorImpl.java:3026) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.validateSelect(SqlValidatorImpl.java:3275) > at > org.apache.calcite.sql.validate.SelectNamespace.validateImpl(SelectNamespace.java:60) > at > org.apache.calcite.sql.validate.AbstractNamespace.validate(AbstractNamespace.java:84) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.validateNamespace(SqlValidatorImpl.java:968) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.validateQuery(SqlValidatorImpl.java:944) > at org.apache.calcite.sql.SqlSelect.validate(SqlSelect.java:226) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.validateScopedExpression(SqlValidatorImpl.java:919) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.validate(SqlValidatorImpl.java:629) > at > org.apache.calcite.test.SqlToRelTestBase$TesterImpl.convertSqlToRel(SqlToRelTestBase.java:642) > at > org.apache.calcite.test.SqlToRelTestBase$TesterImpl.assertConvertsTo(SqlToRelTestBase.java:754) > at > org.apache.calcite.test.SqlToRelConverterTest$Sql.convertsTo(SqlToRelConverterTest.java:2905) > at > org.apache.calcite.test.SqlToRelConverterTest$Sql.ok(SqlToRelConverterTest.java:2897) > at > org.apache.calcite.test.SqlToRelConverterTest.testStarDynamicSchemaUnnestNestedSubquery(SqlToRelConverterTest.java:2530) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:498) > at > org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) > at > org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) > at > org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) > at > org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) > at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) > at > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) > at > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) > at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) > at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) > at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) > at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) > at
[jira] [Commented] (CALCITE-2426) Calcite - mongodb - Returns row but no data displayed.
[ https://issues.apache.org/jira/browse/CALCITE-2426?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16561851#comment-16561851 ] sathishkumar commented on CALCITE-2426: --- Thanks for the response and guiding me. I have gone through the documentation for the help but in vain. There is not enough help on mongodb stuff. Documentation doesn't really help me to create a view or joins. Could you please provide me some sample queries on creating a view and join queries. The calcite syntax on mongodb is hard to write queries. Need some sample queries to guide. Could you help. > Calcite - mongodb - Returns row but no data displayed. > -- > > Key: CALCITE-2426 > URL: https://issues.apache.org/jira/browse/CALCITE-2426 > Project: Calcite > Issue Type: Bug >Reporter: sathishkumar >Assignee: Julian Hyde >Priority: Critical > > sqlline version 1.3.0 > sqlline> !connect > jdbc:calcite:schemaFactory=org.apache.calcite.adapter.mongodb.MongoSchemaFactory;schema.host=localhost;schema.database=*; > admin admin > 0: jdbc:calcite:schemaFactory=org.apache.calc> !tables > > > ++++++---++---++ > |TABLE_CAT|TABLE_SCHEM|TABLE_NAME|TABLE_TYPE|REMARKS|TYPE_CAT|TYPE_SCHEM|TYPE_NAME|SELF_REFERENCING_C| > ++++++---++---++ > | |adhoc|company_preferences|TABLE| | | | | | > | |adhoc|property|TABLE| | | | | | > | |adhoc|templates|TABLE| | | | | | > | |adhoc|user_preferences|TABLE| | | | | | > *| | adhoc | users | TABLE | | | | | |* > | |metadata|COLUMNS|SYSTEM TABLE| | | | | | > | |metadata|TABLES|SYSTEM TABLE| | | | | | > ++++++---++---++ > 0: jdbc:calcite:schemaFactory=org.apache.calc> *select * from "users";* > +--+ > |_MAP| > +--+ > | | > +--+ > *1 row selected (0.584 seconds)* > 0: jdbc:calcite:schemaFactory=org.apache.calc> -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (CALCITE-2430) AssertionError: RelDataTypeImpl.getFieldList when SQL Advisor inspects non-struct field
[ https://issues.apache.org/jira/browse/CALCITE-2430?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16562484#comment-16562484 ] Julian Hyde commented on CALCITE-2430: -- Yes, I know. But is there any point in having a namespace that is not a struct? I don't think so. > AssertionError: RelDataTypeImpl.getFieldList when SQL Advisor inspects > non-struct field > --- > > Key: CALCITE-2430 > URL: https://issues.apache.org/jira/browse/CALCITE-2430 > Project: Calcite > Issue Type: Bug > Components: core >Affects Versions: 1.17.0 >Reporter: Vladimir Sitnikov >Assignee: Julian Hyde >Priority: Major > Attachments: fieldnamespace.png > > > Test case (in JdbcTest): > {code:java} @Test public void testSqlAdvisorNonStructColumn() > throws SQLException, ClassNotFoundException { > adviseSql("select e.\"empid\".^ from \"hr\".\"emps\" e", > CalciteAssert.checkResultUnordered( > "id=; names=null; type=MATCH", > "id=hr.dependents; names=[hr, dependents]; type=TABLE", > "id=hr.depts; names=[hr, depts]; type=TABLE", > "id=hr.emps; names=[hr, emps]; type=TABLE", > "id=hr.locations; names=[hr, locations]; type=TABLE", > "id=hr; names=[hr]; type=SCHEMA")); > }{code} > Relevant source from RelDataTypeImpl.getFieldList: > {code:java} public List getFieldList() { > assert isStruct(); // <-- Error here > return fieldList; > }{code} > Relevant source from SqlValidatorImpl.lookupNameCompletionHints: > {code:java} if (ns != null) { > RelDataType rowType = ns.getRowType(); > for (RelDataTypeField field : rowType.getFieldList()) { // <-- Error > here > hintList.add( > new SqlMonikerImpl( > field.getName(), > SqlMonikerType.COLUMN)); > } > }{code} > It looks like it makes sense to add {{isStruct}} check before iterating over > {{rowType.getFieldList()}}. > Any objections? > Original exception: {noformat} > java.lang.AssertionError > at > org.apache.calcite.rel.type.RelDataTypeImpl.getFieldList(RelDataTypeImpl.java:146) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.lookupNameCompletionHints(SqlValidatorImpl.java:808) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.lookupSelectHints(SqlValidatorImpl.java:690) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.lookupSelectHints(SqlValidatorImpl.java:701) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.lookupHints(SqlValidatorImpl.java:655) > at > org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints(SqlAdvisor.java:235) > at > org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints0(SqlAdvisor.java:182) > at > org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints(SqlAdvisor.java:142) > at > org.apache.calcite.sql.advise.SqlAdvisorGetHintsFunction.getCompletionHints(SqlAdvisorGetHintsFunction.java:105) > at Baz.bind(Unknown Source) > at > org.apache.calcite.jdbc.CalcitePrepare$CalciteSignature.enumerable(CalcitePrepare.java:356) > at > org.apache.calcite.jdbc.CalciteConnectionImpl.enumerable(CalciteConnectionImpl.java:309) > at > org.apache.calcite.jdbc.CalciteMetaImpl._createIterable(CalciteMetaImpl.java:506) > at > org.apache.calcite.jdbc.CalciteMetaImpl.createIterable(CalciteMetaImpl.java:497) > at > org.apache.calcite.avatica.AvaticaResultSet.execute(AvaticaResultSet.java:182) > at > org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:64) > at > org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:43) > at > org.apache.calcite.avatica.AvaticaConnection.executeQueryInternal(AvaticaConnection.java:573) > at > org.apache.calcite.avatica.AvaticaPreparedStatement.executeQuery(AvaticaPreparedStatement.java:137) > at org.apache.calcite.test.JdbcTest.adviseSql(JdbcTest.java:426) > at > org.apache.calcite.test.JdbcTest.testSqlAdvisorNonStructColumn(JdbcTest.java:359) > {noformat} -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Comment Edited] (CALCITE-2431) AssertionError: SqlUtil.getAncestry when providing completion hints for sub-schema
[ https://issues.apache.org/jira/browse/CALCITE-2431?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16562522#comment-16562522 ] Vladimir Sitnikov edited comment on CALCITE-2431 at 7/30/18 9:19 PM: - [~julianhyde], the match there is against {{_SUGGEST\_}} token, and AFAIK it is supposed to be unique and never to be used by the application token. That is why I think using contains there is just fine. was (Author: vladimirsitnikov): [~julianhyde], the match there is against {{_SUGGEST_}} token, and AFAIK it is supposed to be unique and never to be used by the application token. That is why I think using contains there is just fine. > AssertionError: SqlUtil.getAncestry when providing completion hints for > sub-schema > -- > > Key: CALCITE-2431 > URL: https://issues.apache.org/jira/browse/CALCITE-2431 > Project: Calcite > Issue Type: Bug > Components: core >Affects Versions: 1.17.0 >Reporter: Vladimir Sitnikov >Assignee: Julian Hyde >Priority: Major > Fix For: 1.18.0 > > > Test case (JdbcTest): > {code:java} @Test public void testSqlAdvisorSubSchema() > throws SQLException, ClassNotFoundException { > adviseSql("select * from \"hr\".^.test_test_test", > CalciteAssert.checkResultUnordered( > "id=; names=null; type=MATCH", > "id=hr.dependents; names=[hr, dependents]; type=TABLE", > "id=hr.depts; names=[hr, depts]; type=TABLE", > "id=hr.emps; names=[hr, emps]; type=TABLE", > "id=hr.locations; names=[hr, locations]; type=TABLE", > "id=hr; names=[hr]; type=SCHEMA")); > }{code} > Relevant code (SqlUtil.getAncestry): > {code:java} public static ImmutableList getAncestry(SqlNode root, > Predicate predicate, Predicate postPredicate) { > try { > new Genealogist(predicate, postPredicate).visitChild(root); > throw new AssertionError("not found: " + predicate + " in " + root); > {code} > Relevant code from {{SqlAdvisor.isSelectListItem}}: > {code:java} > private static boolean isSelectListItem(SqlNode root, > final SqlParserPos pos) { > List nodes = SqlUtil.getAncestry(root, > input -> input instanceof SqlIdentifier > && Util.last(((SqlIdentifier) input).names) > .equals(UPPER_HINT_TOKEN), > input -> Objects.requireNonNull(input).getParserPosition() > .startsAt(pos)); > assert nodes.get(0) == root; > nodes = Lists.reverse(nodes); > return nodes.size() > 2 > && nodes.get(2) instanceof SqlSelect > && nodes.get(1) == ((SqlSelect) nodes.get(2)).getSelectList(); > } > {code} > It looks like {{Util.last(((SqlIdentifier) > input).names).equals(UPPER_HINT_TOKEN)}} should be replaced with > {{(SqlIdentifier) input).names.contains(UPPER_HINT_TOKEN)}}. > Note: the code is advisor-specific, so the replacement should be safe > Original exception: > {noformat}java.lang.AssertionError: not found: > org.apache.calcite.sql.advise.SqlAdvisor$$Lambda$197/402207819@1b70203f in > SELECT * > FROM `hr`.`_SUGGEST_`.`TEST_TEST_TEST` > at org.apache.calcite.sql.SqlUtil.getAncestry(SqlUtil.java:872) > at > org.apache.calcite.sql.advise.SqlAdvisor.isSelectListItem(SqlAdvisor.java:242) > at > org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints(SqlAdvisor.java:220) > at > org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints0(SqlAdvisor.java:182) > at > org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints(SqlAdvisor.java:142) > at > org.apache.calcite.sql.advise.SqlAdvisorGetHintsFunction.getCompletionHints(SqlAdvisorGetHintsFunction.java:105) > at Baz.bind(Unknown Source) > at > org.apache.calcite.jdbc.CalcitePrepare$CalciteSignature.enumerable(CalcitePrepare.java:356) > at > org.apache.calcite.jdbc.CalciteConnectionImpl.enumerable(CalciteConnectionImpl.java:309) > at > org.apache.calcite.jdbc.CalciteMetaImpl._createIterable(CalciteMetaImpl.java:506) > at > org.apache.calcite.jdbc.CalciteMetaImpl.createIterable(CalciteMetaImpl.java:497) > at > org.apache.calcite.avatica.AvaticaResultSet.execute(AvaticaResultSet.java:182) > at > org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:64) > at > org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:43) > at > org.apache.calcite.avatica.AvaticaConnection.executeQueryInternal(AvaticaConnection.java:573) > at > org.apache.calcite.avatica.AvaticaPreparedStatement.executeQuery(AvaticaPreparedStatement.java:137) > at org.apache.calcite.test.JdbcTest.adviseSql(JdbcTest.java:441) > at >
[jira] [Commented] (CALCITE-2431) AssertionError: SqlUtil.getAncestry when providing completion hints for sub-schema
[ https://issues.apache.org/jira/browse/CALCITE-2431?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16562522#comment-16562522 ] Vladimir Sitnikov commented on CALCITE-2431: [~julianhyde], the match there is against {{_SUGGEST_}} token, and AFAIK it is supposed to be unique and never to be used by the application token. That is why I think using contains there is just fine. > AssertionError: SqlUtil.getAncestry when providing completion hints for > sub-schema > -- > > Key: CALCITE-2431 > URL: https://issues.apache.org/jira/browse/CALCITE-2431 > Project: Calcite > Issue Type: Bug > Components: core >Affects Versions: 1.17.0 >Reporter: Vladimir Sitnikov >Assignee: Julian Hyde >Priority: Major > Fix For: 1.18.0 > > > Test case (JdbcTest): > {code:java} @Test public void testSqlAdvisorSubSchema() > throws SQLException, ClassNotFoundException { > adviseSql("select * from \"hr\".^.test_test_test", > CalciteAssert.checkResultUnordered( > "id=; names=null; type=MATCH", > "id=hr.dependents; names=[hr, dependents]; type=TABLE", > "id=hr.depts; names=[hr, depts]; type=TABLE", > "id=hr.emps; names=[hr, emps]; type=TABLE", > "id=hr.locations; names=[hr, locations]; type=TABLE", > "id=hr; names=[hr]; type=SCHEMA")); > }{code} > Relevant code (SqlUtil.getAncestry): > {code:java} public static ImmutableList getAncestry(SqlNode root, > Predicate predicate, Predicate postPredicate) { > try { > new Genealogist(predicate, postPredicate).visitChild(root); > throw new AssertionError("not found: " + predicate + " in " + root); > {code} > Relevant code from {{SqlAdvisor.isSelectListItem}}: > {code:java} > private static boolean isSelectListItem(SqlNode root, > final SqlParserPos pos) { > List nodes = SqlUtil.getAncestry(root, > input -> input instanceof SqlIdentifier > && Util.last(((SqlIdentifier) input).names) > .equals(UPPER_HINT_TOKEN), > input -> Objects.requireNonNull(input).getParserPosition() > .startsAt(pos)); > assert nodes.get(0) == root; > nodes = Lists.reverse(nodes); > return nodes.size() > 2 > && nodes.get(2) instanceof SqlSelect > && nodes.get(1) == ((SqlSelect) nodes.get(2)).getSelectList(); > } > {code} > It looks like {{Util.last(((SqlIdentifier) > input).names).equals(UPPER_HINT_TOKEN)}} should be replaced with > {{(SqlIdentifier) input).names.contains(UPPER_HINT_TOKEN)}}. > Note: the code is advisor-specific, so the replacement should be safe > Original exception: > {noformat}java.lang.AssertionError: not found: > org.apache.calcite.sql.advise.SqlAdvisor$$Lambda$197/402207819@1b70203f in > SELECT * > FROM `hr`.`_SUGGEST_`.`TEST_TEST_TEST` > at org.apache.calcite.sql.SqlUtil.getAncestry(SqlUtil.java:872) > at > org.apache.calcite.sql.advise.SqlAdvisor.isSelectListItem(SqlAdvisor.java:242) > at > org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints(SqlAdvisor.java:220) > at > org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints0(SqlAdvisor.java:182) > at > org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints(SqlAdvisor.java:142) > at > org.apache.calcite.sql.advise.SqlAdvisorGetHintsFunction.getCompletionHints(SqlAdvisorGetHintsFunction.java:105) > at Baz.bind(Unknown Source) > at > org.apache.calcite.jdbc.CalcitePrepare$CalciteSignature.enumerable(CalcitePrepare.java:356) > at > org.apache.calcite.jdbc.CalciteConnectionImpl.enumerable(CalciteConnectionImpl.java:309) > at > org.apache.calcite.jdbc.CalciteMetaImpl._createIterable(CalciteMetaImpl.java:506) > at > org.apache.calcite.jdbc.CalciteMetaImpl.createIterable(CalciteMetaImpl.java:497) > at > org.apache.calcite.avatica.AvaticaResultSet.execute(AvaticaResultSet.java:182) > at > org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:64) > at > org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:43) > at > org.apache.calcite.avatica.AvaticaConnection.executeQueryInternal(AvaticaConnection.java:573) > at > org.apache.calcite.avatica.AvaticaPreparedStatement.executeQuery(AvaticaPreparedStatement.java:137) > at org.apache.calcite.test.JdbcTest.adviseSql(JdbcTest.java:441) > at > org.apache.calcite.test.JdbcTest.testSqlAdvisorSubSchema(JdbcTest.java:374){noformat} -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (CALCITE-2430) AssertionError: RelDataTypeImpl.getFieldList when SQL Advisor inspects non-struct field
[ https://issues.apache.org/jira/browse/CALCITE-2430?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16562495#comment-16562495 ] Vladimir Sitnikov commented on CALCITE-2430: I think this is relevant: https://twitter.com/tagir_valeev/status/1011809520803295232 In other words, advisor has to deal with incomplete and invalid SQL, so it might naturally require more defensive checks than a regular code. > AssertionError: RelDataTypeImpl.getFieldList when SQL Advisor inspects > non-struct field > --- > > Key: CALCITE-2430 > URL: https://issues.apache.org/jira/browse/CALCITE-2430 > Project: Calcite > Issue Type: Bug > Components: core >Affects Versions: 1.17.0 >Reporter: Vladimir Sitnikov >Assignee: Julian Hyde >Priority: Major > Attachments: fieldnamespace.png > > > Test case (in JdbcTest): > {code:java} @Test public void testSqlAdvisorNonStructColumn() > throws SQLException, ClassNotFoundException { > adviseSql("select e.\"empid\".^ from \"hr\".\"emps\" e", > CalciteAssert.checkResultUnordered( > "id=; names=null; type=MATCH", > "id=hr.dependents; names=[hr, dependents]; type=TABLE", > "id=hr.depts; names=[hr, depts]; type=TABLE", > "id=hr.emps; names=[hr, emps]; type=TABLE", > "id=hr.locations; names=[hr, locations]; type=TABLE", > "id=hr; names=[hr]; type=SCHEMA")); > }{code} > Relevant source from RelDataTypeImpl.getFieldList: > {code:java} public List getFieldList() { > assert isStruct(); // <-- Error here > return fieldList; > }{code} > Relevant source from SqlValidatorImpl.lookupNameCompletionHints: > {code:java} if (ns != null) { > RelDataType rowType = ns.getRowType(); > for (RelDataTypeField field : rowType.getFieldList()) { // <-- Error > here > hintList.add( > new SqlMonikerImpl( > field.getName(), > SqlMonikerType.COLUMN)); > } > }{code} > It looks like it makes sense to add {{isStruct}} check before iterating over > {{rowType.getFieldList()}}. > Any objections? > Original exception: {noformat} > java.lang.AssertionError > at > org.apache.calcite.rel.type.RelDataTypeImpl.getFieldList(RelDataTypeImpl.java:146) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.lookupNameCompletionHints(SqlValidatorImpl.java:808) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.lookupSelectHints(SqlValidatorImpl.java:690) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.lookupSelectHints(SqlValidatorImpl.java:701) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.lookupHints(SqlValidatorImpl.java:655) > at > org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints(SqlAdvisor.java:235) > at > org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints0(SqlAdvisor.java:182) > at > org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints(SqlAdvisor.java:142) > at > org.apache.calcite.sql.advise.SqlAdvisorGetHintsFunction.getCompletionHints(SqlAdvisorGetHintsFunction.java:105) > at Baz.bind(Unknown Source) > at > org.apache.calcite.jdbc.CalcitePrepare$CalciteSignature.enumerable(CalcitePrepare.java:356) > at > org.apache.calcite.jdbc.CalciteConnectionImpl.enumerable(CalciteConnectionImpl.java:309) > at > org.apache.calcite.jdbc.CalciteMetaImpl._createIterable(CalciteMetaImpl.java:506) > at > org.apache.calcite.jdbc.CalciteMetaImpl.createIterable(CalciteMetaImpl.java:497) > at > org.apache.calcite.avatica.AvaticaResultSet.execute(AvaticaResultSet.java:182) > at > org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:64) > at > org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:43) > at > org.apache.calcite.avatica.AvaticaConnection.executeQueryInternal(AvaticaConnection.java:573) > at > org.apache.calcite.avatica.AvaticaPreparedStatement.executeQuery(AvaticaPreparedStatement.java:137) > at org.apache.calcite.test.JdbcTest.adviseSql(JdbcTest.java:426) > at > org.apache.calcite.test.JdbcTest.testSqlAdvisorNonStructColumn(JdbcTest.java:359) > {noformat} -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Created] (CALCITE-2429) NPE: SqlValidatorImpl.lookupFieldNamespace when SQL Advisor observes non-existing field
Vladimir Sitnikov created CALCITE-2429: -- Summary: NPE: SqlValidatorImpl.lookupFieldNamespace when SQL Advisor observes non-existing field Key: CALCITE-2429 URL: https://issues.apache.org/jira/browse/CALCITE-2429 Project: Calcite Issue Type: Bug Components: core Affects Versions: 1.17.0 Reporter: Vladimir Sitnikov Assignee: Julian Hyde Test case (in JdbcTest): {code:java} @Test public void testSqlAdvisorNonExistingColumn() throws SQLException, ClassNotFoundException { adviseSql("select e.empid.^ from \"hr\".\"emps\" e", CalciteAssert.checkResultUnordered( "id=; names=null; type=MATCH", "id=hr.dependents; names=[hr, dependents]; type=TABLE", "id=hr.depts; names=[hr, depts]; type=TABLE", "id=hr.emps; names=[hr, emps]; type=TABLE", "id=hr.locations; names=[hr, locations]; type=TABLE", "id=hr; names=[hr]; type=SCHEMA")); }{code} {code:java} SqlValidatorNamespace lookupFieldNamespace(RelDataType rowType, String name) { final SqlNameMatcher nameMatcher = catalogReader.nameMatcher(); final RelDataTypeField field = nameMatcher.field(rowType, name); return new FieldNamespace(this, field.getType()); // <-- NPE }{code} It looks like null-check for {{field}} resolves the exception and it suggests {noformat}id=*; names=[*]; type=KEYWORD id=; names=null; type=MATCH{noformat} Original exception: {noformat}java.sql.SQLException: exception while executing query: null at org.apache.calcite.avatica.Helper.createException(Helper.java:56) at org.apache.calcite.avatica.Helper.createException(Helper.java:41) at org.apache.calcite.avatica.AvaticaConnection.executeQueryInternal(AvaticaConnection.java:577) at org.apache.calcite.avatica.AvaticaPreparedStatement.executeQuery(AvaticaPreparedStatement.java:137) at org.apache.calcite.test.JdbcTest.adviseSql(JdbcTest.java:411) at org.apache.calcite.test.JdbcTest.testSqlAdvisorNonExistingColumn(JdbcTest.java:344) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.junit.runner.JUnitCore.run(JUnitCore.java:137) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68) at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47) at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242) at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70) {noformat} {noformat}Caused by: java.lang.NullPointerException at org.apache.calcite.sql.validate.SqlValidatorImpl.lookupFieldNamespace(SqlValidatorImpl.java:4835) at org.apache.calcite.sql.validate.AbstractNamespace.lookupChild(AbstractNamespace.java:144) at org.apache.calcite.sql.validate.IdentifierNamespace.lookupChild(IdentifierNamespace.java:42) at org.apache.calcite.sql.validate.SqlValidatorImpl.lookupNameCompletionHints(SqlValidatorImpl.java:800) at org.apache.calcite.sql.validate.SqlValidatorImpl.lookupSelectHints(SqlValidatorImpl.java:690) at org.apache.calcite.sql.validate.SqlValidatorImpl.lookupSelectHints(SqlValidatorImpl.java:701) at org.apache.calcite.sql.validate.SqlValidatorImpl.lookupHints(SqlValidatorImpl.java:655) at org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints(SqlAdvisor.java:235) at org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints0(SqlAdvisor.java:182) at org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints(SqlAdvisor.java:142) at org.apache.calcite.sql.advise.SqlAdvisorGetHintsFunction.getCompletionHints(SqlAdvisorGetHintsFunction.java:105) at Baz.bind(Unknown Source) at
[jira] [Commented] (CALCITE-2431) AssertionError: SqlUtil.getAncestry when providing completion hints for sub-schema
[ https://issues.apache.org/jira/browse/CALCITE-2431?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16562465#comment-16562465 ] Julian Hyde commented on CALCITE-2431: -- Does your fix work when a table alias matches a column name? E.g. {code}select empno.deptno from emp as e, dept as empno{code} The reason we only match the last item in the identifier is to avoid that problem. I know you need to match non-last items because you may have record-valued fields. But there are complex cases like {{myDatabase.mySchema.customers.orders.lineItems}} where the field ("orders") is somewhere in the middle of the identifier's names. > AssertionError: SqlUtil.getAncestry when providing completion hints for > sub-schema > -- > > Key: CALCITE-2431 > URL: https://issues.apache.org/jira/browse/CALCITE-2431 > Project: Calcite > Issue Type: Bug > Components: core >Affects Versions: 1.17.0 >Reporter: Vladimir Sitnikov >Assignee: Julian Hyde >Priority: Major > > Test case (JdbcTest): > {code:java} @Test public void testSqlAdvisorSubSchema() > throws SQLException, ClassNotFoundException { > adviseSql("select * from \"hr\".^.test_test_test", > CalciteAssert.checkResultUnordered( > "id=; names=null; type=MATCH", > "id=hr.dependents; names=[hr, dependents]; type=TABLE", > "id=hr.depts; names=[hr, depts]; type=TABLE", > "id=hr.emps; names=[hr, emps]; type=TABLE", > "id=hr.locations; names=[hr, locations]; type=TABLE", > "id=hr; names=[hr]; type=SCHEMA")); > }{code} > Relevant code (SqlUtil.getAncestry): > {code:java} public static ImmutableList getAncestry(SqlNode root, > Predicate predicate, Predicate postPredicate) { > try { > new Genealogist(predicate, postPredicate).visitChild(root); > throw new AssertionError("not found: " + predicate + " in " + root); > {code} > Relevant code from {{SqlAdvisor.isSelectListItem}}: > {code:java} > private static boolean isSelectListItem(SqlNode root, > final SqlParserPos pos) { > List nodes = SqlUtil.getAncestry(root, > input -> input instanceof SqlIdentifier > && Util.last(((SqlIdentifier) input).names) > .equals(UPPER_HINT_TOKEN), > input -> Objects.requireNonNull(input).getParserPosition() > .startsAt(pos)); > assert nodes.get(0) == root; > nodes = Lists.reverse(nodes); > return nodes.size() > 2 > && nodes.get(2) instanceof SqlSelect > && nodes.get(1) == ((SqlSelect) nodes.get(2)).getSelectList(); > } > {code} > It looks like {{Util.last(((SqlIdentifier) > input).names).equals(UPPER_HINT_TOKEN)}} should be replaced with > {{(SqlIdentifier) input).names.contains(UPPER_HINT_TOKEN)}}. > Note: the code is advisor-specific, so the replacement should be safe > Original exception: > {noformat}java.lang.AssertionError: not found: > org.apache.calcite.sql.advise.SqlAdvisor$$Lambda$197/402207819@1b70203f in > SELECT * > FROM `hr`.`_SUGGEST_`.`TEST_TEST_TEST` > at org.apache.calcite.sql.SqlUtil.getAncestry(SqlUtil.java:872) > at > org.apache.calcite.sql.advise.SqlAdvisor.isSelectListItem(SqlAdvisor.java:242) > at > org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints(SqlAdvisor.java:220) > at > org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints0(SqlAdvisor.java:182) > at > org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints(SqlAdvisor.java:142) > at > org.apache.calcite.sql.advise.SqlAdvisorGetHintsFunction.getCompletionHints(SqlAdvisorGetHintsFunction.java:105) > at Baz.bind(Unknown Source) > at > org.apache.calcite.jdbc.CalcitePrepare$CalciteSignature.enumerable(CalcitePrepare.java:356) > at > org.apache.calcite.jdbc.CalciteConnectionImpl.enumerable(CalciteConnectionImpl.java:309) > at > org.apache.calcite.jdbc.CalciteMetaImpl._createIterable(CalciteMetaImpl.java:506) > at > org.apache.calcite.jdbc.CalciteMetaImpl.createIterable(CalciteMetaImpl.java:497) > at > org.apache.calcite.avatica.AvaticaResultSet.execute(AvaticaResultSet.java:182) > at > org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:64) > at > org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:43) > at > org.apache.calcite.avatica.AvaticaConnection.executeQueryInternal(AvaticaConnection.java:573) > at > org.apache.calcite.avatica.AvaticaPreparedStatement.executeQuery(AvaticaPreparedStatement.java:137) > at org.apache.calcite.test.JdbcTest.adviseSql(JdbcTest.java:441) > at > org.apache.calcite.test.JdbcTest.testSqlAdvisorSubSchema(JdbcTest.java:374){noformat} -- This message was
[jira] [Resolved] (CALCITE-2431) AssertionError: SqlUtil.getAncestry when providing completion hints for sub-schema
[ https://issues.apache.org/jira/browse/CALCITE-2431?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Vladimir Sitnikov resolved CALCITE-2431. Resolution: Fixed Fix Version/s: 1.18.0 > AssertionError: SqlUtil.getAncestry when providing completion hints for > sub-schema > -- > > Key: CALCITE-2431 > URL: https://issues.apache.org/jira/browse/CALCITE-2431 > Project: Calcite > Issue Type: Bug > Components: core >Affects Versions: 1.17.0 >Reporter: Vladimir Sitnikov >Assignee: Julian Hyde >Priority: Major > Fix For: 1.18.0 > > > Test case (JdbcTest): > {code:java} @Test public void testSqlAdvisorSubSchema() > throws SQLException, ClassNotFoundException { > adviseSql("select * from \"hr\".^.test_test_test", > CalciteAssert.checkResultUnordered( > "id=; names=null; type=MATCH", > "id=hr.dependents; names=[hr, dependents]; type=TABLE", > "id=hr.depts; names=[hr, depts]; type=TABLE", > "id=hr.emps; names=[hr, emps]; type=TABLE", > "id=hr.locations; names=[hr, locations]; type=TABLE", > "id=hr; names=[hr]; type=SCHEMA")); > }{code} > Relevant code (SqlUtil.getAncestry): > {code:java} public static ImmutableList getAncestry(SqlNode root, > Predicate predicate, Predicate postPredicate) { > try { > new Genealogist(predicate, postPredicate).visitChild(root); > throw new AssertionError("not found: " + predicate + " in " + root); > {code} > Relevant code from {{SqlAdvisor.isSelectListItem}}: > {code:java} > private static boolean isSelectListItem(SqlNode root, > final SqlParserPos pos) { > List nodes = SqlUtil.getAncestry(root, > input -> input instanceof SqlIdentifier > && Util.last(((SqlIdentifier) input).names) > .equals(UPPER_HINT_TOKEN), > input -> Objects.requireNonNull(input).getParserPosition() > .startsAt(pos)); > assert nodes.get(0) == root; > nodes = Lists.reverse(nodes); > return nodes.size() > 2 > && nodes.get(2) instanceof SqlSelect > && nodes.get(1) == ((SqlSelect) nodes.get(2)).getSelectList(); > } > {code} > It looks like {{Util.last(((SqlIdentifier) > input).names).equals(UPPER_HINT_TOKEN)}} should be replaced with > {{(SqlIdentifier) input).names.contains(UPPER_HINT_TOKEN)}}. > Note: the code is advisor-specific, so the replacement should be safe > Original exception: > {noformat}java.lang.AssertionError: not found: > org.apache.calcite.sql.advise.SqlAdvisor$$Lambda$197/402207819@1b70203f in > SELECT * > FROM `hr`.`_SUGGEST_`.`TEST_TEST_TEST` > at org.apache.calcite.sql.SqlUtil.getAncestry(SqlUtil.java:872) > at > org.apache.calcite.sql.advise.SqlAdvisor.isSelectListItem(SqlAdvisor.java:242) > at > org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints(SqlAdvisor.java:220) > at > org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints0(SqlAdvisor.java:182) > at > org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints(SqlAdvisor.java:142) > at > org.apache.calcite.sql.advise.SqlAdvisorGetHintsFunction.getCompletionHints(SqlAdvisorGetHintsFunction.java:105) > at Baz.bind(Unknown Source) > at > org.apache.calcite.jdbc.CalcitePrepare$CalciteSignature.enumerable(CalcitePrepare.java:356) > at > org.apache.calcite.jdbc.CalciteConnectionImpl.enumerable(CalciteConnectionImpl.java:309) > at > org.apache.calcite.jdbc.CalciteMetaImpl._createIterable(CalciteMetaImpl.java:506) > at > org.apache.calcite.jdbc.CalciteMetaImpl.createIterable(CalciteMetaImpl.java:497) > at > org.apache.calcite.avatica.AvaticaResultSet.execute(AvaticaResultSet.java:182) > at > org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:64) > at > org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:43) > at > org.apache.calcite.avatica.AvaticaConnection.executeQueryInternal(AvaticaConnection.java:573) > at > org.apache.calcite.avatica.AvaticaPreparedStatement.executeQuery(AvaticaPreparedStatement.java:137) > at org.apache.calcite.test.JdbcTest.adviseSql(JdbcTest.java:441) > at > org.apache.calcite.test.JdbcTest.testSqlAdvisorSubSchema(JdbcTest.java:374){noformat} -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Resolved] (CALCITE-2430) AssertionError: RelDataTypeImpl.getFieldList when SQL Advisor inspects non-struct field
[ https://issues.apache.org/jira/browse/CALCITE-2430?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Vladimir Sitnikov resolved CALCITE-2430. Resolution: Fixed > AssertionError: RelDataTypeImpl.getFieldList when SQL Advisor inspects > non-struct field > --- > > Key: CALCITE-2430 > URL: https://issues.apache.org/jira/browse/CALCITE-2430 > Project: Calcite > Issue Type: Bug > Components: core >Affects Versions: 1.17.0 >Reporter: Vladimir Sitnikov >Assignee: Julian Hyde >Priority: Major > Fix For: 1.18.0 > > Attachments: fieldnamespace.png > > > Test case (in JdbcTest): > {code:java} @Test public void testSqlAdvisorNonStructColumn() > throws SQLException, ClassNotFoundException { > adviseSql("select e.\"empid\".^ from \"hr\".\"emps\" e", > CalciteAssert.checkResultUnordered( > "id=; names=null; type=MATCH", > "id=hr.dependents; names=[hr, dependents]; type=TABLE", > "id=hr.depts; names=[hr, depts]; type=TABLE", > "id=hr.emps; names=[hr, emps]; type=TABLE", > "id=hr.locations; names=[hr, locations]; type=TABLE", > "id=hr; names=[hr]; type=SCHEMA")); > }{code} > Relevant source from RelDataTypeImpl.getFieldList: > {code:java} public List getFieldList() { > assert isStruct(); // <-- Error here > return fieldList; > }{code} > Relevant source from SqlValidatorImpl.lookupNameCompletionHints: > {code:java} if (ns != null) { > RelDataType rowType = ns.getRowType(); > for (RelDataTypeField field : rowType.getFieldList()) { // <-- Error > here > hintList.add( > new SqlMonikerImpl( > field.getName(), > SqlMonikerType.COLUMN)); > } > }{code} > It looks like it makes sense to add {{isStruct}} check before iterating over > {{rowType.getFieldList()}}. > Any objections? > Original exception: {noformat} > java.lang.AssertionError > at > org.apache.calcite.rel.type.RelDataTypeImpl.getFieldList(RelDataTypeImpl.java:146) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.lookupNameCompletionHints(SqlValidatorImpl.java:808) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.lookupSelectHints(SqlValidatorImpl.java:690) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.lookupSelectHints(SqlValidatorImpl.java:701) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.lookupHints(SqlValidatorImpl.java:655) > at > org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints(SqlAdvisor.java:235) > at > org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints0(SqlAdvisor.java:182) > at > org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints(SqlAdvisor.java:142) > at > org.apache.calcite.sql.advise.SqlAdvisorGetHintsFunction.getCompletionHints(SqlAdvisorGetHintsFunction.java:105) > at Baz.bind(Unknown Source) > at > org.apache.calcite.jdbc.CalcitePrepare$CalciteSignature.enumerable(CalcitePrepare.java:356) > at > org.apache.calcite.jdbc.CalciteConnectionImpl.enumerable(CalciteConnectionImpl.java:309) > at > org.apache.calcite.jdbc.CalciteMetaImpl._createIterable(CalciteMetaImpl.java:506) > at > org.apache.calcite.jdbc.CalciteMetaImpl.createIterable(CalciteMetaImpl.java:497) > at > org.apache.calcite.avatica.AvaticaResultSet.execute(AvaticaResultSet.java:182) > at > org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:64) > at > org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:43) > at > org.apache.calcite.avatica.AvaticaConnection.executeQueryInternal(AvaticaConnection.java:573) > at > org.apache.calcite.avatica.AvaticaPreparedStatement.executeQuery(AvaticaPreparedStatement.java:137) > at org.apache.calcite.test.JdbcTest.adviseSql(JdbcTest.java:426) > at > org.apache.calcite.test.JdbcTest.testSqlAdvisorNonStructColumn(JdbcTest.java:359) > {noformat} -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Updated] (CALCITE-2430) AssertionError: RelDataTypeImpl.getFieldList when SQL Advisor inspects non-struct field
[ https://issues.apache.org/jira/browse/CALCITE-2430?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Vladimir Sitnikov updated CALCITE-2430: --- Fix Version/s: 1.18.0 > AssertionError: RelDataTypeImpl.getFieldList when SQL Advisor inspects > non-struct field > --- > > Key: CALCITE-2430 > URL: https://issues.apache.org/jira/browse/CALCITE-2430 > Project: Calcite > Issue Type: Bug > Components: core >Affects Versions: 1.17.0 >Reporter: Vladimir Sitnikov >Assignee: Julian Hyde >Priority: Major > Fix For: 1.18.0 > > Attachments: fieldnamespace.png > > > Test case (in JdbcTest): > {code:java} @Test public void testSqlAdvisorNonStructColumn() > throws SQLException, ClassNotFoundException { > adviseSql("select e.\"empid\".^ from \"hr\".\"emps\" e", > CalciteAssert.checkResultUnordered( > "id=; names=null; type=MATCH", > "id=hr.dependents; names=[hr, dependents]; type=TABLE", > "id=hr.depts; names=[hr, depts]; type=TABLE", > "id=hr.emps; names=[hr, emps]; type=TABLE", > "id=hr.locations; names=[hr, locations]; type=TABLE", > "id=hr; names=[hr]; type=SCHEMA")); > }{code} > Relevant source from RelDataTypeImpl.getFieldList: > {code:java} public List getFieldList() { > assert isStruct(); // <-- Error here > return fieldList; > }{code} > Relevant source from SqlValidatorImpl.lookupNameCompletionHints: > {code:java} if (ns != null) { > RelDataType rowType = ns.getRowType(); > for (RelDataTypeField field : rowType.getFieldList()) { // <-- Error > here > hintList.add( > new SqlMonikerImpl( > field.getName(), > SqlMonikerType.COLUMN)); > } > }{code} > It looks like it makes sense to add {{isStruct}} check before iterating over > {{rowType.getFieldList()}}. > Any objections? > Original exception: {noformat} > java.lang.AssertionError > at > org.apache.calcite.rel.type.RelDataTypeImpl.getFieldList(RelDataTypeImpl.java:146) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.lookupNameCompletionHints(SqlValidatorImpl.java:808) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.lookupSelectHints(SqlValidatorImpl.java:690) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.lookupSelectHints(SqlValidatorImpl.java:701) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.lookupHints(SqlValidatorImpl.java:655) > at > org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints(SqlAdvisor.java:235) > at > org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints0(SqlAdvisor.java:182) > at > org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints(SqlAdvisor.java:142) > at > org.apache.calcite.sql.advise.SqlAdvisorGetHintsFunction.getCompletionHints(SqlAdvisorGetHintsFunction.java:105) > at Baz.bind(Unknown Source) > at > org.apache.calcite.jdbc.CalcitePrepare$CalciteSignature.enumerable(CalcitePrepare.java:356) > at > org.apache.calcite.jdbc.CalciteConnectionImpl.enumerable(CalciteConnectionImpl.java:309) > at > org.apache.calcite.jdbc.CalciteMetaImpl._createIterable(CalciteMetaImpl.java:506) > at > org.apache.calcite.jdbc.CalciteMetaImpl.createIterable(CalciteMetaImpl.java:497) > at > org.apache.calcite.avatica.AvaticaResultSet.execute(AvaticaResultSet.java:182) > at > org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:64) > at > org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:43) > at > org.apache.calcite.avatica.AvaticaConnection.executeQueryInternal(AvaticaConnection.java:573) > at > org.apache.calcite.avatica.AvaticaPreparedStatement.executeQuery(AvaticaPreparedStatement.java:137) > at org.apache.calcite.test.JdbcTest.adviseSql(JdbcTest.java:426) > at > org.apache.calcite.test.JdbcTest.testSqlAdvisorNonStructColumn(JdbcTest.java:359) > {noformat} -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Created] (CALCITE-2430) AssertionError: RelDataTypeImpl.getFieldList when SQL Advisor inspects non-struct field
Vladimir Sitnikov created CALCITE-2430: -- Summary: AssertionError: RelDataTypeImpl.getFieldList when SQL Advisor inspects non-struct field Key: CALCITE-2430 URL: https://issues.apache.org/jira/browse/CALCITE-2430 Project: Calcite Issue Type: Bug Components: core Affects Versions: 1.17.0 Reporter: Vladimir Sitnikov Assignee: Julian Hyde Test case (in JdbcTest): {code:java} @Test public void testSqlAdvisorNonStructColumn() throws SQLException, ClassNotFoundException { adviseSql("select e.\"empid\".^ from \"hr\".\"emps\" e", CalciteAssert.checkResultUnordered( "id=; names=null; type=MATCH", "id=hr.dependents; names=[hr, dependents]; type=TABLE", "id=hr.depts; names=[hr, depts]; type=TABLE", "id=hr.emps; names=[hr, emps]; type=TABLE", "id=hr.locations; names=[hr, locations]; type=TABLE", "id=hr; names=[hr]; type=SCHEMA")); }{code} Relevant source from RelDataTypeImpl.getFieldList: {code:java} public List getFieldList() { assert isStruct(); // <-- Error here return fieldList; }{code} Relevant source from SqlValidatorImpl.lookupNameCompletionHints: {code:java} if (ns != null) { RelDataType rowType = ns.getRowType(); for (RelDataTypeField field : rowType.getFieldList()) { // <-- Error here hintList.add( new SqlMonikerImpl( field.getName(), SqlMonikerType.COLUMN)); } }{code} It looks like it makes sense to add {{isStruct}} check before iterating over {{rowType.getFieldList()}}. Any objections? Original exception: {noformat} java.lang.AssertionError at org.apache.calcite.rel.type.RelDataTypeImpl.getFieldList(RelDataTypeImpl.java:146) at org.apache.calcite.sql.validate.SqlValidatorImpl.lookupNameCompletionHints(SqlValidatorImpl.java:808) at org.apache.calcite.sql.validate.SqlValidatorImpl.lookupSelectHints(SqlValidatorImpl.java:690) at org.apache.calcite.sql.validate.SqlValidatorImpl.lookupSelectHints(SqlValidatorImpl.java:701) at org.apache.calcite.sql.validate.SqlValidatorImpl.lookupHints(SqlValidatorImpl.java:655) at org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints(SqlAdvisor.java:235) at org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints0(SqlAdvisor.java:182) at org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints(SqlAdvisor.java:142) at org.apache.calcite.sql.advise.SqlAdvisorGetHintsFunction.getCompletionHints(SqlAdvisorGetHintsFunction.java:105) at Baz.bind(Unknown Source) at org.apache.calcite.jdbc.CalcitePrepare$CalciteSignature.enumerable(CalcitePrepare.java:356) at org.apache.calcite.jdbc.CalciteConnectionImpl.enumerable(CalciteConnectionImpl.java:309) at org.apache.calcite.jdbc.CalciteMetaImpl._createIterable(CalciteMetaImpl.java:506) at org.apache.calcite.jdbc.CalciteMetaImpl.createIterable(CalciteMetaImpl.java:497) at org.apache.calcite.avatica.AvaticaResultSet.execute(AvaticaResultSet.java:182) at org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:64) at org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:43) at org.apache.calcite.avatica.AvaticaConnection.executeQueryInternal(AvaticaConnection.java:573) at org.apache.calcite.avatica.AvaticaPreparedStatement.executeQuery(AvaticaPreparedStatement.java:137) at org.apache.calcite.test.JdbcTest.adviseSql(JdbcTest.java:426) at org.apache.calcite.test.JdbcTest.testSqlAdvisorNonStructColumn(JdbcTest.java:359) {noformat} -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (CALCITE-2428) cassandra unit test initialization failure
[ https://issues.apache.org/jira/browse/CALCITE-2428?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16562491#comment-16562491 ] Julian Hyde commented on CALCITE-2428: -- Reviewing PR and running tests now. A couple of comments: * JdkVersion overlaps functionality with TestUtil.getJavaMajorVersion. Let's combine the two. * Let's not commit TODO. It's either done or it isn't. {{Bug.upgrade}} is a useful marker for these kinds of things. > cassandra unit test initialization failure > -- > > Key: CALCITE-2428 > URL: https://issues.apache.org/jira/browse/CALCITE-2428 > Project: Calcite > Issue Type: Bug > Components: cassandra >Reporter: Andrei Sereda >Priority: Major > > Unit test fails because {{java.version}} string is parsed incorrectly -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Comment Edited] (CALCITE-2430) AssertionError: RelDataTypeImpl.getFieldList when SQL Advisor inspects non-struct field
[ https://issues.apache.org/jira/browse/CALCITE-2430?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16562519#comment-16562519 ] Vladimir Sitnikov edited comment on CALCITE-2430 at 7/30/18 9:16 PM: - {quote}Yes, I know. But is there any point in having a namespace that is not a struct? I don't think so. {quote} That's a good question. {{org.apache.calcite.sql.validate.SqlValidatorScope.Resolve#namespace}} is used in quite a few places (12 usages), so it might deserve its own ticket/code change. was (Author: vladimirsitnikov): {quote}Yes, I know. But is there any point in having a namespace that is not a struct? I don't think so.{quote} That's a good question. {{org.apache.calcite.sql.validate.SqlValidatorScope.Resolve#namespace}} is used in quite a few places, so it might deserve its own ticket/code change. > AssertionError: RelDataTypeImpl.getFieldList when SQL Advisor inspects > non-struct field > --- > > Key: CALCITE-2430 > URL: https://issues.apache.org/jira/browse/CALCITE-2430 > Project: Calcite > Issue Type: Bug > Components: core >Affects Versions: 1.17.0 >Reporter: Vladimir Sitnikov >Assignee: Julian Hyde >Priority: Major > Fix For: 1.18.0 > > Attachments: fieldnamespace.png > > > Test case (in JdbcTest): > {code:java} @Test public void testSqlAdvisorNonStructColumn() > throws SQLException, ClassNotFoundException { > adviseSql("select e.\"empid\".^ from \"hr\".\"emps\" e", > CalciteAssert.checkResultUnordered( > "id=; names=null; type=MATCH", > "id=hr.dependents; names=[hr, dependents]; type=TABLE", > "id=hr.depts; names=[hr, depts]; type=TABLE", > "id=hr.emps; names=[hr, emps]; type=TABLE", > "id=hr.locations; names=[hr, locations]; type=TABLE", > "id=hr; names=[hr]; type=SCHEMA")); > }{code} > Relevant source from RelDataTypeImpl.getFieldList: > {code:java} public List getFieldList() { > assert isStruct(); // <-- Error here > return fieldList; > }{code} > Relevant source from SqlValidatorImpl.lookupNameCompletionHints: > {code:java} if (ns != null) { > RelDataType rowType = ns.getRowType(); > for (RelDataTypeField field : rowType.getFieldList()) { // <-- Error > here > hintList.add( > new SqlMonikerImpl( > field.getName(), > SqlMonikerType.COLUMN)); > } > }{code} > It looks like it makes sense to add {{isStruct}} check before iterating over > {{rowType.getFieldList()}}. > Any objections? > Original exception: {noformat} > java.lang.AssertionError > at > org.apache.calcite.rel.type.RelDataTypeImpl.getFieldList(RelDataTypeImpl.java:146) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.lookupNameCompletionHints(SqlValidatorImpl.java:808) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.lookupSelectHints(SqlValidatorImpl.java:690) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.lookupSelectHints(SqlValidatorImpl.java:701) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.lookupHints(SqlValidatorImpl.java:655) > at > org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints(SqlAdvisor.java:235) > at > org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints0(SqlAdvisor.java:182) > at > org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints(SqlAdvisor.java:142) > at > org.apache.calcite.sql.advise.SqlAdvisorGetHintsFunction.getCompletionHints(SqlAdvisorGetHintsFunction.java:105) > at Baz.bind(Unknown Source) > at > org.apache.calcite.jdbc.CalcitePrepare$CalciteSignature.enumerable(CalcitePrepare.java:356) > at > org.apache.calcite.jdbc.CalciteConnectionImpl.enumerable(CalciteConnectionImpl.java:309) > at > org.apache.calcite.jdbc.CalciteMetaImpl._createIterable(CalciteMetaImpl.java:506) > at > org.apache.calcite.jdbc.CalciteMetaImpl.createIterable(CalciteMetaImpl.java:497) > at > org.apache.calcite.avatica.AvaticaResultSet.execute(AvaticaResultSet.java:182) > at > org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:64) > at > org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:43) > at > org.apache.calcite.avatica.AvaticaConnection.executeQueryInternal(AvaticaConnection.java:573) > at > org.apache.calcite.avatica.AvaticaPreparedStatement.executeQuery(AvaticaPreparedStatement.java:137) > at org.apache.calcite.test.JdbcTest.adviseSql(JdbcTest.java:426) > at > org.apache.calcite.test.JdbcTest.testSqlAdvisorNonStructColumn(JdbcTest.java:359) > {noformat} -- This message was
[jira] [Commented] (CALCITE-2430) AssertionError: RelDataTypeImpl.getFieldList when SQL Advisor inspects non-struct field
[ https://issues.apache.org/jira/browse/CALCITE-2430?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16562519#comment-16562519 ] Vladimir Sitnikov commented on CALCITE-2430: {quote}Yes, I know. But is there any point in having a namespace that is not a struct? I don't think so.{quote} That's a good question. {{org.apache.calcite.sql.validate.SqlValidatorScope.Resolve#namespace}} is used in quite a few places, so it might deserve its own ticket/code change. > AssertionError: RelDataTypeImpl.getFieldList when SQL Advisor inspects > non-struct field > --- > > Key: CALCITE-2430 > URL: https://issues.apache.org/jira/browse/CALCITE-2430 > Project: Calcite > Issue Type: Bug > Components: core >Affects Versions: 1.17.0 >Reporter: Vladimir Sitnikov >Assignee: Julian Hyde >Priority: Major > Fix For: 1.18.0 > > Attachments: fieldnamespace.png > > > Test case (in JdbcTest): > {code:java} @Test public void testSqlAdvisorNonStructColumn() > throws SQLException, ClassNotFoundException { > adviseSql("select e.\"empid\".^ from \"hr\".\"emps\" e", > CalciteAssert.checkResultUnordered( > "id=; names=null; type=MATCH", > "id=hr.dependents; names=[hr, dependents]; type=TABLE", > "id=hr.depts; names=[hr, depts]; type=TABLE", > "id=hr.emps; names=[hr, emps]; type=TABLE", > "id=hr.locations; names=[hr, locations]; type=TABLE", > "id=hr; names=[hr]; type=SCHEMA")); > }{code} > Relevant source from RelDataTypeImpl.getFieldList: > {code:java} public List getFieldList() { > assert isStruct(); // <-- Error here > return fieldList; > }{code} > Relevant source from SqlValidatorImpl.lookupNameCompletionHints: > {code:java} if (ns != null) { > RelDataType rowType = ns.getRowType(); > for (RelDataTypeField field : rowType.getFieldList()) { // <-- Error > here > hintList.add( > new SqlMonikerImpl( > field.getName(), > SqlMonikerType.COLUMN)); > } > }{code} > It looks like it makes sense to add {{isStruct}} check before iterating over > {{rowType.getFieldList()}}. > Any objections? > Original exception: {noformat} > java.lang.AssertionError > at > org.apache.calcite.rel.type.RelDataTypeImpl.getFieldList(RelDataTypeImpl.java:146) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.lookupNameCompletionHints(SqlValidatorImpl.java:808) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.lookupSelectHints(SqlValidatorImpl.java:690) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.lookupSelectHints(SqlValidatorImpl.java:701) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.lookupHints(SqlValidatorImpl.java:655) > at > org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints(SqlAdvisor.java:235) > at > org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints0(SqlAdvisor.java:182) > at > org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints(SqlAdvisor.java:142) > at > org.apache.calcite.sql.advise.SqlAdvisorGetHintsFunction.getCompletionHints(SqlAdvisorGetHintsFunction.java:105) > at Baz.bind(Unknown Source) > at > org.apache.calcite.jdbc.CalcitePrepare$CalciteSignature.enumerable(CalcitePrepare.java:356) > at > org.apache.calcite.jdbc.CalciteConnectionImpl.enumerable(CalciteConnectionImpl.java:309) > at > org.apache.calcite.jdbc.CalciteMetaImpl._createIterable(CalciteMetaImpl.java:506) > at > org.apache.calcite.jdbc.CalciteMetaImpl.createIterable(CalciteMetaImpl.java:497) > at > org.apache.calcite.avatica.AvaticaResultSet.execute(AvaticaResultSet.java:182) > at > org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:64) > at > org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:43) > at > org.apache.calcite.avatica.AvaticaConnection.executeQueryInternal(AvaticaConnection.java:573) > at > org.apache.calcite.avatica.AvaticaPreparedStatement.executeQuery(AvaticaPreparedStatement.java:137) > at org.apache.calcite.test.JdbcTest.adviseSql(JdbcTest.java:426) > at > org.apache.calcite.test.JdbcTest.testSqlAdvisorNonStructColumn(JdbcTest.java:359) > {noformat} -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (CALCITE-2430) AssertionError: RelDataTypeImpl.getFieldList when SQL Advisor inspects non-struct field
[ https://issues.apache.org/jira/browse/CALCITE-2430?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16562440#comment-16562440 ] Julian Hyde commented on CALCITE-2430: -- bq. It looks like it makes sense to add {{isStruct}} check before iterating over {{rowType.getFieldList()}}. Probably. But we should look into the other possibility: only create a {{FieldNamespace}} if the field is a struct, and in fact assert that any namespace can only be based on a struct (record) type. > AssertionError: RelDataTypeImpl.getFieldList when SQL Advisor inspects > non-struct field > --- > > Key: CALCITE-2430 > URL: https://issues.apache.org/jira/browse/CALCITE-2430 > Project: Calcite > Issue Type: Bug > Components: core >Affects Versions: 1.17.0 >Reporter: Vladimir Sitnikov >Assignee: Julian Hyde >Priority: Major > > Test case (in JdbcTest): > {code:java} @Test public void testSqlAdvisorNonStructColumn() > throws SQLException, ClassNotFoundException { > adviseSql("select e.\"empid\".^ from \"hr\".\"emps\" e", > CalciteAssert.checkResultUnordered( > "id=; names=null; type=MATCH", > "id=hr.dependents; names=[hr, dependents]; type=TABLE", > "id=hr.depts; names=[hr, depts]; type=TABLE", > "id=hr.emps; names=[hr, emps]; type=TABLE", > "id=hr.locations; names=[hr, locations]; type=TABLE", > "id=hr; names=[hr]; type=SCHEMA")); > }{code} > Relevant source from RelDataTypeImpl.getFieldList: > {code:java} public List getFieldList() { > assert isStruct(); // <-- Error here > return fieldList; > }{code} > Relevant source from SqlValidatorImpl.lookupNameCompletionHints: > {code:java} if (ns != null) { > RelDataType rowType = ns.getRowType(); > for (RelDataTypeField field : rowType.getFieldList()) { // <-- Error > here > hintList.add( > new SqlMonikerImpl( > field.getName(), > SqlMonikerType.COLUMN)); > } > }{code} > It looks like it makes sense to add {{isStruct}} check before iterating over > {{rowType.getFieldList()}}. > Any objections? > Original exception: {noformat} > java.lang.AssertionError > at > org.apache.calcite.rel.type.RelDataTypeImpl.getFieldList(RelDataTypeImpl.java:146) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.lookupNameCompletionHints(SqlValidatorImpl.java:808) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.lookupSelectHints(SqlValidatorImpl.java:690) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.lookupSelectHints(SqlValidatorImpl.java:701) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.lookupHints(SqlValidatorImpl.java:655) > at > org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints(SqlAdvisor.java:235) > at > org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints0(SqlAdvisor.java:182) > at > org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints(SqlAdvisor.java:142) > at > org.apache.calcite.sql.advise.SqlAdvisorGetHintsFunction.getCompletionHints(SqlAdvisorGetHintsFunction.java:105) > at Baz.bind(Unknown Source) > at > org.apache.calcite.jdbc.CalcitePrepare$CalciteSignature.enumerable(CalcitePrepare.java:356) > at > org.apache.calcite.jdbc.CalciteConnectionImpl.enumerable(CalciteConnectionImpl.java:309) > at > org.apache.calcite.jdbc.CalciteMetaImpl._createIterable(CalciteMetaImpl.java:506) > at > org.apache.calcite.jdbc.CalciteMetaImpl.createIterable(CalciteMetaImpl.java:497) > at > org.apache.calcite.avatica.AvaticaResultSet.execute(AvaticaResultSet.java:182) > at > org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:64) > at > org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:43) > at > org.apache.calcite.avatica.AvaticaConnection.executeQueryInternal(AvaticaConnection.java:573) > at > org.apache.calcite.avatica.AvaticaPreparedStatement.executeQuery(AvaticaPreparedStatement.java:137) > at org.apache.calcite.test.JdbcTest.adviseSql(JdbcTest.java:426) > at > org.apache.calcite.test.JdbcTest.testSqlAdvisorNonStructColumn(JdbcTest.java:359) > {noformat} -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Updated] (CALCITE-2430) AssertionError: RelDataTypeImpl.getFieldList when SQL Advisor inspects non-struct field
[ https://issues.apache.org/jira/browse/CALCITE-2430?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Vladimir Sitnikov updated CALCITE-2430: --- Attachment: fieldnamespace.png > AssertionError: RelDataTypeImpl.getFieldList when SQL Advisor inspects > non-struct field > --- > > Key: CALCITE-2430 > URL: https://issues.apache.org/jira/browse/CALCITE-2430 > Project: Calcite > Issue Type: Bug > Components: core >Affects Versions: 1.17.0 >Reporter: Vladimir Sitnikov >Assignee: Julian Hyde >Priority: Major > Attachments: fieldnamespace.png > > > Test case (in JdbcTest): > {code:java} @Test public void testSqlAdvisorNonStructColumn() > throws SQLException, ClassNotFoundException { > adviseSql("select e.\"empid\".^ from \"hr\".\"emps\" e", > CalciteAssert.checkResultUnordered( > "id=; names=null; type=MATCH", > "id=hr.dependents; names=[hr, dependents]; type=TABLE", > "id=hr.depts; names=[hr, depts]; type=TABLE", > "id=hr.emps; names=[hr, emps]; type=TABLE", > "id=hr.locations; names=[hr, locations]; type=TABLE", > "id=hr; names=[hr]; type=SCHEMA")); > }{code} > Relevant source from RelDataTypeImpl.getFieldList: > {code:java} public List getFieldList() { > assert isStruct(); // <-- Error here > return fieldList; > }{code} > Relevant source from SqlValidatorImpl.lookupNameCompletionHints: > {code:java} if (ns != null) { > RelDataType rowType = ns.getRowType(); > for (RelDataTypeField field : rowType.getFieldList()) { // <-- Error > here > hintList.add( > new SqlMonikerImpl( > field.getName(), > SqlMonikerType.COLUMN)); > } > }{code} > It looks like it makes sense to add {{isStruct}} check before iterating over > {{rowType.getFieldList()}}. > Any objections? > Original exception: {noformat} > java.lang.AssertionError > at > org.apache.calcite.rel.type.RelDataTypeImpl.getFieldList(RelDataTypeImpl.java:146) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.lookupNameCompletionHints(SqlValidatorImpl.java:808) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.lookupSelectHints(SqlValidatorImpl.java:690) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.lookupSelectHints(SqlValidatorImpl.java:701) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.lookupHints(SqlValidatorImpl.java:655) > at > org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints(SqlAdvisor.java:235) > at > org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints0(SqlAdvisor.java:182) > at > org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints(SqlAdvisor.java:142) > at > org.apache.calcite.sql.advise.SqlAdvisorGetHintsFunction.getCompletionHints(SqlAdvisorGetHintsFunction.java:105) > at Baz.bind(Unknown Source) > at > org.apache.calcite.jdbc.CalcitePrepare$CalciteSignature.enumerable(CalcitePrepare.java:356) > at > org.apache.calcite.jdbc.CalciteConnectionImpl.enumerable(CalciteConnectionImpl.java:309) > at > org.apache.calcite.jdbc.CalciteMetaImpl._createIterable(CalciteMetaImpl.java:506) > at > org.apache.calcite.jdbc.CalciteMetaImpl.createIterable(CalciteMetaImpl.java:497) > at > org.apache.calcite.avatica.AvaticaResultSet.execute(AvaticaResultSet.java:182) > at > org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:64) > at > org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:43) > at > org.apache.calcite.avatica.AvaticaConnection.executeQueryInternal(AvaticaConnection.java:573) > at > org.apache.calcite.avatica.AvaticaPreparedStatement.executeQuery(AvaticaPreparedStatement.java:137) > at org.apache.calcite.test.JdbcTest.adviseSql(JdbcTest.java:426) > at > org.apache.calcite.test.JdbcTest.testSqlAdvisorNonStructColumn(JdbcTest.java:359) > {noformat} -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (CALCITE-2430) AssertionError: RelDataTypeImpl.getFieldList when SQL Advisor inspects non-struct field
[ https://issues.apache.org/jira/browse/CALCITE-2430?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16562486#comment-16562486 ] Vladimir Sitnikov commented on CALCITE-2430: Changing SqlValidatorImpl as follows: {code:java} SqlValidatorNamespace lookupFieldNamespace(RelDataType rowType, String name) { final SqlNameMatcher nameMatcher = catalogReader.nameMatcher(); final RelDataTypeField field = nameMatcher.field(rowType, name); if (field == null || !field.getType().isStruct()) { // <-- added isStruct here return null; } return new FieldNamespace(this, field.getType()); } {code} results in NPE like {noformat}Caused by: java.lang.NullPointerException at java.util.Objects.requireNonNull(Objects.java:203) at org.apache.calcite.sql.validate.SqlValidatorScope$Resolve.(SqlValidatorScope.java:329) at org.apache.calcite.sql.validate.SqlValidatorScope$ResolvedImpl.found(SqlValidatorScope.java:299) at org.apache.calcite.sql.validate.DelegatingScope.resolveInNamespace(DelegatingScope.java:98) at org.apache.calcite.sql.validate.DelegatingScope.resolveInNamespace(DelegatingScope.java:130) at org.apache.calcite.sql.validate.DelegatingScope.fullyQualify(DelegatingScope.java:403) at org.apache.calcite.sql.validate.SqlValidatorImpl.findTableColumnPair(SqlValidatorImpl.java:3427) at org.apache.calcite.sql.validate.SqlValidatorImpl.isRolledUpColumn(SqlValidatorImpl.java:3460) at org.apache.calcite.sql.validate.SqlValidatorImpl.expandStar(SqlValidatorImpl.java:513) at org.apache.calcite.sql.validate.SqlValidatorImpl.expandSelectItem(SqlValidatorImpl.java:422) at org.apache.calcite.sql.validate.SqlValidatorImpl.validateSelectList(SqlValidatorImpl.java:4039) at org.apache.calcite.sql.validate.SqlValidatorImpl.validateSelect(SqlValidatorImpl.java:3302) at org.apache.calcite.sql.validate.SelectNamespace.validateImpl(SelectNamespace.java:60) at org.apache.calcite.sql.validate.AbstractNamespace.validate(AbstractNamespace.java:84) at org.apache.calcite.sql.validate.SqlValidatorImpl.validateNamespace(SqlValidatorImpl.java:972) at org.apache.calcite.sql.validate.SqlValidatorImpl.validateQuery(SqlValidatorImpl.java:948) at org.apache.calcite.sql.SqlSelect.validate(SqlSelect.java:225) at org.apache.calcite.sql.validate.SqlValidatorImpl.validateScopedExpression(SqlValidatorImpl.java:923) at org.apache.calcite.sql.validate.SqlValidatorImpl.validate(SqlValidatorImpl.java:631) at org.apache.calcite.sql2rel.SqlToRelConverter.convertQuery(SqlToRelConverter.java:552) at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:264) at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:230) at org.apache.calcite.prepare.CalcitePrepareImpl.prepare2_(CalcitePrepareImpl.java:772) at org.apache.calcite.prepare.CalcitePrepareImpl.prepare_(CalcitePrepareImpl.java:636) at org.apache.calcite.prepare.CalcitePrepareImpl.prepareSql(CalcitePrepareImpl.java:606) at org.apache.calcite.jdbc.CalciteConnectionImpl.parseQuery(CalciteConnectionImpl.java:229) at org.apache.calcite.jdbc.CalciteConnectionImpl.prepareStatement_(CalciteConnectionImpl.java:211) {noformat} > AssertionError: RelDataTypeImpl.getFieldList when SQL Advisor inspects > non-struct field > --- > > Key: CALCITE-2430 > URL: https://issues.apache.org/jira/browse/CALCITE-2430 > Project: Calcite > Issue Type: Bug > Components: core >Affects Versions: 1.17.0 >Reporter: Vladimir Sitnikov >Assignee: Julian Hyde >Priority: Major > Attachments: fieldnamespace.png > > > Test case (in JdbcTest): > {code:java} @Test public void testSqlAdvisorNonStructColumn() > throws SQLException, ClassNotFoundException { > adviseSql("select e.\"empid\".^ from \"hr\".\"emps\" e", > CalciteAssert.checkResultUnordered( > "id=; names=null; type=MATCH", > "id=hr.dependents; names=[hr, dependents]; type=TABLE", > "id=hr.depts; names=[hr, depts]; type=TABLE", > "id=hr.emps; names=[hr, emps]; type=TABLE", > "id=hr.locations; names=[hr, locations]; type=TABLE", > "id=hr; names=[hr]; type=SCHEMA")); > }{code} > Relevant source from RelDataTypeImpl.getFieldList: > {code:java} public List getFieldList() { > assert isStruct(); // <-- Error here > return fieldList; > }{code} > Relevant source from SqlValidatorImpl.lookupNameCompletionHints: > {code:java} if (ns != null) { > RelDataType rowType = ns.getRowType(); > for (RelDataTypeField field : rowType.getFieldList()) {
[jira] [Commented] (CALCITE-2428) cassandra unit test initialization failure
[ https://issues.apache.org/jira/browse/CALCITE-2428?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16562639#comment-16562639 ] Andrei Sereda commented on CALCITE-2428: [~julianhyde] addressed your comments in new commit (d821ab83) > cassandra unit test initialization failure > -- > > Key: CALCITE-2428 > URL: https://issues.apache.org/jira/browse/CALCITE-2428 > Project: Calcite > Issue Type: Bug > Components: cassandra >Reporter: Andrei Sereda >Priority: Major > > Unit test fails because {{java.version}} string is parsed incorrectly -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (CALCITE-2430) AssertionError: RelDataTypeImpl.getFieldList when SQL Advisor inspects non-struct field
[ https://issues.apache.org/jira/browse/CALCITE-2430?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16562716#comment-16562716 ] Julian Hyde commented on CALCITE-2430: -- By the way, I totally agree about advisor needing to be robust. It should not throw runtime exceptions (e.g. NPEs) even in the presence of invalid SQL. Given ill-formed or invalid SQL, it should endeavor to recover and produce useful suggestions. Also, given valid SQL, it should not (I won't say "must not") produce invalid suggestions. > AssertionError: RelDataTypeImpl.getFieldList when SQL Advisor inspects > non-struct field > --- > > Key: CALCITE-2430 > URL: https://issues.apache.org/jira/browse/CALCITE-2430 > Project: Calcite > Issue Type: Bug > Components: core >Affects Versions: 1.17.0 >Reporter: Vladimir Sitnikov >Assignee: Julian Hyde >Priority: Major > Fix For: 1.18.0 > > Attachments: fieldnamespace.png > > > Test case (in JdbcTest): > {code:java} @Test public void testSqlAdvisorNonStructColumn() > throws SQLException, ClassNotFoundException { > adviseSql("select e.\"empid\".^ from \"hr\".\"emps\" e", > CalciteAssert.checkResultUnordered( > "id=; names=null; type=MATCH", > "id=hr.dependents; names=[hr, dependents]; type=TABLE", > "id=hr.depts; names=[hr, depts]; type=TABLE", > "id=hr.emps; names=[hr, emps]; type=TABLE", > "id=hr.locations; names=[hr, locations]; type=TABLE", > "id=hr; names=[hr]; type=SCHEMA")); > }{code} > Relevant source from RelDataTypeImpl.getFieldList: > {code:java} public List getFieldList() { > assert isStruct(); // <-- Error here > return fieldList; > }{code} > Relevant source from SqlValidatorImpl.lookupNameCompletionHints: > {code:java} if (ns != null) { > RelDataType rowType = ns.getRowType(); > for (RelDataTypeField field : rowType.getFieldList()) { // <-- Error > here > hintList.add( > new SqlMonikerImpl( > field.getName(), > SqlMonikerType.COLUMN)); > } > }{code} > It looks like it makes sense to add {{isStruct}} check before iterating over > {{rowType.getFieldList()}}. > Any objections? > Original exception: {noformat} > java.lang.AssertionError > at > org.apache.calcite.rel.type.RelDataTypeImpl.getFieldList(RelDataTypeImpl.java:146) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.lookupNameCompletionHints(SqlValidatorImpl.java:808) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.lookupSelectHints(SqlValidatorImpl.java:690) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.lookupSelectHints(SqlValidatorImpl.java:701) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.lookupHints(SqlValidatorImpl.java:655) > at > org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints(SqlAdvisor.java:235) > at > org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints0(SqlAdvisor.java:182) > at > org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints(SqlAdvisor.java:142) > at > org.apache.calcite.sql.advise.SqlAdvisorGetHintsFunction.getCompletionHints(SqlAdvisorGetHintsFunction.java:105) > at Baz.bind(Unknown Source) > at > org.apache.calcite.jdbc.CalcitePrepare$CalciteSignature.enumerable(CalcitePrepare.java:356) > at > org.apache.calcite.jdbc.CalciteConnectionImpl.enumerable(CalciteConnectionImpl.java:309) > at > org.apache.calcite.jdbc.CalciteMetaImpl._createIterable(CalciteMetaImpl.java:506) > at > org.apache.calcite.jdbc.CalciteMetaImpl.createIterable(CalciteMetaImpl.java:497) > at > org.apache.calcite.avatica.AvaticaResultSet.execute(AvaticaResultSet.java:182) > at > org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:64) > at > org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:43) > at > org.apache.calcite.avatica.AvaticaConnection.executeQueryInternal(AvaticaConnection.java:573) > at > org.apache.calcite.avatica.AvaticaPreparedStatement.executeQuery(AvaticaPreparedStatement.java:137) > at org.apache.calcite.test.JdbcTest.adviseSql(JdbcTest.java:426) > at > org.apache.calcite.test.JdbcTest.testSqlAdvisorNonStructColumn(JdbcTest.java:359) > {noformat} -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (CALCITE-2431) AssertionError: SqlUtil.getAncestry when providing completion hints for sub-schema
[ https://issues.apache.org/jira/browse/CALCITE-2431?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16562531#comment-16562531 ] Vladimir Sitnikov commented on CALCITE-2431: PS. The purpose of the check is to remove * (star) from completion hints in case suggest pointer is outside of a select clause: {code:java}final SqlMoniker star = new SqlMonikerImpl(ImmutableList.of("*"), SqlMonikerType.KEYWORD); if (hintList.contains(star) && !isSelectListItem(sqlNode, pos)) { // <-- This checks if _SUGGEST_ is placed within SELECT or not hintList.remove(star); } {code} > AssertionError: SqlUtil.getAncestry when providing completion hints for > sub-schema > -- > > Key: CALCITE-2431 > URL: https://issues.apache.org/jira/browse/CALCITE-2431 > Project: Calcite > Issue Type: Bug > Components: core >Affects Versions: 1.17.0 >Reporter: Vladimir Sitnikov >Assignee: Julian Hyde >Priority: Major > Fix For: 1.18.0 > > > Test case (JdbcTest): > {code:java} @Test public void testSqlAdvisorSubSchema() > throws SQLException, ClassNotFoundException { > adviseSql("select * from \"hr\".^.test_test_test", > CalciteAssert.checkResultUnordered( > "id=; names=null; type=MATCH", > "id=hr.dependents; names=[hr, dependents]; type=TABLE", > "id=hr.depts; names=[hr, depts]; type=TABLE", > "id=hr.emps; names=[hr, emps]; type=TABLE", > "id=hr.locations; names=[hr, locations]; type=TABLE", > "id=hr; names=[hr]; type=SCHEMA")); > }{code} > Relevant code (SqlUtil.getAncestry): > {code:java} public static ImmutableList getAncestry(SqlNode root, > Predicate predicate, Predicate postPredicate) { > try { > new Genealogist(predicate, postPredicate).visitChild(root); > throw new AssertionError("not found: " + predicate + " in " + root); > {code} > Relevant code from {{SqlAdvisor.isSelectListItem}}: > {code:java} > private static boolean isSelectListItem(SqlNode root, > final SqlParserPos pos) { > List nodes = SqlUtil.getAncestry(root, > input -> input instanceof SqlIdentifier > && Util.last(((SqlIdentifier) input).names) > .equals(UPPER_HINT_TOKEN), > input -> Objects.requireNonNull(input).getParserPosition() > .startsAt(pos)); > assert nodes.get(0) == root; > nodes = Lists.reverse(nodes); > return nodes.size() > 2 > && nodes.get(2) instanceof SqlSelect > && nodes.get(1) == ((SqlSelect) nodes.get(2)).getSelectList(); > } > {code} > It looks like {{Util.last(((SqlIdentifier) > input).names).equals(UPPER_HINT_TOKEN)}} should be replaced with > {{(SqlIdentifier) input).names.contains(UPPER_HINT_TOKEN)}}. > Note: the code is advisor-specific, so the replacement should be safe > Original exception: > {noformat}java.lang.AssertionError: not found: > org.apache.calcite.sql.advise.SqlAdvisor$$Lambda$197/402207819@1b70203f in > SELECT * > FROM `hr`.`_SUGGEST_`.`TEST_TEST_TEST` > at org.apache.calcite.sql.SqlUtil.getAncestry(SqlUtil.java:872) > at > org.apache.calcite.sql.advise.SqlAdvisor.isSelectListItem(SqlAdvisor.java:242) > at > org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints(SqlAdvisor.java:220) > at > org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints0(SqlAdvisor.java:182) > at > org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints(SqlAdvisor.java:142) > at > org.apache.calcite.sql.advise.SqlAdvisorGetHintsFunction.getCompletionHints(SqlAdvisorGetHintsFunction.java:105) > at Baz.bind(Unknown Source) > at > org.apache.calcite.jdbc.CalcitePrepare$CalciteSignature.enumerable(CalcitePrepare.java:356) > at > org.apache.calcite.jdbc.CalciteConnectionImpl.enumerable(CalciteConnectionImpl.java:309) > at > org.apache.calcite.jdbc.CalciteMetaImpl._createIterable(CalciteMetaImpl.java:506) > at > org.apache.calcite.jdbc.CalciteMetaImpl.createIterable(CalciteMetaImpl.java:497) > at > org.apache.calcite.avatica.AvaticaResultSet.execute(AvaticaResultSet.java:182) > at > org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:64) > at > org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:43) > at > org.apache.calcite.avatica.AvaticaConnection.executeQueryInternal(AvaticaConnection.java:573) > at > org.apache.calcite.avatica.AvaticaPreparedStatement.executeQuery(AvaticaPreparedStatement.java:137) > at org.apache.calcite.test.JdbcTest.adviseSql(JdbcTest.java:441) > at > org.apache.calcite.test.JdbcTest.testSqlAdvisorSubSchema(JdbcTest.java:374){noformat} -- This message was
[jira] [Commented] (CALCITE-2429) NPE: SqlValidatorImpl.lookupFieldNamespace when SQL Advisor observes non-existing field
[ https://issues.apache.org/jira/browse/CALCITE-2429?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16562706#comment-16562706 ] Julian Hyde commented on CALCITE-2429: -- [~vladimirsitnikov], SqlAdvisorTest is a better place for most tests of SQL advisor. JdbcTest is getting very large. It executes tests via the JDBC driver, whereas SqlAdvisorTest tests the advisor more directly. (I would leave only one or two advisor tests in JdbcTest, to ensure that the JDBC driver can call the advisor correctly.) > NPE: SqlValidatorImpl.lookupFieldNamespace when SQL Advisor observes > non-existing field > --- > > Key: CALCITE-2429 > URL: https://issues.apache.org/jira/browse/CALCITE-2429 > Project: Calcite > Issue Type: Bug > Components: core >Affects Versions: 1.17.0 >Reporter: Vladimir Sitnikov >Assignee: Julian Hyde >Priority: Major > Fix For: 1.18.0 > > > Test case (in JdbcTest): > {code:java} @Test public void testSqlAdvisorNonExistingColumn() > throws SQLException, ClassNotFoundException { > adviseSql("select e.empid.^ from \"hr\".\"emps\" e", > CalciteAssert.checkResultUnordered( > "id=; names=null; type=MATCH", > "id=hr.dependents; names=[hr, dependents]; type=TABLE", > "id=hr.depts; names=[hr, depts]; type=TABLE", > "id=hr.emps; names=[hr, emps]; type=TABLE", > "id=hr.locations; names=[hr, locations]; type=TABLE", > "id=hr; names=[hr]; type=SCHEMA")); > }{code} > {code:java} > SqlValidatorNamespace lookupFieldNamespace(RelDataType rowType, String > name) { > final SqlNameMatcher nameMatcher = catalogReader.nameMatcher(); > final RelDataTypeField field = nameMatcher.field(rowType, name); > return new FieldNamespace(this, field.getType()); // <-- NPE > }{code} > It looks like null-check for {{field}} resolves the exception and it suggests > {noformat}id=*; names=[*]; type=KEYWORD > id=; names=null; type=MATCH{noformat} > Original exception: > {noformat}java.sql.SQLException: exception while executing query: null > at org.apache.calcite.avatica.Helper.createException(Helper.java:56) > at org.apache.calcite.avatica.Helper.createException(Helper.java:41) > at > org.apache.calcite.avatica.AvaticaConnection.executeQueryInternal(AvaticaConnection.java:577) > at > org.apache.calcite.avatica.AvaticaPreparedStatement.executeQuery(AvaticaPreparedStatement.java:137) > at org.apache.calcite.test.JdbcTest.adviseSql(JdbcTest.java:411) > at > org.apache.calcite.test.JdbcTest.testSqlAdvisorNonExistingColumn(JdbcTest.java:344) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:498) > at > org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) > at > org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) > at > org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) > at > org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) > at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) > at > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) > at > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) > at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) > at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) > at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) > at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) > at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) > at org.junit.runners.ParentRunner.run(ParentRunner.java:363) > at org.junit.runner.JUnitCore.run(JUnitCore.java:137) > at > com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68) > at > com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47) > at > com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242) > at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70) > {noformat} > {noformat}Caused by: java.lang.NullPointerException > at > org.apache.calcite.sql.validate.SqlValidatorImpl.lookupFieldNamespace(SqlValidatorImpl.java:4835) > at > org.apache.calcite.sql.validate.AbstractNamespace.lookupChild(AbstractNamespace.java:144) > at > org.apache.calcite.sql.validate.IdentifierNamespace.lookupChild(IdentifierNamespace.java:42) > at >
[jira] [Commented] (CALCITE-2429) NPE: SqlValidatorImpl.lookupFieldNamespace when SQL Advisor observes non-existing field
[ https://issues.apache.org/jira/browse/CALCITE-2429?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16562705#comment-16562705 ] Julian Hyde commented on CALCITE-2429: -- [~vladimirsitnikov], I saw you committed a fix for this and a few other issues. Please remember to add the commit to the JIRA case when you fix it in a commit. It allows people to inspect what you did, both now and from the release notes in future. > NPE: SqlValidatorImpl.lookupFieldNamespace when SQL Advisor observes > non-existing field > --- > > Key: CALCITE-2429 > URL: https://issues.apache.org/jira/browse/CALCITE-2429 > Project: Calcite > Issue Type: Bug > Components: core >Affects Versions: 1.17.0 >Reporter: Vladimir Sitnikov >Assignee: Julian Hyde >Priority: Major > Fix For: 1.18.0 > > > Test case (in JdbcTest): > {code:java} @Test public void testSqlAdvisorNonExistingColumn() > throws SQLException, ClassNotFoundException { > adviseSql("select e.empid.^ from \"hr\".\"emps\" e", > CalciteAssert.checkResultUnordered( > "id=; names=null; type=MATCH", > "id=hr.dependents; names=[hr, dependents]; type=TABLE", > "id=hr.depts; names=[hr, depts]; type=TABLE", > "id=hr.emps; names=[hr, emps]; type=TABLE", > "id=hr.locations; names=[hr, locations]; type=TABLE", > "id=hr; names=[hr]; type=SCHEMA")); > }{code} > {code:java} > SqlValidatorNamespace lookupFieldNamespace(RelDataType rowType, String > name) { > final SqlNameMatcher nameMatcher = catalogReader.nameMatcher(); > final RelDataTypeField field = nameMatcher.field(rowType, name); > return new FieldNamespace(this, field.getType()); // <-- NPE > }{code} > It looks like null-check for {{field}} resolves the exception and it suggests > {noformat}id=*; names=[*]; type=KEYWORD > id=; names=null; type=MATCH{noformat} > Original exception: > {noformat}java.sql.SQLException: exception while executing query: null > at org.apache.calcite.avatica.Helper.createException(Helper.java:56) > at org.apache.calcite.avatica.Helper.createException(Helper.java:41) > at > org.apache.calcite.avatica.AvaticaConnection.executeQueryInternal(AvaticaConnection.java:577) > at > org.apache.calcite.avatica.AvaticaPreparedStatement.executeQuery(AvaticaPreparedStatement.java:137) > at org.apache.calcite.test.JdbcTest.adviseSql(JdbcTest.java:411) > at > org.apache.calcite.test.JdbcTest.testSqlAdvisorNonExistingColumn(JdbcTest.java:344) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:498) > at > org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) > at > org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) > at > org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) > at > org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) > at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) > at > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) > at > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) > at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) > at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) > at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) > at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) > at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) > at org.junit.runners.ParentRunner.run(ParentRunner.java:363) > at org.junit.runner.JUnitCore.run(JUnitCore.java:137) > at > com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68) > at > com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47) > at > com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242) > at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70) > {noformat} > {noformat}Caused by: java.lang.NullPointerException > at > org.apache.calcite.sql.validate.SqlValidatorImpl.lookupFieldNamespace(SqlValidatorImpl.java:4835) > at > org.apache.calcite.sql.validate.AbstractNamespace.lookupChild(AbstractNamespace.java:144) > at > org.apache.calcite.sql.validate.IdentifierNamespace.lookupChild(IdentifierNamespace.java:42) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.lookupNameCompletionHints(SqlValidatorImpl.java:800) > at >
[jira] [Commented] (CALCITE-2430) AssertionError: RelDataTypeImpl.getFieldList when SQL Advisor inspects non-struct field
[ https://issues.apache.org/jira/browse/CALCITE-2430?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16562709#comment-16562709 ] Julian Hyde commented on CALCITE-2430: -- Yes, I think it's worth doing. Could you do it as a follow-up task? > AssertionError: RelDataTypeImpl.getFieldList when SQL Advisor inspects > non-struct field > --- > > Key: CALCITE-2430 > URL: https://issues.apache.org/jira/browse/CALCITE-2430 > Project: Calcite > Issue Type: Bug > Components: core >Affects Versions: 1.17.0 >Reporter: Vladimir Sitnikov >Assignee: Julian Hyde >Priority: Major > Fix For: 1.18.0 > > Attachments: fieldnamespace.png > > > Test case (in JdbcTest): > {code:java} @Test public void testSqlAdvisorNonStructColumn() > throws SQLException, ClassNotFoundException { > adviseSql("select e.\"empid\".^ from \"hr\".\"emps\" e", > CalciteAssert.checkResultUnordered( > "id=; names=null; type=MATCH", > "id=hr.dependents; names=[hr, dependents]; type=TABLE", > "id=hr.depts; names=[hr, depts]; type=TABLE", > "id=hr.emps; names=[hr, emps]; type=TABLE", > "id=hr.locations; names=[hr, locations]; type=TABLE", > "id=hr; names=[hr]; type=SCHEMA")); > }{code} > Relevant source from RelDataTypeImpl.getFieldList: > {code:java} public List getFieldList() { > assert isStruct(); // <-- Error here > return fieldList; > }{code} > Relevant source from SqlValidatorImpl.lookupNameCompletionHints: > {code:java} if (ns != null) { > RelDataType rowType = ns.getRowType(); > for (RelDataTypeField field : rowType.getFieldList()) { // <-- Error > here > hintList.add( > new SqlMonikerImpl( > field.getName(), > SqlMonikerType.COLUMN)); > } > }{code} > It looks like it makes sense to add {{isStruct}} check before iterating over > {{rowType.getFieldList()}}. > Any objections? > Original exception: {noformat} > java.lang.AssertionError > at > org.apache.calcite.rel.type.RelDataTypeImpl.getFieldList(RelDataTypeImpl.java:146) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.lookupNameCompletionHints(SqlValidatorImpl.java:808) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.lookupSelectHints(SqlValidatorImpl.java:690) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.lookupSelectHints(SqlValidatorImpl.java:701) > at > org.apache.calcite.sql.validate.SqlValidatorImpl.lookupHints(SqlValidatorImpl.java:655) > at > org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints(SqlAdvisor.java:235) > at > org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints0(SqlAdvisor.java:182) > at > org.apache.calcite.sql.advise.SqlAdvisor.getCompletionHints(SqlAdvisor.java:142) > at > org.apache.calcite.sql.advise.SqlAdvisorGetHintsFunction.getCompletionHints(SqlAdvisorGetHintsFunction.java:105) > at Baz.bind(Unknown Source) > at > org.apache.calcite.jdbc.CalcitePrepare$CalciteSignature.enumerable(CalcitePrepare.java:356) > at > org.apache.calcite.jdbc.CalciteConnectionImpl.enumerable(CalciteConnectionImpl.java:309) > at > org.apache.calcite.jdbc.CalciteMetaImpl._createIterable(CalciteMetaImpl.java:506) > at > org.apache.calcite.jdbc.CalciteMetaImpl.createIterable(CalciteMetaImpl.java:497) > at > org.apache.calcite.avatica.AvaticaResultSet.execute(AvaticaResultSet.java:182) > at > org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:64) > at > org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:43) > at > org.apache.calcite.avatica.AvaticaConnection.executeQueryInternal(AvaticaConnection.java:573) > at > org.apache.calcite.avatica.AvaticaPreparedStatement.executeQuery(AvaticaPreparedStatement.java:137) > at org.apache.calcite.test.JdbcTest.adviseSql(JdbcTest.java:426) > at > org.apache.calcite.test.JdbcTest.testSqlAdvisorNonStructColumn(JdbcTest.java:359) > {noformat} -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Comment Edited] (CALCITE-2428) cassandra unit test initialization failure
[ https://issues.apache.org/jira/browse/CALCITE-2428?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16562639#comment-16562639 ] Andrei Sereda edited comment on CALCITE-2428 at 7/31/18 3:33 AM: - [~julianhyde] addressed your comments in new commit (-d821ab83- 5ad6ace) was (Author: asereda): [~julianhyde] addressed your comments in new commit (d821ab83) > cassandra unit test initialization failure > -- > > Key: CALCITE-2428 > URL: https://issues.apache.org/jira/browse/CALCITE-2428 > Project: Calcite > Issue Type: Bug > Components: cassandra >Reporter: Andrei Sereda >Priority: Major > > Unit test fails because {{java.version}} string is parsed incorrectly -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (CALCITE-2404) Accessing structured-types is not implemented by the runtime
[ https://issues.apache.org/jira/browse/CALCITE-2404?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16563097#comment-16563097 ] Julian Hyde commented on CALCITE-2404: -- I have reviewed e6ffd3ba6: * I saw that you marked SqlToRelConverterTest.testArrayOfRecord 'ignore'. Can you re-enable it, please? * Thanks for adding the Bookstore schema and plenty of tests. However, JdbcTest is getting very large. I think you could make BookstoreSchema a top-level class in the org.apache.calcite.test package. Also move the tests to either a new class of RelfectiveSchemaTest (whichever you think fits better). > Accessing structured-types is not implemented by the runtime > > > Key: CALCITE-2404 > URL: https://issues.apache.org/jira/browse/CALCITE-2404 > Project: Calcite > Issue Type: Bug > Components: core >Affects Versions: 1.17.0 >Reporter: Stamatis Zampetakis >Assignee: Julian Hyde >Priority: Blocker > > Queries on tables containing structured types cannot be executed by the > Calcite runtime. A plan like the one that follows (taken from CALCITE-2220) > can be translated to neither Bindable nor EnumerableConvention. > > {noformat} > LogicalProject(EXPR$0=[$0]) > LogicalProject(EXPR$0$0=[ITEM($6, 1).EMPNO], EXPR$0$1=[ITEM($6, 1).ENAME], > EXPR$0$2=[ITEM($6, 1).DETAIL]) > LogicalProject(DEPTNO=[$0], NAME=[$1], TYPE=[$2.TYPE], DESC=[$2.DESC], > A=[$2.OTHERS.A], B=[$2.OTHERS.B], EMPLOYEES=[$3]) > LogicalTableScan(table=[[CATALOG, SALES, DEPT_NESTED]]) > {noformat} > > More precisely, if a logical plan contains a RexFieldAccess expression that > does not refer to a RexCorrelVariable it cannot be handled by the > RexToLixTranslator. The translation will fail when calling > [RexToLixTranslator#translate0|[https://github.com/apache/calcite/blob/5bbc501a565494442784f65870a20cd65a5016f4/core/src/main/java/org/apache/calcite/adapter/enumerable/RexToLixTranslator.java#L686]]. > > -- This message was sent by Atlassian JIRA (v7.6.3#76005)