Skip to content

Commit eb1dfb7

Browse files
committed
address comment
1 parent a6114a6 commit eb1dfb7

File tree

3 files changed

+27
-2
lines changed

3 files changed

+27
-2
lines changed

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,6 @@ object Canonicalize {
8787
case Not(LessThanOrEqual(l, r)) => GreaterThan(l, r)
8888

8989
// order the list in the In operator
90-
// In subqueries contain only one element of type ListQuery. So checking that the length > 1
91-
// we are not reordering In subqueries.
9290
case In(value, list) if list.length > 1 => In(value, list.sortBy(_.hashCode()))
9391

9492
case _ => e

sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/optimizer/OptimizeInSuite.scala

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,21 @@ class OptimizeInSuite extends PlanTest {
121121
comparePlans(optimized, correctAnswer)
122122
}
123123

124+
test("OptimizedIn test: NULL IN (subquery) gets transformed to Filter(null)") {
125+
val subquery = ListQuery(testRelation.select(UnresolvedAttribute("a")))
126+
val originalQuery =
127+
testRelation
128+
.where(InSubquery(Seq(Literal.create(null, NullType)), subquery))
129+
.analyze
130+
131+
val optimized = Optimize.execute(originalQuery.analyze)
132+
val correctAnswer =
133+
testRelation
134+
.where(Literal.create(null, BooleanType))
135+
.analyze
136+
comparePlans(optimized, correctAnswer)
137+
}
138+
124139
test("OptimizedIn test: Inset optimization disabled as " +
125140
"list expression contains attribute)") {
126141
val originalQuery =

sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/parser/ExpressionParserSuite.scala

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,18 @@ class ExpressionParserSuite extends PlanTest {
155155
assertEqual(
156156
"a in (select b from c)",
157157
InSubquery(Seq('a), ListQuery(table("c").select('b))))
158+
159+
assertEqual(
160+
"(a, b, c) in (select d, e, f from g)",
161+
InSubquery(Seq('a, 'b, 'c), ListQuery(table("g").select('d, 'e, 'f))))
162+
163+
assertEqual(
164+
"(a, b) in (select c from d)",
165+
InSubquery(Seq('a, 'b), ListQuery(table("d").select('c))))
166+
167+
assertEqual(
168+
"(a) in (select b from c)",
169+
InSubquery(Seq('a), ListQuery(table("c").select('b))))
158170
}
159171

160172
test("like expressions") {

0 commit comments

Comments
 (0)