@@ -4465,6 +4465,26 @@ timestamp_part(PG_FUNCTION_ARGS)
4465
4465
result = date2isoyear (tm -> tm_year , tm -> tm_mon , tm -> tm_mday );
4466
4466
break ;
4467
4467
4468
+ case DTK_DOW :
4469
+ case DTK_ISODOW :
4470
+ if (timestamp2tm (timestamp , NULL , tm , & fsec , NULL , NULL ) != 0 )
4471
+ ereport (ERROR ,
4472
+ (errcode (ERRCODE_DATETIME_VALUE_OUT_OF_RANGE ),
4473
+ errmsg ("timestamp out of range" )));
4474
+ result = j2day (date2j (tm -> tm_year , tm -> tm_mon , tm -> tm_mday ));
4475
+ if (val == DTK_ISODOW && result == 0 )
4476
+ result = 7 ;
4477
+ break ;
4478
+
4479
+ case DTK_DOY :
4480
+ if (timestamp2tm (timestamp , NULL , tm , & fsec , NULL , NULL ) != 0 )
4481
+ ereport (ERROR ,
4482
+ (errcode (ERRCODE_DATETIME_VALUE_OUT_OF_RANGE ),
4483
+ errmsg ("timestamp out of range" )));
4484
+ result = (date2j (tm -> tm_year , tm -> tm_mon , tm -> tm_mday )
4485
+ - date2j (tm -> tm_year , 1 , 1 ) + 1 );
4486
+ break ;
4487
+
4468
4488
case DTK_TZ :
4469
4489
case DTK_TZ_MINUTE :
4470
4490
case DTK_TZ_HOUR :
@@ -4488,26 +4508,6 @@ timestamp_part(PG_FUNCTION_ARGS)
4488
4508
#endif
4489
4509
break ;
4490
4510
4491
- case DTK_DOW :
4492
- case DTK_ISODOW :
4493
- if (timestamp2tm (timestamp , NULL , tm , & fsec , NULL , NULL ) != 0 )
4494
- ereport (ERROR ,
4495
- (errcode (ERRCODE_DATETIME_VALUE_OUT_OF_RANGE ),
4496
- errmsg ("timestamp out of range" )));
4497
- result = j2day (date2j (tm -> tm_year , tm -> tm_mon , tm -> tm_mday ));
4498
- if (val == DTK_ISODOW && result == 0 )
4499
- result = 7 ;
4500
- break ;
4501
-
4502
- case DTK_DOY :
4503
- if (timestamp2tm (timestamp , NULL , tm , & fsec , NULL , NULL ) != 0 )
4504
- ereport (ERROR ,
4505
- (errcode (ERRCODE_DATETIME_VALUE_OUT_OF_RANGE ),
4506
- errmsg ("timestamp out of range" )));
4507
- result = (date2j (tm -> tm_year , tm -> tm_mon , tm -> tm_mday )
4508
- - date2j (tm -> tm_year , 1 , 1 ) + 1 );
4509
- break ;
4510
-
4511
4511
default :
4512
4512
ereport (ERROR ,
4513
4513
(errcode (ERRCODE_FEATURE_NOT_SUPPORTED ),
@@ -4679,6 +4679,26 @@ timestamptz_part(PG_FUNCTION_ARGS)
4679
4679
result = date2isoyear (tm -> tm_year , tm -> tm_mon , tm -> tm_mday );
4680
4680
break ;
4681
4681
4682
+ case DTK_DOW :
4683
+ case DTK_ISODOW :
4684
+ if (timestamp2tm (timestamp , & tz , tm , & fsec , NULL , NULL ) != 0 )
4685
+ ereport (ERROR ,
4686
+ (errcode (ERRCODE_DATETIME_VALUE_OUT_OF_RANGE ),
4687
+ errmsg ("timestamp out of range" )));
4688
+ result = j2day (date2j (tm -> tm_year , tm -> tm_mon , tm -> tm_mday ));
4689
+ if (val == DTK_ISODOW && result == 0 )
4690
+ result = 7 ;
4691
+ break ;
4692
+
4693
+ case DTK_DOY :
4694
+ if (timestamp2tm (timestamp , & tz , tm , & fsec , NULL , NULL ) != 0 )
4695
+ ereport (ERROR ,
4696
+ (errcode (ERRCODE_DATETIME_VALUE_OUT_OF_RANGE ),
4697
+ errmsg ("timestamp out of range" )));
4698
+ result = (date2j (tm -> tm_year , tm -> tm_mon , tm -> tm_mday )
4699
+ - date2j (tm -> tm_year , 1 , 1 ) + 1 );
4700
+ break ;
4701
+
4682
4702
default :
4683
4703
ereport (ERROR ,
4684
4704
(errcode (ERRCODE_FEATURE_NOT_SUPPORTED ),
@@ -4700,26 +4720,6 @@ timestamptz_part(PG_FUNCTION_ARGS)
4700
4720
#endif
4701
4721
break ;
4702
4722
4703
- case DTK_DOW :
4704
- case DTK_ISODOW :
4705
- if (timestamp2tm (timestamp , & tz , tm , & fsec , NULL , NULL ) != 0 )
4706
- ereport (ERROR ,
4707
- (errcode (ERRCODE_DATETIME_VALUE_OUT_OF_RANGE ),
4708
- errmsg ("timestamp out of range" )));
4709
- result = j2day (date2j (tm -> tm_year , tm -> tm_mon , tm -> tm_mday ));
4710
- if (val == DTK_ISODOW && result == 0 )
4711
- result = 7 ;
4712
- break ;
4713
-
4714
- case DTK_DOY :
4715
- if (timestamp2tm (timestamp , & tz , tm , & fsec , NULL , NULL ) != 0 )
4716
- ereport (ERROR ,
4717
- (errcode (ERRCODE_DATETIME_VALUE_OUT_OF_RANGE ),
4718
- errmsg ("timestamp out of range" )));
4719
- result = (date2j (tm -> tm_year , tm -> tm_mon , tm -> tm_mday )
4720
- - date2j (tm -> tm_year , 1 , 1 ) + 1 );
4721
- break ;
4722
-
4723
4723
default :
4724
4724
ereport (ERROR ,
4725
4725
(errcode (ERRCODE_FEATURE_NOT_SUPPORTED ),
0 commit comments