@@ -166,11 +166,7 @@ namespace {
166
166
}
167
167
168
168
#define STRING_ASCII_CMP_IGNORE_CASE_UDF (udfName, function ) \
169
- BEGIN_SIMPLE_STRICT_ARROW_UDF_OPTIONS (T##udfName, \
170
- bool (TOptional<char *>, char *), \
171
- builder.SetMinLangVer(NYql::MakeLangVersion(2025 , 2 ))) \
172
- { \
173
- Y_UNUSED (valueBuilder); \
169
+ TUnboxedValuePod udfName##Impl(const TUnboxedValuePod* args) { \
174
170
if (args[0 ]) { \
175
171
const TString haystack (args[0 ].AsStringRef ()); \
176
172
const TString needle (args[1 ].AsStringRef ()); \
@@ -197,9 +193,26 @@ namespace {
197
193
} \
198
194
}; \
199
195
\
200
- END_SIMPLE_ARROW_UDF (T##udfName, T##udfName##KernelExec::Do)
196
+ BEGIN_SIMPLE_STRICT_ARROW_UDF_OPTIONS (T##udfName, \
197
+ bool (TOptional<char *>, char *), \
198
+ builder.SetMinLangVer(NYql::MakeLangVersion(2025 , 2 ))) \
199
+ { \
200
+ Y_UNUSED (valueBuilder); \
201
+ return udfName##Impl (args); \
202
+ } \
203
+ \
204
+ END_SIMPLE_ARROW_UDF (T##udfName, T##udfName##KernelExec::Do) \
205
+ \
206
+ BEGIN_SIMPLE_STRICT_ARROW_UDF(T_yql_##udfName, \
207
+ bool (TOptional<char *>, char *)) \
208
+ { \
209
+ Y_UNUSED (valueBuilder); \
210
+ return udfName##Impl (args); \
211
+ } \
212
+ \
213
+ END_SIMPLE_ARROW_UDF (T_yql_##udfName, T##udfName##KernelExec::Do)
201
214
202
- #define IS_ASCII_UDF (function ) \
215
+ #define IS_ASCII_UDF (function ) \
203
216
BEGIN_SIMPLE_STRICT_ARROW_UDF (T##function, bool (TOptional<char *>)) { \
204
217
Y_UNUSED (valueBuilder); \
205
218
if (args[0 ]) { \
@@ -493,24 +506,6 @@ namespace {
493
506
return AsciiToUpper (a) == AsciiToUpper (b);
494
507
}
495
508
496
- BEGIN_SIMPLE_STRICT_ARROW_UDF_OPTIONS (TAsciiContainsIgnoreCase, bool (TOptional<char *>, char *),
497
- builder.SetMinLangVer(NYql::MakeLangVersion(2025 , 2 )))
498
- {
499
- Y_UNUSED (valueBuilder);
500
- if (!args[0 ]) {
501
- return TUnboxedValuePod (false );
502
- }
503
-
504
- const TString haystack (args[0 ].AsStringRef ());
505
- const TString needle (args[1 ].AsStringRef ());
506
- if (haystack.empty ()) {
507
- return TUnboxedValuePod (needle.empty ());
508
- }
509
- const auto found = std::search (haystack.cbegin (), haystack.cend (),
510
- needle.cbegin (), needle.cend (), IgnoreCaseComparator);
511
- return TUnboxedValuePod (found != haystack.cend ());
512
- }
513
-
514
509
struct TAsciiContainsIgnoreCaseKernelExec
515
510
: public TBinaryKernelExec<TAsciiContainsIgnoreCaseKernelExec>
516
511
{
@@ -531,8 +526,37 @@ namespace {
531
526
}
532
527
};
533
528
529
+ TUnboxedValuePod AsciiContainsIgnoreCaseImpl (const TUnboxedValuePod* args) {
530
+ if (!args[0 ]) {
531
+ return TUnboxedValuePod (false );
532
+ }
533
+
534
+ const TString haystack (args[0 ].AsStringRef ());
535
+ const TString needle (args[1 ].AsStringRef ());
536
+ if (haystack.empty ()) {
537
+ return TUnboxedValuePod (needle.empty ());
538
+ }
539
+ const auto found = std::search (haystack.cbegin (), haystack.cend (),
540
+ needle.cbegin (), needle.cend (), IgnoreCaseComparator);
541
+ return TUnboxedValuePod (found != haystack.cend ());
542
+ }
543
+
544
+ BEGIN_SIMPLE_STRICT_ARROW_UDF_OPTIONS (TAsciiContainsIgnoreCase, bool (TOptional<char *>, char *),
545
+ builder.SetMinLangVer(NYql::MakeLangVersion(2025 , 2 )))
546
+ {
547
+ Y_UNUSED (valueBuilder);
548
+ return AsciiContainsIgnoreCaseImpl (args);
549
+ }
550
+
534
551
END_SIMPLE_ARROW_UDF (TAsciiContainsIgnoreCase, TAsciiContainsIgnoreCaseKernelExec::Do);
535
552
553
+ BEGIN_SIMPLE_STRICT_ARROW_UDF (T_yql_AsciiContainsIgnoreCase, bool (TOptional<char *>, char *))
554
+ {
555
+ Y_UNUSED (valueBuilder);
556
+ return AsciiContainsIgnoreCaseImpl (args);
557
+ }
558
+
559
+ END_SIMPLE_ARROW_UDF (T_yql_AsciiContainsIgnoreCase, TAsciiContainsIgnoreCaseKernelExec::Do);
536
560
537
561
BEGIN_SIMPLE_STRICT_ARROW_UDF (TReplaceAll, char *(TAutoMap<char *>, char *, char *)) {
538
562
if (TString result (args[0 ].AsStringRef ()); SubstGlobal (result, args[1 ].AsStringRef (), args[2 ].AsStringRef ()))
@@ -958,6 +982,7 @@ namespace {
958
982
}
959
983
960
984
#define STRING_REGISTER_UDF (udfName, ...) T##udfName,
985
+ #define STRING_OPT_REGISTER_UDF (udfName, ...) T_yql_##udfName,
961
986
962
987
STRING_UDF_MAP (STRING_UDF)
963
988
STRING_UNSAFE_UDF_MAP(STRING_UNSAFE_UDF)
@@ -984,6 +1009,7 @@ namespace {
984
1009
STROKA_FIND_UDF_MAP(STRING_REGISTER_UDF)
985
1010
STRING_TWO_ARGS_UDF_MAP_DEPRECATED_2025_02(STRING_REGISTER_UDF)
986
1011
STRING_ASCII_CMP_IGNORE_CASE_UDF_MAP(STRING_REGISTER_UDF)
1012
+ STRING_ASCII_CMP_IGNORE_CASE_UDF_MAP(STRING_OPT_REGISTER_UDF)
987
1013
IS_ASCII_UDF_MAP(STRING_REGISTER_UDF)
988
1014
STRING_STREAM_PAD_FORMATTER_UDF_MAP(STRING_REGISTER_UDF)
989
1015
STRING_STREAM_NUM_FORMATTER_UDF_MAP(STRING_REGISTER_UDF)
@@ -998,6 +1024,7 @@ namespace {
998
1024
TRemoveLast,
999
1025
TContains,
1000
1026
TAsciiContainsIgnoreCase,
1027
+ T_yql_AsciiContainsIgnoreCase,
1001
1028
TFind,
1002
1029
TReverseFind,
1003
1030
TSubstring,
0 commit comments