Skip to content

Commit 6cdb81d

Browse files
committed
[DO-NOT-MERGE][EXPERIMENT] eagerReplace=false default + no-op MaterializeRuntimeReplaceable
Temporary diagnostic commit to let PR CI surface every test that breaks when a surviving RuntimeReplaceable reaches whole-stage codegen (materialization disabled). Must be reverted before merge. Co-authored-by: Isaac
1 parent b80438b commit 6cdb81d

2 files changed

Lines changed: 3 additions & 7 deletions

File tree

sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/Expression.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff 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`

sql/core/src/main/scala/org/apache/spark/sql/execution/MaterializeRuntimeReplaceable.scala

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,7 @@
1717

1818
package org.apache.spark.sql.execution
1919

20-
import org.apache.spark.sql.catalyst.expressions.RuntimeReplaceable
2120
import 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
*/
3533
object 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
}

0 commit comments

Comments
 (0)