in modules/spark-ext/spark/src/main/scala/org/apache/ignite/spark/impl/optimization/SystemExpressions.scala [73:121]
override def toString(expr: Expression, childToString: Expression ⇒ String, useQualifier: Boolean,
useAlias: Boolean, caseSensitive: Boolean): Option[String] = expr match {
case Coalesce(children) ⇒
Some(s"COALESCE(${children.map(childToString(_)).mkString(", ")})")
case Greatest(children) ⇒
Some(s"GREATEST(${children.map(childToString(_)).mkString(", ")})")
case IfNull(left, right, _) ⇒
Some(s"IFNULL(${childToString(left)}, ${childToString(right)})")
case Least(children) ⇒
Some(s"LEAST(${children.map(childToString(_)).mkString(", ")})")
case NullIf(left, right, _) ⇒
Some(s"NULLIF(${childToString(left)}, ${childToString(right)})")
case Nvl2(expr1, expr2, expr3, _) ⇒
Some(s"NVL2(${childToString(expr1)}, ${childToString(expr2)}, ${childToString(expr3)})")
case If(predicate, trueValue, falseValue) ⇒
predicate match {
case IsNotNull(child) ⇒
Some(s"NVL2(${childToString(child)}, ${childToString(trueValue)}, ${childToString(falseValue)})")
case IsNull(child) ⇒
Some(s"NVL2(${childToString(child)}, ${childToString(falseValue)}, ${childToString(trueValue)})")
case EqualTo(left, right) ⇒
trueValue match {
case Literal(null, _) ⇒
if (left == falseValue)
Some(s"NULLIF(${childToString(left)}, ${childToString(right)})")
else if (right == falseValue)
Some(s"NULLIF(${childToString(right)}, ${childToString(left)})")
else
throw new IgniteException(s"Expression not supported. $expr")
case _ ⇒
throw new IgniteException(s"Expression not supported. $expr")
}
case _ ⇒
throw new IgniteException(s"Expression not supported. $expr")
}
case _ ⇒
None
}