All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.sparkutils.quality.impl.SoftFailExpr.scala Maven / Gradle / Ivy

package com.sparkutils.quality.impl

import com.sparkutils.quality.impl.util.Serializing
import com.sparkutils.quality.{Passed, SoftFailedInt}
import org.apache.spark.sql.catalyst.expressions.codegen.{CodegenContext, ExprCode}
import org.apache.spark.sql.catalyst.expressions.{Expression, ExpressionDescription, NullIntolerant, UnaryExpression}
import org.apache.spark.sql.types.{DataType, IntegerType}

object SoftFailedUtils {
  def softFail(res: Any): Integer = {
    val ruleRes = RuleLogicUtils.anyToRuleResult(res)
    if (ruleRes != Passed)
      SoftFailedInt
    else
      Serializing.ruleResultToInt(ruleRes)
  }
}

@ExpressionDescription(
  usage = "softfail(expr) - Returns softFailed() when expr evaluates to false or a non true probability.",
  examples = """
    Examples:
      > SELECT softfail(1000 > 2000);
       -1
  """)
case class SoftFailExpr(child: Expression) extends UnaryExpression with NullIntolerant {

  override def nullSafeEval(res: Any): Any = SoftFailedUtils.softFail(res)

  override def doGenCode(ctx: CodegenContext, ev: ExprCode): ExprCode =
    defineCodeGen(ctx, ev, c => s"com.sparkutils.quality.impl.SoftFailedUtils.softFail($c)")

  override def dataType: DataType = IntegerType

  protected def withNewChildInternal(newChild: Expression): Expression = copy(child = newChild)
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy