Skip to content

Commit d89fffb

Browse files
fix: enable arrays_overlap
1 parent 135c454 commit d89fffb

1 file changed

Lines changed: 186 additions & 0 deletions

File tree

spark/src/test/resources/sql-tests/expressions/array/arrays_overlap.sql

Lines changed: 186 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,3 +35,189 @@ SELECT arrays_overlap(array(1, 2, 3), b) FROM test_arrays_overlap
3535
-- literal + literal
3636
query
3737
SELECT arrays_overlap(array(1, 2, 3), array(3, 4, 5)), arrays_overlap(array(1, 2), array(3, 4)), arrays_overlap(array(), array(1)), arrays_overlap(cast(NULL as array<int>), array(1))
38+
39+
-- NULL element semantics (three-valued logic)
40+
-- When no match is found but NULL elements exist, result should be NULL (uncertain)
41+
statement
42+
CREATE TABLE test_overlap_nulls(a array<int>, b array<int>) USING parquet
43+
44+
statement
45+
INSERT INTO test_overlap_nulls VALUES (array(1, NULL, 3), array(4, 5)), (array(1, NULL, 3), array(1, 5)), (array(1, NULL), array(NULL, 2)), (array(NULL), array(NULL)), (array(NULL, NULL), array(NULL, NULL)), (array(1, NULL), array(2, NULL)), (array(NULL, 2), array(1, NULL))
46+
47+
-- no match + has NULL => NULL
48+
query
49+
SELECT arrays_overlap(a, b) FROM test_overlap_nulls WHERE a = array(1, NULL, 3) AND b = array(4, 5)
50+
51+
-- has match + has NULL => true (match found, NULL irrelevant)
52+
query
53+
SELECT arrays_overlap(a, b) FROM test_overlap_nulls WHERE a = array(1, NULL, 3) AND b = array(1, 5)
54+
55+
-- NULL vs NULL elements => NULL (NULL != NULL)
56+
query
57+
SELECT arrays_overlap(a, b) FROM test_overlap_nulls WHERE a = array(NULL) AND b = array(NULL)
58+
59+
-- all rows
60+
query
61+
SELECT a, b, arrays_overlap(a, b) FROM test_overlap_nulls
62+
63+
-- empty array combinations
64+
query
65+
SELECT arrays_overlap(array(), array()) FROM test_overlap_nulls
66+
67+
query
68+
SELECT arrays_overlap(array(), array(1, 2)) FROM test_overlap_nulls
69+
70+
query
71+
SELECT arrays_overlap(array(1, 2), array()) FROM test_overlap_nulls
72+
73+
query
74+
SELECT arrays_overlap(array(), array(NULL)) FROM test_overlap_nulls
75+
76+
-- both-NULL arrays
77+
query
78+
SELECT arrays_overlap(cast(NULL as array<int>), cast(NULL as array<int>)) FROM test_overlap_nulls
79+
80+
-- identical arrays
81+
query
82+
SELECT arrays_overlap(a, a) FROM test_overlap_nulls
83+
84+
-- duplicate elements in arrays
85+
statement
86+
CREATE TABLE test_overlap_dups(a array<int>, b array<int>) USING parquet
87+
88+
statement
89+
INSERT INTO test_overlap_dups VALUES (array(1, 1, 1), array(2, 2, 2)), (array(1, 1, 1), array(1, 2, 2)), (array(1, 2, 1, 2), array(3, 4, 3, 4)), (array(1, 2, 1, 2), array(2, 3, 2, 3))
90+
91+
query
92+
SELECT a, b, arrays_overlap(a, b) FROM test_overlap_dups
93+
94+
-- single element arrays
95+
query
96+
SELECT arrays_overlap(array(1), array(1)) FROM test_overlap_dups
97+
98+
query
99+
SELECT arrays_overlap(array(1), array(2)) FROM test_overlap_dups
100+
101+
-- string arrays
102+
statement
103+
CREATE TABLE test_overlap_str(a array<string>, b array<string>) USING parquet
104+
105+
statement
106+
INSERT INTO test_overlap_str VALUES (array('a', 'b', 'c'), array('c', 'd')), (array('a', 'b'), array('c', 'd')), (array('a', NULL), array('b', NULL)), (array('a', NULL), array('a', 'b')), (NULL, array('a')), (array(''), array('')), (array('', NULL), array('x'))
107+
108+
query
109+
SELECT a, b, arrays_overlap(a, b) FROM test_overlap_str
110+
111+
-- empty string vs NULL
112+
query
113+
SELECT arrays_overlap(array('', 'a'), array('')) FROM test_overlap_str
114+
115+
-- double arrays with special values
116+
statement
117+
CREATE TABLE test_overlap_dbl(a array<double>, b array<double>) USING parquet
118+
119+
statement
120+
INSERT INTO test_overlap_dbl VALUES (array(1.0, 2.0), array(2.0, 3.0)), (array(1.0, double('NaN')), array(double('NaN'), 2.0)), (array(double('Infinity'), 1.0), array(double('Infinity'))), (array(double('-Infinity')), array(double('Infinity'))), (array(0.0), array(-0.0)), (array(1.0, NULL), array(2.0, NULL))
121+
122+
query
123+
SELECT a, b, arrays_overlap(a, b) FROM test_overlap_dbl
124+
125+
-- boolean arrays
126+
query
127+
SELECT arrays_overlap(array(true, false), array(false)) FROM test_overlap_dbl
128+
129+
query
130+
SELECT arrays_overlap(array(true), array(false)) FROM test_overlap_dbl
131+
132+
query
133+
SELECT arrays_overlap(array(true, NULL), array(false)) FROM test_overlap_dbl
134+
135+
-- bigint arrays
136+
statement
137+
CREATE TABLE test_overlap_long(a array<bigint>, b array<bigint>) USING parquet
138+
139+
statement
140+
INSERT INTO test_overlap_long VALUES (array(9223372036854775807, 1), array(9223372036854775807)), (array(-9223372036854775808), array(-9223372036854775808)), (array(0), array(1))
141+
142+
query
143+
SELECT a, b, arrays_overlap(a, b) FROM test_overlap_long
144+
145+
-- decimal arrays
146+
statement
147+
CREATE TABLE test_overlap_dec(a array<decimal(10,2)>, b array<decimal(10,2)>) USING parquet
148+
149+
statement
150+
INSERT INTO test_overlap_dec VALUES (array(1.00, 2.50), array(2.50, 3.00)), (array(1.00, 2.00), array(3.00, 4.00)), (array(1.10, NULL), array(2.20, NULL))
151+
152+
query
153+
SELECT a, b, arrays_overlap(a, b) FROM test_overlap_dec
154+
155+
-- date arrays
156+
statement
157+
CREATE TABLE test_overlap_date(a array<date>, b array<date>) USING parquet
158+
159+
statement
160+
INSERT INTO test_overlap_date VALUES (array(date '2024-01-01', date '2024-06-15'), array(date '2024-06-15', date '2024-12-31')), (array(date '2024-01-01'), array(date '2024-12-31')), (array(date '2024-01-01', NULL), array(date '2024-12-31'))
161+
162+
query
163+
SELECT a, b, arrays_overlap(a, b) FROM test_overlap_date
164+
165+
-- timestamp arrays
166+
statement
167+
CREATE TABLE test_overlap_ts(a array<timestamp>, b array<timestamp>) USING parquet
168+
169+
statement
170+
INSERT INTO test_overlap_ts VALUES (array(timestamp '2024-01-01 00:00:00', timestamp '2024-06-15 12:00:00'), array(timestamp '2024-06-15 12:00:00')), (array(timestamp '2024-01-01 00:00:00'), array(timestamp '2024-12-31 23:59:59'))
171+
172+
query
173+
SELECT a, b, arrays_overlap(a, b) FROM test_overlap_ts
174+
175+
-- large arrays
176+
statement
177+
CREATE TABLE test_overlap_large(id int) USING parquet
178+
179+
statement
180+
INSERT INTO test_overlap_large VALUES (1)
181+
182+
-- large array with single overlap at end
183+
query
184+
SELECT arrays_overlap(sequence(1, 100), sequence(100, 200)) FROM test_overlap_large
185+
186+
-- large array with no overlap
187+
query
188+
SELECT arrays_overlap(sequence(1, 100), sequence(101, 200)) FROM test_overlap_large
189+
190+
-- large array self-overlap
191+
query
192+
SELECT arrays_overlap(sequence(1, 1000), sequence(1, 1000)) FROM test_overlap_large
193+
194+
-- nested arrays
195+
statement
196+
CREATE TABLE test_overlap_nested(a array<array<int>>, b array<array<int>>) USING parquet
197+
198+
statement
199+
INSERT INTO test_overlap_nested VALUES (array(array(1, 2), array(3, 4)), array(array(3, 4), array(5, 6))), (array(array(1, 2)), array(array(3, 4))), (array(array(1, 2), cast(NULL as array<int>)), array(array(3, 4))), (array(array(1, NULL)), array(array(1, NULL))), (array(cast(NULL as array<int>)), array(cast(NULL as array<int>)))
200+
201+
query
202+
SELECT a, b, arrays_overlap(a, b) FROM test_overlap_nested
203+
204+
-- struct element arrays
205+
statement
206+
CREATE TABLE test_overlap_struct(a array<struct<x:int, y:int>>, b array<struct<x:int, y:int>>) USING parquet
207+
208+
statement
209+
INSERT INTO test_overlap_struct VALUES (array(named_struct('x', 1, 'y', 2)), array(named_struct('x', 1, 'y', 2))), (array(named_struct('x', 1, 'y', 2)), array(named_struct('x', 3, 'y', 4))), (array(named_struct('x', 1, 'y', cast(NULL as int))), array(named_struct('x', 1, 'y', cast(NULL as int)))), (array(cast(NULL as struct<x:int, y:int>)), array(cast(NULL as struct<x:int, y:int>)))
210+
211+
query
212+
SELECT a, b, arrays_overlap(a, b) FROM test_overlap_struct
213+
214+
-- mixed column and literal with NULL elements
215+
query
216+
SELECT arrays_overlap(a, array(99, NULL)) FROM test_arrays_overlap
217+
218+
query
219+
SELECT arrays_overlap(array(NULL, 99), b) FROM test_arrays_overlap
220+
221+
-- conditional (CASE WHEN) arrays
222+
query
223+
SELECT arrays_overlap(CASE WHEN a IS NOT NULL THEN a ELSE array(0) END, b) FROM test_arrays_overlap

0 commit comments

Comments
 (0)