Backport #63753 to 24.3: Allow cast from Array(Nothing) to Map(Nothing, Nothing)

This commit is contained in:
robot-clickhouse 2024-05-21 11:03:49 +00:00
parent a3c1ba35b1
commit 58f86723fc
3 changed files with 16 additions and 0 deletions

View File

@ -1,5 +1,6 @@
#include <type_traits>
#include <AggregateFunctions/IAggregateFunction.h>
#include <IO/WriteBufferFromVector.h>
#include <IO/ReadBufferFromMemory.h>
#include <IO/Operators.h>
@ -3762,6 +3763,12 @@ private:
}
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(

View File

@ -2,3 +2,6 @@
{'a':1,'b':2}
{'a':1,'b':2}
{'a':1,'b':2}
{}
{}
{'':''}

View File

@ -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;