1#include <Functions/FunctionFactory.h>
2#include <Functions/FunctionStringToString.h>
3#include "FunctionsURL.h"
4#include <common/find_symbols.h>
5
6namespace DB
7{
8
9struct ExtractPathFull
10{
11 static size_t getReserveLengthForElement() { return 30; }
12
13 static void execute(const Pos data, const size_t size, Pos & res_data, size_t & res_size)
14 {
15 res_data = data;
16 res_size = 0;
17
18 Pos pos = data;
19 Pos end = pos + size;
20
21 if (end != (pos = find_first_symbols<'/'>(pos, end)) && pos[1] == '/' && end != (pos = find_first_symbols<'/'>(pos + 2, end)))
22 {
23 res_data = pos;
24 res_size = end - res_data;
25 }
26 }
27};
28
29struct NamePathFull { static constexpr auto name = "pathFull"; };
30using FunctionPathFull = FunctionStringToString<ExtractSubstringImpl<ExtractPathFull>, NamePathFull>;
31
32void registerFunctionPathFull(FunctionFactory & factory)
33{
34 factory.registerFunction<FunctionPathFull>();
35}
36
37}
38