1#pragma once
2#include <Functions/IFunctionImpl.h>
3
4namespace DB
5{
6
7class ExternalModelsLoader;
8
9/// Evaluate external model.
10/// First argument - model name, the others - model arguments.
11/// * for CatBoost model - float features first, then categorical
12/// Result - Float64.
13class FunctionModelEvaluate final : public IFunction
14{
15public:
16 static constexpr auto name = "modelEvaluate";
17
18 static FunctionPtr create(const Context & context);
19
20 explicit FunctionModelEvaluate(const ExternalModelsLoader & models_loader_) : models_loader(models_loader_) {}
21
22 String getName() const override { return name; }
23
24 bool isVariadic() const override { return true; }
25
26 bool isDeterministic() const override { return false; }
27
28 bool useDefaultImplementationForNulls() const override { return false; }
29
30 size_t getNumberOfArguments() const override { return 0; }
31
32 DataTypePtr getReturnTypeImpl(const ColumnsWithTypeAndName & arguments) const override;
33
34 void executeImpl(Block & block, const ColumnNumbers & arguments, size_t result, size_t input_rows_count) override;
35
36private:
37 const ExternalModelsLoader & models_loader;
38};
39
40}
41