(
input_list: ArrayRef,
expected_list: GenericListArray<i32>,
element_to_remove: ScalarValue,
n: i64,
)
| 735 | } |
| 736 | |
| 737 | fn assert_array_remove_n( |
| 738 | input_list: ArrayRef, |
| 739 | expected_list: GenericListArray<i32>, |
| 740 | element_to_remove: ScalarValue, |
| 741 | n: i64, |
| 742 | ) { |
| 743 | assert_eq!(input_list.data_type(), expected_list.data_type()); |
| 744 | assert_eq!(expected_list.value_type(), element_to_remove.data_type()); |
| 745 | let input_list_len = input_list.len(); |
| 746 | let input_list_data_type = input_list.data_type().clone(); |
| 747 | |
| 748 | let count_scalar = ScalarValue::Int64(Some(n)); |
| 749 | |
| 750 | let udf = ArrayRemoveN::new(); |
| 751 | let args_fields = vec![ |
| 752 | Arc::new(Field::new("num", input_list.data_type().clone(), false)), |
| 753 | Arc::new(Field::new( |
| 754 | "el", |
| 755 | element_to_remove.data_type(), |
| 756 | element_to_remove.is_null(), |
| 757 | )), |
| 758 | Arc::new(Field::new("count", DataType::Int64, false)), |
| 759 | ]; |
| 760 | let scalar_args = vec![None, Some(&element_to_remove), Some(&count_scalar)]; |
| 761 | |
| 762 | let return_field = udf |
| 763 | .return_field_from_args(ReturnFieldArgs { |
| 764 | arg_fields: &args_fields, |
| 765 | scalar_arguments: &scalar_args, |
| 766 | }) |
| 767 | .unwrap(); |
| 768 | |
| 769 | let result = udf |
| 770 | .invoke_with_args(ScalarFunctionArgs { |
| 771 | args: vec![ |
| 772 | ColumnarValue::Array(input_list), |
| 773 | ColumnarValue::Scalar(element_to_remove), |
| 774 | ColumnarValue::Scalar(count_scalar), |
| 775 | ], |
| 776 | arg_fields: args_fields, |
| 777 | number_rows: input_list_len, |
| 778 | return_field, |
| 779 | config_options: Arc::new(Default::default()), |
| 780 | }) |
| 781 | .unwrap(); |
| 782 | |
| 783 | assert_eq!(result.data_type(), input_list_data_type); |
| 784 | match result { |
| 785 | ColumnarValue::Array(array) => { |
| 786 | let result_list = array.as_list::<i32>(); |
| 787 | assert_eq!(result_list, &expected_list); |
| 788 | } |
| 789 | _ => panic!("Expected ColumnarValue::Array"), |
| 790 | } |
| 791 | } |
| 792 | |
| 793 | #[test] |
| 794 | fn test_array_remove_all_non_nullable() { |
searching dependent graphs…