cloud-fan commented on code in PR #46034:
URL: https://github.com/apache/spark/pull/46034#discussion_r1565740751
##########
sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/optimizer/RewriteWithExpressionSuite.scala:
##########
@@ -229,4 +236,85 @@ class RewriteWithExpressionSuite extends PlanTest {
.analyze
)
}
+
+ test("WITH expression in grouping exprs") {
+ val a = testRelation.output.head
+ val expr1 = With.create((a + 1, 0)) { case Seq(ref) =>
+ ref * ref
+ }
+ val expr2 = With.create((a + 1, 1)) { case Seq(ref) =>
+ ref * ref
+ }
+ val expr3 = With.create((a + 1, 2)) { case Seq(ref) =>
+ ref * ref
+ }
+ val plan = testRelation.groupBy(expr1)(
+ (expr2 + 2).as("col1"),
+ count(expr3 - 3).as("col2")
+ )
+ val commonExpr1Name = "_common_expr_0"
+ // Note that _common_expr_1 gets deduplicated by
PullOutGroupingExpressions.
+ val commonExpr2Name = "_common_expr_2"
+ val groupingExprName = "_groupingexpression"
+ val countAlias = count(expr3 - 3).toString
+ comparePlans(
+ Optimizer.execute(plan),
+ testRelation
+ .select(testRelation.output :+ (a + 1).as(commonExpr1Name): _*)
+ .select(testRelation.output :+
+ ($"$commonExpr1Name" * $"$commonExpr1Name").as(groupingExprName): _*)
+ .select(testRelation.output ++ Seq($"$groupingExprName", (a +
1).as(commonExpr2Name)): _*)
+ .groupBy($"$groupingExprName")(
+ $"$groupingExprName",
+ count($"$commonExpr2Name" * $"$commonExpr2Name" - 3).as(countAlias)
+ )
+ .select(($"$groupingExprName" + 2).as("col1"),
$"`$countAlias`".as("col2"))
+ .analyze
+ )
+ // Running CollapseProject after the rule cleans up the unnecessary
projections.
+ comparePlans(
+ CollapseProject(Optimizer.execute(plan)),
+ testRelation
+ .select(testRelation.output :+ (a + 1).as(commonExpr1Name): _*)
+ .select(testRelation.output ++ Seq(
+ ($"$commonExpr1Name" * $"$commonExpr1Name").as(groupingExprName),
+ (a + 1).as(commonExpr2Name)): _*)
+ .groupBy($"$groupingExprName")(
+ ($"$groupingExprName" + 2).as("col1"),
+ count($"$commonExpr2Name" * $"$commonExpr2Name" - 3).as("col2")
+ )
+ .analyze
+ )
+ }
+
+ test("WITH expression in aggregate exprs") {
Review Comment:
can we merge the two tests and have WITH in both grouping and aggregate
expressions?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]