diff options
author | epbugaev <[email protected]> | 2023-05-26 15:26:33 +0300 |
---|---|---|
committer | epbugaev <[email protected]> | 2023-05-26 15:26:33 +0300 |
commit | 128ca89c517a1e3868cbf91525b75a61b13051c9 (patch) | |
tree | 111b581b0dc4c7b54c1f27ae2738c64196896ee5 | |
parent | b2cdcd58818f43adf5f9f914e1a47cd3e5e05380 (diff) |
Add block TNormalize udf
TNormalize block udf
-rw-r--r-- | ydb/library/yql/udfs/common/url_base/lib/url_base_udf.h | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/ydb/library/yql/udfs/common/url_base/lib/url_base_udf.h b/ydb/library/yql/udfs/common/url_base/lib/url_base_udf.h index abfe02c1c58..c430452e6f0 100644 --- a/ydb/library/yql/udfs/common/url_base/lib/url_base_udf.h +++ b/ydb/library/yql/udfs/common/url_base/lib/url_base_udf.h @@ -50,7 +50,7 @@ inline bool PrepareUrl(const std::string_view& keyStr, TUri& parser) { }; \ END_SIMPLE_ARROW_UDF(udfName, udfName##KernelExec::Do); -SIMPLE_UDF(TNormalize, TOptional<char*>(TOptional<char*>)) { +BEGIN_SIMPLE_ARROW_UDF(TNormalize, TOptional<char*>(TOptional<char*>)) { EMPTY_RESULT_ON_EMPTY_ARG(0); TUri url; const bool success = PrepareUrl(args[0].AsStringRef(), url); @@ -58,6 +58,21 @@ SIMPLE_UDF(TNormalize, TOptional<char*>(TOptional<char*>)) { ? valueBuilder->NewString(url.PrintS(TUri::FlagNoFrag)) : TUnboxedValue(); } +struct TNormalizeKernelExec : public TUnaryKernelExec<TNormalizeKernelExec> { + template <typename TSink> + static void Process(TBlockItem arg, const TSink& sink) { + if (!arg) { + return sink(TBlockItem()); + } + TUri url; + const bool success = PrepareUrl(arg.AsStringRef(), url); + if (success) { + return sink(TBlockItem(TStringRef(url.PrintS(TUri::FlagNoFrag)))); + } + sink(TBlockItem()); + } +}; +END_SIMPLE_ARROW_UDF(TNormalize, TNormalizeKernelExec::Do); BEGIN_SIMPLE_STRICT_ARROW_UDF(TGetScheme, char*(TAutoMap<char*>)) { const std::string_view url(args[0].AsStringRef()); |