mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-21 09:10:48 +00:00
dbms: naive implementation of non-const array() function for now[#METR-17948]
This commit is contained in:
parent
43b0e8a46c
commit
0bcf25e518
@ -219,7 +219,27 @@ public:
|
||||
};
|
||||
}
|
||||
else
|
||||
throw Exception("Arguments for function array must be constant.", ErrorCodes::ILLEGAL_COLUMN);
|
||||
{
|
||||
auto out = new ColumnArray{result_type->createColumn()};
|
||||
ColumnPtr out_ptr{out};
|
||||
|
||||
for (const auto row_num : ext::range(0, first_arg.column->size()))
|
||||
{
|
||||
Array arr;
|
||||
|
||||
for (const auto arg_num : arguments)
|
||||
if (block.getByPosition(arg_num).type->getName() == result_type->getName())
|
||||
/// Если элемент такого же типа как результат, просто добавляем его в ответ
|
||||
arr.push_back((*block.getByPosition(arg_num).column)[row_num]);
|
||||
else
|
||||
/// Иначе необходимо привести его к типу результата
|
||||
addField(result_type, (*block.getByPosition(arg_num).column)[row_num], arr);
|
||||
|
||||
out->insert(arr);
|
||||
}
|
||||
|
||||
block.getByPosition(result).column = out_ptr;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user