mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-21 09:10:48 +00:00
Added miscellaneous function blockNumber [#METR-21347].
This commit is contained in:
parent
b9965978f0
commit
ab04e6f5be
@ -288,6 +288,42 @@ public:
|
||||
};
|
||||
|
||||
|
||||
/** Инкрементальный номер блока среди вызовов этой функции. */
|
||||
class FunctionBlockNumber : public IFunction
|
||||
{
|
||||
private:
|
||||
std::atomic<size_t> block_number {0};
|
||||
|
||||
public:
|
||||
static constexpr auto name = "blockNumber";
|
||||
static IFunction * create(const Context & context) { return new FunctionBlockNumber; }
|
||||
|
||||
/// Получить имя функции.
|
||||
String getName() const override
|
||||
{
|
||||
return name;
|
||||
}
|
||||
|
||||
/// Получить тип результата по типам аргументов. Если функция неприменима для данных аргументов - кинуть исключение.
|
||||
DataTypePtr getReturnType(const DataTypes & arguments) const override
|
||||
{
|
||||
if (!arguments.empty())
|
||||
throw Exception("Number of arguments for function " + getName() + " doesn't match: passed "
|
||||
+ toString(arguments.size()) + ", should be 0.",
|
||||
ErrorCodes::NUMBER_OF_ARGUMENTS_DOESNT_MATCH);
|
||||
|
||||
return new DataTypeUInt64;
|
||||
}
|
||||
|
||||
/// Выполнить функцию над блоком.
|
||||
void execute(Block & block, const ColumnNumbers & arguments, size_t result) override
|
||||
{
|
||||
size_t current_block_number = block_number++;
|
||||
block.getByPosition(result).column = ColumnConstUInt64(block.rowsInFirstColumn(), current_block_number).convertToFullColumn();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
class FunctionSleep : public IFunction
|
||||
{
|
||||
public:
|
||||
|
@ -381,6 +381,7 @@ void registerFunctionsMiscellaneous(FunctionFactory & factory)
|
||||
factory.registerFunction<FunctionToTypeName>();
|
||||
factory.registerFunction<FunctionBlockSize>();
|
||||
factory.registerFunction<FunctionRowNumberInBlock>();
|
||||
factory.registerFunction<FunctionBlockNumber>();
|
||||
factory.registerFunction<FunctionSleep>();
|
||||
factory.registerFunction<FunctionMaterialize>();
|
||||
factory.registerFunction<FunctionIgnore>();
|
||||
|
Loading…
Reference in New Issue
Block a user