You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "godfrey he (JIRA)" <ji...@apache.org> on 2017/11/28 12:59:00 UTC

[jira] [Updated] (CALCITE-2068) throws NPE in RelMdPercentageOriginalRows when getPercentageOriginalRows returns null

     [ https://issues.apache.org/jira/browse/CALCITE-2068?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

godfrey he updated CALCITE-2068:
--------------------------------
    Description: 
these two methods will get NEP:
{code:title=RelMdPercentageOriginalRows.java|borderStyle=solid}
public Double getPercentageOriginalRows(Union rel, RelMetadataQuery mq) {
    double numerator = 0.0;
    double denominator = 0.0;

    for (RelNode input : rel.getInputs()) {
      double rowCount = mq.getRowCount(input);
      double percentage = mq.getPercentageOriginalRows(input);
      if (percentage != 0.0) {
        denominator += rowCount / percentage;
        numerator += rowCount;
      }
    }

    return quotientForPercentage(numerator, denominator);
  }

  public Double getPercentageOriginalRows(Join rel, RelMetadataQuery mq) {

    double left = mq.getPercentageOriginalRows(rel.getLeft());
    double right = mq.getPercentageOriginalRows(rel.getRight());
    return left * right;
  }
{code}

getPercentageOriginalRows maybe return null, and assigning null to double will get NPE.

  was:
these two method will get NEP:
{code:title=RelMdPercentageOriginalRows.java|borderStyle=solid}
public Double getPercentageOriginalRows(Union rel, RelMetadataQuery mq) {
    double numerator = 0.0;
    double denominator = 0.0;

    for (RelNode input : rel.getInputs()) {
      double rowCount = mq.getRowCount(input);
      double percentage = mq.getPercentageOriginalRows(input);
      if (percentage != 0.0) {
        denominator += rowCount / percentage;
        numerator += rowCount;
      }
    }

    return quotientForPercentage(numerator, denominator);
  }

  public Double getPercentageOriginalRows(Join rel, RelMetadataQuery mq) {

    double left = mq.getPercentageOriginalRows(rel.getLeft());
    double right = mq.getPercentageOriginalRows(rel.getRight());
    return left * right;
  }
{code}

getPercentageOriginalRows maybe return null, and assigning null to double will get NPE.


> throws NPE in RelMdPercentageOriginalRows when getPercentageOriginalRows returns null
> -------------------------------------------------------------------------------------
>
>                 Key: CALCITE-2068
>                 URL: https://issues.apache.org/jira/browse/CALCITE-2068
>             Project: Calcite
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 1.13.0
>            Reporter: godfrey he
>            Assignee: Julian Hyde
>
> these two methods will get NEP:
> {code:title=RelMdPercentageOriginalRows.java|borderStyle=solid}
> public Double getPercentageOriginalRows(Union rel, RelMetadataQuery mq) {
>     double numerator = 0.0;
>     double denominator = 0.0;
>     for (RelNode input : rel.getInputs()) {
>       double rowCount = mq.getRowCount(input);
>       double percentage = mq.getPercentageOriginalRows(input);
>       if (percentage != 0.0) {
>         denominator += rowCount / percentage;
>         numerator += rowCount;
>       }
>     }
>     return quotientForPercentage(numerator, denominator);
>   }
>   public Double getPercentageOriginalRows(Join rel, RelMetadataQuery mq) {
>     double left = mq.getPercentageOriginalRows(rel.getLeft());
>     double right = mq.getPercentageOriginalRows(rel.getRight());
>     return left * right;
>   }
> {code}
> getPercentageOriginalRows maybe return null, and assigning null to double will get NPE.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)