in datafusion/physical-expr/src/array_expressions.rs [2259:2457]
fn test_array_slice() {
// array_slice([1, 2, 3, 4], 1, 3) = [1, 2, 3]
let list_array = return_array().into_array(1);
let arr = array_slice(&[
list_array,
Arc::new(Int64Array::from_value(1, 1)),
Arc::new(Int64Array::from_value(3, 1)),
])
.expect("failed to initialize function array_slice");
let result =
as_list_array(&arr).expect("failed to initialize function array_slice");
assert_eq!(
&[1, 2, 3],
result
.value(0)
.as_any()
.downcast_ref::<Int64Array>()
.unwrap()
.values()
);
// array_slice([1, 2, 3, 4], 2, 2) = [2]
let list_array = return_array().into_array(1);
let arr = array_slice(&[
list_array,
Arc::new(Int64Array::from_value(2, 1)),
Arc::new(Int64Array::from_value(2, 1)),
])
.expect("failed to initialize function array_slice");
let result =
as_list_array(&arr).expect("failed to initialize function array_slice");
assert_eq!(
&[2],
result
.value(0)
.as_any()
.downcast_ref::<Int64Array>()
.unwrap()
.values()
);
// array_slice([1, 2, 3, 4], 0, 0) = []
let list_array = return_array().into_array(1);
let arr = array_slice(&[
list_array,
Arc::new(Int64Array::from_value(0, 1)),
Arc::new(Int64Array::from_value(0, 1)),
])
.expect("failed to initialize function array_slice");
let result =
as_list_array(&arr).expect("failed to initialize function array_slice");
assert!(result
.value(0)
.as_any()
.downcast_ref::<Int64Array>()
.unwrap()
.is_empty());
// array_slice([1, 2, 3, 4], 0, 6) = [1, 2, 3, 4]
let list_array = return_array().into_array(1);
let arr = array_slice(&[
list_array,
Arc::new(Int64Array::from_value(0, 1)),
Arc::new(Int64Array::from_value(6, 1)),
])
.expect("failed to initialize function array_slice");
let result =
as_list_array(&arr).expect("failed to initialize function array_slice");
assert_eq!(
&[1, 2, 3, 4],
result
.value(0)
.as_any()
.downcast_ref::<Int64Array>()
.unwrap()
.values()
);
// array_slice([1, 2, 3, 4], -2, -2) = []
let list_array = return_array().into_array(1);
let arr = array_slice(&[
list_array,
Arc::new(Int64Array::from_value(-2, 1)),
Arc::new(Int64Array::from_value(-2, 1)),
])
.expect("failed to initialize function array_slice");
let result =
as_list_array(&arr).expect("failed to initialize function array_slice");
assert!(result
.value(0)
.as_any()
.downcast_ref::<Int64Array>()
.unwrap()
.is_empty());
// array_slice([1, 2, 3, 4], -3, -1) = [2, 3]
let list_array = return_array().into_array(1);
let arr = array_slice(&[
list_array,
Arc::new(Int64Array::from_value(-3, 1)),
Arc::new(Int64Array::from_value(-1, 1)),
])
.expect("failed to initialize function array_slice");
let result =
as_list_array(&arr).expect("failed to initialize function array_slice");
assert_eq!(
&[2, 3],
result
.value(0)
.as_any()
.downcast_ref::<Int64Array>()
.unwrap()
.values()
);
// array_slice([1, 2, 3, 4], -3, 2) = [2]
let list_array = return_array().into_array(1);
let arr = array_slice(&[
list_array,
Arc::new(Int64Array::from_value(-3, 1)),
Arc::new(Int64Array::from_value(2, 1)),
])
.expect("failed to initialize function array_slice");
let result =
as_list_array(&arr).expect("failed to initialize function array_slice");
assert_eq!(
&[2],
result
.value(0)
.as_any()
.downcast_ref::<Int64Array>()
.unwrap()
.values()
);
// array_slice([1, 2, 3, 4], 2, 11) = [2, 3, 4]
let list_array = return_array().into_array(1);
let arr = array_slice(&[
list_array,
Arc::new(Int64Array::from_value(2, 1)),
Arc::new(Int64Array::from_value(11, 1)),
])
.expect("failed to initialize function array_slice");
let result =
as_list_array(&arr).expect("failed to initialize function array_slice");
assert_eq!(
&[2, 3, 4],
result
.value(0)
.as_any()
.downcast_ref::<Int64Array>()
.unwrap()
.values()
);
// array_slice([1, 2, 3, 4], 3, 1) = []
let list_array = return_array().into_array(1);
let arr = array_slice(&[
list_array,
Arc::new(Int64Array::from_value(3, 1)),
Arc::new(Int64Array::from_value(1, 1)),
])
.expect("failed to initialize function array_slice");
let result =
as_list_array(&arr).expect("failed to initialize function array_slice");
assert!(result
.value(0)
.as_any()
.downcast_ref::<Int64Array>()
.unwrap()
.is_empty());
// array_slice([1, 2, 3, 4], -7, -2) = NULL
let list_array = return_array().into_array(1);
let arr = array_slice(&[
list_array,
Arc::new(Int64Array::from_value(-7, 1)),
Arc::new(Int64Array::from_value(-2, 1)),
])
.expect("failed to initialize function array_slice");
let result =
as_list_array(&arr).expect("failed to initialize function array_slice");
assert!(result
.value(0)
.as_any()
.downcast_ref::<Int64Array>()
.unwrap()
.is_null(0));
}