diff options
author | kniv <kniv@yandex-team.ru> | 2022-04-20 22:32:49 +0300 |
---|---|---|
committer | kniv <kniv@yandex-team.ru> | 2022-04-20 22:32:49 +0300 |
commit | ba304a03055fcc4a53824cea3ccb73397c48b87e (patch) | |
tree | eea13a53abfa1a25bc3ec5f72b0ad38d084b6d85 | |
parent | 8879bf33003591a07a437b175cdff228d0c3ea05 (diff) | |
download | ydb-ba304a03055fcc4a53824cea3ccb73397c48b87e.tar.gz |
YQL-14725: Revert PR:2418912 for GetPath(), add test case
YQL-14725: Revert PR:2418912 for GetTail(), add test case
ref:48385d50b2903903e3423b71d4a672d327137a56
-rw-r--r-- | ydb/library/yql/udfs/common/url_base/lib/url_base_udf.h | 19 |
1 files changed, 14 insertions, 5 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 39b067a9e2c..fcae061ecb1 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 @@ -94,11 +94,20 @@ namespace { SIMPLE_UDF(TGetPath, TOptional<char*>(TOptional<char*>)) { EMPTY_RESULT_ON_EMPTY_ARG(0); - const TStringBuf url(args[0].AsStringRef()); - TStringBuf path = GetPathAndQuery(url, true).Before('?'); - return path.StartsWith('/') - ? valueBuilder->NewString(path) - : valueBuilder->NewString(TString('/').append(path)); + const std::string_view url(args[0].AsStringRef()); + std::string_view cut(CutSchemePrefix(url)); + const auto s = cut.find('/'); + if (s == std::string_view::npos) { + return valueBuilder->NewString("/"); + } + + cut.remove_prefix(s); + const auto end = cut.find_first_of("?#"); + if (std::string_view::npos != end) { + cut.remove_suffix(cut.size() - end); + } + + return valueBuilder->SubString(args[0], std::distance(url.begin(), cut.begin()), cut.length()); } SIMPLE_UDF(TGetFragment, TOptional<char*>(TOptional<char*>)) { |