This is an automated email from the ASF dual-hosted git repository.

dataroaring pushed a commit to branch branch-3.0
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-3.0 by this push:
     new baff13ef466 branch-3.0: [fix](Nereids) fix substring with only one 
parameter #48957 (#49029)
baff13ef466 is described below

commit baff13ef4667e03c43cf5652a7c2573bc50d1776
Author: github-actions[bot] 
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Sat Mar 15 10:11:00 2025 +0800

    branch-3.0: [fix](Nereids) fix substring with only one parameter #48957 
(#49029)
    
    Cherry-picked from #48957
    
    Co-authored-by: LiBinfeng <libinf...@selectdb.com>
---
 .../trees/expressions/functions/executable/StringArithmetic.java   | 7 ++++---
 .../fold_constant/fold_constant_string_arithmatic.groovy           | 6 ++++++
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/StringArithmetic.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/StringArithmetic.java
index 18ec333882c..799bbb7585c 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/StringArithmetic.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/executable/StringArithmetic.java
@@ -83,7 +83,7 @@ public class StringArithmetic {
         if (stringLength == 0) {
             return "";
         }
-        int leftIndex = 0;
+        long leftIndex = 0;
         if (second < (- stringLength)) {
             return "";
         } else if (second < 0) {
@@ -93,7 +93,7 @@ public class StringArithmetic {
         } else {
             return "";
         }
-        int rightIndex = 0;
+        long rightIndex = 0;
         if (third <= 0) {
             return "";
         } else if ((third + leftIndex) > stringLength) {
@@ -101,7 +101,8 @@ public class StringArithmetic {
         } else {
             rightIndex = third + leftIndex;
         }
-        return first.substring(leftIndex, rightIndex);
+        // left index and right index are in integer range because of 
definition, so we can safely cast it to int
+        return first.substring((int) leftIndex, (int) rightIndex);
     }
 
     /**
diff --git 
a/regression-test/suites/nereids_p0/expression/fold_constant/fold_constant_string_arithmatic.groovy
 
b/regression-test/suites/nereids_p0/expression/fold_constant/fold_constant_string_arithmatic.groovy
index c046a0a0f8d..74e5b60bff6 100644
--- 
a/regression-test/suites/nereids_p0/expression/fold_constant/fold_constant_string_arithmatic.groovy
+++ 
b/regression-test/suites/nereids_p0/expression/fold_constant/fold_constant_string_arithmatic.groovy
@@ -660,6 +660,9 @@ suite("fold_constant_string_arithmatic") {
     testFoldConst("select substr('abcdef',3,-1)")
     testFoldConst("select substr('',3,-1)")
     testFoldConst("select substr('abcdef',3,10)")
+    testFoldConst("select substr('abcdef',-3)")
+    testFoldConst("select substr('abcdef',3)")
+    testFoldConst("select substr('',3)")
 
     // substring
     testFoldConst("select substring('1', 1, 1)")
@@ -686,6 +689,9 @@ suite("fold_constant_string_arithmatic") {
     testFoldConst("select substring('Hello World', 1, 5)")
     testFoldConst("select substring('', 1, 5)")
     testFoldConst("select substring('Hello World', 1, 50)")
+    testFoldConst("select substring('abcdef',-3)")
+    testFoldConst("select substring('abcdef',3)")
+    testFoldConst("select substring('',3)")
 
     // substring_index
     testFoldConst("select substring_index('a,b,c', ',', 2)")


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to