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

RexSimplify overhaul

    XMLWordPrintableJSON

    Details

    • Type: Improvement
    • Status: Open
    • Priority: Major
    • Resolution: Unresolved
    • Affects Version/s: 1.17.0
    • Fix Version/s: None
    • Component/s: core
    • Labels:
      None

      Description

      I would like to update RexSimplify as follows:

      1) Avoid multiple passes over the same expressions. Current logic calls "simplify" in multiple places, and it might cause simplification of the same tree again and again.

      2) I would like to rework unknownAsFalse into support for IS TRUE. Current support for unknownAsFalse is hard to follow, and it looks like IS_TRUE(expr) allows for the same optimizations. In other words, "unknownAsFalse" would become a silent adding of IS_TRUE on top of the input expression. Then rules like OR(x, y) IS TRUE ==> x IS TRUE or y IS TRUE would push IS TRUE downstream.

      3) I would like to "reorder" predicates in a defined order (e.g. rewrite 5=x ==> x=5 or (x=1 or y=2) and (z=3) ==> (z=3) and (x=1 or y=2). It looks like adding int nodeCount; to RexNode would be helpful to rank rex nodes.

      4) There are other bugs identified by expression fuzzer (like and(null, not(null)) conversion to true and so on)

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                vladimirsitnikov Vladimir Sitnikov
                Reporter:
                vladimirsitnikov Vladimir Sitnikov
              • Votes:
                0 Vote for this issue
                Watchers:
                7 Start watching this issue

                Dates

                • Created:
                  Updated:

                  Time Tracking

                  Estimated:
                  Original Estimate - Not Specified
                  Not Specified
                  Remaining:
                  Remaining Estimate - 0h
                  0h
                  Logged:
                  Time Spent - 5h 50m
                  5h 50m