|
16 | 16 | // under the License. |
17 | 17 |
|
18 | 18 | //! Math expressions |
19 | | -
|
20 | 19 | use super::{ColumnarValue, ScalarValue}; |
21 | 20 | use crate::error::{DataFusionError, Result}; |
22 | 21 | use arrow::array::{make_array, Array, ArrayData, Float32Array, Float64Array}; |
23 | 22 | use arrow::buffer::Buffer; |
24 | 23 | use arrow::datatypes::{DataType, ToByteSlice}; |
25 | 24 | use rand::{thread_rng, Rng}; |
| 25 | +use std::sync::Arc; |
26 | 26 |
|
27 | 27 | macro_rules! compute_op { |
28 | 28 | ($ARRAY:expr, $FUNC:ident, $TYPE:ident) => {{ |
@@ -118,10 +118,15 @@ math_unary_function!("log2", log2); |
118 | 118 | math_unary_function!("log10", log10); |
119 | 119 |
|
120 | 120 | /// random SQL function |
121 | | -pub fn random(_: &[ColumnarValue]) -> Result<ColumnarValue> { |
| 121 | +pub fn random(args: &[ColumnarValue]) -> Result<ColumnarValue> { |
| 122 | + let len = match &args[0] { |
| 123 | + ColumnarValue::Array(array) => array.len(), |
| 124 | + _ => return Err(DataFusionError::Internal("d".to_string())), |
| 125 | + }; |
122 | 126 | let mut rng = thread_rng(); |
123 | | - let value: f64 = rng.gen_range(0.0..1.0); |
124 | | - let scalar = ScalarValue::Float64(Some(value)); |
125 | | - let column_value = ColumnarValue::Scalar(scalar); |
126 | | - Ok(column_value) |
| 127 | + let mut array = Vec::with_capacity(len); |
| 128 | + for _ in 0..len { |
| 129 | + array.push(Some(rng.gen_range(0.0..1.0))) |
| 130 | + } |
| 131 | + Ok(ColumnarValue::Array(Arc::new(Float64Array::from(array)))) |
127 | 132 | } |
0 commit comments