in modules/spark-ext/spark/src/main/scala/org/apache/ignite/spark/impl/QueryUtils.scala [173:223]
private def buildSingleClause(state: (String, List[Any]), clause: Filter): (String, List[Any]) = {
val filterStr = state._1
val params = state._2
clause match {
case EqualTo(attr, value) ⇒ (addStrClause(filterStr, s"$attr = ?"), params :+ value)
case EqualNullSafe(attr, value) ⇒ (addStrClause(filterStr, s"($attr IS NULL OR $attr = ?)"), params :+ value)
case GreaterThan(attr, value) ⇒ (addStrClause(filterStr, s"$attr > ?"), params :+ value)
case GreaterThanOrEqual(attr, value) ⇒ (addStrClause(filterStr, s"$attr >= ?"), params :+ value)
case LessThan(attr, value) ⇒ (addStrClause(filterStr, s"$attr < ?"), params :+ value)
case LessThanOrEqual(attr, value) ⇒ (addStrClause(filterStr, s"$attr <= ?"), params :+ value)
case In(attr, values) ⇒ (addStrClause(filterStr, s"$attr IN (${values.map(_ ⇒ "?").mkString(",")})"), params ++ values)
case IsNull(attr) ⇒ (addStrClause(filterStr, s"$attr IS NULL"), params)
case IsNotNull(attr) ⇒ (addStrClause(filterStr, s"$attr IS NOT NULL"), params)
case And(left, right) ⇒
val leftClause = buildSingleClause(("", params), left)
val rightClause = buildSingleClause(("", leftClause._2), right)
(addStrClause(filterStr, s"${leftClause._1} AND ${rightClause._1}"), rightClause._2)
case Or(left, right) ⇒
val leftClause = buildSingleClause(("", params), left)
val rightClause = buildSingleClause(("", leftClause._2), right)
(addStrClause(filterStr, s"${leftClause._1} OR ${rightClause._1}"), rightClause._2)
case Not(child) ⇒
val innerClause = buildSingleClause(("", params), child)
(addStrClause(filterStr, s"NOT ${innerClause._1}"), innerClause._2)
case StringStartsWith(attr, value) ⇒
(addStrClause(filterStr, s"$attr LIKE ?"), params :+ (value + "%"))
case StringEndsWith(attr, value) ⇒
(addStrClause(filterStr, s"$attr LIKE ?"), params :+ ("%" + value))
case StringContains(attr, value) ⇒
(addStrClause(filterStr, s"$attr LIKE ?"), params :+ ("%" + value + "%"))
}
}