@@ -19,8 +19,9 @@ use crate::logical_plan::producer::{to_substrait_type, SubstraitProducer};
1919use crate :: variation_const:: {
2020 DATE_32_TYPE_VARIATION_REF , DECIMAL_128_TYPE_VARIATION_REF ,
2121 DEFAULT_CONTAINER_TYPE_VARIATION_REF , DEFAULT_TYPE_VARIATION_REF ,
22- LARGE_CONTAINER_TYPE_VARIATION_REF , TIME_64_TYPE_VARIATION_REF ,
23- UNSIGNED_INTEGER_TYPE_VARIATION_REF , VIEW_CONTAINER_TYPE_VARIATION_REF ,
22+ LARGE_CONTAINER_TYPE_VARIATION_REF , TIME_32_TYPE_VARIATION_REF ,
23+ TIME_64_TYPE_VARIATION_REF , UNSIGNED_INTEGER_TYPE_VARIATION_REF ,
24+ VIEW_CONTAINER_TYPE_VARIATION_REF ,
2425} ;
2526use datafusion:: arrow:: array:: { Array , GenericListArray , OffsetSizeTrait } ;
2627use datafusion:: arrow:: temporal_conversions:: NANOSECONDS ;
@@ -280,6 +281,20 @@ pub(crate) fn to_substrait_literal(
280281 } ;
281282 ( map, DEFAULT_CONTAINER_TYPE_VARIATION_REF )
282283 }
284+ ScalarValue :: Time32Second ( Some ( t) ) => (
285+ LiteralType :: PrecisionTime ( PrecisionTime {
286+ precision : 0 ,
287+ value : * t as i64 ,
288+ } ) ,
289+ TIME_32_TYPE_VARIATION_REF ,
290+ ) ,
291+ ScalarValue :: Time32Millisecond ( Some ( t) ) => (
292+ LiteralType :: PrecisionTime ( PrecisionTime {
293+ precision : 3 ,
294+ value : * t as i64 ,
295+ } ) ,
296+ TIME_32_TYPE_VARIATION_REF ,
297+ ) ,
283298 ScalarValue :: Time64Microsecond ( Some ( t) ) => (
284299 LiteralType :: PrecisionTime ( PrecisionTime {
285300 precision : 6 ,
@@ -412,6 +427,12 @@ mod tests {
412427 round_trip_literal ( ScalarValue :: TimestampNanosecond ( ts, tz) ) ?;
413428 }
414429
430+ // Test Time32 literals
431+ round_trip_literal ( ScalarValue :: Time32Second ( Some ( 45296 ) ) ) ?;
432+ round_trip_literal ( ScalarValue :: Time32Second ( None ) ) ?;
433+ round_trip_literal ( ScalarValue :: Time32Millisecond ( Some ( 45296789 ) ) ) ?;
434+ round_trip_literal ( ScalarValue :: Time32Millisecond ( None ) ) ?;
435+
415436 // Test Time64 literals
416437 round_trip_literal ( ScalarValue :: Time64Microsecond ( Some ( 45296789123 ) ) ) ?;
417438 round_trip_literal ( ScalarValue :: Time64Microsecond ( None ) ) ?;
0 commit comments