From bb36de52a68b125b2e181332731f769cf6829b63 Mon Sep 17 00:00:00 2001 From: lichaoyong Date: Sun, 29 Nov 2020 10:38:30 +0800 Subject: [PATCH] [Bug] Fix locate bug when start_pos larger than str len (#4975) ``` select locate('', 'abc', 10); ``` Return 0 not 10 --- be/src/exprs/string_functions.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/be/src/exprs/string_functions.cpp b/be/src/exprs/string_functions.cpp index a2b7123f87d477..262e7f0bb7f666 100644 --- a/be/src/exprs/string_functions.cpp +++ b/be/src/exprs/string_functions.cpp @@ -480,10 +480,15 @@ IntVal StringFunctions::locate_pos(FunctionContext* context, const StringVal& su return IntVal::null(); } if (substr.len == 0) { - if (str.len == 0 && start_pos.val > 1) { + if (start_pos.val <= 0) { return IntVal(0); + } else if (start_pos.val == 1) { + return IntVal(1); + } else if (start_pos.val > str.len) { + return IntVal(0); + } else { + return IntVal(start_pos.val); } - return IntVal(start_pos.val); } // Hive returns 0 for *start_pos <= 0, // but throws an exception for *start_pos > str->len.