ClickHouse

Форк
0
/
logTrace.cpp 
63 строки · 2.0 Кб
1
#include <Columns/ColumnConst.h>
2
#include <Columns/ColumnString.h>
3
#include <DataTypes/DataTypeString.h>
4
#include <DataTypes/DataTypesNumber.h>
5
#include <Functions/FunctionFactory.h>
6
#include <Functions/FunctionHelpers.h>
7
#include <Functions/IFunction.h>
8

9
#include <Common/logger_useful.h>
10

11
namespace DB
12
{
13
namespace ErrorCodes
14
{
15
    extern const int ILLEGAL_TYPE_OF_ARGUMENT;
16
}
17

18
namespace
19
{
20
    class FunctionLogTrace : public IFunction
21
    {
22
    public:
23
        static constexpr auto name = "logTrace";
24
        static FunctionPtr create(ContextPtr) { return std::make_shared<FunctionLogTrace>(); }
25

26
        String getName() const override { return name; }
27

28
        size_t getNumberOfArguments() const override { return 1; }
29

30
        bool isSuitableForShortCircuitArgumentsExecution(const DataTypesWithConstInfo & /*arguments*/) const override { return false; }
31

32
        DataTypePtr getReturnTypeImpl(const DataTypes & arguments) const override
33
        {
34
            if (!isString(arguments[0]))
35
                throw Exception(ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT, "Illegal type {} of argument of function {}",
36
                    arguments[0]->getName(), getName());
37
            return std::make_shared<DataTypeUInt8>();
38
        }
39

40
        ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr &, size_t input_rows_count) const override
41
        {
42
            String message;
43
            if (const ColumnConst * col = checkAndGetColumnConst<ColumnString>(arguments[0].column.get()))
44
                message = col->getDataAt(0).data;
45
            else
46
                throw Exception(ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT, "First argument for function {} must be Constant string",
47
                    getName());
48

49
            static auto log = getLogger("FunctionLogTrace");
50
            LOG_TRACE(log, fmt::runtime(message));
51

52
            return DataTypeUInt8().createColumnConst(input_rows_count, 0);
53
        }
54
    };
55

56
}
57

58
REGISTER_FUNCTION(LogTrace)
59
{
60
    factory.registerFunction<FunctionLogTrace>();
61
}
62

63
}
64

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.