summaryrefslogtreecommitdiffstats
path: root/yql/essentials/udfs/common/url_base/lib/url_parse.h
diff options
context:
space:
mode:
authorimunkin <[email protected]>2024-11-08 10:00:23 +0300
committerimunkin <[email protected]>2024-11-08 10:12:13 +0300
commita784a2f943d6e15caa6241e2e96d80aac6dbf375 (patch)
tree05f1e5366c916b988a8afb75bdab8ddeee0f6e6d /yql/essentials/udfs/common/url_base/lib/url_parse.h
parentd70137a7b530ccaa52834274913bbb5a3d1ca06e (diff)
Move yql/udfs/common/ to /yql/essentials YQL-19206
Except the following directories: * clickhouse/client * datetime * knn * roaring commit_hash:c7da95636144d28db109d6b17ddc762e9bacb59f
Diffstat (limited to 'yql/essentials/udfs/common/url_base/lib/url_parse.h')
-rw-r--r--yql/essentials/udfs/common/url_base/lib/url_parse.h59
1 files changed, 59 insertions, 0 deletions
diff --git a/yql/essentials/udfs/common/url_base/lib/url_parse.h b/yql/essentials/udfs/common/url_base/lib/url_parse.h
new file mode 100644
index 00000000000..b0a1679d1e9
--- /dev/null
+++ b/yql/essentials/udfs/common/url_base/lib/url_parse.h
@@ -0,0 +1,59 @@
+#pragma once
+
+#include <yql/essentials/public/udf/udf_helpers.h>
+#include <library/cpp/uri/uri.h>
+
+#define FIELD_MAP(XX) \
+ XX(Scheme) \
+ XX(User) \
+ XX(Pass) \
+ XX(Host) \
+ XX(Port) \
+ XX(Path) \
+ XX(Query) \
+ XX(Frag)
+
+#define FIELD_INDEXES(name) ui32 name;
+
+namespace NUrlUdf {
+ using namespace NUri;
+ using namespace NKikimr;
+ using namespace NUdf;
+
+ struct TUrlParseIndexes {
+ ui32 ParseError;
+ FIELD_MAP(FIELD_INDEXES)
+ };
+
+ class TParse: public TBoxedValue {
+ public:
+ TParse(const TUrlParseIndexes& UrlParseIndexes)
+ : UrlParseIndexes(UrlParseIndexes)
+ , ParseFlags(TUri::FeaturesRecommended)
+ {
+ }
+
+ static const TStringRef& Name() {
+ static auto nameRef = TStringRef("Parse");
+ return nameRef;
+ }
+
+ private:
+ TUnboxedValue Run(
+ const IValueBuilder* valueBuilder,
+ const TUnboxedValuePod* args) const override;
+
+ public:
+ static bool DeclareSignature(
+ const TStringRef& name,
+ TType* userType,
+ IFunctionTypeInfoBuilder& builder,
+ bool typesOnly);
+
+ private:
+ const TUrlParseIndexes UrlParseIndexes;
+ const NUri::TParseFlags ParseFlags;
+
+ static constexpr ui32 FieldsCount = sizeof(TUrlParseIndexes) / sizeof(ui32);
+ };
+}