Skip to content

Commit

Permalink
Merge pull request #63853 from ClickHouse/cherrypick/24.4/c83322525b1…
Browse files Browse the repository at this point in the history
…436c53763c8f54cfafd67faf90bd2

Cherry pick #63753 to 24.4: Allow cast from Array(Nothing) to Map(Nothing, Nothing)
  • Loading branch information
robot-ch-test-poll3 committed May 15, 2024
2 parents e02cb27 + c833225 commit 52d113d
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 0 deletions.
7 changes: 7 additions & 0 deletions src/Functions/FunctionsConversion.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#include <Columns/ColumnFixedString.h>
#include <Columns/ColumnLowCardinality.h>
#include <Columns/ColumnMap.h>
#include <Columns/ColumnNothing.h>
#include <Columns/ColumnNullable.h>
#include <Columns/ColumnObject.h>
#include <Columns/ColumnString.h>
Expand Down Expand Up @@ -3771,6 +3772,12 @@ class FunctionCast final : public IFunctionBase
}
else if (const auto * from_array = typeid_cast<const DataTypeArray *>(from_type_untyped.get()))
{
if (typeid_cast<const DataTypeNothing *>(from_array->getNestedType().get()))
return [nested = to_type->getNestedType()](ColumnsWithTypeAndName &, const DataTypePtr &, const ColumnNullable *, size_t size)
{
return ColumnMap::create(nested->createColumnConstWithDefaultValue(size)->convertToFullColumnIfConst());
};

const auto * nested_tuple = typeid_cast<const DataTypeTuple *>(from_array->getNestedType().get());
if (!nested_tuple || nested_tuple->getElements().size() != 2)
throw Exception(
Expand Down
3 changes: 3 additions & 0 deletions tests/queries/0_stateless/01787_map_remote.reference
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,6 @@
{'a':1,'b':2}
{'a':1,'b':2}
{'a':1,'b':2}
{}
{}
{'':''}
6 changes: 6 additions & 0 deletions tests/queries/0_stateless/01787_map_remote.sql
Original file line number Diff line number Diff line change
@@ -1,2 +1,8 @@
SELECT map('a', 1, 'b', 2) FROM remote('127.0.0.{1,2}', system, one);
SELECT map('a', 1, 'b', 2) FROM remote('127.0.0.{1,2}');

SELECT map() from remote('127.0.0.{1,2}', system,one);

drop table if exists bug_repro_local;
CREATE TABLE bug_repro_local (`attributes` Map(LowCardinality(String), String)) ENGINE = Log as select map('','');
SELECT if(1, attributes, map()) from remote('127.0.0.{1,2}', currentDatabase(), bug_repro_local) limit 1;

0 comments on commit 52d113d

Please sign in to comment.