Inherited from Serializable
Inherited from Serializable
Inherited from KryoSerializable
Inherited from UnaryExpression
Inherited from Expression
Inherited from TreeNode[Expression]
Inherited from Product
Inherited from Equals
Inherited from AnyRef
Inherited from Any
Wrap any TokenizedLiteral expression with this so that we can invoke literal initialization code within the
.init()
method of the generated class.This pushes itself as reference object and uses a call to eval() on itself for actual evaluation and avoids embedding any generated code. This allows it to keep the generated code identical regardless of the constant expression (and in addition DynamicReplacableConstant trait casts to itself rather than actual object type).
We try to locate first foldable expression in a query tree such that all its child is foldable but parent isn't. That way we locate the exact point where an expression is safe to evaluate once instead of evaluating every row.
Expressions like
select c from tab where case col2 when 1 then col3 else 'y' end = 22
like queries don't convert literal evaluation into init method.minimal expression tree that can be evaluated only once and turn into a constant.