File tree Expand file tree Collapse file tree
catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions
core/src/main/scala/org/apache/spark/sql/execution Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -480,7 +480,7 @@ trait RuntimeReplaceable extends Expression {
480480 // codegen by `MaterializeRuntimeReplaceable`. Note that an expression that opts out can still be
481481 // rewritten eagerly if its `replacement` cannot survive (non-deterministic or unevaluable); see
482482 // `ReplaceExpressions`.
483- def eagerReplace : Boolean = true
483+ def eagerReplace : Boolean = false // EXPERIMENT: flipped default to expose breakage
484484
485485 // `RuntimeReplaceable` expressions are normally rewritten into their `replacement` by the
486486 // `ReplaceExpressions` rule before execution. However, an expression with `eagerReplace = false`
Original file line number Diff line number Diff line change 1717
1818package org .apache .spark .sql .execution
1919
20- import org .apache .spark .sql .catalyst .expressions .RuntimeReplaceable
2120import org .apache .spark .sql .catalyst .rules .Rule
22- import org .apache .spark .sql .catalyst .trees .TreePattern .RUNTIME_REPLACEABLE
2321
2422/**
2523 * Materializes any [[RuntimeReplaceable ]] that survived the logical optimizer into its
@@ -33,8 +31,6 @@ import org.apache.spark.sql.catalyst.trees.TreePattern.RUNTIME_REPLACEABLE
3331 * while Spark whole-stage codegen never sees a `RuntimeReplaceable`.
3432 */
3533object MaterializeRuntimeReplaceable extends Rule [SparkPlan ] {
36- override def apply (plan : SparkPlan ): SparkPlan = plan.transformUpWithSubqueries {
37- case p if p.expressions.exists(_.containsPattern(RUNTIME_REPLACEABLE )) =>
38- p.mapExpressions(RuntimeReplaceable .unfold)
39- }
34+ // EXPERIMENT: no-op so surviving RuntimeReplaceable reaches whole-stage codegen.
35+ override def apply (plan : SparkPlan ): SparkPlan = plan
4036}
You can’t perform that action at this time.
0 commit comments