@@ -171,12 +171,12 @@ impl TransformFunction for Bucket {
171
171
. as_any ( )
172
172
. downcast_ref :: < arrow_array:: Time64NanosecondArray > ( )
173
173
. unwrap ( )
174
- . unary ( |v| self . bucket_time ( v) ) ,
174
+ . unary ( |v| self . bucket_time ( v / 1000 ) ) ,
175
175
DataType :: Timestamp ( TimeUnit :: Nanosecond , _) => input
176
176
. as_any ( )
177
177
. downcast_ref :: < arrow_array:: TimestampNanosecondArray > ( )
178
178
. unwrap ( )
179
- . unary ( |v| self . bucket_timestamp ( v) ) ,
179
+ . unary ( |v| self . bucket_timestamp ( v / 1000 ) ) ,
180
180
DataType :: Utf8 => arrow_array:: Int32Array :: from_iter (
181
181
input
182
182
. as_any ( )
@@ -263,6 +263,9 @@ impl TransformFunction for Bucket {
263
263
264
264
#[ cfg( test) ]
265
265
mod test {
266
+ use std:: sync:: Arc ;
267
+
268
+ use arrow_array:: { ArrayRef , Int32Array , TimestampMicrosecondArray , TimestampNanosecondArray } ;
266
269
use chrono:: { DateTime , NaiveDate , NaiveDateTime , NaiveTime } ;
267
270
268
271
use super :: Bucket ;
@@ -939,4 +942,28 @@ mod test {
939
942
Datum :: int( 79 )
940
943
) ;
941
944
}
945
+
946
+ #[ test]
947
+ fn test_transform_timestamp_nanos_and_micros_array_equivalence ( ) {
948
+ let bucket = Bucket :: new ( 100 ) ;
949
+ let micros_value = 1510871468000000 ;
950
+ let nanos_value = micros_value * 1000 ;
951
+
952
+ let micro_array = TimestampMicrosecondArray :: from_iter_values ( vec ! [ micros_value] ) ;
953
+ let nano_array = TimestampNanosecondArray :: from_iter_values ( vec ! [ nanos_value] ) ;
954
+
955
+ let transformed_micro: ArrayRef = bucket. transform ( Arc :: new ( micro_array) ) . unwrap ( ) ;
956
+ let transformed_nano: ArrayRef = bucket. transform ( Arc :: new ( nano_array) ) . unwrap ( ) ;
957
+
958
+ let micro_result = transformed_micro
959
+ . as_any ( )
960
+ . downcast_ref :: < Int32Array > ( )
961
+ . unwrap ( ) ;
962
+ let nano_result = transformed_nano
963
+ . as_any ( )
964
+ . downcast_ref :: < Int32Array > ( )
965
+ . unwrap ( ) ;
966
+
967
+ assert_eq ! ( micro_result. value( 0 ) , nano_result. value( 0 ) ) ;
968
+ }
942
969
}
0 commit comments