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

alamb pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/datafusion.git


The following commit(s) were added to refs/heads/main by this push:
     new ad0c21f766 fix: Fixed error handling for `generate_series/range` 
(#16391)
ad0c21f766 is described below

commit ad0c21f7667b8b560b53f9ba96d2a852a64aa703
Author: Jonathan Chen <chenleejonat...@gmail.com>
AuthorDate: Mon Jun 16 17:05:42 2025 -0400

    fix: Fixed error handling for `generate_series/range` (#16391)
    
    * Remove `null_equals_null`
    
    * fix: Fixed error handling for `generate_series`/`range`
    
    * add null
    
    * fixes
    
    * tweaks
    
    * fix
    
    * fix
---
 datafusion/functions-table/src/generate_series.rs  | 16 ++++++++++-----
 .../sqllogictest/test_files/table_functions.slt    | 23 ++++++++++++----------
 2 files changed, 24 insertions(+), 15 deletions(-)

diff --git a/datafusion/functions-table/src/generate_series.rs 
b/datafusion/functions-table/src/generate_series.rs
index ffb93cf59b..c875874c56 100644
--- a/datafusion/functions-table/src/generate_series.rs
+++ b/datafusion/functions-table/src/generate_series.rs
@@ -197,11 +197,17 @@ impl TableFunctionImpl for GenerateSeriesFuncImpl {
         }
 
         let mut normalize_args = Vec::new();
-        for expr in exprs {
+        for (expr_index, expr) in exprs.iter().enumerate() {
             match expr {
                 Expr::Literal(ScalarValue::Null, _) => {}
                 Expr::Literal(ScalarValue::Int64(Some(n)), _) => 
normalize_args.push(*n),
-                _ => return plan_err!("First argument must be an integer 
literal"),
+                other => {
+                    return plan_err!(
+                        "Argument #{} must be an INTEGER or NULL, got {:?}",
+                        expr_index + 1,
+                        other
+                    )
+                }
             };
         }
 
@@ -232,15 +238,15 @@ impl TableFunctionImpl for GenerateSeriesFuncImpl {
         };
 
         if start > end && step > 0 {
-            return plan_err!("start is bigger than end, but increment is 
positive: cannot generate infinite series");
+            return plan_err!("Start is bigger than end, but increment is 
positive: Cannot generate infinite series");
         }
 
         if start < end && step < 0 {
-            return plan_err!("start is smaller than end, but increment is 
negative: cannot generate infinite series");
+            return plan_err!("Start is smaller than end, but increment is 
negative: Cannot generate infinite series");
         }
 
         if step == 0 {
-            return plan_err!("step cannot be zero");
+            return plan_err!("Step cannot be zero");
         }
 
         Ok(Arc::new(GenerateSeriesTable {
diff --git a/datafusion/sqllogictest/test_files/table_functions.slt 
b/datafusion/sqllogictest/test_files/table_functions.slt
index ff14dad765..4cc8084811 100644
--- a/datafusion/sqllogictest/test_files/table_functions.slt
+++ b/datafusion/sqllogictest/test_files/table_functions.slt
@@ -160,16 +160,16 @@ physical_plan LazyMemoryExec: partitions=1, 
batch_generators=[generate_series: s
 # Test generate_series with invalid arguments
 #
 
-query error DataFusion error: Error during planning: start is bigger than end, 
but increment is positive: cannot generate infinite series
+query error DataFusion error: Error during planning: Start is bigger than end, 
but increment is positive: Cannot generate infinite series
 SELECT * FROM generate_series(5, 1)
 
-query error DataFusion error: Error during planning: start is smaller than 
end, but increment is negative: cannot generate infinite series
+query error DataFusion error: Error during planning: Start is smaller than 
end, but increment is negative: Cannot generate infinite series
 SELECT * FROM generate_series(-6, 6, -1)
 
-query error DataFusion error: Error during planning: step cannot be zero
+query error DataFusion error: Error during planning: Step cannot be zero
 SELECT * FROM generate_series(-6, 6, 0)
 
-query error DataFusion error: Error during planning: start is bigger than end, 
but increment is positive: cannot generate infinite series
+query error DataFusion error: Error during planning: Start is bigger than end, 
but increment is positive: Cannot generate infinite series
 SELECT * FROM generate_series(6, -6, 1)
 
 
@@ -177,7 +177,7 @@ statement error DataFusion error: Error during planning: 
generate_series functio
 SELECT * FROM generate_series(1, 2, 3, 4)
 
 
-statement error DataFusion error: Error during planning: First argument must 
be an integer literal
+statement error DataFusion error: Error during planning: Argument #1 must be 
an INTEGER or NULL, got Literal\(Utf8\("foo"\), None\)
 SELECT * FROM generate_series('foo', 'bar')
 
 # UDF and UDTF `generate_series` can be used simultaneously
@@ -283,16 +283,16 @@ physical_plan LazyMemoryExec: partitions=1, 
batch_generators=[range: start=1, en
 # Test range with invalid arguments
 #
 
-query error DataFusion error: Error during planning: start is bigger than end, 
but increment is positive: cannot generate infinite series
+query error DataFusion error: Error during planning: Start is bigger than end, 
but increment is positive: Cannot generate infinite series
 SELECT * FROM range(5, 1)
 
-query error DataFusion error: Error during planning: start is smaller than 
end, but increment is negative: cannot generate infinite series
+query error DataFusion error: Error during planning: Start is smaller than 
end, but increment is negative: Cannot generate infinite series
 SELECT * FROM range(-6, 6, -1)
 
-query error DataFusion error: Error during planning: step cannot be zero
+query error DataFusion error: Error during planning: Step cannot be zero
 SELECT * FROM range(-6, 6, 0)
 
-query error DataFusion error: Error during planning: start is bigger than end, 
but increment is positive: cannot generate infinite series
+query error DataFusion error: Error during planning: Start is bigger than end, 
but increment is positive: Cannot generate infinite series
 SELECT * FROM range(6, -6, 1)
 
 
@@ -300,9 +300,12 @@ statement error DataFusion error: Error during planning: 
range function requires
 SELECT * FROM range(1, 2, 3, 4)
 
 
-statement error DataFusion error: Error during planning: First argument must 
be an integer literal
+statement error DataFusion error: Error during planning: Argument #1 must be 
an INTEGER or NULL, got Literal\(Utf8\("foo"\), None\)
 SELECT * FROM range('foo', 'bar')
 
+statement error DataFusion error: Error during planning: Argument #2 must be 
an INTEGER or NULL, got Literal\(Utf8\("bar"\), None\)
+SELECT * FROM range(1, 'bar')
+
 # UDF and UDTF `range` can be used simultaneously
 query ? rowsort
 SELECT range(1, t1.end) FROM range(3, 5) as t1(end)


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

Reply via email to