@@ -64,31 +64,31 @@ VALUES
6464 (CAST(7 AS DOUBLE), CAST(11 AS DOUBLE)) AS tab(col1, col2);
6565
6666-- BIGINT sketches
67- SELECT split (kll_sketch_to_string_bigint(agg), ' \n ' )[ 1 ] LIKE ' %Kll %' AS str_contains_kll,
67+ SELECT lower (kll_sketch_to_string_bigint(agg)) LIKE ' %kll %' AS str_contains_kll,
6868 abs(kll_sketch_get_quantile_bigint(agg, 0 .5 ) - 4 ) < 1 AS median_close_to_4,
6969 abs(kll_sketch_get_rank_bigint(agg, 3 ) - 0 .4 ) < 0 .1 AS rank3_close_to_0_4
7070FROM (
7171 SELECT kll_sketch_agg_bigint(col1) AS agg
7272 FROM t_byte_1_5_through_7_11
7373);
7474
75- SELECT split (kll_sketch_to_string_bigint(agg), ' \n ' )[ 1 ] LIKE ' %Kll %' AS str_contains_kll,
75+ SELECT lower (kll_sketch_to_string_bigint(agg)) LIKE ' %kll %' AS str_contains_kll,
7676 abs(kll_sketch_get_quantile_bigint(agg, 0 .5 ) - 4 ) < 1 AS median_close_to_4,
7777 abs(kll_sketch_get_rank_bigint(agg, 3 ) - 0 .4 ) < 0 .1 AS rank3_close_to_0_4
7878FROM (
7979 SELECT kll_sketch_agg_bigint(col1) AS agg
8080 FROM t_int_1_5_through_7_11
8181);
8282
83- SELECT split (kll_sketch_to_string_bigint(agg), ' \n ' )[ 1 ] LIKE ' %Kll %' AS str_contains_kll,
83+ SELECT lower (kll_sketch_to_string_bigint(agg)) LIKE ' %kll %' AS str_contains_kll,
8484 abs(kll_sketch_get_quantile_bigint(agg, 0 .5 ) - 4 ) < 1 AS median_close_to_4,
8585 abs(kll_sketch_get_rank_bigint(agg, 3 ) - 0 .4 ) < 0 .1 AS rank3_close_to_0_4
8686FROM (
8787 SELECT kll_sketch_agg_bigint(col1) AS agg
8888 FROM t_long_1_5_through_7_11
8989);
9090
91- SELECT split (kll_sketch_to_string_bigint(agg), ' \n ' )[ 1 ] LIKE ' %Kll %' AS str_contains_kll,
91+ SELECT lower (kll_sketch_to_string_bigint(agg)) LIKE ' %kll %' AS str_contains_kll,
9292 abs(kll_sketch_get_quantile_bigint(agg, 0 .5 ) - 4 ) < 1 AS median_close_to_4,
9393 abs(kll_sketch_get_rank_bigint(agg, 3 ) - 0 .4 ) < 0 .1 AS rank3_close_to_0_4
9494FROM (
9797);
9898
9999-- FLOAT sketches (only accepts float types to avoid precision loss)
100- SELECT split (kll_sketch_to_string_float(agg), ' \n ' )[ 1 ] LIKE ' %Kll %' AS str_contains_kll,
100+ SELECT lower (kll_sketch_to_string_float(agg)) LIKE ' %kll %' AS str_contains_kll,
101101 abs(kll_sketch_get_quantile_float(agg, 0 .5 ) - 4 .0 ) < 0 .5 AS median_close_to_4,
102102 abs(kll_sketch_get_rank_float(agg, 3 ) - 0 .4 ) < 0 .1 AS rank3_close_to_0_4
103103FROM (
@@ -106,7 +106,7 @@ FROM (
106106);
107107
108108-- DOUBLE sketches (accepts float and double types to avoid precision loss from integer conversion)
109- SELECT split (kll_sketch_to_string_double(agg), ' \n ' )[ 1 ] LIKE ' %Kll %' AS str_contains_kll,
109+ SELECT lower (kll_sketch_to_string_double(agg)) LIKE ' %kll %' AS str_contains_kll,
110110 abs(kll_sketch_get_quantile_double(agg, 0 .5 ) - 4 .0 ) < 0 .5 AS median_close_to_4,
111111 abs(kll_sketch_get_rank_double(agg, 3 ) - 0 .4 ) < 0 .1 AS rank3_close_to_0_4
112112FROM (
@@ -115,7 +115,7 @@ FROM (
115115);
116116
117117-- Test float column with double sketch (valid type promotion)
118- SELECT split (kll_sketch_to_string_double(agg), ' \n ' )[ 1 ] LIKE ' %Kll %' AS str_contains_kll,
118+ SELECT lower (kll_sketch_to_string_double(agg)) LIKE ' %kll %' AS str_contains_kll,
119119 abs(kll_sketch_get_quantile_double(agg, 0 .5 ) - 4 .0 ) < 0 .5 AS median_close_to_4,
120120 abs(kll_sketch_get_rank_double(agg, 3 ) - 0 .4 ) < 0 .1 AS rank3_close_to_0_4
121121FROM (
@@ -268,7 +268,7 @@ FROM t_long_1_5_through_7_11;
268268-- These queries should fail with type mismatch or validation errors
269269
270270-- Type mismatch: BIGINT sketch does not accept DOUBLE columns
271- SELECT split (kll_sketch_to_string_bigint(agg), ' \n ' )[ 1 ] LIKE ' %Kll %' AS str_contains_kll,
271+ SELECT lower (kll_sketch_to_string_bigint(agg)) LIKE ' %kll %' AS str_contains_kll,
272272 abs(kll_sketch_get_quantile_bigint(agg, 0 .5 ) - 4 ) < 1 AS median_close_to_4,
273273 abs(kll_sketch_get_rank_bigint(agg, 3 ) - 0 .4 ) < 0 .1 AS rank3_close_to_0_4
274274FROM (
@@ -277,7 +277,7 @@ FROM (
277277);
278278
279279-- Type mismatch: BIGINT sketch does not accept FLOAT columns
280- SELECT split (kll_sketch_to_string_bigint(agg), ' \n ' )[ 1 ] LIKE ' %Kll %' AS str_contains_kll,
280+ SELECT lower (kll_sketch_to_string_bigint(agg)) LIKE ' %kll %' AS str_contains_kll,
281281 abs(kll_sketch_get_quantile_bigint(agg, 0 .5 ) - 4 ) < 1 AS median_close_to_4,
282282 abs(kll_sketch_get_rank_bigint(agg, 3 ) - 0 .4 ) < 0 .1 AS rank3_close_to_0_4
283283FROM (
@@ -286,7 +286,7 @@ FROM (
286286);
287287
288288-- Type mismatch: FLOAT sketch does not accept DOUBLE columns
289- SELECT split (kll_sketch_to_string_float(agg), ' \n ' )[ 1 ] LIKE ' %Kll %' AS str_contains_kll,
289+ SELECT lower (kll_sketch_to_string_float(agg)) LIKE ' %kll %' AS str_contains_kll,
290290 abs(kll_sketch_get_quantile_float(agg, 0 .5 ) - 4 .0 ) < 0 .5 AS median_close_to_4,
291291 abs(kll_sketch_get_rank_float(agg, 3 ) - 0 .4 ) < 0 .1 AS rank3_close_to_0_4
292292FROM (
@@ -378,7 +378,7 @@ FROM (
378378-- interpret the binary data. This query succeeds even though we're using a DOUBLE
379379-- to_string function on a BIGINT sketch. The function reads the binary representation
380380-- and produces output, but the numeric values will be incorrectly interpreted.
381- SELECT kll_sketch_to_string_double(agg) LIKE ' %Kll %' AS contains_kll_header
381+ SELECT lower ( kll_sketch_to_string_double(agg)) LIKE ' %kll %' AS contains_kll_header
382382FROM (
383383 SELECT kll_sketch_agg_bigint(col1) AS agg
384384 FROM t_long_1_5_through_7_11
@@ -464,6 +464,41 @@ FROM (
464464 FROM t_double_1_5_through_7_11
465465);
466466
467+ -- Negative tests for non-foldable (non-constant) rank/quantile arguments
468+ -- These tests verify that get_quantile and get_rank functions require compile-time constant arguments
469+
470+ -- Non-foldable scalar rank argument to get_quantile (column reference)
471+ SELECT kll_sketch_get_quantile_bigint(agg, CAST(col1 AS DOUBLE) / 10 .0 ) AS non_foldable_scalar_rank
472+ FROM (
473+ SELECT kll_sketch_agg_bigint(col1) AS agg, col1
474+ FROM t_long_1_5_through_7_11
475+ GROUP BY col1
476+ );
477+
478+ -- Non-foldable array rank argument to get_quantile (array containing column reference)
479+ SELECT kll_sketch_get_quantile_bigint(agg, array(0 .25 , CAST(col1 AS DOUBLE) / 10 .0 , 0 .75 )) AS non_foldable_array_rank
480+ FROM (
481+ SELECT kll_sketch_agg_bigint(col1) AS agg, col1
482+ FROM t_long_1_5_through_7_11
483+ GROUP BY col1
484+ );
485+
486+ -- Non-foldable scalar quantile argument to get_rank (column reference)
487+ SELECT kll_sketch_get_rank_bigint(agg, col1) AS non_foldable_scalar_quantile
488+ FROM (
489+ SELECT kll_sketch_agg_bigint(col1) AS agg, col1
490+ FROM t_long_1_5_through_7_11
491+ GROUP BY col1
492+ );
493+
494+ -- Non-foldable array quantile argument to get_rank (array containing column reference)
495+ SELECT kll_sketch_get_rank_bigint(agg, array(1L, col1, 5L)) AS non_foldable_array_quantile
496+ FROM (
497+ SELECT kll_sketch_agg_bigint(col1) AS agg, col1
498+ FROM t_long_1_5_through_7_11
499+ GROUP BY col1
500+ );
501+
467502-- Clean up
468503DROP TABLE IF EXISTS t_int_1_5_through_7_11;
469504DROP TABLE IF EXISTS t_long_1_5_through_7_11;
0 commit comments