|
8 | 8 | *
|
9 | 9 | *
|
10 | 10 | * IDENTIFICATION
|
11 |
| - * $PostgreSQL: pgsql/src/backend/utils/adt/datetime.c,v 1.203 2009/03/22 01:12:31 tgl Exp $ |
| 11 | + * $PostgreSQL: pgsql/src/backend/utils/adt/datetime.c,v 1.204 2009/05/01 19:29:07 tgl Exp $ |
12 | 12 | *
|
13 | 13 | *-------------------------------------------------------------------------
|
14 | 14 | */
|
@@ -950,7 +950,8 @@ DecodeDateTime(char **field, int *ftype, int nf,
|
950 | 950 | */
|
951 | 951 | /* test for > 24:00:00 */
|
952 | 952 | if (tm->tm_hour > 24 ||
|
953 |
| - (tm->tm_hour == 24 && (tm->tm_min > 0 || tm->tm_sec > 0))) |
| 953 | + (tm->tm_hour == 24 && |
| 954 | + (tm->tm_min > 0 || tm->tm_sec > 0 || *fsec > 0))) |
954 | 955 | return DTERR_FIELD_OVERFLOW;
|
955 | 956 | break;
|
956 | 957 |
|
@@ -2058,15 +2059,13 @@ DecodeTimeOnly(char **field, int *ftype, int nf,
|
2058 | 2059 |
|
2059 | 2060 | if (tm->tm_hour < 0 || tm->tm_min < 0 || tm->tm_min > 59 ||
|
2060 | 2061 | tm->tm_sec < 0 || tm->tm_sec > 60 || tm->tm_hour > 24 ||
|
2061 |
| - /* test for > 24:00:00 */ |
| 2062 | + /* test for > 24:00:00 */ |
| 2063 | + (tm->tm_hour == 24 && |
| 2064 | + (tm->tm_min > 0 || tm->tm_sec > 0 || *fsec > 0)) || |
2062 | 2065 | #ifdef HAVE_INT64_TIMESTAMP
|
2063 |
| - (tm->tm_hour == 24 && (tm->tm_min > 0 || tm->tm_sec > 0 || |
2064 |
| - *fsec > INT64CONST(0))) || |
2065 |
| - *fsec < INT64CONST(0) || *fsec >= USECS_PER_SEC |
| 2066 | + *fsec < INT64CONST(0) || *fsec > USECS_PER_SEC |
2066 | 2067 | #else
|
2067 |
| - (tm->tm_hour == 24 && (tm->tm_min > 0 || tm->tm_sec > 0 || |
2068 |
| - *fsec > 0)) || |
2069 |
| - *fsec < 0 || *fsec >= 1 |
| 2068 | + *fsec < 0 || *fsec > 1 |
2070 | 2069 | #endif
|
2071 | 2070 | )
|
2072 | 2071 | return DTERR_FIELD_OVERFLOW;
|
@@ -2386,11 +2385,11 @@ DecodeTime(char *str, int fmask, int range,
|
2386 | 2385 | #ifdef HAVE_INT64_TIMESTAMP
|
2387 | 2386 | if (tm->tm_hour < 0 || tm->tm_min < 0 || tm->tm_min > 59 ||
|
2388 | 2387 | tm->tm_sec < 0 || tm->tm_sec > 60 || *fsec < INT64CONST(0) ||
|
2389 |
| - *fsec >= USECS_PER_SEC) |
| 2388 | + *fsec > USECS_PER_SEC) |
2390 | 2389 | return DTERR_FIELD_OVERFLOW;
|
2391 | 2390 | #else
|
2392 | 2391 | if (tm->tm_hour < 0 || tm->tm_min < 0 || tm->tm_min > 59 ||
|
2393 |
| - tm->tm_sec < 0 || tm->tm_sec > 60 || *fsec < 0 || *fsec >= 1) |
| 2392 | + tm->tm_sec < 0 || tm->tm_sec > 60 || *fsec < 0 || *fsec > 1) |
2394 | 2393 | return DTERR_FIELD_OVERFLOW;
|
2395 | 2394 | #endif
|
2396 | 2395 |
|
|
0 commit comments