[jira] [Created] (CALCITE-2428) cassandra unit test initialization failure

2018-07-30 Thread Andrei Sereda (JIRA)
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

2018-07-30 Thread Volodymyr Vysotskyi (JIRA)


 [ 
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.

2018-07-30 Thread sathishkumar (JIRA)


[ 
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

2018-07-30 Thread Julian Hyde (JIRA)


[ 
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

2018-07-30 Thread Vladimir Sitnikov (JIRA)


[ 
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

2018-07-30 Thread Vladimir Sitnikov (JIRA)


[ 
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

2018-07-30 Thread Vladimir Sitnikov (JIRA)


[ 
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

2018-07-30 Thread Vladimir Sitnikov (JIRA)
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

2018-07-30 Thread Julian Hyde (JIRA)


[ 
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

2018-07-30 Thread Vladimir Sitnikov (JIRA)


 [ 
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

2018-07-30 Thread Vladimir Sitnikov (JIRA)


 [ 
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

2018-07-30 Thread Vladimir Sitnikov (JIRA)


 [ 
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

2018-07-30 Thread Vladimir Sitnikov (JIRA)
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

2018-07-30 Thread Julian Hyde (JIRA)


[ 
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

2018-07-30 Thread Vladimir Sitnikov (JIRA)


[ 
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

2018-07-30 Thread Vladimir Sitnikov (JIRA)


[ 
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

2018-07-30 Thread Julian Hyde (JIRA)


[ 
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

2018-07-30 Thread Vladimir Sitnikov (JIRA)


 [ 
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

2018-07-30 Thread Vladimir Sitnikov (JIRA)


[ 
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

2018-07-30 Thread Andrei Sereda (JIRA)


[ 
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

2018-07-30 Thread Julian Hyde (JIRA)


[ 
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

2018-07-30 Thread Vladimir Sitnikov (JIRA)


[ 
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

2018-07-30 Thread Julian Hyde (JIRA)


[ 
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

2018-07-30 Thread Julian Hyde (JIRA)


[ 
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

2018-07-30 Thread Julian Hyde (JIRA)


[ 
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

2018-07-30 Thread Andrei Sereda (JIRA)


[ 
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

2018-07-30 Thread Julian Hyde (JIRA)


[ 
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)