@@ -123,21 +123,21 @@ There is a an older, more concise, but also more limited API [`create_udf`] avai
123123use std :: sync :: Arc ;
124124
125125use datafusion :: arrow :: array :: {ArrayRef , Int64Array };
126- use datafusion :: common :: Result ;
127126use datafusion :: common :: cast :: as_int64_array;
128- use datafusion :: physical_plan :: functions :: columnar_values_to_array;
127+ use datafusion :: common :: Result ;
128+ use datafusion :: logical_expr :: ColumnarValue ;
129129
130- pub fn add_one (args : & [ColumnarValue ]) -> Result <ArrayRef > {
130+ pub fn add_one (args : & [ColumnarValue ]) -> Result <ColumnarValue > {
131131 // Error handling omitted for brevity
132- let args = columnar_values_to_array (args )? ;
132+ let args = ColumnarValue :: values_to_arrays (args )? ;
133133 let i64s = as_int64_array (& args [0 ])? ;
134134
135135 let new_array = i64s
136136 . iter ()
137137 . map (| array_elem | array_elem . map (| value | value + 1 ))
138138 . collect :: <Int64Array >();
139139
140- Ok (Arc :: new (new_array ))
140+ Ok (ColumnarValue :: from ( Arc :: new (new_array ) as ArrayRef ))
141141}
142142```
143143
@@ -146,10 +146,11 @@ This "works" in isolation, i.e. if you have a slice of `ArrayRef`s, you can call
146146
147147``` rust
148148let input = vec! [Some (1 ), None , Some (3 )];
149- let input = Arc :: new (Int64Array :: from (input )) as ArrayRef ;
149+ let input = ColumnarValue :: from ( Arc :: new (Int64Array :: from (input )) as ArrayRef ) ;
150150
151- let result = add_one ( & [input ]). unwrap ();
152- let result = result . as_any (). downcast_ref :: <Int64Array >(). unwrap ();
151+ let result = add_one (& [input ]). unwrap ();
152+ let binding = result . into_array (1 ). unwrap ();
153+ let result = binding . as_any (). downcast_ref :: <Int64Array >(). unwrap ();
153154
154155assert_eq! (result , & Int64Array :: from (vec! [Some (2 ), None , Some (4 )]));
155156```
@@ -169,11 +170,11 @@ use datafusion::arrow::datatypes::DataType;
169170use std :: sync :: Arc ;
170171
171172let udf = create_udf (
172- " add_one" ,
173- vec! [DataType :: Int64 ],
174- Arc :: new ( DataType :: Int64 ) ,
175- Volatility :: Immutable ,
176- Arc :: new (add_one ),
173+ " add_one" ,
174+ vec! [DataType :: Int64 ],
175+ DataType :: Int64 ,
176+ Volatility :: Immutable ,
177+ Arc :: new (add_one ),
177178);
178179```
179180
0 commit comments