aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/adt/timestamp.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/utils/adt/timestamp.c')
-rw-r--r--src/backend/utils/adt/timestamp.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/src/backend/utils/adt/timestamp.c b/src/backend/utils/adt/timestamp.c
index 103f91ae624..265b1db7f60 100644
--- a/src/backend/utils/adt/timestamp.c
+++ b/src/backend/utils/adt/timestamp.c
@@ -3830,12 +3830,14 @@ timestamp_trunc(PG_FUNCTION_ARGS)
tm->tm_year = ((tm->tm_year + 999) / 1000) * 1000 - 999;
else
tm->tm_year = -((999 - (tm->tm_year - 1)) / 1000) * 1000 + 1;
+ /* FALL THRU */
case DTK_CENTURY:
/* see comments in timestamptz_trunc */
if (tm->tm_year > 0)
tm->tm_year = ((tm->tm_year + 99) / 100) * 100 - 99;
else
tm->tm_year = -((99 - (tm->tm_year - 1)) / 100) * 100 + 1;
+ /* FALL THRU */
case DTK_DECADE:
/* see comments in timestamptz_trunc */
if (val != DTK_MILLENNIUM && val != DTK_CENTURY)
@@ -3845,18 +3847,25 @@ timestamp_trunc(PG_FUNCTION_ARGS)
else
tm->tm_year = -((8 - (tm->tm_year - 1)) / 10) * 10;
}
+ /* FALL THRU */
case DTK_YEAR:
tm->tm_mon = 1;
+ /* FALL THRU */
case DTK_QUARTER:
tm->tm_mon = (3 * ((tm->tm_mon - 1) / 3)) + 1;
+ /* FALL THRU */
case DTK_MONTH:
tm->tm_mday = 1;
+ /* FALL THRU */
case DTK_DAY:
tm->tm_hour = 0;
+ /* FALL THRU */
case DTK_HOUR:
tm->tm_min = 0;
+ /* FALL THRU */
case DTK_MINUTE:
tm->tm_sec = 0;
+ /* FALL THRU */
case DTK_SECOND:
fsec = 0;
break;
@@ -4072,28 +4081,36 @@ interval_trunc(PG_FUNCTION_ARGS)
{
switch (val)
{
- /* fall through */
case DTK_MILLENNIUM:
/* caution: C division may have negative remainder */
tm->tm_year = (tm->tm_year / 1000) * 1000;
+ /* FALL THRU */
case DTK_CENTURY:
/* caution: C division may have negative remainder */
tm->tm_year = (tm->tm_year / 100) * 100;
+ /* FALL THRU */
case DTK_DECADE:
/* caution: C division may have negative remainder */
tm->tm_year = (tm->tm_year / 10) * 10;
+ /* FALL THRU */
case DTK_YEAR:
tm->tm_mon = 0;
+ /* FALL THRU */
case DTK_QUARTER:
tm->tm_mon = 3 * (tm->tm_mon / 3);
+ /* FALL THRU */
case DTK_MONTH:
tm->tm_mday = 0;
+ /* FALL THRU */
case DTK_DAY:
tm->tm_hour = 0;
+ /* FALL THRU */
case DTK_HOUR:
tm->tm_min = 0;
+ /* FALL THRU */
case DTK_MINUTE:
tm->tm_sec = 0;
+ /* FALL THRU */
case DTK_SECOND:
fsec = 0;
break;