You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Ruben Quesada Lopez (JIRA)" <ji...@apache.org> on 2019/03/06 09:03:00 UTC

[jira] [Created] (CALCITE-2894) NullPointerException thrown by RelMdPercentageOriginalRows when explaining plan with all attributes

Ruben Quesada Lopez created CALCITE-2894:
--------------------------------------------

             Summary: NullPointerException thrown by RelMdPercentageOriginalRows when explaining plan with all attributes
                 Key: CALCITE-2894
                 URL: https://issues.apache.org/jira/browse/CALCITE-2894
             Project: Calcite
          Issue Type: Bug
    Affects Versions: 1.18.0
            Reporter: Ruben Quesada Lopez


{{RelMdPercentageOriginalRows}} methods use several times {{double}} variables to store the result of {{getPercentageOriginalRows}}. However, this method returns an object {{Double}}, as {{RelMetadataQuery#getPercentageOriginalRows}} javadoc says: "return estimated percentage (between 0.0 and 1.0), *or null if no reliable estimate can be determined*". 
Therefore, {{null}} can (and will) be returned in some cases, leading to NullPointerException.
In my case, I arrived to the situation by explaining a plan (including all attributes) that contained a SemiJoin, with an Union inside, with a Correlate inside:
{code:java}
  @Test public void testExplainAllAttributesSemiJoinUnionCorrelate() {
    CalciteAssert.that()
            .with(CalciteConnectionProperty.LEX, Lex.JAVA)
            .with(CalciteConnectionProperty.FORCE_DECORRELATE, false)
            .withSchema("s", new ReflectiveSchema(new JdbcTest.HrSchema()))
            .query(
                    "select deptno, name from depts where deptno in (\n"
                            + " select e.deptno from emps e where exists (select 1 from depts d where d.deptno=e.deptno)\n"
                            + " union select e.deptno from emps e where e.salary > 10000) ")
            .explainMatches("including all attributes ",
                    CalciteAssert.checkResultContains("EnumerableSemiJoin"));
  }
{code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)