@@ -1722,44 +1722,11 @@ where
1722
1722
{
1723
1723
let units = a. unwrap_str ( ) ;
1724
1724
match units. parse ( ) {
1725
- Ok ( units) => date_part_timestamp_inner :: < _ , D > ( units, ts) ,
1725
+ Ok ( units) => Ok ( date_part_timestamp_inner :: < _ , D > ( units, ts) ? . into ( ) ) ,
1726
1726
Err ( _) => Err ( EvalError :: UnknownUnits ( units. to_owned ( ) ) ) ,
1727
1727
}
1728
1728
}
1729
1729
1730
- fn date_part_timestamp_inner < ' a , T , D > ( units : DateTimeUnits , ts : T ) -> Result < Datum < ' a > , EvalError >
1731
- where
1732
- T : TimestampLike ,
1733
- D : DecimalLike + Into < Datum < ' a > > ,
1734
- {
1735
- match units {
1736
- DateTimeUnits :: Epoch => Ok ( TimestampLike :: extract_epoch :: < D > ( & ts) . into ( ) ) ,
1737
- DateTimeUnits :: Millennium => Ok ( D :: from ( ts. millennium ( ) ) . into ( ) ) ,
1738
- DateTimeUnits :: Century => Ok ( D :: from ( ts. century ( ) ) . into ( ) ) ,
1739
- DateTimeUnits :: Decade => Ok ( D :: from ( ts. decade ( ) ) . into ( ) ) ,
1740
- DateTimeUnits :: Year => Ok ( D :: from ( ts. year ( ) ) . into ( ) ) ,
1741
- DateTimeUnits :: Quarter => Ok ( D :: from ( ts. quarter ( ) ) . into ( ) ) ,
1742
- DateTimeUnits :: Week => Ok ( D :: from ( ts. week ( ) ) . into ( ) ) ,
1743
- DateTimeUnits :: Month => Ok ( D :: from ( ts. month ( ) ) . into ( ) ) ,
1744
- DateTimeUnits :: Day => Ok ( D :: from ( ts. day ( ) ) . into ( ) ) ,
1745
- DateTimeUnits :: DayOfWeek => Ok ( D :: from ( ts. day_of_week ( ) ) . into ( ) ) ,
1746
- DateTimeUnits :: DayOfYear => Ok ( D :: from ( ts. ordinal ( ) ) . into ( ) ) ,
1747
- DateTimeUnits :: IsoDayOfWeek => Ok ( D :: from ( ts. iso_day_of_week ( ) ) . into ( ) ) ,
1748
- DateTimeUnits :: Hour => Ok ( D :: from ( ts. hour ( ) ) . into ( ) ) ,
1749
- DateTimeUnits :: Minute => Ok ( D :: from ( ts. minute ( ) ) . into ( ) ) ,
1750
- DateTimeUnits :: Second => Ok ( ts. extract_second :: < D > ( ) . into ( ) ) ,
1751
- DateTimeUnits :: Milliseconds => Ok ( ts. extract_millisecond :: < D > ( ) . into ( ) ) ,
1752
- DateTimeUnits :: Microseconds => Ok ( ts. extract_microsecond :: < D > ( ) . into ( ) ) ,
1753
- DateTimeUnits :: Timezone
1754
- | DateTimeUnits :: TimezoneHour
1755
- | DateTimeUnits :: TimezoneMinute
1756
- | DateTimeUnits :: IsoDayOfYear => Err ( EvalError :: Unsupported {
1757
- feature : format ! ( "'{}' timestamp units" , units) ,
1758
- issue_no : None ,
1759
- } ) ,
1760
- }
1761
- }
1762
-
1763
1730
fn extract_date < ' a > ( a : Datum < ' a > , b : Datum < ' a > ) -> Result < Datum < ' a > , EvalError > {
1764
1731
let units = a. unwrap_str ( ) ;
1765
1732
match units. parse ( ) {
@@ -3182,14 +3149,16 @@ pub enum UnaryFunc {
3182
3149
RegexpMatch ( RegexpMatch ) ,
3183
3150
3184
3151
ExtractInterval ( ExtractInterval ) ,
3185
- ExtractTime ( DateTimeUnits ) ,
3186
- ExtractTimestamp ( DateTimeUnits ) ,
3187
- ExtractTimestampTz ( DateTimeUnits ) ,
3188
- ExtractDate ( DateTimeUnits ) ,
3189
3152
DatePartInterval ( DatePartInterval ) ,
3153
+
3154
+ ExtractTimestamp ( ExtractTimestamp ) ,
3155
+ ExtractTimestampTz ( ExtractTimestampTz ) ,
3156
+ DatePartTimestamp ( DatePartTimestamp ) ,
3157
+ DatePartTimestampTz ( DatePartTimestampTz ) ,
3158
+
3159
+ ExtractDate ( DateTimeUnits ) ,
3160
+ ExtractTime ( DateTimeUnits ) ,
3190
3161
DatePartTime ( DateTimeUnits ) ,
3191
- DatePartTimestamp ( DateTimeUnits ) ,
3192
- DatePartTimestampTz ( DateTimeUnits ) ,
3193
3162
DateTruncTimestamp ( DateTimeUnits ) ,
3194
3163
DateTruncTimestampTz ( DateTimeUnits ) ,
3195
3164
TimezoneTimestamp ( Timezone ) ,
@@ -3437,7 +3406,11 @@ derive_unary!(
3437
3406
IsRegexpMatch ,
3438
3407
RegexpMatch ,
3439
3408
ExtractInterval ,
3440
- DatePartInterval
3409
+ DatePartInterval ,
3410
+ ExtractTimestamp ,
3411
+ ExtractTimestampTz ,
3412
+ DatePartTimestamp ,
3413
+ DatePartTimestampTz
3441
3414
) ;
3442
3415
3443
3416
impl UnaryFunc {
@@ -3644,6 +3617,10 @@ impl UnaryFunc {
3644
3617
| RegexpMatch ( _)
3645
3618
| ExtractInterval ( _)
3646
3619
| DatePartInterval ( _)
3620
+ | ExtractTimestamp ( _)
3621
+ | ExtractTimestampTz ( _)
3622
+ | DatePartTimestamp ( _)
3623
+ | DatePartTimestampTz ( _)
3647
3624
| Chr ( _) => unreachable ! ( ) ,
3648
3625
CastRecordToString { ty }
3649
3626
| CastArrayToString { ty }
@@ -3657,20 +3634,8 @@ impl UnaryFunc {
3657
3634
cast_record1_to_record2 ( a, cast_exprs, temp_storage)
3658
3635
}
3659
3636
ExtractTime ( units) => date_part_time_inner :: < Numeric > ( * units, a) ,
3660
- ExtractTimestamp ( units) => {
3661
- date_part_timestamp_inner :: < _ , Numeric > ( * units, a. unwrap_timestamp ( ) )
3662
- }
3663
- ExtractTimestampTz ( units) => {
3664
- date_part_timestamp_inner :: < _ , Numeric > ( * units, a. unwrap_timestamptz ( ) )
3665
- }
3666
3637
ExtractDate ( units) => extract_date_inner ( * units, a) ,
3667
3638
DatePartTime ( units) => date_part_time_inner :: < f64 > ( * units, a) ,
3668
- DatePartTimestamp ( units) => {
3669
- date_part_timestamp_inner :: < _ , f64 > ( * units, a. unwrap_timestamp ( ) )
3670
- }
3671
- DatePartTimestampTz ( units) => {
3672
- date_part_timestamp_inner :: < _ , f64 > ( * units, a. unwrap_timestamptz ( ) )
3673
- }
3674
3639
DateTruncTimestamp ( units) => date_trunc_inner ( * units, a. unwrap_timestamp ( ) ) ,
3675
3640
DateTruncTimestampTz ( units) => date_trunc_inner ( * units, a. unwrap_timestamptz ( ) ) ,
3676
3641
TimezoneTimestamp ( tz) => timezone_timestamp ( * tz, a. unwrap_timestamp ( ) ) ,
@@ -3883,6 +3848,10 @@ impl UnaryFunc {
3883
3848
| RegexpMatch ( _)
3884
3849
| ExtractInterval ( _)
3885
3850
| DatePartInterval ( _)
3851
+ | ExtractTimestamp ( _)
3852
+ | ExtractTimestampTz ( _)
3853
+ | DatePartTimestamp ( _)
3854
+ | DatePartTimestampTz ( _)
3886
3855
| Chr ( _) => unreachable ! ( ) ,
3887
3856
3888
3857
CastRecordToString { .. }
@@ -3903,13 +3872,11 @@ impl UnaryFunc {
3903
3872
3904
3873
CastList1ToList2 { return_ty, .. } => return_ty. without_modifiers ( ) . nullable ( false ) ,
3905
3874
3906
- ExtractTime ( _) | ExtractTimestamp ( _ ) | ExtractTimestampTz ( _ ) | ExtractDate ( _) => {
3875
+ ExtractTime ( _) | ExtractDate ( _) => {
3907
3876
ScalarType :: Numeric { max_scale : None } . nullable ( nullable)
3908
3877
}
3909
3878
3910
- DatePartTime ( _) | DatePartTimestamp ( _) | DatePartTimestampTz ( _) => {
3911
- ScalarType :: Float64 . nullable ( nullable)
3912
- }
3879
+ DatePartTime ( _) => ScalarType :: Float64 . nullable ( nullable) ,
3913
3880
3914
3881
DateTruncTimestamp ( _) => ScalarType :: Timestamp . nullable ( nullable) ,
3915
3882
DateTruncTimestampTz ( _) => ScalarType :: TimestampTz . nullable ( nullable) ,
@@ -4135,6 +4102,10 @@ impl UnaryFunc {
4135
4102
| RegexpMatch ( _)
4136
4103
| ExtractInterval ( _)
4137
4104
| DatePartInterval ( _)
4105
+ | ExtractTimestamp ( _)
4106
+ | ExtractTimestampTz ( _)
4107
+ | DatePartTimestamp ( _)
4108
+ | DatePartTimestampTz ( _)
4138
4109
| Chr ( _) => unreachable ! ( ) ,
4139
4110
// Return null if the inner field is null
4140
4111
RecordGet ( _) => true ,
@@ -4149,8 +4120,8 @@ impl UnaryFunc {
4149
4120
TimezoneTimestamp ( _) => false ,
4150
4121
CastList1ToList2 { .. } | CastRecord1ToRecord2 { .. } => false ,
4151
4122
ListLength | MapLength => false ,
4152
- ExtractTime ( _) | ExtractTimestamp ( _ ) | ExtractTimestampTz ( _ ) | ExtractDate ( _) => false ,
4153
- DatePartTime ( _) | DatePartTimestamp ( _ ) | DatePartTimestampTz ( _ ) => false ,
4123
+ ExtractTime ( _) | ExtractDate ( _) => false ,
4124
+ DatePartTime ( _) => false ,
4154
4125
DateTruncTimestamp ( _) | DateTruncTimestampTz ( _) => false ,
4155
4126
RescaleNumeric ( _) => false ,
4156
4127
}
@@ -4255,6 +4226,10 @@ impl UnaryFunc {
4255
4226
| RegexpMatch ( _)
4256
4227
| ExtractInterval ( _)
4257
4228
| DatePartInterval ( _)
4229
+ | ExtractTimestamp ( _)
4230
+ | ExtractTimestampTz ( _)
4231
+ | DatePartTimestamp ( _)
4232
+ | DatePartTimestampTz ( _)
4258
4233
| CastVarCharToString ( _) => unreachable ! ( ) ,
4259
4234
_ => false ,
4260
4235
}
@@ -4453,6 +4428,10 @@ impl UnaryFunc {
4453
4428
| RegexpMatch ( _)
4454
4429
| ExtractInterval ( _)
4455
4430
| DatePartInterval ( _)
4431
+ | ExtractTimestamp ( _)
4432
+ | ExtractTimestampTz ( _)
4433
+ | DatePartTimestamp ( _)
4434
+ | DatePartTimestampTz ( _)
4456
4435
| Chr ( _) => unreachable ! ( ) ,
4457
4436
CastRecordToString { .. } => f. write_str ( "recordtostr" ) ,
4458
4437
CastRecord1ToRecord2 { .. } => f. write_str ( "record1torecord2" ) ,
@@ -4462,12 +4441,8 @@ impl UnaryFunc {
4462
4441
CastList1ToList2 { .. } => f. write_str ( "list1tolist2" ) ,
4463
4442
CastMapToString { .. } => f. write_str ( "maptostr" ) ,
4464
4443
ExtractTime ( units) => write ! ( f, "extract_{}_t" , units) ,
4465
- ExtractTimestamp ( units) => write ! ( f, "extract_{}_ts" , units) ,
4466
- ExtractTimestampTz ( units) => write ! ( f, "extract_{}_tstz" , units) ,
4467
4444
ExtractDate ( units) => write ! ( f, "extract_{}_d" , units) ,
4468
4445
DatePartTime ( units) => write ! ( f, "date_part_{}_t" , units) ,
4469
- DatePartTimestamp ( units) => write ! ( f, "date_part_{}_ts" , units) ,
4470
- DatePartTimestampTz ( units) => write ! ( f, "date_part_{}_tstz" , units) ,
4471
4446
DateTruncTimestamp ( units) => write ! ( f, "date_trunc_{}_ts" , units) ,
4472
4447
DateTruncTimestampTz ( units) => write ! ( f, "date_trunc_{}_tstz" , units) ,
4473
4448
TimezoneTimestamp ( tz) => write ! ( f, "timezone_{}_ts" , tz) ,
0 commit comments