1#include <Functions/FunctionFactory.h>
2#include <Functions/FunctionUnaryArithmetic.h>
3
4namespace DB
5{
6
7template <typename A>
8struct RoundDurationImpl
9{
10 using ResultType = UInt16;
11
12 static inline ResultType apply(A x)
13 {
14 return x < 1 ? 0
15 : (x < 10 ? 1
16 : (x < 30 ? 10
17 : (x < 60 ? 30
18 : (x < 120 ? 60
19 : (x < 180 ? 120
20 : (x < 240 ? 180
21 : (x < 300 ? 240
22 : (x < 600 ? 300
23 : (x < 1200 ? 600
24 : (x < 1800 ? 1200
25 : (x < 3600 ? 1800
26 : (x < 7200 ? 3600
27 : (x < 18000 ? 7200
28 : (x < 36000 ? 18000
29 : 36000))))))))))))));
30 }
31
32#if USE_EMBEDDED_COMPILER
33 static constexpr bool compilable = false;
34#endif
35};
36
37struct NameRoundDuration { static constexpr auto name = "roundDuration"; };
38using FunctionRoundDuration = FunctionUnaryArithmetic<RoundDurationImpl, NameRoundDuration, false>;
39
40template <> struct FunctionUnaryArithmeticMonotonicity<NameRoundDuration> : PositiveMonotonicity {};
41
42void registerFunctionRoundDuration(FunctionFactory & factory)
43{
44 factory.registerFunction<FunctionRoundDuration>();
45}
46
47}
48