@@ -35,88 +35,53 @@ pub fn apply(
35
35
rhs : & ColumnarValue ,
36
36
f : impl Fn ( & dyn Datum , & dyn Datum ) -> Result < ArrayRef , ArrowError > ,
37
37
) -> Result < ColumnarValue > {
38
+ println ! ( "==> apply] lhs={:?}, rhs={:?}" , lhs, rhs) ;
39
+
38
40
match ( & lhs, & rhs) {
39
41
( ColumnarValue :: Array ( left) , ColumnarValue :: Array ( right) ) => {
42
+ println ! (
43
+ "==> apply array vs array => left_dt={:?}, right_dt={:?}" ,
44
+ & lhs. data_type( ) ,
45
+ & rhs. data_type( )
46
+ ) ;
40
47
Ok ( ColumnarValue :: Array ( f ( & left. as_ref ( ) , & right. as_ref ( ) ) ?) )
41
48
}
42
- ( ColumnarValue :: Scalar ( left) , ColumnarValue :: Array ( right) ) => Ok (
43
- ColumnarValue :: Array ( f ( & left. to_scalar ( ) ?, & right. as_ref ( ) ) ?) ,
44
- ) ,
45
- ( ColumnarValue :: Array ( left) , ColumnarValue :: Scalar ( right) ) => Ok (
46
- ColumnarValue :: Array ( f ( & left. as_ref ( ) , & right. to_scalar ( ) ?) ?) ,
47
- ) ,
49
+ ( ColumnarValue :: Scalar ( left) , ColumnarValue :: Array ( right) ) => {
50
+ println ! ( "==> apply scalar vs array" ) ;
51
+ Ok ( ColumnarValue :: Array ( f (
52
+ & left. to_scalar ( ) ?,
53
+ & right. as_ref ( ) ,
54
+ ) ?) )
55
+ }
56
+ ( ColumnarValue :: Array ( left) , ColumnarValue :: Scalar ( right) ) => {
57
+ println ! ( "==> apply array vs scalar" ) ;
58
+ Ok ( ColumnarValue :: Array ( f (
59
+ & left. as_ref ( ) ,
60
+ & right. to_scalar ( ) ?,
61
+ ) ?) )
62
+ }
48
63
( ColumnarValue :: Scalar ( left) , ColumnarValue :: Scalar ( right) ) => {
64
+ println ! ( "==> apply scalar vs scalar" ) ;
49
65
let array = f ( & left. to_scalar ( ) ?, & right. to_scalar ( ) ?) ?;
50
66
let scalar = ScalarValue :: try_from_array ( array. as_ref ( ) , 0 ) ?;
51
67
Ok ( ColumnarValue :: Scalar ( scalar) )
52
68
}
53
69
}
54
70
}
55
71
56
- /// Applies a binary [`Datum`] comparison kernel `f` to `lhs` and `rhs`
57
72
pub fn apply_cmp (
58
73
lhs : & ColumnarValue ,
59
74
rhs : & ColumnarValue ,
60
75
f : impl Fn ( & dyn Datum , & dyn Datum ) -> Result < BooleanArray , ArrowError > ,
61
76
) -> Result < ColumnarValue > {
62
77
println ! (
63
- "==> apply_cmp: lhs type={:?}, rhs type={:?}" ,
78
+ "==> apply_cmp: lhs={:?}, rhs={:?}, lhs_dt={:?}, rhs_dt={:?}" ,
79
+ lhs, // Prints the full ColumnarValue
80
+ rhs, // This might show you e.g. 'DictionaryArray(...)' or 'Scalar(...)'
64
81
lhs. data_type( ) ,
65
82
rhs. data_type( )
66
83
) ;
67
84
68
- match ( lhs, rhs) {
69
- // Array vs Array
70
- ( ColumnarValue :: Array ( left_arr) , ColumnarValue :: Array ( right_arr) ) => {
71
- println ! (
72
- "==> apply_cmp: array vs array => lhs.dt={:?}, rhs.dt={:?}" ,
73
- left_arr. data_type( ) ,
74
- right_arr. data_type( )
75
- ) ;
76
- let res = f ( & * * left_arr, & * * right_arr) ?;
77
- Ok ( ColumnarValue :: Array ( Arc :: new ( res) ) )
78
- }
79
-
80
- // Scalar vs Array
81
- ( ColumnarValue :: Scalar ( left_scalar) , ColumnarValue :: Array ( right_arr) ) => {
82
- println ! (
83
- "==> apply_cmp: scalar vs array => lhs.scalar={:?}, rhs.dt={:?}" ,
84
- left_scalar,
85
- right_arr. data_type( )
86
- ) ;
87
- let left_datum = left_scalar. as_ref ( ) ;
88
- let res = right_arr
89
- . iter ( )
90
- . map ( |r| f ( left_datum, & r) )
91
- . collect :: < Result < BooleanArray , _ > > ( ) ?;
92
- Ok ( ColumnarValue :: Array ( Arc :: new ( res) ) )
93
- }
94
-
95
- // Array vs Scalar
96
- ( ColumnarValue :: Array ( left_arr) , ColumnarValue :: Scalar ( right_scalar) ) => {
97
- println ! (
98
- "==> apply_cmp: array vs scalar => lhs.dt={:?}, rhs.scalar={:?}" ,
99
- left_arr. data_type( ) ,
100
- right_scalar
101
- ) ;
102
- let right_datum = right_scalar. as_ref ( ) ;
103
- let res = left_arr
104
- . iter ( )
105
- . map ( |l| f ( & l, right_datum) )
106
- . collect :: < Result < BooleanArray , _ > > ( ) ?;
107
- Ok ( ColumnarValue :: Array ( Arc :: new ( res) ) )
108
- }
109
-
110
- // Scalar vs Scalar
111
- ( ColumnarValue :: Scalar ( left_scalar) , ColumnarValue :: Scalar ( right_scalar) ) => {
112
- println ! (
113
- "==> apply_cmp: scalar vs scalar => lhs.scalar={:?}, rhs.scalar={:?}" ,
114
- left_scalar, right_scalar
115
- ) ;
116
- let res = f ( left_scalar. as_ref ( ) , right_scalar. as_ref ( ) ) ?;
117
- Ok ( ColumnarValue :: Scalar ( Arc :: new ( res) ) )
118
- }
119
- }
120
85
apply ( lhs, rhs, |l, r| Ok ( Arc :: new ( f ( l, r) ?) ) )
121
86
}
122
87
@@ -127,6 +92,14 @@ pub fn apply_cmp_for_nested(
127
92
lhs : & ColumnarValue ,
128
93
rhs : & ColumnarValue ,
129
94
) -> Result < ColumnarValue > {
95
+ println ! (
96
+ "==> apply_cmp_for_nested: op={:?}, lhs={:?}, rhs={:?}, lhs_dt={:?}, rhs_dt={:?}" ,
97
+ op,
98
+ lhs,
99
+ rhs,
100
+ lhs. data_type( ) ,
101
+ rhs. data_type( )
102
+ ) ;
130
103
if matches ! (
131
104
op,
132
105
Operator :: Eq
0 commit comments