diff options
author | epbugaev <epbugaev@yandex-team.com> | 2023-06-02 11:50:05 +0300 |
---|---|---|
committer | epbugaev <epbugaev@yandex-team.com> | 2023-06-02 11:50:05 +0300 |
commit | 4170d875a85af95c7ac004ecbd22029641fa8bb1 (patch) | |
tree | d40a430763343af82e721032ef41d9c06fe30ae3 | |
parent | 08d91bb04ec2af62585ca20110a65332d9f53612 (diff) | |
download | ydb-4170d875a85af95c7ac004ecbd22029641fa8bb1.tar.gz |
Block TLD udfs
BlockUDFs:
GetTLD
IsKnownTLD
IsWellKnownTLD
-rw-r--r-- | ydb/library/yql/udfs/common/url_base/lib/url_base_udf.h | 28 |
1 files changed, 25 insertions, 3 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 c430452e6f0..b5311ec8d26 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 @@ -246,10 +246,18 @@ SIMPLE_UDF(TGetDomain, TOptional<char*>(TOptional<char*>, ui8)) { return TUnboxedValue(); } -SIMPLE_UDF(TGetTLD, char*(TAutoMap<char*>)) { +BEGIN_SIMPLE_ARROW_UDF(TGetTLD, char*(TAutoMap<char*>)) { const TStringBuf url(args[0].AsStringRef()); return valueBuilder->NewString(GetZone(GetOnlyHost(url))); } +struct TGetTLDKernelExec : public TUnaryKernelExec<TGetTLDKernelExec> { + template <typename TSink> + static void Process(TBlockItem arg, const TSink& sink) { + const TStringBuf url(arg.AsStringRef()); + return sink(TBlockItem(GetZone(GetOnlyHost(url)))); + } +}; +END_SIMPLE_ARROW_UDF(TGetTLD, TGetTLDKernelExec::Do); SIMPLE_UDF(TGetDomainLevel, ui64(TAutoMap<char*>)) { Y_UNUSED(valueBuilder); @@ -381,15 +389,29 @@ struct TDecodeKernelExec : public TUnaryKernelExec<TDecodeKernelExec> { }; END_SIMPLE_ARROW_UDF(TDecode, TDecodeKernelExec::Do); -SIMPLE_UDF(TIsKnownTLD, bool(TAutoMap<char*>)) { +BEGIN_SIMPLE_ARROW_UDF(TIsKnownTLD, bool(TAutoMap<char*>)) { Y_UNUSED(valueBuilder); return TUnboxedValuePod(IsTld(args[0].AsStringRef())); } +struct TIsKnownTLDKernelExec : public TUnaryKernelExec<TIsKnownTLDKernelExec> { + template <typename TSink> + static void Process(TBlockItem arg, const TSink& sink) { + sink(TBlockItem(static_cast<ui8>(IsTld(arg.AsStringRef())))); + } +}; +END_SIMPLE_ARROW_UDF(TIsKnownTLD, TIsKnownTLDKernelExec::Do); -SIMPLE_UDF(TIsWellKnownTLD, bool(TAutoMap<char*>)) { +BEGIN_SIMPLE_ARROW_UDF(TIsWellKnownTLD, bool(TAutoMap<char*>)) { Y_UNUSED(valueBuilder); return TUnboxedValuePod(IsVeryGoodTld(args[0].AsStringRef())); } +struct TIsWellKnownTLDKernelExec : public TUnaryKernelExec<TIsWellKnownTLDKernelExec> { + template <typename TSink> + static void Process(TBlockItem arg, const TSink& sink) { + sink(TBlockItem(static_cast<ui8>(IsVeryGoodTld(arg.AsStringRef())))); + } +}; +END_SIMPLE_ARROW_UDF(TIsWellKnownTLD, TIsWellKnownTLDKernelExec::Do); SIMPLE_UDF(THostNameToPunycode, TOptional<char*>(TAutoMap<char*>)) try { const TUtf16String& input = UTF8ToWide(args[0].AsStringRef()); |