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

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


The following commit(s) were added to refs/heads/branch-2.1 by this push:
     new babb98f10cb [branch-2.1](function) fix wrong length check of function 
array_range (#49993) (#50605)
babb98f10cb is described below

commit babb98f10cba0867a7ae786bb290262ab49a5c0d
Author: zclllyybb <[email protected]>
AuthorDate: Tue May 6 18:57:03 2025 +0800

    [branch-2.1](function) fix wrong length check of function array_range 
(#49993) (#50605)
    
    pick https://github.com/apache/doris/pull/49993
---
 .../vec/functions/array/function_array_range.cpp   |   4 +--
 .../nereids_function_p0/scalar_function/Array.out  | Bin 730458 -> 733828 bytes
 .../scalar_function/Array.groovy                   |  37 +++++++++------------
 .../array_functions/test_array_functions.groovy    |  22 ------------
 4 files changed, 18 insertions(+), 45 deletions(-)

diff --git a/be/src/vec/functions/array/function_array_range.cpp 
b/be/src/vec/functions/array/function_array_range.cpp
index 1a5dd08aaac..888d7adc5f9 100644
--- a/be/src/vec/functions/array/function_array_range.cpp
+++ b/be/src/vec/functions/array/function_array_range.cpp
@@ -197,8 +197,8 @@ private:
                     continue;
                 } else {
                     if (idx < end_row && step_row > 0 &&
-                        ((static_cast<__int128_t>(end_row) - 
static_cast<__int128_t>(step_row) -
-                          1) / static_cast<__int128_t>(step_row) +
+                        ((static_cast<__int128_t>(end_row) - 
static_cast<__int128_t>(idx) - 1) /
+                                 static_cast<__int128_t>(step_row) +
                          1) > max_array_size_as_field) {
                         return Status::InvalidArgument("Array size exceeds the 
limit {}",
                                                        
max_array_size_as_field);
diff --git a/regression-test/data/nereids_function_p0/scalar_function/Array.out 
b/regression-test/data/nereids_function_p0/scalar_function/Array.out
index ebabba9b7da..2141d61c3e3 100644
Binary files 
a/regression-test/data/nereids_function_p0/scalar_function/Array.out and 
b/regression-test/data/nereids_function_p0/scalar_function/Array.out differ
diff --git 
a/regression-test/suites/nereids_function_p0/scalar_function/Array.groovy 
b/regression-test/suites/nereids_function_p0/scalar_function/Array.groovy
index b2a1d4e68fa..d50685a26aa 100644
--- a/regression-test/suites/nereids_function_p0/scalar_function/Array.groovy
+++ b/regression-test/suites/nereids_function_p0/scalar_function/Array.groovy
@@ -1282,32 +1282,27 @@ suite("nereids_scalar_fn_Array") {
     qt_sequence_datetime_minute """select sequence(kdtmv2s1, 
date_add(kdtmv2s1, interval kint+1 minute), interval kint minute) from fn_test 
order by kdtmv2s1;"""
     qt_sequence_datetime_second """select sequence(kdtmv2s1, 
date_add(kdtmv2s1, interval kint second), interval kint-1 second) from fn_test 
order by kdtmv2s1;"""
 
-    // with array empty
-    qt_array_empty_fe """select array()"""
-    // make large error size
-    test {
-        sql "select array_size(sequence(kdtmv2s1, date_add(kdtmv2s1, interval 
kint+1000 year), interval kint hour)) from fn_test order by kdtmv2s1;"
-        check{result, exception, startTime, endTime ->
-            assertTrue(exception != null)
-            logger.info(exception.message)
-        }
-    }
+    // max_array_size_as_field = 1000000;
+    sql "select count(sequence(kdtmv2s1, date_add(kdtmv2s1, interval kint+1000 
year))) from fn_test"
+    sql "select count(sequence(kdtmv2s1, date_add(kdtmv2s1, interval kint+1000 
year), INTERVAL 5 YEAR)) from fn_test"
+    order_qt_sql_sequence_dt_3args "select sequence(kdtmv2s1, 
date_add(kdtmv2s1, interval kint+1000 year), INTERVAL 125 YEAR) from fn_test"
+    sql "select count(sequence(kint, kint+100000)) from fn_test"
+    sql "select count(sequence(kint, kint+100000, 10000)) from fn_test"
+    order_qt_sql_sequence_int_3args "select sequence(kint, kint+100000, 10000) 
from fn_test"
 
     test {
-        sql "select array_size(sequence(kdtmv2s1, date_add(kdtmv2s1, interval 
kint+10000 month), interval kint hour)) from fn_test order by kdtmv2s1;"
-        check{result, exception, startTime, endTime ->
-            assertTrue(exception != null)
-            logger.info(exception.message)
-        }
+        sql "select sequence(kdtmv2s1, date_add(kdtmv2s1, interval 5000 year), 
interval 1 second) from fn_test"
+        exception "Array size exceeds the limit 1000000"
     }
-
+    sql "select sequence(kdtmv2s1, date_add(kdtmv2s1, interval 5000 year), 
interval 500 year) from fn_test"
     test {
-        sql "select array_size(sequence(kdtmv2s1, date_add(kdtmv2s1, interval 
kint+1000001 day), interval kint day)) from fn_test order by kdtmv2s1;"
-        check{result, exception, startTime, endTime ->
-            assertTrue(exception != null)
-            logger.info(exception.message)
-        }
+        sql "select count(sequence(kint, kint+10000000)) from fn_test"
+        exception "Array size exceeds the limit 1000000"
     }
+    sql "select count(sequence(kint, kint+10000000, 50)) from fn_test"
+
+    // with array empty
+    qt_array_empty_fe """select array()"""
 
     sql """ set enable_fold_constant_by_be=true; """
     qt_array_empty_fe """select array()"""
diff --git 
a/regression-test/suites/query_p0/sql_functions/array_functions/test_array_functions.groovy
 
b/regression-test/suites/query_p0/sql_functions/array_functions/test_array_functions.groovy
index d5802fa4aef..b29b25dc0d4 100644
--- 
a/regression-test/suites/query_p0/sql_functions/array_functions/test_array_functions.groovy
+++ 
b/regression-test/suites/query_p0/sql_functions/array_functions/test_array_functions.groovy
@@ -422,26 +422,4 @@ suite("test_array_functions") {
     qt_const_select "select sequence(cast('2022-35-38 12:00:10' as 
datetimev2(0)), cast('2022-05-18 22:00:30' as datetimev2(0))); "
     qt_const_select "select sequence(1, 10, 0); "
     qt_const_select "select sequence(cast('2022-05-15 12:00:00' as 
datetimev2(0)), cast('2022-05-17 12:00:00' as datetimev2(0)), interval 0 day); "
-    // test large size of array
-    test {
-        sql """ select sequence(cast('2022-05-01 12:00:00' as datetimev2(0)), 
cast('2022-05-17 12:00:00' as datetimev2(0)), interval 10000000000 week); """
-        check{result, exception, startTime, endTime ->
-            assertTrue(exception != null)
-            logger.info(exception.message)
-        }        
-    }
-    test {
-        sql """ select sequence(1, 10000000000); """
-        check{result, exception, startTime, endTime ->
-            assertTrue(exception != null)
-            logger.info(exception.message)
-        }
-    }
-    test {
-        sql """ select sequence(1, 10000000000, 2); """
-        check{result, exception, startTime, endTime ->
-            assertTrue(exception != null)
-            logger.info(exception.message)
-        }
-    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to