Skip to content

Commit 959e315

Browse files
committed
We should analyze the plan for evaluating expression before optimization.
1 parent e1e4aa1 commit 959e315

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/ExpressionEvalHelper.scala

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import org.scalatest.prop.GeneratorDrivenPropertyChecks
2525
import org.apache.spark.{SparkConf, SparkFunSuite}
2626
import org.apache.spark.serializer.JavaSerializer
2727
import org.apache.spark.sql.catalyst.{CatalystTypeConverters, InternalRow}
28-
import org.apache.spark.sql.catalyst.analysis.ResolveTimeZone
28+
import org.apache.spark.sql.catalyst.analysis.{ResolveTimeZone, SimpleAnalyzer}
2929
import org.apache.spark.sql.catalyst.expressions.codegen._
3030
import org.apache.spark.sql.catalyst.optimizer.SimpleTestOptimizer
3131
import org.apache.spark.sql.catalyst.plans.logical.{OneRowRelation, Project}
@@ -188,7 +188,9 @@ trait ExpressionEvalHelper extends GeneratorDrivenPropertyChecks {
188188
expected: Any,
189189
inputRow: InternalRow = EmptyRow): Unit = {
190190
val plan = Project(Alias(expression, s"Optimized($expression)")() :: Nil, OneRowRelation())
191-
val optimizedPlan = SimpleTestOptimizer.execute(plan)
191+
// We should analyze the plan first, otherwise we possibly optimize an unresolved plan.
192+
val analyzedPlan = SimpleAnalyzer.execute(plan)
193+
val optimizedPlan = SimpleTestOptimizer.execute(analyzedPlan)
192194
checkEvaluationWithoutCodegen(optimizedPlan.expressions.head, expected, inputRow)
193195
}
194196

0 commit comments

Comments
 (0)