mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-20 16:50:48 +00:00
Every function in its own file, part 3
This commit is contained in:
parent
ab365686a0
commit
c646f5649c
@ -11,6 +11,7 @@
|
||||
#include <Functions/GatherUtils/Algorithms.h>
|
||||
#include <IO/WriteHelpers.h>
|
||||
#include <ext/range.h>
|
||||
#include <ext/map.h>
|
||||
|
||||
|
||||
namespace DB
|
||||
@ -157,21 +158,25 @@ public:
|
||||
bool isVariadic() const override { return true; }
|
||||
|
||||
protected:
|
||||
FunctionBasePtr buildImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr & /*return_type*/) const override
|
||||
FunctionBasePtr buildImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr & return_type) const override
|
||||
{
|
||||
if (isArray(arguments.at(0).type))
|
||||
return FunctionFactory::instance().get("arrayConcat", context)->build(arguments);
|
||||
else
|
||||
return FunctionConcat::create(context);
|
||||
return std::make_shared<DefaultFunction>(
|
||||
FunctionConcat::create(context),
|
||||
ext::map<DataTypes>(arguments, [](const auto & elem) { return elem.type; }),
|
||||
return_type);
|
||||
}
|
||||
|
||||
DataTypePtr getReturnTypeImpl(const ColumnsWithTypeAndName & arguments) const override
|
||||
DataTypePtr getReturnTypeImpl(const DataTypes & arguments) const override
|
||||
{
|
||||
DataTypes arg_types;
|
||||
for (const auto & arg : arguments)
|
||||
arg_types.emplace_back(arg.type);
|
||||
if (arguments.size() < 2)
|
||||
throw Exception("Number of arguments for function " + getName() + " doesn't match: passed " + toString(arguments.size())
|
||||
+ ", should be at least 2.",
|
||||
ErrorCodes::NUMBER_OF_ARGUMENTS_DOESNT_MATCH);
|
||||
|
||||
return getLeastSupertype(arg_types);
|
||||
return getLeastSupertype(arguments);
|
||||
}
|
||||
|
||||
private:
|
||||
|
@ -4,6 +4,7 @@
|
||||
#include <Columns/ColumnArray.h>
|
||||
#include <Functions/FunctionFactory.h>
|
||||
#include <Functions/FunctionHelpers.h>
|
||||
#include <ext/map.h>
|
||||
|
||||
|
||||
namespace DB
|
||||
@ -123,17 +124,20 @@ public:
|
||||
size_t getNumberOfArguments() const override { return 1; }
|
||||
|
||||
protected:
|
||||
FunctionBasePtr buildImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr & /*return_type*/) const override
|
||||
FunctionBasePtr buildImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr & return_type) const override
|
||||
{
|
||||
if (isArray(arguments.at(0).type))
|
||||
return FunctionFactory::instance().get("arrayReverse", context)->build(arguments);
|
||||
else
|
||||
return FunctionReverse::create(context);
|
||||
return std::make_shared<DefaultFunction>(
|
||||
FunctionReverse::create(context),
|
||||
ext::map<DataTypes>(arguments, [](const auto & elem) { return elem.type; }),
|
||||
return_type);
|
||||
}
|
||||
|
||||
DataTypePtr getReturnTypeImpl(const ColumnsWithTypeAndName & arguments) const override
|
||||
DataTypePtr getReturnTypeImpl(const DataTypes & arguments) const override
|
||||
{
|
||||
return arguments.at(0).type;
|
||||
return arguments.at(0);
|
||||
}
|
||||
|
||||
private:
|
||||
|
Loading…
Reference in New Issue
Block a user