diff options
author | kniv <kniv@yandex-team.ru> | 2022-03-18 02:27:57 +0300 |
---|---|---|
committer | kniv <kniv@yandex-team.ru> | 2022-03-18 02:27:57 +0300 |
commit | 7531a3b1a493b9cdc57a28f665cef2644c613473 (patch) | |
tree | 4e939756f3c9108d6bad98026b2bc4fc86e05d49 | |
parent | 46c694c1d56b522b7510176d21b2ec89743ccc32 (diff) | |
download | ydb-7531a3b1a493b9cdc57a28f665cef2644c613473.tar.gz |
YQL-11066: Preserve backward-compatibility and remove *AnyOf() UDFs
YQL-11066: Preserve backward-compatibility and remove *AnyOf() UDFs
ref:cf16e8e4b6d2feb96ba5ca1e79c20ef308bafc89
-rw-r--r-- | ydb/library/yql/udfs/common/string/string_udf.cpp | 38 | ||||
-rw-r--r-- | ydb/library/yql/udfs/common/unicode_base/lib/unicode_base_udf.h | 56 |
2 files changed, 17 insertions, 77 deletions
diff --git a/ydb/library/yql/udfs/common/string/string_udf.cpp b/ydb/library/yql/udfs/common/string/string_udf.cpp index 17a335f5a3..ad657feb2f 100644 --- a/ydb/library/yql/udfs/common/string/string_udf.cpp +++ b/ydb/library/yql/udfs/common/string/string_udf.cpp @@ -192,13 +192,6 @@ namespace { return args[0]; } - SIMPLE_UDF(TRemoveAll, char*(TAutoMap<char*>, char*)) { - if (TString result(args[0].AsStringRef()); SubstGlobal(result, args[1].AsStringRef(), "")) - return valueBuilder->NewString(result); - else - return args[0]; - } - SIMPLE_UDF(TReplaceFirst, char*(TAutoMap<char*>, char*, char*)) { std::string result(args[0].AsStringRef()); const std::string_view what(args[1].AsStringRef()); @@ -209,16 +202,6 @@ namespace { return args[0]; } - SIMPLE_UDF(TRemoveFirst, char*(TAutoMap<char*>, char*)) { - std::string result(args[0].AsStringRef()); - const std::string_view what(args[1].AsStringRef()); - if (const auto index = result.find(what); index != std::string::npos) { - result.erase(index, what.size()); - return valueBuilder->NewString(result); - } - return args[0]; - } - SIMPLE_UDF(TReplaceLast, char*(TAutoMap<char*>, char*, char*)) { std::string result(args[0].AsStringRef()); const std::string_view what(args[1].AsStringRef()); @@ -229,17 +212,7 @@ namespace { return args[0]; } - SIMPLE_UDF(TRemoveLast, char*(TAutoMap<char*>, char*)) { - std::string result(args[0].AsStringRef()); - const std::string_view what(args[1].AsStringRef()); - if (const auto index = result.rfind(what); index != std::string::npos) { - result.erase(index, what.size()); - return valueBuilder->NewString(result); - } - return args[0]; - } - - SIMPLE_UDF(TRemoveAllAnyOf, char*(TAutoMap<char*>, char*)) { + SIMPLE_UDF(TRemoveAll, char*(TAutoMap<char*>, char*)) { std::string input(args[0].AsStringRef()); const std::string_view remove(args[1].AsStringRef()); const std::unordered_set<char> chars(remove.cbegin(), remove.cend()); @@ -256,7 +229,7 @@ namespace { return args[0]; } - SIMPLE_UDF(TRemoveFirstAnyOf, char*(TAutoMap<char*>, char*)) { + SIMPLE_UDF(TRemoveFirst, char*(TAutoMap<char*>, char*)) { std::string input(args[0].AsStringRef()); const std::string_view remove(args[1].AsStringRef()); std::unordered_set<char> chars(remove.cbegin(), remove.cend()); @@ -269,13 +242,13 @@ namespace { return args[0]; } - SIMPLE_UDF(TRemoveLastAnyOf, char*(TAutoMap<char*>, char*)) { + SIMPLE_UDF(TRemoveLast, char*(TAutoMap<char*>, char*)) { std::string input(args[0].AsStringRef()); const std::string_view remove(args[1].AsStringRef()); std::unordered_set<char> chars(remove.cbegin(), remove.cend()); for (auto it = input.crbegin(); it != input.crend(); ++it) { if (chars.contains(*it)) { - input.erase(std::distance(it, input.crend()) - 1, 1); + input.erase(input.crend() - it - 1, 1); return valueBuilder->NewString(input); } } @@ -552,11 +525,8 @@ namespace { TReplaceFirst, TReplaceLast, TRemoveAll, - TRemoveAllAnyOf, TRemoveFirst, - TRemoveFirstAnyOf, TRemoveLast, - TRemoveLastAnyOf, TContains, TFind, TReverseFind, diff --git a/ydb/library/yql/udfs/common/unicode_base/lib/unicode_base_udf.h b/ydb/library/yql/udfs/common/unicode_base/lib/unicode_base_udf.h index 7feeb84d57..1506456f50 100644 --- a/ydb/library/yql/udfs/common/unicode_base/lib/unicode_base_udf.h +++ b/ydb/library/yql/udfs/common/unicode_base/lib/unicode_base_udf.h @@ -272,13 +272,6 @@ namespace { return args[0]; } - SIMPLE_UDF(TRemoveAll, TUtf8(TAutoMap<TUtf8>, TUtf8)) { - if (TString result(args[0].AsStringRef()); SubstGlobal(result, args[1].AsStringRef(), "")) - return valueBuilder->NewString(result); - else - return args[0]; - } - SIMPLE_UDF(TReplaceFirst, TUtf8(TAutoMap<TUtf8>, TUtf8, TUtf8)) { std::string result(args[0].AsStringRef()); const std::string_view what(args[1].AsStringRef()); @@ -289,16 +282,6 @@ namespace { return args[0]; } - SIMPLE_UDF(TRemoveFirst, TUtf8(TAutoMap<TUtf8>, TUtf8)) { - std::string result(args[0].AsStringRef()); - const std::string_view what(args[1].AsStringRef()); - if (const auto index = result.find(what); index != std::string::npos) { - result.erase(index, what.size()); - return valueBuilder->NewString(result); - } - return args[0]; - } - SIMPLE_UDF(TReplaceLast, TUtf8(TAutoMap<TUtf8>, TUtf8, TUtf8)) { std::string result(args[0].AsStringRef()); const std::string_view what(args[1].AsStringRef()); @@ -309,22 +292,12 @@ namespace { return args[0]; } - SIMPLE_UDF(TRemoveLast, TUtf8(TAutoMap<TUtf8>, TUtf8)) { - std::string result(args[0].AsStringRef()); - const std::string_view what(args[1].AsStringRef()); - if (const auto index = result.rfind(what); index != std::string::npos) { - result.erase(index, what.size()); - return valueBuilder->NewString(result); - } - return args[0]; - } - - SIMPLE_UDF(TRemoveAllAnyOf, TUtf8(TAutoMap<TUtf8>, TUtf8)) { - TUtf16String input = UTF8ToWide(args[0].AsStringRef()); - const TUtf16String remove = UTF8ToWide(args[1].AsStringRef()); - const std::unordered_set<wchar16> chars(remove.cbegin(), remove.cend()); + SIMPLE_UDF(TRemoveAll, TUtf8(TAutoMap<TUtf8>, TUtf8)) { + TUtf32String input = UTF8ToUTF32<true>(args[0].AsStringRef()); + const TUtf32String remove = UTF8ToUTF32<true>(args[1].AsStringRef()); + const std::unordered_set<wchar32> chars(remove.cbegin(), remove.cend()); size_t tpos = 0; - for (const wchar16 c : input) { + for (const wchar32 c : input) { if (!chars.contains(c)) { input[tpos++] = c; } @@ -336,10 +309,10 @@ namespace { return args[0]; } - SIMPLE_UDF(TRemoveFirstAnyOf, TUtf8(TAutoMap<TUtf8>, TUtf8)) { - TUtf16String input = UTF8ToWide(args[0].AsStringRef()); - const TUtf16String remove = UTF8ToWide(args[1].AsStringRef()); - const std::unordered_set<wchar16> chars(remove.cbegin(), remove.cend()); + SIMPLE_UDF(TRemoveFirst, TUtf8(TAutoMap<TUtf8>, TUtf8)) { + TUtf32String input = UTF8ToUTF32<true>(args[0].AsStringRef()); + const TUtf32String remove = UTF8ToUTF32<true>(args[1].AsStringRef()); + const std::unordered_set<wchar32> chars(remove.cbegin(), remove.cend()); for (auto it = input.cbegin(); it != input.cend(); ++it) { if (chars.contains(*it)) { input.erase(it); @@ -349,10 +322,10 @@ namespace { return args[0]; } - SIMPLE_UDF(TRemoveLastAnyOf, TUtf8(TAutoMap<TUtf8>, TUtf8)) { - TUtf16String input = UTF8ToWide(args[0].AsStringRef()); - const TUtf16String remove = UTF8ToWide(args[1].AsStringRef()); - const std::unordered_set<wchar16> chars(remove.cbegin(), remove.cend()); + SIMPLE_UDF(TRemoveLast, TUtf8(TAutoMap<TUtf8>, TUtf8)) { + TUtf32String input = UTF8ToUTF32<true>(args[0].AsStringRef()); + const TUtf32String remove = UTF8ToUTF32<true>(args[1].AsStringRef()); + const std::unordered_set<wchar32> chars(remove.cbegin(), remove.cend()); for (auto it = input.crbegin(); it != input.crend(); ++it) { if (chars.contains(*it)) { input.erase(input.crend() - it - 1, 1); @@ -472,9 +445,6 @@ namespace { TRemoveAll, \ TRemoveFirst, \ TRemoveLast, \ - TRemoveAllAnyOf, \ - TRemoveFirstAnyOf, \ - TRemoveLastAnyOf, \ TToCodePointList, \ TFromCodePointList, \ TReverse, \ |