Index: datetime.c =================================================================== RCS file: /cvsroot/pgsql/src/backend/utils/adt/datetime.c,v retrieving revision 1.140 diff -r1.140 datetime.c 687c687 < if (strcmp((str + len - 4), "0001") == 0) --- > if (strcmp(str + len - 4, "0001") == 0) 695,696c695 < while ((*(str + len - 1) == '0') < && (*(str + len - 3) != '.')) --- > while (*(str + len - 1) == '0' && *(str + len - 3) != '.') 772c771 < else if ((*cp == '-') || (*cp == '/') || (*cp == '.')) --- > else if (*cp == '-' || *cp == '/' || *cp == '.') 793c792 < while (isdigit((unsigned char) *cp) || (*cp == delim)) --- > while (isdigit((unsigned char) *cp) || *cp == delim) 800c799 < while (isalnum((unsigned char) *cp) || (*cp == delim)) --- > while (isalnum((unsigned char) *cp) || *cp == delim) 837c836 < if ((*cp == '-') || (*cp == '/') || (*cp == '.')) --- > if (*cp == '-' || *cp == '/' || *cp == '.') 843c842 < while (isdigit((unsigned char) *cp) || (*cp == delim)) --- > while (isdigit((unsigned char) *cp) || *cp == delim) 848c847 < else if ((*cp == '+') || (*cp == '-')) --- > else if (*cp == '+' || *cp == '-') 860c859 < (*cp == ':') || (*cp == '.')) --- > *cp == ':' || *cp == '.') 985,986c984 < else if (((fmask & DTK_DATE_M) == DTK_DATE_M) < || (ptype != 0)) --- > else if ((fmask & DTK_DATE_M) == DTK_DATE_M || ptype != 0) 1086,1088c1084,1086 < if ((i > 0) && ((fmask & DTK_M(TZ)) != 0) < && (ftype[i - 1] == DTK_TZ) < && (isalpha((unsigned char) *field[i - 1]))) --- > if (i > 0 && (fmask & DTK_M(TZ)) != 0 && > ftype[i - 1] == DTK_TZ && > isalpha((unsigned char) *field[i - 1])) 1145,1146c1143,1144 < if (((fmask & DTK_M(MONTH)) != 0) < && ((fmask & DTK_M(HOUR)) != 0)) --- > if ((fmask & DTK_M(MONTH)) != 0 && > (fmask & DTK_M(HOUR)) != 0) 1215,1216c1213,1215 < dt2time((time * INT64CONST(86400000000)), < &tm->tm_hour, &tm->tm_min, &tm->tm_sec, fsec); --- > dt2time(time * INT64CONST(86400000000), > &tm->tm_hour, &tm->tm_min, > &tm->tm_sec, fsec); 1218,1219c1217,1218 < dt2time((time * 86400), < &tm->tm_hour, &tm->tm_min, &tm->tm_sec, fsec); --- > dt2time(time * 86400, &tm->tm_hour, > &tm->tm_min, &tm->tm_sec, fsec); 1255c1254 < if ((cp != NULL) && !(fmask & DTK_DATE_M)) --- > if (cp != NULL && !(fmask & DTK_DATE_M)) 1262c1261 < else if ((cp != NULL) && ((flen - strlen(cp)) > 2)) --- > else if (cp != NULL && flen - strlen(cp) > 2) 1328,1329c1327,1328 < j2date((date2j(tm->tm_year, tm->tm_mon, tm->tm_mday) - 1), < &tm->tm_year, &tm->tm_mon, &tm->tm_mday); --- > j2date(date2j(tm->tm_year, tm->tm_mon, tm->tm_mday) - 1, > &tm->tm_year, &tm->tm_mon, &tm->tm_mday); 1348,1349c1347,1348 < j2date((date2j(tm->tm_year, tm->tm_mon, tm->tm_mday) + 1), < &tm->tm_year, &tm->tm_mon, &tm->tm_mday); --- > j2date(date2j(tm->tm_year, tm->tm_mon, tm->tm_mday) + 1, > &tm->tm_year, &tm->tm_mon, &tm->tm_mday); 1377,1379c1376,1378 < if ((fmask & DTK_M(MONTH)) && (!haveTextMonth) < && (!(fmask & DTK_M(DAY))) < && ((tm->tm_mon >= 1) && (tm->tm_mon <= 31))) --- > if ((fmask & DTK_M(MONTH)) && !haveTextMonth && > !(fmask & DTK_M(DAY)) && tm->tm_mon >= 1 && > tm->tm_mon <= 31) 1462,1465c1461,1464 < if ((i >= (nf - 1)) < || ((ftype[i + 1] != DTK_NUMBER) < && (ftype[i + 1] != DTK_TIME) < && (ftype[i + 1] != DTK_DATE))) --- > if (i >= nf - 1 || > (ftype[i + 1] != DTK_NUMBER && > ftype[i + 1] != DTK_TIME && > ftype[i + 1] != DTK_DATE)) 1528c1527 < if ((mer != HR24) && (tm->tm_hour > 12)) --- > if (mer != HR24 && tm->tm_hour > 12) 1530c1529 < if ((mer == AM) && (tm->tm_hour == 12)) --- > if (mer == AM && tm->tm_hour == 12) 1532c1531 < else if ((mer == PM) && (tm->tm_hour != 12)) --- > else if (mer == PM && tm->tm_hour != 12) 1653,1654c1652,1655 < if ((before_gmtoff > 0) ? (mytime < 0 && beforetime > 0) : < (mytime > 0 && beforetime < 0)) --- > if ((before_gmtoff > 0 && > mytime < 0 && beforetime > 0) || > (before_gmtoff <= 0 && > mytime > 0 && beforetime < 0)) 1657,1658c1658,1661 < if ((after_gmtoff > 0) ? (mytime < 0 && aftertime > 0) : < (mytime > 0 && aftertime < 0)) --- > if ((after_gmtoff > 0 && > mytime < 0 && aftertime > 0) || > (after_gmtoff <= 0 && > mytime > 0 && aftertime < 0)) 1744,1746c1747,1748 < if ((i == 0) && (nf >= 2) < && ((ftype[nf - 1] == DTK_DATE) < || (ftype[1] == DTK_TIME))) --- > if (i == 0 && nf >= 2 && > (ftype[nf - 1] == DTK_DATE || ftype[1] == DTK_TIME)) 1829,1830c1831,1833 < if ((i > 0) && ((fmask & DTK_M(TZ)) != 0) < && (ftype[i - 1] == DTK_TZ) && (isalpha((unsigned char) *field[i - 1]))) --- > if (i > 0 && (fmask & DTK_M(TZ)) != 0 && > ftype[i - 1] == DTK_TZ && > isalpha((unsigned char) *field[i - 1])) 1900,1901c1903,1904 < if (((fmask & DTK_M(MONTH)) != 0) < && ((fmask & DTK_M(HOUR)) != 0)) --- > if ((fmask & DTK_M(MONTH)) != 0 && > (fmask & DTK_M(HOUR)) != 0) 1969c1972 < dt2time((time * INT64CONST(86400000000)), --- > dt2time(time * INT64CONST(86400000000), 1972c1975 < dt2time((time * 86400), --- > dt2time(time * 86400, 2015c2018 < if ((i == 0) && ((nf >= 2) && (ftype[nf - 1] == DTK_DATE))) --- > if (i == 0 && nf >= 2 && ftype[nf - 1] == DTK_DATE) 2022c2025 < else if ((flen - strlen(cp)) > 2) --- > else if (flen - strlen(cp) > 2) 2160,2163c2163,2166 < if ((i >= (nf - 1)) < || ((ftype[i + 1] != DTK_NUMBER) < && (ftype[i + 1] != DTK_TIME) < && (ftype[i + 1] != DTK_DATE))) --- > if (i >= nf - 1 || > (ftype[i + 1] != DTK_NUMBER && > ftype[i + 1] != DTK_TIME && > ftype[i + 1] != DTK_DATE)) 2183c2186 < if ((mer != HR24) && (tm->tm_hour > 12)) --- > if (mer != HR24 && tm->tm_hour > 12) 2185c2188 < if ((mer == AM) && (tm->tm_hour == 12)) --- > if (mer == AM && tm->tm_hour == 12) 2187c2190 < else if ((mer == PM) && (tm->tm_hour != 12)) --- > else if (mer == PM && tm->tm_hour != 12) 2191,2194c2194,2196 < if ((tm->tm_hour < 0) || (tm->tm_hour > 23) < || (tm->tm_min < 0) || (tm->tm_min > 59) < || (tm->tm_sec < 0) || (tm->tm_sec > 60) < || (*fsec < INT64CONST(0)) || (*fsec >= INT64CONST(1000000))) --- > if (tm->tm_hour < 0 || tm->tm_hour > 23 || tm->tm_min < 0 || > tm->tm_min > 59 || tm->tm_sec < 0 || tm->tm_sec > 60 || > *fsec < INT64CONST(0) || *fsec >= INT64CONST(1000000)) 2197,2200c2199,2201 < if ((tm->tm_hour < 0) || (tm->tm_hour > 23) < || (tm->tm_min < 0) || (tm->tm_min > 59) < || (tm->tm_sec < 0) || (tm->tm_sec > 60) < || (*fsec < 0) || (*fsec >= 1)) --- > if (tm->tm_hour < 0 || tm->tm_hour > 23 || tm->tm_min < 0 || > tm->tm_min > 59 || tm->tm_sec < 0 || tm->tm_sec > 60 || > *fsec < 0 || *fsec >= 1) 2261c2262 < while ((*str != '\0') && (nf < MAXDATEFIELDS)) --- > while (*str != '\0' && nf < MAXDATEFIELDS) 2447,2450c2448,2450 < if ((tm->tm_hour < 0) < || (tm->tm_min < 0) || (tm->tm_min > 59) < || (tm->tm_sec < 0) || (tm->tm_sec > 60) < || (*fsec < INT64CONST(0)) || (*fsec >= INT64CONST(1000000))) --- > if (tm->tm_hour < 0 || tm->tm_min < 0 || tm->tm_min > 59 || > tm->tm_sec < 0 || tm->tm_sec > 60 || *fsec < INT64CONST(0) || > *fsec >= INT64CONST(1000000)) 2453,2456c2453,2454 < if ((tm->tm_hour < 0) < || (tm->tm_min < 0) || (tm->tm_min > 59) < || (tm->tm_sec < 0) || (tm->tm_sec > 60) < || (*fsec < 0) || (*fsec >= 1)) --- > if (tm->tm_hour < 0 || tm->tm_min < 0 || tm->tm_min > 59 || > tm->tm_sec < 0 || tm->tm_sec > 60 || *fsec < 0 || *fsec >= 1) 2490c2488 < if ((cp - str) > 2) --- > if (cp - str > 2) 2514,2516c2512,2513 < if ((flen == 3) && < ((fmask & DTK_DATE_M) == DTK_M(YEAR)) && < ((val >= 1) && (val <= 366))) --- > if (flen == 3 && (fmask & DTK_DATE_M) == DTK_M(YEAR) && val >= 1 && > val <= 366) 2767c2764 < hr = strtol((str + 1), &cp, 10); --- > hr = strtol(str + 1, &cp, 10); 2771c2768 < min = strtol((cp + 1), &cp, 10); --- > min = strtol(cp + 1, &cp, 10); 2773c2770 < else if ((*cp == '\0') && (strlen(str) > 3)) --- > else if (*cp == '\0' && strlen(str) > 3) 2781c2778 < if ((hr < 0) || (hr > 13)) --- > if (hr < 0 || hr > 13) 2783c2780 < if ((min < 0) || (min >= 60)) --- > if (min < 0 || min >= 60) 2869,2870c2866,2867 < if ((datecache[field] != NULL) < && (strncmp(lowtoken, datecache[field]->token, TOKMAXLEN) == 0)) --- > if (datecache[field] != NULL && > strncmp(lowtoken, datecache[field]->token, TOKMAXLEN) == 0) 2960c2957 < Assert((*field[i] == '-') || (*field[i] == '+')); --- > Assert(*field[i] == '-' || *field[i] == '+'); 2968c2965 < while ((*cp != '\0') && (*cp != ':') && (*cp != '.')) --- > while (*cp != '\0' && *cp != ':' && *cp != '.') 2970,2971c2967,2968 < if ((*cp == ':') && < (DecodeTime(field[i] + 1, fmask, &tmask, tm, fsec) == 0)) --- > if (*cp == ':' && > DecodeTime(field[i] + 1, fmask, &tmask, tm, fsec) == 0) 3114c3111 < tmask = ((fmask & DTK_M(DAY)) ? 0 : DTK_M(DAY)); --- > tmask = (fmask & DTK_M(DAY)) ? 0 : DTK_M(DAY); 3132c3129 < tmask = ((fmask & DTK_M(DAY)) ? 0 : DTK_M(DAY)); --- > tmask = (fmask & DTK_M(DAY)) ? 0 : DTK_M(DAY); 3157c3154 < tmask = ((fmask & DTK_M(YEAR)) ? 0 : DTK_M(YEAR)); --- > tmask = (fmask & DTK_M(YEAR)) ? 0 : DTK_M(YEAR); 3164c3161 < tmask = ((fmask & DTK_M(YEAR)) ? 0 : DTK_M(YEAR)); --- > tmask = (fmask & DTK_M(YEAR)) ? 0 : DTK_M(YEAR); 3171c3168 < tmask = ((fmask & DTK_M(YEAR)) ? 0 : DTK_M(YEAR)); --- > tmask = (fmask & DTK_M(YEAR)) ? 0 : DTK_M(YEAR); 3178c3175 < tmask = ((fmask & DTK_M(YEAR)) ? 0 : DTK_M(YEAR)); --- > tmask = (fmask & DTK_M(YEAR)) ? 0 : DTK_M(YEAR); 3265,3266c3262,3263 < if ((deltacache[field] != NULL) < && (strncmp(lowtoken, deltacache[field]->token, TOKMAXLEN) == 0)) --- > if (deltacache[field] != NULL && > strncmp(lowtoken, deltacache[field]->token, TOKMAXLEN) == 0) 3279c3276 < if ((type == TZ) || (type == DTZ)) --- > if (type == TZ || type == DTZ) 3375c3372 < if ((tm->tm_mon < 1) || (tm->tm_mon > 12)) --- > if (tm->tm_mon < 1 || tm->tm_mon > 12) 3397c3394 < sprintf((str + 5), "/%04d", tm->tm_year); --- > sprintf(str + 5, "/%04d", tm->tm_year); 3399c3396 < sprintf((str + 5), "/%04d %s", -(tm->tm_year - 1), "BC"); --- > sprintf(str + 5, "/%04d %s", -(tm->tm_year - 1), "BC"); 3406c3403 < sprintf((str + 5), ".%04d", tm->tm_year); --- > sprintf(str + 5, ".%04d", tm->tm_year); 3408c3405 < sprintf((str + 5), ".%04d %s", -(tm->tm_year - 1), "BC"); --- > sprintf(str + 5, ".%04d %s", -(tm->tm_year - 1), "BC"); 3419c3416 < sprintf((str + 5), "-%04d", tm->tm_year); --- > sprintf(str + 5, "-%04d", tm->tm_year); 3421c3418 < sprintf((str + 5), "-%04d %s", -(tm->tm_year - 1), "BC"); --- > sprintf(str + 5, "-%04d %s", -(tm->tm_year - 1), "BC"); 3435c3432 < if ((tm->tm_hour < 0) || (tm->tm_hour > 24)) --- > if (tm->tm_hour < 0 || tm->tm_hour > 24) 3448c3445 < sprintf((str + strlen(str)), ":%02d.%06d", tm->tm_sec, fsec); --- > sprintf(str + strlen(str), ":%02d.%06d", tm->tm_sec, fsec); 3450c3447 < sprintf((str + strlen(str)), ":%013.10f", tm->tm_sec + fsec); --- > sprintf(str + strlen(str), ":%013.10f", tm->tm_sec + fsec); 3453,3454c3450,3451 < while ((strcmp((str + strlen(str) - 2), "00") == 0) < && (*(str + strlen(str) - 3) != '.')) --- > while (strcmp((str + strlen(str) - 2), "00") == 0 && > *(str + strlen(str) - 3) != '.') 3458c3455 < sprintf((str + strlen(str)), ":%02d", tm->tm_sec); --- > sprintf(str + strlen(str), ":%02d", tm->tm_sec); 3466,3467c3463,3464 < min = ((abs(*tzp) / 60) % 60); < sprintf((str + strlen(str)), ((min != 0) ? "%+03d:%02d" : "%+03d"), hour, min); --- > min = (abs(*tzp) / 60) % 60; > sprintf(str + strlen(str), (min != 0) ? "%+03d:%02d" : "%+03d", hour, min); 3494c3491 < * assert... if ((tm->tm_mon < 1) || (tm->tm_mon > 12)) return -1; --- > * assert... if (tm->tm_mon < 1 || tm->tm_mon > 12) return -1; 3496c3493 < Assert((tm->tm_mon >= 1) && (tm->tm_mon <= 12)); --- > Assert(tm->tm_mon >= 1 && tm->tm_mon <= 12); 3504c3501 < ((tm->tm_year > 0) ? tm->tm_year : -(tm->tm_year - 1)), --- > (tm->tm_year > 0) ? tm->tm_year : -(tm->tm_year - 1), 3517c3514 < sprintf((str + strlen(str)), ":%02d.%06d", tm->tm_sec, fsec); --- > sprintf(str + strlen(str), ":%02d.%06d", tm->tm_sec, fsec); 3521c3518 < if ((fsec != 0) && (tm->tm_year > 0)) --- > if (fsec != 0 && tm->tm_year > 0) 3523c3520 < sprintf((str + strlen(str)), ":%09.6f", tm->tm_sec + fsec); --- > sprintf(str + strlen(str), ":%09.6f", tm->tm_sec + fsec); 3528c3525 < sprintf((str + strlen(str)), ":%02d", tm->tm_sec); --- > sprintf(str + strlen(str), ":%02d", tm->tm_sec); 3539,3540c3536,3537 < min = ((abs(*tzp) / 60) % 60); < sprintf((str + strlen(str)), ((min != 0) ? "%+03d:%02d" : "%+03d"), hour, min); --- > min = (abs(*tzp) / 60) % 60; > sprintf(str + strlen(str), (min != 0) ? "%+03d:%02d" : "%+03d", hour, min); 3544c3541 < sprintf((str + strlen(str)), " BC"); --- > sprintf(str + strlen(str), " BC"); 3555,3556c3552,3553 < sprintf((str + 5), "/%04d %02d:%02d", < ((tm->tm_year > 0) ? tm->tm_year : -(tm->tm_year - 1)), --- > sprintf(str + 5, "/%04d %02d:%02d", > (tm->tm_year > 0) ? tm->tm_year : -(tm->tm_year - 1), 3569c3566 < sprintf((str + strlen(str)), ":%02d.%06d", tm->tm_sec, fsec); --- > sprintf(str + strlen(str), ":%02d.%06d", tm->tm_sec, fsec); 3573c3570 < if ((fsec != 0) && (tm->tm_year > 0)) --- > if (fsec != 0 && tm->tm_year > 0) 3575c3572 < sprintf((str + strlen(str)), ":%09.6f", tm->tm_sec + fsec); --- > sprintf(str + strlen(str), ":%09.6f", tm->tm_sec + fsec); 3580c3577 < sprintf((str + strlen(str)), ":%02d", tm->tm_sec); --- > sprintf(str + strlen(str), ":%02d", tm->tm_sec); 3585c3582 < sprintf((str + strlen(str)), " %.*s", MAXTZLEN, *tzn); --- > sprintf(str + strlen(str), " %.*s", MAXTZLEN, *tzn); 3589,3590c3586,3587 < min = ((abs(*tzp) / 60) % 60); < sprintf((str + strlen(str)), ((min != 0) ? "%+03d:%02d" : "%+03d"), hour, min); --- > min = (abs(*tzp) / 60) % 60; > sprintf(str + strlen(str), (min != 0) ? "%+03d:%02d" : "%+03d", hour, min); 3595c3592 < sprintf((str + strlen(str)), " BC"); --- > sprintf(str + strlen(str), " BC"); 3603,3604c3600,3601 < sprintf((str + 5), ".%04d %02d:%02d", < ((tm->tm_year > 0) ? tm->tm_year : -(tm->tm_year - 1)), --- > sprintf(str + 5, ".%04d %02d:%02d", > (tm->tm_year > 0) ? tm->tm_year : -(tm->tm_year - 1), 3617c3614 < sprintf((str + strlen(str)), ":%02d.%06d", tm->tm_sec, fsec); --- > sprintf(str + strlen(str), ":%02d.%06d", tm->tm_sec, fsec); 3621c3618 < if ((fsec != 0) && (tm->tm_year > 0)) --- > if (fsec != 0 && tm->tm_year > 0) 3623c3620 < sprintf((str + strlen(str)), ":%09.6f", tm->tm_sec + fsec); --- > sprintf(str + strlen(str), ":%09.6f", tm->tm_sec + fsec); 3628c3625 < sprintf((str + strlen(str)), ":%02d", tm->tm_sec); --- > sprintf(str + strlen(str), ":%02d", tm->tm_sec); 3633c3630 < sprintf((str + strlen(str)), " %.*s", MAXTZLEN, *tzn); --- > sprintf(str + strlen(str), " %.*s", MAXTZLEN, *tzn); 3637,3638c3634,3635 < min = ((abs(*tzp) / 60) % 60); < sprintf((str + strlen(str)), ((min != 0) ? "%+03d:%02d" : "%+03d"), hour, min); --- > min = (abs(*tzp) / 60) % 60; > sprintf(str + strlen(str), (min != 0) ? "%+03d:%02d" : "%+03d", hour, min); 3643c3640 < sprintf((str + strlen(str)), " BC"); --- > sprintf(str + strlen(str), " BC"); 3654,3655c3651,3652 < strcpy((str + 3), " "); < --- > strcpy(str + 3, " "); > 3657c3654 < sprintf((str + 4), "%02d %3s", tm->tm_mday, months[tm->tm_mon - 1]); --- > sprintf(str + 4, "%02d %3s", tm->tm_mday, months[tm->tm_mon - 1]); 3659c3656 < sprintf((str + 4), "%3s %02d", months[tm->tm_mon - 1], tm->tm_mday); --- > sprintf(str + 4, "%3s %02d", months[tm->tm_mon - 1], tm->tm_mday); 3661c3658 < sprintf((str + 10), " %02d:%02d", tm->tm_hour, tm->tm_min); --- > sprintf(str + 10, " %02d:%02d", tm->tm_hour, tm->tm_min); 3673c3670 < sprintf((str + strlen(str)), ":%02d.%06d", tm->tm_sec, fsec); --- > sprintf(str + strlen(str), ":%02d.%06d", tm->tm_sec, fsec); 3677c3674 < if ((fsec != 0) && (tm->tm_year > 0)) --- > if (fsec != 0 && tm->tm_year > 0) 3679c3676 < sprintf((str + strlen(str)), ":%09.6f", tm->tm_sec + fsec); --- > sprintf(str + strlen(str), ":%09.6f", tm->tm_sec + fsec); 3684c3681 < sprintf((str + strlen(str)), ":%02d", tm->tm_sec); --- > sprintf(str + strlen(str), ":%02d", tm->tm_sec); 3686,3687c3683,3684 < sprintf((str + strlen(str)), " %04d", < ((tm->tm_year > 0) ? tm->tm_year : -(tm->tm_year - 1))); --- > sprintf(str + strlen(str), " %04d", > (tm->tm_year > 0) ? tm->tm_year : -(tm->tm_year - 1)); 3692c3689 < sprintf((str + strlen(str)), " %.*s", MAXTZLEN, *tzn); --- > sprintf(str + strlen(str), " %.*s", MAXTZLEN, *tzn); 3703,3704c3700,3701 < min = ((abs(*tzp) / 60) % 60); < sprintf((str + strlen(str)), ((min != 0) ? " %+03d:%02d" : " %+03d"), hour, min); --- > min = (abs(*tzp) / 60) % 60; > sprintf(str + strlen(str), (min != 0) ? " %+03d:%02d" : " %+03d", hour, min); 3709c3706 < sprintf((str + strlen(str)), " BC"); --- > sprintf(str + strlen(str), " BC"); 3745c3742 < tm->tm_year, ((tm->tm_year != 1) ? "s" : "")); --- > tm->tm_year, (tm->tm_year != 1) ? "s" : ""); 3753,3755c3750,3752 < sprintf(cp, "%s%s%d mon%s", (is_nonzero ? " " : ""), < ((is_before && (tm->tm_mon > 0)) ? "+" : ""), < tm->tm_mon, ((tm->tm_mon != 1) ? "s" : "")); --- > sprintf(cp, "%s%s%d mon%s", is_nonzero ? " " : "", > (is_before && tm->tm_mon > 0) ? "+" : "", > tm->tm_mon, (tm->tm_mon != 1) ? "s" : ""); 3763,3765c3760,3762 < sprintf(cp, "%s%s%d day%s", (is_nonzero ? " " : ""), < ((is_before && (tm->tm_mday > 0)) ? "+" : ""), < tm->tm_mday, ((tm->tm_mday != 1) ? "s" : "")); --- > sprintf(cp, "%s%s%d day%s", is_nonzero ? " " : "", > (is_before && tm->tm_mday > 0) ? "+" : "", > tm->tm_mday, (tm->tm_mday != 1) ? "s" : ""); 3771,3772c3768,3769 < if ((!is_nonzero) || (tm->tm_hour != 0) || (tm->tm_min != 0) < || (tm->tm_sec != 0) || (fsec != 0)) --- > if (!is_nonzero || tm->tm_hour != 0 || tm->tm_min != 0 || > tm->tm_sec != 0 || fsec != 0) 3774,3775c3771,3772 < int minus = ((tm->tm_hour < 0) || (tm->tm_min < 0) < || (tm->tm_sec < 0) || (fsec < 0)); --- > int minus = (tm->tm_hour < 0 || tm->tm_min < 0 || > tm->tm_sec < 0 || fsec < 0); 3777c3774 < sprintf(cp, "%s%s%02d:%02d", (is_nonzero ? " " : ""), --- > sprintf(cp, "%s%s%02d:%02d", is_nonzero ? " " : "", 3819c3816 < ((year != 1) ? "s" : "")); --- > (year != 1) ? "s" : ""); 3829c3826 < if (is_before || ((!is_nonzero) && (tm->tm_mon < 0))) --- > if (is_before || (!is_nonzero && tm->tm_mon < 0)) 3832,3833c3829,3830 < sprintf(cp, "%s%d mon%s", (is_nonzero ? " " : ""), mon, < ((mon != 1) ? "s" : "")); --- > sprintf(cp, "%s%d mon%s", is_nonzero ? " " : "", mon, > (mon != 1) ? "s" : ""); 3844c3841 < if (is_before || ((!is_nonzero) && (tm->tm_mday < 0))) --- > if (is_before || (!is_nonzero && tm->tm_mday < 0)) 3847,3848c3844,3845 < sprintf(cp, "%s%d day%s", (is_nonzero ? " " : ""), day, < ((day != 1) ? "s" : "")); --- > sprintf(cp, "%s%d day%s", is_nonzero ? " " : "", day, > (day != 1) ? "s" : ""); 3858c3855 < if (is_before || ((!is_nonzero) && (tm->tm_hour < 0))) --- > if (is_before || (!is_nonzero && tm->tm_hour < 0)) 3861,3862c3858,3859 < sprintf(cp, "%s%d hour%s", (is_nonzero ? " " : ""), hour, < ((hour != 1) ? "s" : "")); --- > sprintf(cp, "%s%d hour%s", is_nonzero ? " " : "", hour, > (hour != 1) ? "s" : ""); 3873c3870 < if (is_before || ((!is_nonzero) && (tm->tm_min < 0))) --- > if (is_before || (!is_nonzero && tm->tm_min < 0)) 3876,3877c3873,3874 < sprintf(cp, "%s%d min%s", (is_nonzero ? " " : ""), min, < ((min != 1) ? "s" : "")); --- > sprintf(cp, "%s%d min%s", is_nonzero ? " " : "", min, > (min != 1) ? "s" : ""); 3891c3888 < if (is_before || ((!is_nonzero) && (tm->tm_sec < 0))) --- > if (is_before || (!is_nonzero && tm->tm_sec < 0)) 3897c3894 < else if ((!is_nonzero) && (tm->tm_sec == 0) && (fsec < 0)) --- > else if (!is_nonzero && tm->tm_sec == 0 && fsec < 0) 3902,3903c3899,3900 < sprintf(cp, "%s%d.%02d secs", (is_nonzero ? " " : ""), < tm->tm_sec, (((int) sec) / 10000)); --- > sprintf(cp, "%s%d.%02d secs", is_nonzero ? " " : "", > tm->tm_sec, ((int) sec) / 10000); 3908c3905 < if (is_before || ((!is_nonzero) && (fsec < 0))) --- > if (is_before || (!is_nonzero && fsec < 0)) 3911c3908 < sprintf(cp, "%s%.2f secs", (is_nonzero ? " " : ""), sec); --- > sprintf(cp, "%s%.2f secs", is_nonzero ? " " : "", sec); 3923c3920 < if (is_before || ((!is_nonzero) && (tm->tm_sec < 0))) --- > if (is_before || (!is_nonzero && tm->tm_sec < 0)) 3926,3927c3923,3924 < sprintf(cp, "%s%d sec%s", (is_nonzero ? " " : ""), sec, < ((sec != 1) ? "s" : "")); --- > sprintf(cp, "%s%d sec%s", is_nonzero ? " " : "", sec, > (sec != 1) ? "s" : ""); Index: timestamp.c =================================================================== RCS file: /cvsroot/pgsql/src/backend/utils/adt/timestamp.c,v retrieving revision 1.119 diff -r1.119 timestamp.c 267c267 < if ((typmod < 0) || (typmod > MAX_TIMESTAMP_PRECISION)) --- > if (typmod < 0 || typmod > MAX_TIMESTAMP_PRECISION) 581c581 < interval ->time = pq_getmsgint64(buf); --- > interval->time = pq_getmsgint64(buf); 584c584 < interval ->time = pq_getmsgfloat8(buf); --- > interval->time = pq_getmsgfloat8(buf); 586c586 < interval ->month = pq_getmsgint(buf, sizeof(interval->month)); --- > interval->month = pq_getmsgint(buf, sizeof(interval->month)); 681,682c681,682 < interval ->month = ((interval->month / 12) *12); < interval ->time = 0; --- > interval->month = (interval->month / 12) * 12; > interval->time = 0; 686,687c686,687 < interval ->month %= 12; < interval ->time = 0; --- > interval->month %= 12; > interval->time = 0; 691c691 < interval ->time = 0; --- > interval->time = 0; 695c695 < interval ->month = 0; --- > interval->month = 0; 698,699c698,699 < interval ->time = (((int) (interval->time / INT64CONST(86400000000))) < * INT64CONST(86400000000)); --- > interval->time = ((int) (interval->time / INT64CONST(86400000000))) * > INT64CONST(86400000000); 702c702 < interval ->time = (((int) (interval->time / 86400)) * 86400); --- > interval->time = ((int) (interval->time / 86400)) * 86400; 714c714 < interval ->month = 0; --- > interval->month = 0; 717,720c717,720 < day = (interval->time / INT64CONST(86400000000)); < interval ->time -= (day * INT64CONST(86400000000)); < interval ->time = ((interval->time / INT64CONST(3600000000)) < *INT64CONST(3600000000)); --- > day = interval->time / INT64CONST(86400000000); > interval->time -= day * INT64CONST(86400000000); > interval->time = (interval->time / INT64CONST(3600000000)) * > INT64CONST(3600000000); 724c724 < interval ->time = (((int) (interval->time / 3600)) * 3600.0); --- > interval->time = ((int) (interval->time / 3600)) * 3600.0; 736c736 < interval ->month = 0; --- > interval->month = 0; 739,742c739,742 < hour = (interval->time / INT64CONST(3600000000)); < interval ->time -= (hour * INT64CONST(3600000000)); < interval ->time = ((interval->time / INT64CONST(60000000)) < *INT64CONST(60000000)); --- > hour = interval->time / INT64CONST(3600000000); > interval->time -= hour * INT64CONST(3600000000); > interval->time = (interval->time / INT64CONST(60000000)) * > INT64CONST(60000000); 746c746 < interval ->time = (((int) (interval->time / 60)) * 60); --- > interval->time = ((int) (interval->time / 60)) * 60; 758c758 < interval ->month = 0; --- > interval->month = 0; 761,762c761,762 < minute = (interval->time / INT64CONST(60000000)); < interval ->time -= (minute * INT64CONST(60000000)); --- > minute = interval->time / INT64CONST(60000000); > interval->time -= minute * INT64CONST(60000000); 773c773 < interval ->month = 0; --- > interval->month = 0; 776,777c776,777 < interval ->time = ((interval->time / INT64CONST(3600000000)) < *INT64CONST(3600000000)); --- > interval->time = (interval->time / INT64CONST(3600000000)) * > INT64CONST(3600000000); 780c780 < interval ->time = (((int) (interval->time / 3600)) * 3600); --- > interval->time = ((int) (interval->time / 3600)) * 3600; 788c788 < interval ->month = 0; --- > interval->month = 0; 791,792c791,792 < interval ->time = ((interval->time / INT64CONST(60000000)) < *INT64CONST(60000000)); --- > interval->time = (interval->time / INT64CONST(60000000)) * > INT64CONST(60000000); 795c795 < interval ->time = (((int) (interval->time / 60)) * 60); --- > interval->time = ((int) (interval->time / 60)) * 60; 803c803 < interval ->month = 0; --- > interval->month = 0; 816c816 < interval ->month = 0; --- > interval->month = 0; 820,822c820,822 < interval ->time -= (day * INT64CONST(86400000000)); < interval ->time = ((interval->time / INT64CONST(60000000)) < *INT64CONST(60000000)); --- > interval->time -= day * INT64CONST(86400000000); > interval->time = (interval->time / INT64CONST(60000000)) * > INT64CONST(60000000); 826c826 < interval ->time = (((int) (interval->time / 60)) * 60); --- > interval->time = ((int) (interval->time / 60)) * 60; 841c841 < interval ->month = 0; --- > interval->month = 0; 844,845c844,845 < day = (interval->time / INT64CONST(86400000000)); < interval ->time -= (day * INT64CONST(86400000000)); --- > day = interval->time / INT64CONST(86400000000); > interval->time -= day * INT64CONST(86400000000); 862c862 < interval ->month = 0; --- > interval->month = 0; 865,867c865,866 < hour = (interval->time / INT64CONST(3600000000)); < interval ->time -= (hour * INT64CONST(3600000000)); < --- > hour = interval->time / INT64CONST(3600000000); > interval->time -= hour * INT64CONST(3600000000); 878c877 < if ((precision < 0) || (precision > MAX_INTERVAL_PRECISION)) --- > if (precision < 0 || precision > MAX_INTERVAL_PRECISION) 895,896c894,897 < interval ->time = (((interval->time + IntervalOffsets[precision]) /IntervalScales[precision]) < * IntervalScales[precision]); --- > interval->time = (((interval->time + > IntervalOffsets[precision]) / > IntervalScales[precision]) * > IntervalScales[precision]; 900,901c901,904 < interval ->time = -(((-interval->time + IntervalOffsets[precision]) /IntervalScales[precision]) < * IntervalScales[precision]); --- > interval->time = -(((-interval->time + > IntervalOffsets[precision]) / > IntervalScales[precision]) * > IntervalScales[precision]); 904,905c907,909 < interval ->time = (rint(((double) interval->time) *IntervalScales[precision]) < / IntervalScales[precision]); --- > interval->time = rint(((double) interval->time) * > IntervalScales[precision]) / > IntervalScales[precision]; 957,967c961,971 < *hour = (time / INT64CONST(3600000000)); < time -= ((*hour) * INT64CONST(3600000000)); < *min = (time / INT64CONST(60000000)); < time -= ((*min) * INT64CONST(60000000)); < *sec = (time / INT64CONST(1000000)); < *fsec = (time - (*sec * INT64CONST(1000000))); < #else < *hour = (time / 3600); < time -= ((*hour) * 3600); < *min = (time / 60); < time -= ((*min) * 60); --- > *hour = time / INT64CONST(3600000000); > time -= (*hour) * INT64CONST(3600000000); > *min = time / INT64CONST(60000000); > time -= (*min) * INT64CONST(60000000); > *sec = time / INT64CONST(1000000); > *fsec = time - (*sec * INT64CONST(1000000)); > #else > *hour = time / 3600; > time -= (*hour) * 3600; > *min = time / 60; > time -= (*min) * 60; 1013c1017 < date -=1; --- > date -= 1; 1021c1025 < date -=1; --- > date -=1; 1141c1145 < *result = (date *INT64CONST(86400000000)) +time; --- > *result = date * INT64CONST(86400000000) + time; 1146c1150,1151 < if ((*result < 0) ? (date >=0) : (date <0)) --- > if ((*result < 0 && date >= 0) || > (*result >= 0 && date < 0)) 1149c1154 < *result = ((date *86400) +time); --- > *result = date * 86400 + time; 1208c1213 < span->month = ((tm->tm_year * 12) + tm->tm_mon); --- > span->month = tm->tm_year * 12 + tm->tm_mon; 1614c1619 < span1 += ((interval1->month * INT64CONST(30) * INT64CONST(86400000000))); --- > span1 += interval1->month * INT64CONST(30) * INT64CONST(86400000000); 1616c1621 < span2 += ((interval2->month * INT64CONST(30) * INT64CONST(86400000000))); --- > span2 += interval2->month * INT64CONST(30) * INT64CONST(86400000000); 1619c1624 < span1 += (interval1->month * (30.0 * 86400)); --- > span1 += interval1->month * (30.0 * 86400); 1621c1626 < span2 += (interval2->month * (30.0 * 86400)); --- > span2 += interval2->month * (30.0 * 86400); 2158,2159c2163,2164 < result->time += ((months - result->month) * INT64CONST(30) < * INT64CONST(86400000000)); --- > result->time += (months - result->month) * INT64CONST(30) * > INT64CONST(86400000000); 2202,2203c2207,2208 < result->time += (((span->month - (result->month * factor)) < * INT64CONST(30) * INT64CONST(86400000000)) / factor); --- > result->time += ((span->month - (result->month * factor)) * > INT64CONST(30) * INT64CONST(86400000000)) / factor; 2205c2210 < months = (span->month / factor); --- > months = span->month / factor; 2331,2332c2336,2337 < if ((timestamp2tm(dt1, NULL, tm1, &fsec1, NULL) == 0) < && (timestamp2tm(dt2, NULL, tm2, &fsec2, NULL) == 0)) --- > if (timestamp2tm(dt1, NULL, tm1, &fsec1, NULL) == 0 && > timestamp2tm(dt2, NULL, tm2, &fsec2, NULL) == 0) 2445,2446c2450,2451 < if ((timestamp2tm(dt1, &tz1, tm1, &fsec1, &tzn) == 0) < && (timestamp2tm(dt2, &tz2, tm2, &fsec2, &tzn) == 0)) --- > if (timestamp2tm(dt1, &tz1, tm1, &fsec1, &tzn) == 0 && > timestamp2tm(dt2, &tz2, tm2, &fsec2, &tzn) == 0) 2813c2818 < fsec = ((fsec / 1000) * 1000); --- > fsec = (fsec / 1000) * 1000; 3153c3158 < if (dayn < (day4 - day0)) --- > if (dayn < day4 - day0) 3161c3166 < result = (((dayn - (day4 - day0)) / 7) + 1); --- > result = (dayn - (day4 - day0)) / 7 + 1; 3174,3175c3179,3180 < if (dayn >= (day4 - day0)) < result = (((dayn - (day4 - day0)) / 7) + 1); --- > if (dayn >= day4 - day0) > result = (dayn - (day4 - day0)) / 7 + 1; 3207c3212 < if (dayn < (day4 - day0)) --- > if (dayn < day4 - day0) 3217c3222 < result = (((dayn - (day4 - day0)) / 7) + 1); --- > result = (dayn - (day4 - day0)) / 7 + 1; 3230c3235 < if (dayn >= (day4 - day0)) --- > if (dayn >= day4 - day0) 3279c3284 < result = ((tm->tm_sec * 1000000e0) + fsec); --- > result = tm->tm_sec * 1000000e0 + fsec; 3287c3292 < result = ((tm->tm_sec * 1000e0) + (fsec / 1000e0)); --- > result = tm->tm_sec * 1000e0 + fsec / 1000e0; 3295c3300 < result = (tm->tm_sec + (fsec / 1000000e0)); --- > result = tm->tm_sec + fsec / 1000000e0; 3297c3302 < result = (tm->tm_sec + fsec); --- > result = tm->tm_sec + fsec; 3318c3323 < result = ((tm->tm_mon - 1) / 3) + 1; --- > result = (tm->tm_mon - 1) / 3 + 1; 3348,3351c3353,3357 < /* < * centuries AD, c>0: year in [ (c-1)*100+1 : c*100 ] < * centuries BC, c<0: year in [ c*100 : (c+1)*100-1 < * ] there is no number 0 century. --- > /* ---- > * centuries AD, c>0: year in [ (c-1)* 100 + 1 : c*100 ] > * centuries BC, c<0: year in [ c*100 : (c+1) * 100 - 1] > * there is no number 0 century. > * ---- 3371,3372c3377,3378 < result += (((((tm->tm_hour * 60) + tm->tm_min) * 60) < + tm->tm_sec + (fsec / 1000000e0)) / 86400e0); --- > result += ((((tm->tm_hour * 60) + tm->tm_min) * 60) + > tm->tm_sec + (fsec / 1000000e0)) / 86400e0; 3374,3375c3380,3381 < result += (((((tm->tm_hour * 60) + tm->tm_min) * 60) < + tm->tm_sec + fsec) / 86400e0); --- > result += ((((tm->tm_hour * 60) + tm->tm_min) * 60) + > tm->tm_sec + fsec) / 86400e0; 3518c3524 < result = ((tm->tm_sec * 1000000e0) + fsec); --- > result = tm->tm_sec * 1000000e0 + fsec; 3526c3532 < result = ((tm->tm_sec * 1000e0) + (fsec / 1000e0)); --- > result = tm->tm_sec * 1000e0 + fsec / 1000e0; 3534c3540 < result = (tm->tm_sec + (fsec / 1000000e0)); --- > result = tm->tm_sec + fsec / 1000000e0; 3536c3542 < result = (tm->tm_sec + fsec); --- > result = tm->tm_sec + fsec; 3557c3563 < result = ((tm->tm_mon - 1) / 3) + 1; --- > result = (tm->tm_mon - 1) / 3 + 1; 3583c3589 < result = ((tm->tm_year + 99) / 100); --- > result = (tm->tm_year + 99) / 100; 3591c3597 < result = ((tm->tm_year + 999) / 1000); --- > result = (tm->tm_year + 999) / 1000; 3599,3600c3605,3606 < result += (((((tm->tm_hour * 60) + tm->tm_min) * 60) < + tm->tm_sec + (fsec / 1000000e0)) / 86400e0); --- > result += ((((tm->tm_hour * 60) + tm->tm_min) * 60) + > tm->tm_sec + (fsec / 1000000e0)) / 86400e0; 3602,3603c3608,3609 < result += (((((tm->tm_hour * 60) + tm->tm_min) * 60) < + tm->tm_sec + fsec) / 86400e0); --- > result += ((((tm->tm_hour * 60) + tm->tm_min) * 60) + > tm->tm_sec + fsec) / 86400e0; 3622c3628 < result = ((timestamp -SetEpochTimestamp()) /1000000e0); --- > result = (timestamp - SetEpochTimestamp()) /1000000e0; 3624c3630 < result = timestamp -SetEpochTimestamp(); --- > result = timestamp - SetEpochTimestamp(); 3699c3705 < result = ((tm->tm_sec * 1000000e0) + fsec); --- > result = tm->tm_sec * 1000000e0 + fsec; 3707c3713 < result = ((tm->tm_sec * 1000e0) + (fsec / 1000e0)); --- > result = tm->tm_sec * 1000e0 + fsec / 1000e0; 3715c3721 < result = (tm->tm_sec + (fsec / 1000000e0)); --- > result = tm->tm_sec + fsec / 1000000e0; 3717c3723 < result = (tm->tm_sec + fsec); --- > result = tm->tm_sec + fsec; 3776c3782 < else if ((type == RESERV) && (val == DTK_EPOCH)) --- > else if (type == RESERV && val == DTK_EPOCH) 3779c3785 < result = (interval->time / 1000000e0); --- > result = interval->time / 1000000e0; 3785,3786c3791,3792 < result += ((365.25 * 86400) * (interval->month / 12)); < result += ((30.0 * 86400) * (interval->month % 12)); --- > result += (365.25 * 86400) * (interval->month / 12); > result += (30.0 * 86400) * (interval->month % 12); 3828c3834 < if ((type == TZ) || (type == DTZ)) --- > if (type == TZ || type == DTZ) 3869c3875 < tz = (zone->time / INT64CONST(1000000)); --- > tz = zone->time / INT64CONST(1000000); 3871c3877 < tz = (zone->time); --- > tz = zone->time; 3977c3983 < if ((type == TZ) || (type == DTZ)) --- > if (type == TZ || type == DTZ)