Yerui Sun created KYLIN-1372:
--------------------------------

             Summary: Query with PrepareStatement failed with OR clause
                 Key: KYLIN-1372
                 URL: https://issues.apache.org/jira/browse/KYLIN-1372
             Project: Kylin
          Issue Type: Bug
    Affects Versions: v1.2, v2.0
            Reporter: Yerui Sun
            Assignee: Yerui Sun
             Fix For: v1.3


Query using prepare statement, with filter 'where lstg_format_name in (?, ?)', 
exception threw:
{code}
Caused by: java.util.NoSuchElementException
        at java.util.HashMap$HashIterator.nextNode(HashMap.java:1431)
        at java.util.HashMap$KeyIterator.next(HashMap.java:1453)
        at 
org.apache.kylin.metadata.filter.CompareTupleFilter.addChild(CompareTupleFilter.java:84)
        at 
org.apache.kylin.query.relnode.OLAPFilterRel$TupleFilterVisitor.mergeToInClause(OLAPFilterRel.java:159)
        at 
org.apache.kylin.query.relnode.OLAPFilterRel$TupleFilterVisitor.visitCall(OLAPFilterRel.java:126)
        at 
org.apache.kylin.query.relnode.OLAPFilterRel$TupleFilterVisitor.visitCall(OLAPFilterRel.java:45)
        at org.apache.calcite.rex.RexCall.accept(RexCall.java:107)
        at 
org.apache.kylin.query.relnode.OLAPFilterRel$TupleFilterVisitor.visitCall(OLAPFilterRel.java:117)
        at 
org.apache.kylin.query.relnode.OLAPFilterRel$TupleFilterVisitor.visitCall(OLAPFilterRel.java:45)
        at org.apache.calcite.rex.RexCall.accept(RexCall.java:107)
        at 
org.apache.kylin.query.relnode.OLAPFilterRel.translateFilter(OLAPFilterRel.java:257)
        at 
org.apache.kylin.query.relnode.OLAPFilterRel.implementOLAP(OLAPFilterRel.java:241)
        at 
org.apache.kylin.query.relnode.OLAPRel$OLAPImplementor.visitChild(OLAPRel.java:81)
        at 
org.apache.kylin.query.relnode.OLAPProjectRel.implementOLAP(OLAPProjectRel.java:100)
        at 
org.apache.kylin.query.relnode.OLAPRel$OLAPImplementor.visitChild(OLAPRel.java:81)
        at 
org.apache.kylin.query.relnode.OLAPToEnumerableConverter.implement(OLAPToEnumerableConverter.java:67)
        at 
org.apache.calcite.adapter.enumerable.EnumerableRelImplementor.implementRoot(EnumerableRelImplementor.java:99)
        at 
org.apache.calcite.adapter.enumerable.EnumerableInterpretable.toBindable(EnumerableInterpretable.java:92)
        at 
org.apache.calcite.prepare.CalcitePrepareImpl$CalcitePreparingStmt.implement(CalcitePrepareImpl.java:1050)
        at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:293)
        at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:188)
        at 
org.apache.calcite.prepare.CalcitePrepareImpl.prepare2_(CalcitePrepareImpl.java:671)
        at 
org.apache.calcite.prepare.CalcitePrepareImpl.prepare_(CalcitePrepareImpl.java:572)
        at 
org.apache.calcite.prepare.CalcitePrepareImpl.prepareSql(CalcitePrepareImpl.java:541)
        at 
org.apache.calcite.jdbc.CalciteConnectionImpl.parseQuery(CalciteConnectionImpl.java:173)
        at 
org.apache.calcite.jdbc.CalciteConnectionImpl.prepareStatement(CalciteConnectionImpl.java:158)
        ... 84 more
{code}

If using with filter 'where lstg_format_name in ('FP-GTC', ?)', query succeed, 
but the result only contained 'FP-GTC' row, the dynamic filter seems didn't 
work.

The reason is, with multi OR clause, OLAPFilterRel.mergeToInClause was called 
to merge into one In clause, but the new CompareTupleFilter lost dynamic 
variables. 

I'll fix this issue later.



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

Reply via email to