Skip to content

Commit a946269

Browse files
committed
Add end-to-end tests
1 parent 34fddc7 commit a946269

3 files changed

Lines changed: 77 additions & 20 deletions

File tree

sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/TypeCoercion.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -548,6 +548,7 @@ object TypeCoercion {
548548
}
549549

550550
private def isNumericOrNull(ex: Expression): Boolean = {
551+
// We need to handle null types in case a query contains null literals.
551552
ex.dataType.isInstanceOf[NumericType] || ex.dataType == NullType
552553
}
553554
}

sql/core/src/test/resources/sql-tests/inputs/arithmetic.sql

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,19 @@ select + + 100;
1616
select - - max(key) from testdata;
1717
select + - key from testdata where key = 33;
1818

19+
-- div
20+
select 5 / 2;
21+
select 5 / 0;
22+
select 5 / null;
23+
select null / 5;
24+
select 5 div 2;
25+
select 5 div 0;
26+
select 5 div null;
27+
select null div 5;
28+
1929
-- other arithmetics
2030
select 1 + 2;
2131
select 1 - 2;
2232
select 2 * 5;
23-
select 5 / 2;
24-
select 5 div 2;
2533
select 5 % 3;
2634
select pmod(-7, 3);

sql/core/src/test/resources/sql-tests/results/arithmetic.sql.out

Lines changed: 66 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
-- Automatically generated by SQLQueryTestSuite
2-
-- Number of queries: 22
2+
-- Number of queries: 28
33

44

55
-- !query 0
@@ -123,35 +123,35 @@ struct<(- key):int>
123123

124124

125125
-- !query 15
126-
select 1 + 2
126+
select 5 / 2
127127
-- !query 15 schema
128-
struct<(1 + 2):int>
128+
struct<(CAST(5 AS DOUBLE) / CAST(2 AS DOUBLE)):double>
129129
-- !query 15 output
130-
3
130+
2.5
131131

132132

133133
-- !query 16
134-
select 1 - 2
134+
select 5 / 0
135135
-- !query 16 schema
136-
struct<(1 - 2):int>
136+
struct<(CAST(5 AS DOUBLE) / CAST(0 AS DOUBLE)):double>
137137
-- !query 16 output
138-
-1
138+
NULL
139139

140140

141141
-- !query 17
142-
select 2 * 5
142+
select 5 / null
143143
-- !query 17 schema
144-
struct<(2 * 5):int>
144+
struct<(CAST(5 AS DOUBLE) / CAST(NULL AS DOUBLE)):double>
145145
-- !query 17 output
146-
10
146+
NULL
147147

148148

149149
-- !query 18
150-
select 5 / 2
150+
select null / 5
151151
-- !query 18 schema
152-
struct<(CAST(5 AS DOUBLE) / CAST(2 AS DOUBLE)):double>
152+
struct<(CAST(NULL AS DOUBLE) / CAST(5 AS DOUBLE)):double>
153153
-- !query 18 output
154-
2.5
154+
NULL
155155

156156

157157
-- !query 19
@@ -163,16 +163,64 @@ struct<CAST((CAST(5 AS DOUBLE) / CAST(2 AS DOUBLE)) AS BIGINT):bigint>
163163

164164

165165
-- !query 20
166-
select 5 % 3
166+
select 5 div 0
167167
-- !query 20 schema
168-
struct<(5 % 3):int>
168+
struct<CAST((CAST(5 AS DOUBLE) / CAST(0 AS DOUBLE)) AS BIGINT):bigint>
169169
-- !query 20 output
170-
2
170+
NULL
171171

172172

173173
-- !query 21
174-
select pmod(-7, 3)
174+
select 5 div null
175175
-- !query 21 schema
176-
struct<pmod(-7, 3):int>
176+
struct<CAST((CAST(5 AS DOUBLE) / CAST(NULL AS DOUBLE)) AS BIGINT):bigint>
177177
-- !query 21 output
178+
NULL
179+
180+
181+
-- !query 22
182+
select null div 5
183+
-- !query 22 schema
184+
struct<CAST((CAST(NULL AS DOUBLE) / CAST(5 AS DOUBLE)) AS BIGINT):bigint>
185+
-- !query 22 output
186+
NULL
187+
188+
189+
-- !query 23
190+
select 1 + 2
191+
-- !query 23 schema
192+
struct<(1 + 2):int>
193+
-- !query 23 output
194+
3
195+
196+
197+
-- !query 24
198+
select 1 - 2
199+
-- !query 24 schema
200+
struct<(1 - 2):int>
201+
-- !query 24 output
202+
-1
203+
204+
205+
-- !query 25
206+
select 2 * 5
207+
-- !query 25 schema
208+
struct<(2 * 5):int>
209+
-- !query 25 output
210+
10
211+
212+
213+
-- !query 26
214+
select 5 % 3
215+
-- !query 26 schema
216+
struct<(5 % 3):int>
217+
-- !query 26 output
218+
2
219+
220+
221+
-- !query 27
222+
select pmod(-7, 3)
223+
-- !query 27 schema
224+
struct<pmod(-7, 3):int>
225+
-- !query 27 output
178226
2

0 commit comments

Comments
 (0)