@@ -25,78 +25,80 @@ import org.apache.spark.sql.catalyst.plans.logical.LocalRelation
2525import org .apache .spark .sql .types .StringType
2626
2727class ResolveNaturalJoinSuite extends AnalysisTest {
28- import org .apache .spark .sql .catalyst .analysis .TestRelations ._
29-
30- lazy val t1 = testRelation2.select(' a , ' b )
31- lazy val t2 = testRelation2.select(' a , ' c )
32- lazy val a = testRelation2.output(0 )
33- lazy val b = testRelation2.output(1 )
34- lazy val c = testRelation2.output(2 )
35- lazy val testRelation0 = LocalRelation (
36- AttributeReference (" d" , StringType , nullable = false )(),
37- AttributeReference (" e" , StringType , nullable = false )(),
38- AttributeReference (" f" , StringType , nullable = false )())
39- lazy val t3 = testRelation0.select(' d , ' e )
40- lazy val t4 = testRelation0.select(' d , ' f )
41- lazy val d = testRelation0.output(0 )
42- lazy val e = testRelation0.output(1 )
43- lazy val f = testRelation0.output(2 )
44- lazy val nullableE = testRelation0.output(1 ).withNullability(true )
45- lazy val nullableF = testRelation0.output(2 ).withNullability(true )
28+ lazy val r1 = LocalRelation (
29+ AttributeReference (" r1_a" , StringType , nullable = true )(),
30+ AttributeReference (" r1_b" , StringType , nullable = true )(),
31+ AttributeReference (" r1_c" , StringType , nullable = true )())
32+ lazy val r2 = LocalRelation (
33+ AttributeReference (" r2_a" , StringType , nullable = false )(),
34+ AttributeReference (" r2_b" , StringType , nullable = false )(),
35+ AttributeReference (" r2_c" , StringType , nullable = false )())
36+ lazy val t1 = r1.select(' r1_a , ' r1_b )
37+ lazy val t2 = r1.select(' r1_a , ' r1_c )
38+ lazy val r1a = r1.output(0 )
39+ lazy val r1b = r1.output(1 )
40+ lazy val r1c = r1.output(2 )
41+ lazy val t3 = r2.select(' r2_a , ' r2_b )
42+ lazy val t4 = r2.select(' r2_a , ' r2_c )
43+ lazy val r2a = r2.output(0 )
44+ lazy val r2b = r2.output(1 )
45+ lazy val r2c = r2.output(2 )
46+ lazy val nullableR2B = r2.output(1 ).withNullability(true )
47+ lazy val nullableR2C = r2.output(2 ).withNullability(true )
4648
4749 test(" natural inner join" ) {
4850 val plan = t1.join(t2, NaturalJoin (Inner ), None )
49- val expected = testRelation2 .select(a, b ).join(
50- testRelation2 .select(a, c ), Inner , Some (EqualTo (a, a ))).select(a, b, c )
51+ val expected = r1 .select(r1a, r1b ).join(
52+ r1 .select(r1a, r1c ), Inner , Some (EqualTo (r1a, r1a ))).select(r1a, r1b, r1c )
5153 checkAnalysis(plan, expected)
5254 }
5355
5456 test(" natural left join" ) {
5557 val plan = t1.join(t2, NaturalJoin (LeftOuter ), None )
56- val expected = testRelation2 .select(a, b ).join(
57- testRelation2 .select(a, c ), LeftOuter , Some (EqualTo (a, a ))).select(a, b, c )
58+ val expected = r1 .select(r1a, r1b ).join(
59+ r1 .select(r1a, r1c ), LeftOuter , Some (EqualTo (r1a, r1a ))).select(r1a, r1b, r1c )
5860 checkAnalysis(plan, expected)
5961 }
6062
6163 test(" natural right join" ) {
6264 val plan = t1.join(t2, NaturalJoin (RightOuter ), None )
63- val expected = testRelation2 .select(a, b ).join(
64- testRelation2 .select(a, c ), RightOuter , Some (EqualTo (a, a ))).select(a, b, c )
65+ val expected = r1 .select(r1a, r1b ).join(
66+ r1 .select(r1a, r1c ), RightOuter , Some (EqualTo (r1a, r1a ))).select(r1a, r1b, r1c )
6567 checkAnalysis(plan, expected)
6668 }
6769
6870 test(" natural full outer join" ) {
6971 val plan = t1.join(t2, NaturalJoin (FullOuter ), None )
70- val expected = testRelation2 .select(a, b ).join(testRelation2 .select(
71- a, c), FullOuter , Some ( EqualTo (a, a ))).select(Alias (Coalesce (Seq (a, a )), " a " )(), b, c )
72+ val expected = r1 .select(r1a, r1b ).join(r1 .select(r1a, r1c), FullOuter , Some (
73+ EqualTo (r1a, r1a ))).select(Alias (Coalesce (Seq (r1a, r1a )), " r1_a " )(), r1b, r1c )
7274 checkAnalysis(plan, expected)
7375 }
7476
7577 test(" natural inner join with no nullability" ) {
7678 val plan = t3.join(t4, NaturalJoin (Inner ), None )
77- val expected = testRelation0 .select(d, e ).join(
78- testRelation0 .select(d, f ), Inner , Some (EqualTo (d, d ))).select(d, e, f )
79+ val expected = r2 .select(r2a, r2b ).join(
80+ r2 .select(r2a, r2c ), Inner , Some (EqualTo (r2a, r2a ))).select(r2a, r2b, r2c )
7981 checkAnalysis(plan, expected)
8082 }
8183
8284 test(" natural left join with no nullability" ) {
8385 val plan = t3.join(t4, NaturalJoin (LeftOuter ), None )
84- val expected = testRelation0 .select(d, e ).join(
85- testRelation0 .select(d, f ), LeftOuter , Some (EqualTo (d, d ))).select(d, e, nullableF )
86+ val expected = r2 .select(r2a, r2b ).join(
87+ r2 .select(r2a, r2c ), LeftOuter , Some (EqualTo (r2a, r2a ))).select(r2a, r2b, nullableR2C )
8688 checkAnalysis(plan, expected)
8789 }
8890
8991 test(" natural right join with no nullability" ) {
9092 val plan = t3.join(t4, NaturalJoin (RightOuter ), None )
91- val expected = testRelation0 .select(d, e ).join(
92- testRelation0 .select(d, f ), RightOuter , Some (EqualTo (d, d ))).select(d, nullableE, f )
93+ val expected = r2 .select(r2a, r2b ).join(
94+ r2 .select(r2a, r2c ), RightOuter , Some (EqualTo (r2a, r2a ))).select(r2a, nullableR2B, r2c )
9395 checkAnalysis(plan, expected)
9496 }
9597
9698 test(" natural full outer join with no nullability" ) {
9799 val plan = t3.join(t4, NaturalJoin (FullOuter ), None )
98- val expected = testRelation0 .select(d, e ).join(testRelation0 .select(d, f ), FullOuter , Some (
99- EqualTo (d, d ))).select(Alias (Coalesce (Seq (d, d )), " d " )(), nullableE, nullableF )
100+ val expected = r2 .select(r2a, r2b ).join(r2 .select(r2a, r2c ), FullOuter , Some ( EqualTo (
101+ r2a, r2a ))).select(Alias (Coalesce (Seq (r2a, r2a )), " r2_a " )(), nullableR2B, nullableR2C )
100102 checkAnalysis(plan, expected)
101103 }
102104}
0 commit comments