@@ -20,18 +20,13 @@ package org.apache.spark.sql
20
20
import org .apache .spark .sql .test .SharedSQLContext
21
21
22
22
class SubquerySuite extends QueryTest with SharedSQLContext {
23
+ import testImplicits ._
23
24
24
25
test(" simple uncorrelated scalar subquery" ) {
25
26
assertResult(Array (Row (1 ))) {
26
27
sql(" select (select 1 as b) as b" ).collect()
27
28
}
28
29
29
- assertResult(Array (Row (1 ))) {
30
- sql(" with t2 as (select 1 as b, 2 as c) " +
31
- " select a from (select 1 as a union all select 2 as a) t " +
32
- " where a = (select max(b) from t2) " ).collect()
33
- }
34
-
35
30
assertResult(Array (Row (3 ))) {
36
31
sql(" select (select (select 1) + 1) + 1" ).collect()
37
32
}
@@ -42,17 +37,18 @@ class SubquerySuite extends QueryTest with SharedSQLContext {
42
37
}
43
38
}
44
39
45
- test(" uncorrelated scalar subquery should return null if there is 0 rows" ) {
46
- assertResult(Array (Row (null ))) {
47
- sql(" select (select 's' as s limit 0) as b" ).collect()
40
+ test(" uncorrelated scalar subquery in CTE" ) {
41
+ assertResult(Array (Row (1 ))) {
42
+ sql(" with t2 as (select 1 as b, 2 as c) " +
43
+ " select a from (select 1 as a union all select 2 as a) t " +
44
+ " where a = (select max(b) from t2) " ).collect()
48
45
}
49
46
}
50
47
51
- test(" analysis error when the number of columns is not 1 " ) {
52
- val error = intercept[ AnalysisException ] {
53
- sql(" select (select 1, 2 ) as b" ).collect()
48
+ test(" uncorrelated scalar subquery should return null if there is 0 rows " ) {
49
+ assertResult( Array ( Row ( null ))) {
50
+ sql(" select (select 's' as s limit 0 ) as b" ).collect()
54
51
}
55
- assert(error.message.contains(" Scalar subquery must return only one column, but got 2" ))
56
52
}
57
53
58
54
test(" runtime error when the number of rows is greater than 1" ) {
@@ -63,25 +59,25 @@ class SubquerySuite extends QueryTest with SharedSQLContext {
63
59
" more than one row returned by a subquery used as an expression" ))
64
60
}
65
61
66
- test(" uncorrelated scalar subquery on testData " ) {
67
- // initialize test Data
68
- testData
62
+ test(" uncorrelated scalar subquery on a DataFrame generated query " ) {
63
+ val df = Seq (( 1 , " one " ), ( 2 , " two " ), ( 3 , " three " )).toDF( " key " , " value " )
64
+ df.registerTempTable( " subqueryData " )
69
65
70
- assertResult(Array (Row (5 ))) {
71
- sql(" select (select key from testData where key > 3 order by key limit 1) + 1" ).collect()
66
+ assertResult(Array (Row (4 ))) {
67
+ sql(" select (select key from subqueryData where key > 2 order by key limit 1) + 1" ).collect()
72
68
}
73
69
74
- assertResult(Array (Row (- 100 ))) {
75
- sql(" select -(select max(key) from testData )" ).collect()
70
+ assertResult(Array (Row (- 3 ))) {
71
+ sql(" select -(select max(key) from subqueryData )" ).collect()
76
72
}
77
73
78
74
assertResult(Array (Row (null ))) {
79
- sql(" select (select value from testData limit 0)" ).collect()
75
+ sql(" select (select value from subqueryData limit 0)" ).collect()
80
76
}
81
77
82
- assertResult(Array (Row (" 99 " ))) {
83
- sql(" select (select min(value) from testData " +
84
- " where key = (select max(key) from testData ) - 1)" ).collect()
78
+ assertResult(Array (Row (" two " ))) {
79
+ sql(" select (select min(value) from subqueryData " +
80
+ " where key = (select max(key) from subqueryData ) - 1)" ).collect()
85
81
}
86
82
}
87
83
}
0 commit comments