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

Julian Hyde commented on CALCITE-980:
-------------------------------------

But consider the likelihood that someone will need to debug those tests in 
future versus the likelihood that someone will need to maintain them. I have 
seen several database projects (including my own, Mondrian) crushed under the 
burden of a large test suite. This is why I want to move as many tests as 
possible to Quidem format, which is easier to maintain. If anyone needed to 
debug one of those cases in future they could easily convert back to junit 
format.

> Not (C='a' or C='b') as well as Not (C='a' and C='b') causes NPE
> ----------------------------------------------------------------
>
>                 Key: CALCITE-980
>                 URL: https://issues.apache.org/jira/browse/CALCITE-980
>             Project: Calcite
>          Issue Type: Bug
>    Affects Versions: 1.4.0-incubating
>            Reporter: liyang
>            Assignee: Julian Hyde
>
> A where clause like Not (C='a' or C='b') causes NPE if C has NULL value.
> The generated code snippet looks like:
> {code}
> /*  65 */           public boolean moveNext() {
> /*  66 */             while (inputEnumerator.moveNext()) {
> /*  67 */               final Object[] current = (Object[]) 
> inputEnumerator.current();
> /*  68 */               final String inp21_ = current[21] == null ? (String) 
> null : current[21].toString();
> /*  69 */               final Boolean v = inp21_ == null ? (Boolean) null : 
> Boolean.valueOf(org.apache.calcite.runtime.SqlFunctions.eq(inp21_, "A"));
> /*  70 */               final Boolean v0 = inp21_ == null ? (Boolean) null : 
> Boolean.valueOf(org.apache.calcite.runtime.SqlFunctions.eq(inp21_, "B"));
> /*  71 */               if (!(v == null ? (v0 == null || !v0 ? (Boolean) null 
> : Boolean.TRUE) : v ? Boolean.TRUE : v0)) {
> /*  72 */                 return true;
> /*  73 */               }
> /*  74 */             }
> /*  75 */             return false;
> /*  76 */           }
> {code}
> And NPE is thrown at line #71 if inp21_ is null.
> Stacktrace:
> {code}
> Caused by: java.lang.NullPointerException
>       at Baz$1$1.moveNext(ANONYMOUS.java:71)
>       at 
> org.apache.calcite.linq4j.EnumerableDefaults.groupBy_(EnumerableDefaults.java:737)
>       at 
> org.apache.calcite.linq4j.EnumerableDefaults.groupBy(EnumerableDefaults.java:677)
>       at 
> org.apache.calcite.linq4j.DefaultEnumerable.groupBy(DefaultEnumerable.java:301)
>       at Baz.bind(Baz.java:95)
>       at 
> org.apache.calcite.jdbc.CalcitePrepare$CalciteSignature.enumerable(CalcitePrepare.java:281)
>       at 
> org.apache.calcite.jdbc.CalciteConnectionImpl.enumerable(CalciteConnectionImpl.java:235)
>       at 
> org.apache.calcite.jdbc.CalciteMetaImpl.createIterable(CalciteMetaImpl.java:533)
>       at 
> org.apache.calcite.avatica.AvaticaResultSet.execute(AvaticaResultSet.java:184)
>       at 
> org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:63)
>       at 
> org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:42)
>       at 
> org.apache.calcite.avatica.AvaticaConnection$1.execute(AvaticaConnection.java:473)
>       at 
> org.apache.calcite.jdbc.CalciteMetaImpl.prepareAndExecute(CalciteMetaImpl.java:566)
>       at 
> org.apache.calcite.avatica.AvaticaConnection.prepareAndExecuteInternal(AvaticaConnection.java:477)
>       at 
> org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:109)
>       ... 29 more
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to