Uploaded image for project: 'Apache Drill'
  1. Apache Drill
  2. DRILL-665

Drill throw NPE or UnsupportedOperationException when case expression contains null value

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 0.4.0
    • Component/s: None
    • Labels:
      None

      Description

      Hi Tim,

      Per discussion yesterday, we found Drill will throw NPE or UnsupportedOperationException when case expression contains null value. (null value is added for the optional 'else' branch).

      Q1:

      select case when n_nationkey < 100 then 100 end from cp.`tpch/nation.parquet`;

      java.lang.NullPointerException
      org.apache.drill.exec.planner.logical.DrillOptiq$RexToDrill.visitLiteral(DrillOptiq.java:330) ~[drill-java-exec-1.0.0-m2-incubating-SNAPSHOT-rebuffed.jar:1.0.0-m2-incubating-SNAPSHOT]
      ......

      Q2.

      select case when n_nationkey < 100 then n_name end from cp.`tpch/nation.parquet`;

      java.lang.UnsupportedOperationException: Unable to convert the value of null and type NULL to a Drill constant expression.
      org.apache.drill.exec.planner.logical.DrillOptiq$RexToDrill.visitLiteral(DrillOptiq.java:367) ~[drill-java-exec-1.0.0-m2-incubating-SNAPSHOT-rebuffed.jar:1.0.0-m2-incubating-SNAPSHOT]
      ......

      Our conclusion is Drill need create proper TypedNullConstant in DrillOptiq when the null value is associated with regular SQL type, or resolve to proper SQL typed null constant, in IExpressionTreeMaterializer.visitIfExpression. ( case/if expression requires all the branches return the type of value).

        Attachments

        1. DRILL-665-1.patch
          50 kB
          Venki Korukanti

          Activity

            People

            • Assignee:
              tnachen Timothy Chen
              Reporter:
              jni Jinfeng Ni
            • Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: