diff options
Diffstat (limited to 'src/backend/utils/adt/datetime.c')
-rw-r--r-- | src/backend/utils/adt/datetime.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/backend/utils/adt/datetime.c b/src/backend/utils/adt/datetime.c index f72d1c6b403..5a1613ef7d0 100644 --- a/src/backend/utils/adt/datetime.c +++ b/src/backend/utils/adt/datetime.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/adt/datetime.c,v 1.174 2006/10/18 16:43:13 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/utils/adt/datetime.c,v 1.174.2.1 2007/05/29 04:59:13 neilc Exp $ * *------------------------------------------------------------------------- */ @@ -922,6 +922,7 @@ DecodeDateTime(char **field, int *ftype, int nf, #else *fsec = frac; #endif + tmask = DTK_ALL_SECS_M; } break; @@ -1697,6 +1698,7 @@ DecodeTimeOnly(char **field, int *ftype, int nf, #else *fsec = frac; #endif + tmask = DTK_ALL_SECS_M; } break; @@ -2803,6 +2805,7 @@ DecodeInterval(char **field, int *ftype, int nf, int *dtype, struct pg_tm * tm, #else *fsec += (val + fval) * 1e-6; #endif + tmask = DTK_M(MICROSECOND); break; case DTK_MILLISEC: @@ -2811,6 +2814,7 @@ DecodeInterval(char **field, int *ftype, int nf, int *dtype, struct pg_tm * tm, #else *fsec += (val + fval) * 1e-3; #endif + tmask = DTK_M(MILLISECOND); break; case DTK_SECOND: @@ -2820,7 +2824,15 @@ DecodeInterval(char **field, int *ftype, int nf, int *dtype, struct pg_tm * tm, #else *fsec += fval; #endif - tmask = DTK_M(SECOND); + /* + * If any subseconds were specified, consider + * this microsecond and millisecond input as + * well. + */ + if (fval == 0) + tmask = DTK_M(SECOND); + else + tmask = DTK_ALL_SECS_M; break; case DTK_MINUTE: |