RuntimeReplaceable Contract — Replaceable SQL Expressions

RuntimeReplaceable is the marker contract for unary expressions that are replaced by Catalyst Optimizer with their child expression (that can then be evaluated).

Note
Catalyst Optimizer uses ReplaceExpressions logical optimization to replace RuntimeReplaceable expressions.

RuntimeReplaceable contract allows for expression aliases, i.e. expressions that are fairly complex in the inside than on the outside, and is used to provide compatibility with other SQL databases by supporting SQL functions with their more complex Catalyst expressions (that are already supported by Spark SQL).

Note
RuntimeReplaceables are tied up to their SQL functions in FunctionRegistry.

RuntimeReplaceable expressions cannot be evaluated (i.e. produce a value given an internal row) and therefore have to be replaced in the query execution pipeline.

package org.apache.spark.sql.catalyst.expressions

trait RuntimeReplaceable extends UnaryExpression with Unevaluable {
  // as a marker contract it only marks a class
  // no methods are required
}
Note
To make sure the explain plan and expression SQL works correctly, a RuntimeReplaceable implementation should override flatArguments and sql methods.
Table 1. RuntimeReplaceables
RuntimeReplaceable Standard Function SQL Function

IfNull

ifnull

Left

left

NullIf

nullif

Nvl

nvl

Nvl2

nvl2

ParseToDate

to_date

to_date

ParseToTimestamp

to_timestamp

to_timestamp

Right

right

results matching ""

    No results matching ""