Support empty arrays

This commit is contained in:
Alexey Milovidov 2023-06-24 07:05:31 +02:00
parent cb2d395410
commit 3746e274b8
3 changed files with 46 additions and 2 deletions

View File

@ -163,7 +163,13 @@ namespace
default_non_const = castColumn(arguments[3], result_type); default_non_const = castColumn(arguments[3], result_type);
auto column_result = result_type->createColumn(); auto column_result = result_type->createColumn();
if (cache.table_num_to_idx) if (cache.is_empty)
{
return default_non_const
? default_non_const
: castColumn(arguments[0], result_type);
}
else if (cache.table_num_to_idx)
{ {
if (!executeNum<ColumnVector<UInt8>>(in, *column_result, default_non_const) if (!executeNum<ColumnVector<UInt8>>(in, *column_result, default_non_const)
&& !executeNum<ColumnVector<UInt16>>(in, *column_result, default_non_const) && !executeNum<ColumnVector<UInt16>>(in, *column_result, default_non_const)
@ -645,6 +651,8 @@ namespace
std::unique_ptr<StringToIdx> table_string_to_idx; std::unique_ptr<StringToIdx> table_string_to_idx;
std::unique_ptr<AnythingToIdx> table_anything_to_idx; std::unique_ptr<AnythingToIdx> table_anything_to_idx;
bool is_empty = false;
ColumnPtr from_column; ColumnPtr from_column;
ColumnPtr to_column; ColumnPtr to_column;
ColumnPtr default_column; ColumnPtr default_column;
@ -716,7 +724,10 @@ namespace
const size_t size = cache.from_column->size(); const size_t size = cache.from_column->size();
if (0 == size) if (0 == size)
throw Exception(ErrorCodes::BAD_ARGUMENTS, "Empty arrays are illegal in function {}", getName()); {
cache.is_empty = true;
return;
}
if (cache.to_column->size() != size) if (cache.to_column->size() != size)
throw Exception( throw Exception(

View File

@ -0,0 +1,30 @@
0
1
2
3
4
5
6
7
8
9
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello 0
Hello 1
Hello 2
Hello 3
Hello 4
Hello 5
Hello 6
Hello 7
Hello 8
Hello 9

View File

@ -0,0 +1,3 @@
SELECT transform(number, [], [1]) FROM numbers(10);
SELECT transform(number, [], [], 'Hello') FROM numbers(10);
SELECT transform(number, [], [], 'Hello ' || number::String) FROM numbers(10);