@@ -108,11 +108,12 @@ impl ScalarUDFImpl for RegexpCountFunc {
108
108
Ok ( Int64 )
109
109
}
110
110
111
- fn invoke_batch (
111
+ fn invoke_with_args (
112
112
& self ,
113
- args : & [ ColumnarValue ] ,
114
- _number_rows : usize ,
113
+ args : datafusion_expr:: ScalarFunctionArgs ,
115
114
) -> Result < ColumnarValue > {
115
+ let args = & args. args ;
116
+
116
117
let len = args
117
118
. iter ( )
118
119
. fold ( Option :: < usize > :: None , |acc, arg| match arg {
@@ -618,6 +619,7 @@ fn count_matches(
618
619
mod tests {
619
620
use super :: * ;
620
621
use arrow:: array:: { GenericStringArray , StringViewArray } ;
622
+ use datafusion_expr:: ScalarFunctionArgs ;
621
623
622
624
#[ test]
623
625
fn test_regexp_count ( ) {
@@ -655,11 +657,11 @@ mod tests {
655
657
let v_sv = ScalarValue :: Utf8 ( Some ( v. to_string ( ) ) ) ;
656
658
let regex_sv = ScalarValue :: Utf8 ( Some ( regex. to_string ( ) ) ) ;
657
659
let expected = expected. get ( pos) . cloned ( ) ;
658
- # [ allow ( deprecated ) ] // TODO: migrate to invoke_with_args
659
- let re = RegexpCountFunc :: new ( ) . invoke_batch (
660
- & [ ColumnarValue :: Scalar ( v_sv ) , ColumnarValue :: Scalar ( regex_sv ) ] ,
661
- 1 ,
662
- ) ;
660
+ let re = RegexpCountFunc :: new ( ) . invoke_with_args ( ScalarFunctionArgs {
661
+ args : vec ! [ ColumnarValue :: Scalar ( v_sv ) , ColumnarValue :: Scalar ( regex_sv ) ] ,
662
+ number_rows : 2 ,
663
+ return_type : & Int64 ,
664
+ } ) ;
663
665
match re {
664
666
Ok ( ColumnarValue :: Scalar ( ScalarValue :: Int64 ( v) ) ) => {
665
667
assert_eq ! ( v, expected, "regexp_count scalar test failed" ) ;
@@ -670,11 +672,11 @@ mod tests {
670
672
// largeutf8
671
673
let v_sv = ScalarValue :: LargeUtf8 ( Some ( v. to_string ( ) ) ) ;
672
674
let regex_sv = ScalarValue :: LargeUtf8 ( Some ( regex. to_string ( ) ) ) ;
673
- # [ allow ( deprecated ) ] // TODO: migrate to invoke_with_args
674
- let re = RegexpCountFunc :: new ( ) . invoke_batch (
675
- & [ ColumnarValue :: Scalar ( v_sv ) , ColumnarValue :: Scalar ( regex_sv ) ] ,
676
- 1 ,
677
- ) ;
675
+ let re = RegexpCountFunc :: new ( ) . invoke_with_args ( ScalarFunctionArgs {
676
+ args : vec ! [ ColumnarValue :: Scalar ( v_sv ) , ColumnarValue :: Scalar ( regex_sv ) ] ,
677
+ number_rows : 2 ,
678
+ return_type : & Int64 ,
679
+ } ) ;
678
680
match re {
679
681
Ok ( ColumnarValue :: Scalar ( ScalarValue :: Int64 ( v) ) ) => {
680
682
assert_eq ! ( v, expected, "regexp_count scalar test failed" ) ;
@@ -685,11 +687,11 @@ mod tests {
685
687
// utf8view
686
688
let v_sv = ScalarValue :: Utf8View ( Some ( v. to_string ( ) ) ) ;
687
689
let regex_sv = ScalarValue :: Utf8View ( Some ( regex. to_string ( ) ) ) ;
688
- # [ allow ( deprecated ) ] // TODO: migrate to invoke_with_args
689
- let re = RegexpCountFunc :: new ( ) . invoke_batch (
690
- & [ ColumnarValue :: Scalar ( v_sv ) , ColumnarValue :: Scalar ( regex_sv ) ] ,
691
- 1 ,
692
- ) ;
690
+ let re = RegexpCountFunc :: new ( ) . invoke_with_args ( ScalarFunctionArgs {
691
+ args : vec ! [ ColumnarValue :: Scalar ( v_sv ) , ColumnarValue :: Scalar ( regex_sv ) ] ,
692
+ number_rows : 2 ,
693
+ return_type : & Int64 ,
694
+ } ) ;
693
695
match re {
694
696
Ok ( ColumnarValue :: Scalar ( ScalarValue :: Int64 ( v) ) ) => {
695
697
assert_eq ! ( v, expected, "regexp_count scalar test failed" ) ;
@@ -711,15 +713,15 @@ mod tests {
711
713
let regex_sv = ScalarValue :: Utf8 ( Some ( regex. to_string ( ) ) ) ;
712
714
let start_sv = ScalarValue :: Int64 ( Some ( start) ) ;
713
715
let expected = expected. get ( pos) . cloned ( ) ;
714
- #[ allow( deprecated) ] // TODO: migrate to invoke_with_args
715
- let re = RegexpCountFunc :: new ( ) . invoke_batch (
716
- & [
716
+ let re = RegexpCountFunc :: new ( ) . invoke_with_args ( ScalarFunctionArgs {
717
+ args : vec ! [
717
718
ColumnarValue :: Scalar ( v_sv) ,
718
719
ColumnarValue :: Scalar ( regex_sv) ,
719
720
ColumnarValue :: Scalar ( start_sv. clone( ) ) ,
720
721
] ,
721
- 1 ,
722
- ) ;
722
+ number_rows : 3 ,
723
+ return_type : & Int64 ,
724
+ } ) ;
723
725
match re {
724
726
Ok ( ColumnarValue :: Scalar ( ScalarValue :: Int64 ( v) ) ) => {
725
727
assert_eq ! ( v, expected, "regexp_count scalar test failed" ) ;
@@ -730,15 +732,15 @@ mod tests {
730
732
// largeutf8
731
733
let v_sv = ScalarValue :: LargeUtf8 ( Some ( v. to_string ( ) ) ) ;
732
734
let regex_sv = ScalarValue :: LargeUtf8 ( Some ( regex. to_string ( ) ) ) ;
733
- #[ allow( deprecated) ] // TODO: migrate to invoke_with_args
734
- let re = RegexpCountFunc :: new ( ) . invoke_batch (
735
- & [
735
+ let re = RegexpCountFunc :: new ( ) . invoke_with_args ( ScalarFunctionArgs {
736
+ args : vec ! [
736
737
ColumnarValue :: Scalar ( v_sv) ,
737
738
ColumnarValue :: Scalar ( regex_sv) ,
738
739
ColumnarValue :: Scalar ( start_sv. clone( ) ) ,
739
740
] ,
740
- 1 ,
741
- ) ;
741
+ number_rows : 3 ,
742
+ return_type : & Int64 ,
743
+ } ) ;
742
744
match re {
743
745
Ok ( ColumnarValue :: Scalar ( ScalarValue :: Int64 ( v) ) ) => {
744
746
assert_eq ! ( v, expected, "regexp_count scalar test failed" ) ;
@@ -749,15 +751,15 @@ mod tests {
749
751
// utf8view
750
752
let v_sv = ScalarValue :: Utf8View ( Some ( v. to_string ( ) ) ) ;
751
753
let regex_sv = ScalarValue :: Utf8View ( Some ( regex. to_string ( ) ) ) ;
752
- #[ allow( deprecated) ] // TODO: migrate to invoke_with_args
753
- let re = RegexpCountFunc :: new ( ) . invoke_batch (
754
- & [
754
+ let re = RegexpCountFunc :: new ( ) . invoke_with_args ( ScalarFunctionArgs {
755
+ args : vec ! [
755
756
ColumnarValue :: Scalar ( v_sv) ,
756
757
ColumnarValue :: Scalar ( regex_sv) ,
757
- ColumnarValue :: Scalar ( start_sv) ,
758
+ ColumnarValue :: Scalar ( start_sv. clone ( ) ) ,
758
759
] ,
759
- 1 ,
760
- ) ;
760
+ number_rows : 3 ,
761
+ return_type : & Int64 ,
762
+ } ) ;
761
763
match re {
762
764
Ok ( ColumnarValue :: Scalar ( ScalarValue :: Int64 ( v) ) ) => {
763
765
assert_eq ! ( v, expected, "regexp_count scalar test failed" ) ;
@@ -781,16 +783,16 @@ mod tests {
781
783
let start_sv = ScalarValue :: Int64 ( Some ( start) ) ;
782
784
let flags_sv = ScalarValue :: Utf8 ( Some ( flags. to_string ( ) ) ) ;
783
785
let expected = expected. get ( pos) . cloned ( ) ;
784
- #[ allow( deprecated) ] // TODO: migrate to invoke_with_args
785
- let re = RegexpCountFunc :: new ( ) . invoke_batch (
786
- & [
786
+ let re = RegexpCountFunc :: new ( ) . invoke_with_args ( ScalarFunctionArgs {
787
+ args : vec ! [
787
788
ColumnarValue :: Scalar ( v_sv) ,
788
789
ColumnarValue :: Scalar ( regex_sv) ,
789
790
ColumnarValue :: Scalar ( start_sv. clone( ) ) ,
790
791
ColumnarValue :: Scalar ( flags_sv. clone( ) ) ,
791
792
] ,
792
- 1 ,
793
- ) ;
793
+ number_rows : 4 ,
794
+ return_type : & Int64 ,
795
+ } ) ;
794
796
match re {
795
797
Ok ( ColumnarValue :: Scalar ( ScalarValue :: Int64 ( v) ) ) => {
796
798
assert_eq ! ( v, expected, "regexp_count scalar test failed" ) ;
@@ -802,16 +804,16 @@ mod tests {
802
804
let v_sv = ScalarValue :: LargeUtf8 ( Some ( v. to_string ( ) ) ) ;
803
805
let regex_sv = ScalarValue :: LargeUtf8 ( Some ( regex. to_string ( ) ) ) ;
804
806
let flags_sv = ScalarValue :: LargeUtf8 ( Some ( flags. to_string ( ) ) ) ;
805
- #[ allow( deprecated) ] // TODO: migrate to invoke_with_args
806
- let re = RegexpCountFunc :: new ( ) . invoke_batch (
807
- & [
807
+ let re = RegexpCountFunc :: new ( ) . invoke_with_args ( ScalarFunctionArgs {
808
+ args : vec ! [
808
809
ColumnarValue :: Scalar ( v_sv) ,
809
810
ColumnarValue :: Scalar ( regex_sv) ,
810
811
ColumnarValue :: Scalar ( start_sv. clone( ) ) ,
811
812
ColumnarValue :: Scalar ( flags_sv. clone( ) ) ,
812
813
] ,
813
- 1 ,
814
- ) ;
814
+ number_rows : 4 ,
815
+ return_type : & Int64 ,
816
+ } ) ;
815
817
match re {
816
818
Ok ( ColumnarValue :: Scalar ( ScalarValue :: Int64 ( v) ) ) => {
817
819
assert_eq ! ( v, expected, "regexp_count scalar test failed" ) ;
@@ -823,16 +825,16 @@ mod tests {
823
825
let v_sv = ScalarValue :: Utf8View ( Some ( v. to_string ( ) ) ) ;
824
826
let regex_sv = ScalarValue :: Utf8View ( Some ( regex. to_string ( ) ) ) ;
825
827
let flags_sv = ScalarValue :: Utf8View ( Some ( flags. to_string ( ) ) ) ;
826
- #[ allow( deprecated) ] // TODO: migrate to invoke_with_args
827
- let re = RegexpCountFunc :: new ( ) . invoke_batch (
828
- & [
828
+ let re = RegexpCountFunc :: new ( ) . invoke_with_args ( ScalarFunctionArgs {
829
+ args : vec ! [
829
830
ColumnarValue :: Scalar ( v_sv) ,
830
831
ColumnarValue :: Scalar ( regex_sv) ,
831
- ColumnarValue :: Scalar ( start_sv) ,
832
+ ColumnarValue :: Scalar ( start_sv. clone ( ) ) ,
832
833
ColumnarValue :: Scalar ( flags_sv. clone( ) ) ,
833
834
] ,
834
- 1 ,
835
- ) ;
835
+ number_rows : 4 ,
836
+ return_type : & Int64 ,
837
+ } ) ;
836
838
match re {
837
839
Ok ( ColumnarValue :: Scalar ( ScalarValue :: Int64 ( v) ) ) => {
838
840
assert_eq ! ( v, expected, "regexp_count scalar test failed" ) ;
@@ -905,16 +907,16 @@ mod tests {
905
907
let start_sv = ScalarValue :: Int64 ( Some ( start) ) ;
906
908
let flags_sv = ScalarValue :: Utf8 ( flags. get ( pos) . map ( |f| f. to_string ( ) ) ) ;
907
909
let expected = expected. get ( pos) . cloned ( ) ;
908
- #[ allow( deprecated) ] // TODO: migrate to invoke_with_args
909
- let re = RegexpCountFunc :: new ( ) . invoke_batch (
910
- & [
910
+ let re = RegexpCountFunc :: new ( ) . invoke_with_args ( ScalarFunctionArgs {
911
+ args : vec ! [
911
912
ColumnarValue :: Scalar ( v_sv) ,
912
913
ColumnarValue :: Scalar ( regex_sv) ,
913
914
ColumnarValue :: Scalar ( start_sv. clone( ) ) ,
914
915
ColumnarValue :: Scalar ( flags_sv. clone( ) ) ,
915
916
] ,
916
- 1 ,
917
- ) ;
917
+ number_rows : 4 ,
918
+ return_type : & Int64 ,
919
+ } ) ;
918
920
match re {
919
921
Ok ( ColumnarValue :: Scalar ( ScalarValue :: Int64 ( v) ) ) => {
920
922
assert_eq ! ( v, expected, "regexp_count scalar test failed" ) ;
@@ -926,16 +928,16 @@ mod tests {
926
928
let v_sv = ScalarValue :: LargeUtf8 ( Some ( v. to_string ( ) ) ) ;
927
929
let regex_sv = ScalarValue :: LargeUtf8 ( regex. get ( pos) . map ( |s| s. to_string ( ) ) ) ;
928
930
let flags_sv = ScalarValue :: LargeUtf8 ( flags. get ( pos) . map ( |f| f. to_string ( ) ) ) ;
929
- #[ allow( deprecated) ] // TODO: migrate to invoke_with_args
930
- let re = RegexpCountFunc :: new ( ) . invoke_batch (
931
- & [
931
+ let re = RegexpCountFunc :: new ( ) . invoke_with_args ( ScalarFunctionArgs {
932
+ args : vec ! [
932
933
ColumnarValue :: Scalar ( v_sv) ,
933
934
ColumnarValue :: Scalar ( regex_sv) ,
934
935
ColumnarValue :: Scalar ( start_sv. clone( ) ) ,
935
936
ColumnarValue :: Scalar ( flags_sv. clone( ) ) ,
936
937
] ,
937
- 1 ,
938
- ) ;
938
+ number_rows : 4 ,
939
+ return_type : & Int64 ,
940
+ } ) ;
939
941
match re {
940
942
Ok ( ColumnarValue :: Scalar ( ScalarValue :: Int64 ( v) ) ) => {
941
943
assert_eq ! ( v, expected, "regexp_count scalar test failed" ) ;
@@ -947,16 +949,16 @@ mod tests {
947
949
let v_sv = ScalarValue :: Utf8View ( Some ( v. to_string ( ) ) ) ;
948
950
let regex_sv = ScalarValue :: Utf8View ( regex. get ( pos) . map ( |s| s. to_string ( ) ) ) ;
949
951
let flags_sv = ScalarValue :: Utf8View ( flags. get ( pos) . map ( |f| f. to_string ( ) ) ) ;
950
- #[ allow( deprecated) ] // TODO: migrate to invoke_with_args
951
- let re = RegexpCountFunc :: new ( ) . invoke_batch (
952
- & [
952
+ let re = RegexpCountFunc :: new ( ) . invoke_with_args ( ScalarFunctionArgs {
953
+ args : vec ! [
953
954
ColumnarValue :: Scalar ( v_sv) ,
954
955
ColumnarValue :: Scalar ( regex_sv) ,
955
- ColumnarValue :: Scalar ( start_sv) ,
956
+ ColumnarValue :: Scalar ( start_sv. clone ( ) ) ,
956
957
ColumnarValue :: Scalar ( flags_sv. clone( ) ) ,
957
958
] ,
958
- 1 ,
959
- ) ;
959
+ number_rows : 4 ,
960
+ return_type : & Int64 ,
961
+ } ) ;
960
962
match re {
961
963
Ok ( ColumnarValue :: Scalar ( ScalarValue :: Int64 ( v) ) ) => {
962
964
assert_eq ! ( v, expected, "regexp_count scalar test failed" ) ;
0 commit comments