override protected def nullSafeCodeGen()

in src/main/scala/org/apache/spark/sql/datasketches/kll/expressions/KllDoublesSketchExpressions.scala [286:306]


  override protected def nullSafeCodeGen(ctx: CodegenContext, ev: ExprCode, f: (String, String, String) => String): ExprCode = {
    val sketchEval = sketchExpr.genCode(ctx)
    val splitPointsEval = splitPointsExpr.genCode(ctx)
    val sketch = ctx.freshName("sketch")
    val searchCriterion = ctx.freshName("searchCriterion")
    val splitPoints = ctx.freshName("splitPoints")
    val result = ctx.freshName("result")

    val code =
      s"""
         |${sketchEval.code}
         |${splitPointsEval.code}
         |org.apache.datasketches.quantilescommon.QuantileSearchCriteria $searchCriterion = ${if (isInclusive) "org.apache.datasketches.quantilescommon.QuantileSearchCriteria.INCLUSIVE" else "org.apache.datasketches.quantilescommon.QuantileSearchCriteria.EXCLUSIVE"};
         |final org.apache.datasketches.kll.KllDoublesSketch $sketch = org.apache.spark.sql.datasketches.kll.types.KllDoublesSketchType.wrap(${sketchEval.value});
         |final double[] $splitPoints = ((org.apache.spark.sql.catalyst.util.GenericArrayData)${splitPointsEval.value}).toDoubleArray();
         |final double[] $result = ${if (isPmf) s"$sketch.getPMF($splitPoints, $searchCriterion)" else s"$sketch.getCDF($splitPoints, $searchCriterion)"};
         |final boolean ${ev.isNull} = false;
         |org.apache.spark.sql.catalyst.util.GenericArrayData ${ev.value} = new org.apache.spark.sql.catalyst.util.GenericArrayData($result);
       """.stripMargin
    ev.copy(code = CodeBlock(Seq(code), Seq.empty))
  }