From cba9643c4d90d8064bdc529f428e2fa5e6d25677 Mon Sep 17 00:00:00 2001 From: "Nihal Z. Miaji" <81457724+nihalzp@users.noreply.github.com> Date: Fri, 9 Jan 2026 17:06:40 +0000 Subject: [PATCH] Merge pull request #93814 from nihalzp/fix-map-empty-tuple-array Fix logical error in `Map` column types when used with empty tuple --- src/Functions/array/array.cpp | 3 +- .../03786_empty_tuple_map_array.reference | 4 ++ .../03786_empty_tuple_map_array.sql | 43 +++++++++++++++++++ 3 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 tests/queries/0_stateless/03786_empty_tuple_map_array.reference create mode 100644 tests/queries/0_stateless/03786_empty_tuple_map_array.sql diff --git a/src/Functions/array/array.cpp b/src/Functions/array/array.cpp index 715ee70bf9b8..15b75c5f7bbf 100644 --- a/src/Functions/array/array.cpp +++ b/src/Functions/array/array.cpp @@ -253,7 +253,8 @@ class FunctionArray : public IFunction const size_t tuple_size = concrete_out_data->tupleSize(); if (tuple_size == 0) { - out_data.insertManyDefaults(columns.size()); + /// Tuple() has no subcolumns to fill. Create `columns.size()` elements per row to match array offsets + out_data.insertManyDefaults(columns.size() * input_rows_count); } else { diff --git a/tests/queries/0_stateless/03786_empty_tuple_map_array.reference b/tests/queries/0_stateless/03786_empty_tuple_map_array.reference new file mode 100644 index 000000000000..590860f31966 --- /dev/null +++ b/tests/queries/0_stateless/03786_empty_tuple_map_array.reference @@ -0,0 +1,4 @@ +{((),1):1,((),1):1} +{((),1):1,((),1):1} +{} +{((),1):1,((),1):1} diff --git a/tests/queries/0_stateless/03786_empty_tuple_map_array.sql b/tests/queries/0_stateless/03786_empty_tuple_map_array.sql new file mode 100644 index 000000000000..5d6cce952c96 --- /dev/null +++ b/tests/queries/0_stateless/03786_empty_tuple_map_array.sql @@ -0,0 +1,43 @@ +DROP TABLE IF EXISTS t0; + +CREATE TABLE t0 (c0 Map(Tuple(Tuple(), Int), Int)) +ENGINE = MergeTree() +ORDER BY tuple(); + +INSERT INTO TABLE t0 (c0) +VALUES +( + map( + ((), 1), 1, + ((), 1), 1 + ) +), +( + map( + ((), 1), 1, + ((), 1), 1 + ) +); + +SELECT * FROM t0; + + +DROP TABLE IF EXISTS t1; + +CREATE TABLE t1 (c0 Map(Tuple(Tuple(), Int), Int)) +ENGINE = MergeTree() +ORDER BY tuple(); + +INSERT INTO TABLE t1 (c0) +VALUES +( + map() +), +( + map( + ((), 1), 1, + ((), 1), 1 + ) +); + +SELECT * FROM t1;