@@ -142,4 +142,38 @@ public void testArrayUnion()
142142 // Union array of arrays.
143143 assertQuery ("SELECT array_union(ARRAY[ARRAY[linenumber], ARRAY[suppkey, orderkey]], ARRAY[ARRAY[linenumber], ARRAY[partkey, partkey, null, orderkey], ARRAY[suppkey, orderkey]]) FROM lineitem" );
144144 }
145+
146+ @ Test
147+ public void testArrayMaxBy ()
148+ {
149+ assertQuery ("SELECT array_max_by(ARRAY['a', 'bbb', 'cc'], x -> length(x))" );
150+ assertQuery ("SELECT array_max_by(ARRAY['aa', 'bb', 'c'], x -> length(x))" );
151+ assertQuery ("SELECT array_max_by(ARRAY['a', NULL, 'bbb'], x -> length(x))" );
152+ assertQuery ("SELECT array_max_by(ARRAY[NULL, NULL], x -> length(x))" );
153+ assertQuery ("SELECT array_max_by(ARRAY[], x -> x)" );
154+ assertQuery ("SELECT array_max_by(ARRAY[-10, 5, 7], x -> abs(x))" );
155+ assertQuery ("SELECT array_max_by(ARRAY[1, 2, 3], x -> IF(x = 2, NULL, x))" );
156+ }
157+
158+ @ Test
159+ public void testArrayMinBy ()
160+ {
161+ assertQuery ("SELECT array_min_by(ARRAY['a', 'bbb', 'cc'], x -> length(x))" );
162+ assertQuery ("SELECT array_min_by(ARRAY['aa', 'bb', 'c'], x -> length(x))" );
163+ assertQuery ("SELECT array_min_by(ARRAY['a', NULL, 'bbb'], x -> length(x))" );
164+ assertQuery ("SELECT array_min_by(ARRAY[NULL, NULL], x -> length(x))" );
165+ assertQuery ("SELECT array_min_by(ARRAY[], x -> x)" );
166+ assertQuery ("SELECT array_min_by(ARRAY[-10, 5, 7], x -> abs(x))" );
167+ assertQuery ("SELECT array_min_by(ARRAY[1, 2, 3], x -> IF(x = 2, NULL, x))" );
168+ }
169+
170+ @ Test
171+ public void testArrayTopN ()
172+ {
173+ assertQuery ("SELECT array_top_n(ARRAY[1, 5, 3, 9, 2], 3)" );
174+ assertQuery ("SELECT array_top_n(ARRAY[1, 2], 5)" );
175+ assertQuery ("SELECT array_top_n(ARRAY[5, 1, 5, 3], 2)" );
176+ assertQuery ("SELECT array_top_n(ARRAY[1, NULL, 3, 2], 2)" );
177+ assertQuery ("SELECT array_top_n(ARRAY[1, 2, 3], 0)" );
178+ }
145179}
0 commit comments