Uploaded image for project: 'Calcite'
  1. Calcite
  2. CALCITE-988

FilterToProjectUnifyRule.invert(MutableRel, MutableRel, MutableProject) works incorrectly

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Minor
    • Resolution: Fixed
    • None
    • 1.6.0
    • None
    • None

    Description

      The below code does not "invert" but only projects what's been projected. A type mismatch exception would be thrown when creating the new MutableProject.

            for (Ord<RexNode> expr : Ord.zip(project.getProjects())) {
              if (expr.e instanceof RexInputRef) {
                final int target = ((RexInputRef) expr.e).getIndex();
                exprList.set(expr.i,
                    rexBuilder.ensureType(expr.e.getType(),
                        RexInputRef.of(target, input.rowType),
                        false));
              } else {
                throw MatchFailed.INSTANCE;
              }
            }
      

      However, the exposure of this bug is quite low. Actually I couldn't find a query that would go through this code path, coz looks like any query that has a Filter will have a Project on top of that, which makes it go the other branch and use the other invert() method. A filtered view will produce a Filter on top of another Filter thus can reproduce this problem.

      Attachments

        1. CALCITE-988.patch
          4 kB
          Wei Xue

        Activity

          People

            maryannxue Wei Xue
            maryannxue Wei Xue
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: