aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkniv <kniv@yandex-team.ru>2022-04-20 22:32:49 +0300
committerkniv <kniv@yandex-team.ru>2022-04-20 22:32:49 +0300
commitba304a03055fcc4a53824cea3ccb73397c48b87e (patch)
treeeea13a53abfa1a25bc3ec5f72b0ad38d084b6d85
parent8879bf33003591a07a437b175cdff228d0c3ea05 (diff)
downloadydb-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.h19
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*>)) {