diff options
Diffstat (limited to 'src/backend/utils/adt')
| -rw-r--r-- | src/backend/utils/adt/date.c | 34 | ||||
| -rw-r--r-- | src/backend/utils/adt/datetime.c | 8 | ||||
| -rw-r--r-- | src/backend/utils/adt/formatting.c | 4 | ||||
| -rw-r--r-- | src/backend/utils/adt/nabstime.c | 32 | ||||
| -rw-r--r-- | src/backend/utils/adt/numeric.c | 4 | ||||
| -rw-r--r-- | src/backend/utils/adt/selfuncs.c | 6 | ||||
| -rw-r--r-- | src/backend/utils/adt/timestamp.c | 222 |
7 files changed, 173 insertions, 137 deletions
diff --git a/src/backend/utils/adt/date.c b/src/backend/utils/adt/date.c index fcded9b763..66f5fd8cfe 100644 --- a/src/backend/utils/adt/date.c +++ b/src/backend/utils/adt/date.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/adt/date.c,v 1.102 2004/08/29 05:06:49 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/utils/adt/date.c,v 1.103 2004/08/30 02:54:39 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -55,7 +55,7 @@ Datum date_in(PG_FUNCTION_ARGS) { char *str = PG_GETARG_CSTRING(0); - DateADT date; + DateADT date; fsec_t fsec; struct pg_tm tt, *tm = &tt; @@ -109,13 +109,13 @@ date_in(PG_FUNCTION_ARGS) Datum date_out(PG_FUNCTION_ARGS) { - DateADT date = PG_GETARG_DATEADT(0); + DateADT date = PG_GETARG_DATEADT(0); char *result; struct pg_tm tt, *tm = &tt; char buf[MAXDATELEN + 1]; - j2date(date + POSTGRES_EPOCH_JDATE, + j2date(date +POSTGRES_EPOCH_JDATE, &(tm->tm_year), &(tm->tm_mon), &(tm->tm_mday)); EncodeDateOnly(tm, DateStyle, buf); @@ -141,7 +141,7 @@ date_recv(PG_FUNCTION_ARGS) Datum date_send(PG_FUNCTION_ARGS) { - DateADT date = PG_GETARG_DATEADT(0); + DateADT date = PG_GETARG_DATEADT(0); StringInfoData buf; pq_begintypsend(&buf); @@ -717,7 +717,7 @@ date_timestamp(PG_FUNCTION_ARGS) Datum timestamp_date(PG_FUNCTION_ARGS) { - Timestamp timestamp = PG_GETARG_TIMESTAMP(0); + Timestamp timestamp = PG_GETARG_TIMESTAMP(0); DateADT result; struct pg_tm tt, *tm = &tt; @@ -726,7 +726,7 @@ timestamp_date(PG_FUNCTION_ARGS) if (TIMESTAMP_NOT_FINITE(timestamp)) PG_RETURN_NULL(); - if (timestamp2tm(timestamp, NULL, tm, &fsec, NULL) != 0) + if (timestamp2tm(timestamp, NULL, tm, &fsec, NULL) !=0) ereport(ERROR, (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), errmsg("timestamp out of range"))); @@ -769,7 +769,7 @@ timestamptz_date(PG_FUNCTION_ARGS) if (TIMESTAMP_NOT_FINITE(timestamp)) PG_RETURN_NULL(); - if (timestamp2tm(timestamp, &tz, tm, &fsec, &tzn) != 0) + if (timestamp2tm(timestamp, &tz, tm, &fsec, &tzn) !=0) ereport(ERROR, (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), errmsg("timestamp out of range"))); @@ -823,7 +823,7 @@ Datum date_text(PG_FUNCTION_ARGS) { /* Input is a Date, but may as well leave it in Datum form */ - Datum date = PG_GETARG_DATUM(0); + Datum date = PG_GETARG_DATUM(0); text *result; char *str; int len; @@ -1322,7 +1322,7 @@ overlaps_time(PG_FUNCTION_ARGS) Datum timestamp_time(PG_FUNCTION_ARGS) { - Timestamp timestamp = PG_GETARG_TIMESTAMP(0); + Timestamp timestamp = PG_GETARG_TIMESTAMP(0); TimeADT result; struct pg_tm tt, *tm = &tt; @@ -1331,7 +1331,7 @@ timestamp_time(PG_FUNCTION_ARGS) if (TIMESTAMP_NOT_FINITE(timestamp)) PG_RETURN_NULL(); - if (timestamp2tm(timestamp, NULL, tm, &fsec, NULL) != 0) + if (timestamp2tm(timestamp, NULL, tm, &fsec, NULL) !=0) ereport(ERROR, (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), errmsg("timestamp out of range"))); @@ -1368,7 +1368,7 @@ timestamptz_time(PG_FUNCTION_ARGS) if (TIMESTAMP_NOT_FINITE(timestamp)) PG_RETURN_NULL(); - if (timestamp2tm(timestamp, &tz, tm, &fsec, &tzn) != 0) + if (timestamp2tm(timestamp, &tz, tm, &fsec, &tzn) !=0) ereport(ERROR, (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), errmsg("timestamp out of range"))); @@ -1394,7 +1394,7 @@ timestamptz_time(PG_FUNCTION_ARGS) Datum datetime_timestamp(PG_FUNCTION_ARGS) { - DateADT date = PG_GETARG_DATEADT(0); + DateADT date = PG_GETARG_DATEADT(0); TimeADT time = PG_GETARG_TIMEADT(1); Timestamp result; @@ -2246,7 +2246,7 @@ timestamptz_timetz(PG_FUNCTION_ARGS) if (TIMESTAMP_NOT_FINITE(timestamp)) PG_RETURN_NULL(); - if (timestamp2tm(timestamp, &tz, tm, &fsec, &tzn) != 0) + if (timestamp2tm(timestamp, &tz, tm, &fsec, &tzn) !=0) ereport(ERROR, (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), errmsg("timestamp out of range"))); @@ -2268,15 +2268,15 @@ timestamptz_timetz(PG_FUNCTION_ARGS) Datum datetimetz_timestamptz(PG_FUNCTION_ARGS) { - DateADT date = PG_GETARG_DATEADT(0); + DateADT date = PG_GETARG_DATEADT(0); TimeTzADT *time = PG_GETARG_TIMETZADT_P(1); TimestampTz result; #ifdef HAVE_INT64_TIMESTAMP - result = (((date * INT64CONST(86400000000)) + time->time) + result = (((date *INT64CONST(86400000000)) +time->time) + (time->zone * INT64CONST(1000000))); #else - result = (((date * 86400.0) + time->time) + time->zone); + result = (((date *86400.0) +time->time) + time->zone); #endif PG_RETURN_TIMESTAMP(result); diff --git a/src/backend/utils/adt/datetime.c b/src/backend/utils/adt/datetime.c index 6e0311d8ae..4459d286c9 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.133 2004/08/29 05:06:49 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/utils/adt/datetime.c,v 1.134 2004/08/30 02:54:39 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -666,6 +666,7 @@ j2day(int date) unsigned int day; day = date; + day += 1; day %= 7; @@ -1585,7 +1586,7 @@ int DetermineLocalTimeZone(struct pg_tm * tm) { int tz; - int date, + int date , sec; pg_time_t day, mysec, @@ -1609,7 +1610,8 @@ DetermineLocalTimeZone(struct pg_tm * tm) if (!IS_VALID_JULIAN(tm->tm_year, tm->tm_mon, tm->tm_mday)) goto overflow; date = date2j(tm->tm_year, tm->tm_mon, tm->tm_mday) - UNIX_EPOCH_JDATE; - day = ((pg_time_t) date) * 86400; + + day = ((pg_time_t) date) *86400; if (day / 86400 != date) goto overflow; sec = tm->tm_sec + (tm->tm_min + tm->tm_hour * 60) * 60; diff --git a/src/backend/utils/adt/formatting.c b/src/backend/utils/adt/formatting.c index 13c23bb57a..369353e6ce 100644 --- a/src/backend/utils/adt/formatting.c +++ b/src/backend/utils/adt/formatting.c @@ -1,7 +1,7 @@ /* ----------------------------------------------------------------------- * formatting.c * - * $PostgreSQL: pgsql/src/backend/utils/adt/formatting.c,v 1.77 2004/08/29 05:06:49 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/utils/adt/formatting.c,v 1.78 2004/08/30 02:54:39 momjian Exp $ * * * Portions Copyright (c) 1999-2004, PostgreSQL Global Development Group @@ -3556,6 +3556,7 @@ NUM_prepare_locale(NUMProc *Np) */ if (lconv->decimal_point && *lconv->decimal_point) Np->decimal = lconv->decimal_point; + else Np->decimal = "."; @@ -3579,6 +3580,7 @@ NUM_prepare_locale(NUMProc *Np) Np->L_negative_sign = "-"; Np->L_positive_sign = "+"; Np->decimal = "."; + Np->L_thousands_sep = ","; Np->L_currency_symbol = " "; } diff --git a/src/backend/utils/adt/nabstime.c b/src/backend/utils/adt/nabstime.c index 4a2e862fb7..09c5b66129 100644 --- a/src/backend/utils/adt/nabstime.c +++ b/src/backend/utils/adt/nabstime.c @@ -10,7 +10,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/adt/nabstime.c,v 1.125 2004/08/29 05:06:49 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/utils/adt/nabstime.c,v 1.126 2004/08/30 02:54:39 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -547,7 +547,7 @@ btabstimecmp(PG_FUNCTION_ARGS) Datum timestamp_abstime(PG_FUNCTION_ARGS) { - Timestamp timestamp = PG_GETARG_TIMESTAMP(0); + Timestamp timestamp = PG_GETARG_TIMESTAMP(0); AbsoluteTime result; fsec_t fsec; int tz; @@ -816,6 +816,7 @@ tintervalin(PG_FUNCTION_ARGS) t2; interval = (TimeInterval) palloc(sizeof(TimeIntervalData)); + if (istinterval(intervalstr, &t1, &t2) == 0) ereport(ERROR, (errcode(ERRCODE_INVALID_DATETIME_FORMAT), @@ -823,14 +824,15 @@ tintervalin(PG_FUNCTION_ARGS) intervalstr))); if (t1 == INVALID_ABSTIME || t2 == INVALID_ABSTIME) - interval->status = T_INTERVAL_INVAL; /* undefined */ + interval ->status = T_INTERVAL_INVAL; /* undefined */ + else - interval->status = T_INTERVAL_VALID; + interval ->status = T_INTERVAL_VALID; i_start = ABSTIMEMIN(t1, t2); i_end = ABSTIMEMAX(t1, t2); - interval->data[0] = i_start; - interval->data[1] = i_end; + interval ->data[0] = i_start; + interval ->data[1] = i_end; PG_RETURN_TIMEINTERVAL(interval); } @@ -877,15 +879,16 @@ tintervalrecv(PG_FUNCTION_ARGS) interval = (TimeInterval) palloc(sizeof(TimeIntervalData)); - interval->status = pq_getmsgint(buf, sizeof(interval->status)); + interval ->status = pq_getmsgint(buf, sizeof(interval->status)); + if (!(interval->status == T_INTERVAL_INVAL || interval->status == T_INTERVAL_VALID)) ereport(ERROR, (errcode(ERRCODE_INVALID_BINARY_REPRESENTATION), errmsg("invalid status in external \"tinterval\" value"))); - interval->data[0] = pq_getmsgint(buf, sizeof(interval->data[0])); - interval->data[1] = pq_getmsgint(buf, sizeof(interval->data[1])); + interval ->data[0] = pq_getmsgint(buf, sizeof(interval->data[0])); + interval ->data[1] = pq_getmsgint(buf, sizeof(interval->data[1])); PG_RETURN_TIMEINTERVAL(interval); } @@ -931,7 +934,7 @@ interval_reltime(PG_FUNCTION_ARGS) year = 0; month = 0; } - else if (abs(interval->month) >= 12) + else if (abs(interval->month) >=12) { year = (interval->month / 12); month = (interval->month % 12); @@ -1016,12 +1019,13 @@ mktinterval(PG_FUNCTION_ARGS) interval = (TimeInterval) palloc(sizeof(TimeIntervalData)); if (t1 == INVALID_ABSTIME || t2 == INVALID_ABSTIME) - interval->status = T_INTERVAL_INVAL; + interval ->status = T_INTERVAL_INVAL; + else { - interval->status = T_INTERVAL_VALID; - interval->data[0] = tstart; - interval->data[1] = tend; + interval ->status = T_INTERVAL_VALID; + interval ->data[0] = tstart; + interval ->data[1] = tend; } PG_RETURN_TIMEINTERVAL(interval); diff --git a/src/backend/utils/adt/numeric.c b/src/backend/utils/adt/numeric.c index 9c312643c5..9c8abfb365 100644 --- a/src/backend/utils/adt/numeric.c +++ b/src/backend/utils/adt/numeric.c @@ -14,7 +14,7 @@ * Copyright (c) 1998-2004, PostgreSQL Global Development Group * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/adt/numeric.c,v 1.78 2004/08/29 05:06:49 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/utils/adt/numeric.c,v 1.79 2004/08/30 02:54:39 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -462,7 +462,7 @@ numeric_send(PG_FUNCTION_ARGS) * scale of the attribute have to be applied on the value. */ Datum -numeric(PG_FUNCTION_ARGS) +numeric (PG_FUNCTION_ARGS) { Numeric num = PG_GETARG_NUMERIC(0); int32 typmod = PG_GETARG_INT32(1); diff --git a/src/backend/utils/adt/selfuncs.c b/src/backend/utils/adt/selfuncs.c index b1f66d9c9a..412a0a3231 100644 --- a/src/backend/utils/adt/selfuncs.c +++ b/src/backend/utils/adt/selfuncs.c @@ -15,7 +15,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/adt/selfuncs.c,v 1.164 2004/08/29 05:06:49 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/utils/adt/selfuncs.c,v 1.165 2004/08/30 02:54:39 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -2755,7 +2755,7 @@ convert_timevalue_to_scalar(Datum value, Oid typid) return (interval->time + (interval->month * ((365.25 / 12.0) * 86400000000.0))); #else return interval->time + - interval->month * (365.25 / 12.0 * 24.0 * 60.0 * 60.0); + interval ->month * (365.25 / 12.0 * 24.0 * 60.0 * 60.0); #endif } case RELTIMEOID: @@ -2770,7 +2770,7 @@ convert_timevalue_to_scalar(Datum value, Oid typid) #ifdef HAVE_INT64_TIMESTAMP if (interval->status != 0) - return ((interval->data[1] - interval->data[0]) * 1000000.0); + return ((interval->data[1] - interval->data[0]) *1000000.0); #else if (interval->status != 0) return interval->data[1] - interval->data[0]; diff --git a/src/backend/utils/adt/timestamp.c b/src/backend/utils/adt/timestamp.c index 375ff13068..83286502e8 100644 --- a/src/backend/utils/adt/timestamp.c +++ b/src/backend/utils/adt/timestamp.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/adt/timestamp.c,v 1.112 2004/08/29 05:06:49 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/utils/adt/timestamp.c,v 1.113 2004/08/30 02:54:39 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -135,7 +135,7 @@ timestamp_in(PG_FUNCTION_ARGS) Datum timestamp_out(PG_FUNCTION_ARGS) { - Timestamp timestamp = PG_GETARG_TIMESTAMP(0); + Timestamp timestamp = PG_GETARG_TIMESTAMP(0); char *result; struct pg_tm tt, *tm = &tt; @@ -166,13 +166,14 @@ Datum timestamp_recv(PG_FUNCTION_ARGS) { StringInfo buf = (StringInfo) PG_GETARG_POINTER(0); - Timestamp timestamp; + Timestamp timestamp; struct pg_tm tt, *tm = &tt; fsec_t fsec; #ifdef HAVE_INT64_TIMESTAMP timestamp = (Timestamp) pq_getmsgint64(buf); + #else timestamp = (Timestamp) pq_getmsgfloat8(buf); #endif @@ -180,7 +181,7 @@ timestamp_recv(PG_FUNCTION_ARGS) /* rangecheck: see if timestamp_out would like it */ if (TIMESTAMP_NOT_FINITE(timestamp)) /* ok */ ; - else if (timestamp2tm(timestamp, NULL, tm, &fsec, NULL) != 0) + else if (timestamp2tm(timestamp, NULL, tm, &fsec, NULL) !=0) ereport(ERROR, (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), errmsg("timestamp out of range"))); @@ -194,7 +195,7 @@ timestamp_recv(PG_FUNCTION_ARGS) Datum timestamp_send(PG_FUNCTION_ARGS) { - Timestamp timestamp = PG_GETARG_TIMESTAMP(0); + Timestamp timestamp = PG_GETARG_TIMESTAMP(0); StringInfoData buf; pq_begintypsend(&buf); @@ -214,7 +215,7 @@ timestamp_send(PG_FUNCTION_ARGS) Datum timestamp_scale(PG_FUNCTION_ARGS) { - Timestamp timestamp = PG_GETARG_TIMESTAMP(0); + Timestamp timestamp = PG_GETARG_TIMESTAMP(0); int32 typmod = PG_GETARG_INT32(1); Timestamp result; @@ -416,6 +417,7 @@ timestamptz_recv(PG_FUNCTION_ARGS) #ifdef HAVE_INT64_TIMESTAMP timestamp = (TimestampTz) pq_getmsgint64(buf); + #else timestamp = (TimestampTz) pq_getmsgfloat8(buf); #endif @@ -423,7 +425,7 @@ timestamptz_recv(PG_FUNCTION_ARGS) /* rangecheck: see if timestamptz_out would like it */ if (TIMESTAMP_NOT_FINITE(timestamp)) /* ok */ ; - else if (timestamp2tm(timestamp, &tz, tm, &fsec, &tzn) != 0) + else if (timestamp2tm(timestamp, &tz, tm, &fsec, &tzn) !=0) ereport(ERROR, (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), errmsg("timestamp out of range"))); @@ -577,11 +579,12 @@ interval_recv(PG_FUNCTION_ARGS) interval = (Interval *) palloc(sizeof(Interval)); #ifdef HAVE_INT64_TIMESTAMP - interval->time = pq_getmsgint64(buf); + interval ->time = pq_getmsgint64(buf); + #else - interval->time = pq_getmsgfloat8(buf); + interval ->time = pq_getmsgfloat8(buf); #endif - interval->month = pq_getmsgint(buf, sizeof(interval->month)); + interval ->month = pq_getmsgint(buf, sizeof(interval->month)); PG_RETURN_INTERVAL_P(interval); } @@ -676,25 +679,28 @@ AdjustIntervalForTypmod(Interval *interval, int32 typmod) } else if (range == INTERVAL_MASK(YEAR)) { - interval->month = ((interval->month / 12) * 12); - interval->time = 0; + interval ->month = ((interval->month / 12) *12); + interval ->time = 0; } else if (range == INTERVAL_MASK(MONTH)) { - interval->month %= 12; - interval->time = 0; + interval ->month %= 12; + interval ->time = 0; } /* YEAR TO MONTH */ else if (range == (INTERVAL_MASK(YEAR) | INTERVAL_MASK(MONTH))) - interval->time = 0; + interval ->time = 0; + else if (range == INTERVAL_MASK(DAY)) { - interval->month = 0; + interval ->month = 0; + #ifdef HAVE_INT64_TIMESTAMP - interval->time = (((int) (interval->time / INT64CONST(86400000000))) - * INT64CONST(86400000000)); + interval ->time = (((int) (interval->time / INT64CONST(86400000000))) + * INT64CONST(86400000000)); + #else - interval->time = (((int) (interval->time / 86400)) * 86400); + interval ->time = (((int) (interval->time / 86400)) * 86400); #endif } else if (range == INTERVAL_MASK(HOUR)) @@ -706,15 +712,17 @@ AdjustIntervalForTypmod(Interval *interval, int32 typmod) double day; #endif - interval->month = 0; + interval ->month = 0; + #ifdef HAVE_INT64_TIMESTAMP day = (interval->time / INT64CONST(86400000000)); - interval->time -= (day * INT64CONST(86400000000)); - interval->time = ((interval->time / INT64CONST(3600000000)) - * INT64CONST(3600000000)); + interval ->time -= (day * INT64CONST(86400000000)); + interval ->time = ((interval->time / INT64CONST(3600000000)) + *INT64CONST(3600000000)); + #else TMODULO(interval->time, day, 86400.0); - interval->time = (((int) (interval->time / 3600)) * 3600.0); + interval ->time = (((int) (interval->time / 3600)) * 3600.0); #endif } else if (range == INTERVAL_MASK(MINUTE)) @@ -726,15 +734,17 @@ AdjustIntervalForTypmod(Interval *interval, int32 typmod) double hour; #endif - interval->month = 0; + interval ->month = 0; + #ifdef HAVE_INT64_TIMESTAMP hour = (interval->time / INT64CONST(3600000000)); - interval->time -= (hour * INT64CONST(3600000000)); - interval->time = ((interval->time / INT64CONST(60000000)) - * INT64CONST(60000000)); + interval ->time -= (hour * INT64CONST(3600000000)); + interval ->time = ((interval->time / INT64CONST(60000000)) + *INT64CONST(60000000)); + #else TMODULO(interval->time, hour, 3600.0); - interval->time = (((int) (interval->time / 60)) * 60); + interval ->time = (((int) (interval->time / 60)) * 60); #endif } else if (range == INTERVAL_MASK(SECOND)) @@ -746,10 +756,12 @@ AdjustIntervalForTypmod(Interval *interval, int32 typmod) double minute; #endif - interval->month = 0; + interval ->month = 0; + #ifdef HAVE_INT64_TIMESTAMP minute = (interval->time / INT64CONST(60000000)); - interval->time -= (minute * INT64CONST(60000000)); + interval ->time -= (minute * INT64CONST(60000000)); + #else TMODULO(interval->time, minute, 60.0); /* interval->time = (int)(interval->time); */ @@ -759,12 +771,14 @@ AdjustIntervalForTypmod(Interval *interval, int32 typmod) else if (range == (INTERVAL_MASK(DAY) | INTERVAL_MASK(HOUR))) { - interval->month = 0; + interval ->month = 0; + #ifdef HAVE_INT64_TIMESTAMP - interval->time = ((interval->time / INT64CONST(3600000000)) - * INT64CONST(3600000000)); + interval ->time = ((interval->time / INT64CONST(3600000000)) + *INT64CONST(3600000000)); + #else - interval->time = (((int) (interval->time / 3600)) * 3600); + interval ->time = (((int) (interval->time / 3600)) * 3600); #endif } /* DAY TO MINUTE */ @@ -772,12 +786,14 @@ AdjustIntervalForTypmod(Interval *interval, int32 typmod) INTERVAL_MASK(HOUR) | INTERVAL_MASK(MINUTE))) { - interval->month = 0; + interval ->month = 0; + #ifdef HAVE_INT64_TIMESTAMP - interval->time = ((interval->time / INT64CONST(60000000)) - * INT64CONST(60000000)); + interval ->time = ((interval->time / INT64CONST(60000000)) + *INT64CONST(60000000)); + #else - interval->time = (((int) (interval->time / 60)) * 60); + interval ->time = (((int) (interval->time / 60)) * 60); #endif } /* DAY TO SECOND */ @@ -785,7 +801,8 @@ AdjustIntervalForTypmod(Interval *interval, int32 typmod) INTERVAL_MASK(HOUR) | INTERVAL_MASK(MINUTE) | INTERVAL_MASK(SECOND))) - interval->month = 0; + interval ->month = 0; + /* HOUR TO MINUTE */ else if (range == (INTERVAL_MASK(HOUR) | INTERVAL_MASK(MINUTE))) @@ -797,15 +814,17 @@ AdjustIntervalForTypmod(Interval *interval, int32 typmod) double day; #endif - interval->month = 0; + interval ->month = 0; + #ifdef HAVE_INT64_TIMESTAMP day = (interval->time / INT64CONST(86400000000)); - 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)); + #else TMODULO(interval->time, day, 86400.0); - interval->time = (((int) (interval->time / 60)) * 60); + interval ->time = (((int) (interval->time / 60)) * 60); #endif } /* HOUR TO SECOND */ @@ -820,10 +839,12 @@ AdjustIntervalForTypmod(Interval *interval, int32 typmod) double day; #endif - interval->month = 0; + interval ->month = 0; + #ifdef HAVE_INT64_TIMESTAMP day = (interval->time / INT64CONST(86400000000)); - interval->time -= (day * INT64CONST(86400000000)); + interval ->time -= (day * INT64CONST(86400000000)); + #else TMODULO(interval->time, day, 86400.0); #endif @@ -839,10 +860,12 @@ AdjustIntervalForTypmod(Interval *interval, int32 typmod) double hour; #endif - interval->month = 0; + interval ->month = 0; + #ifdef HAVE_INT64_TIMESTAMP hour = (interval->time / INT64CONST(3600000000)); - interval->time -= (hour * INT64CONST(3600000000)); + interval ->time -= (hour * INT64CONST(3600000000)); + #else TMODULO(interval->time, hour, 3600.0); #endif @@ -870,17 +893,17 @@ AdjustIntervalForTypmod(Interval *interval, int32 typmod) #ifdef HAVE_INT64_TIMESTAMP if (interval->time >= INT64CONST(0)) { - interval->time = (((interval->time + IntervalOffsets[precision]) / IntervalScales[precision]) - * IntervalScales[precision]); + interval ->time = (((interval->time + IntervalOffsets[precision]) /IntervalScales[precision]) + * IntervalScales[precision]); } else { - interval->time = -(((-interval->time + IntervalOffsets[precision]) / IntervalScales[precision]) - * IntervalScales[precision]); + interval ->time = -(((-interval->time + IntervalOffsets[precision]) /IntervalScales[precision]) + * IntervalScales[precision]); } #else - interval->time = (rint(((double) interval->time) * IntervalScales[precision]) - / IntervalScales[precision]); + interval ->time = (rint(((double) interval->time) *IntervalScales[precision]) + / IntervalScales[precision]); #endif } } @@ -963,7 +986,7 @@ dt2time(Timestamp jd, int *hour, int *min, int *sec, fsec_t *fsec) int timestamp2tm(Timestamp dt, int *tzp, struct pg_tm * tm, fsec_t *fsec, char **tzn) { - Timestamp date; + Timestamp date; Timestamp time; pg_time_t utime; @@ -988,7 +1011,7 @@ timestamp2tm(Timestamp dt, int *tzp, struct pg_tm * tm, fsec_t *fsec, char **tzn if (time < INT64CONST(0)) { time += INT64CONST(86400000000); - date -= 1; + date -=1; } #else TMODULO(time, date, 86400e0); @@ -996,15 +1019,15 @@ timestamp2tm(Timestamp dt, int *tzp, struct pg_tm * tm, fsec_t *fsec, char **tzn if (time < 0) { time += 86400; - date -= 1; + date -=1; } #endif /* add offset to go from J2000 back to standard Julian date */ - date += POSTGRES_EPOCH_JDATE; + date +=POSTGRES_EPOCH_JDATE; /* Julian day routine does not work for negative Julian days */ - if (date < 0 || date > (Timestamp) INT_MAX) + if (date <0 || date >(Timestamp) INT_MAX) return -1; j2date((int) date, &tm->tm_year, &tm->tm_mon, &tm->tm_mday); @@ -1100,11 +1123,11 @@ int tm2timestamp(struct pg_tm * tm, fsec_t fsec, int *tzp, Timestamp *result) { #ifdef HAVE_INT64_TIMESTAMP - int date; + int date; int64 time; #else - double date, + double date, time; #endif @@ -1113,17 +1136,18 @@ tm2timestamp(struct pg_tm * tm, fsec_t fsec, int *tzp, Timestamp *result) return -1; date = date2j(tm->tm_year, tm->tm_mon, tm->tm_mday) - POSTGRES_EPOCH_JDATE; + time = time2t(tm->tm_hour, tm->tm_min, tm->tm_sec, fsec); #ifdef HAVE_INT64_TIMESTAMP - *result = (date * INT64CONST(86400000000)) + time; + *result = (date *INT64CONST(86400000000)) +time; /* check for major overflow */ if ((*result - time) / INT64CONST(86400000000) != date) return -1; /* check for just-barely overflow (okay except time-of-day wraps) */ - if ((*result < 0) ? (date >= 0) : (date < 0)) + if ((*result < 0) ? (date >=0) : (date <0)) return -1; #else - *result = ((date * 86400) + time); + *result = ((date *86400) +time); #endif if (tzp != NULL) *result = dt2local(*result, -(*tzp)); @@ -1235,7 +1259,7 @@ dt2local(Timestamp dt, int tz) Datum timestamp_finite(PG_FUNCTION_ARGS) { - Timestamp timestamp = PG_GETARG_TIMESTAMP(0); + Timestamp timestamp = PG_GETARG_TIMESTAMP(0); PG_RETURN_BOOL(!TIMESTAMP_NOT_FINITE(timestamp)); } @@ -1884,12 +1908,13 @@ timestamp_mi(PG_FUNCTION_ARGS) Datum timestamp_pl_interval(PG_FUNCTION_ARGS) { - Timestamp timestamp = PG_GETARG_TIMESTAMP(0); + Timestamp timestamp = PG_GETARG_TIMESTAMP(0); Interval *span = PG_GETARG_INTERVAL_P(1); Timestamp result; if (TIMESTAMP_NOT_FINITE(timestamp)) result = timestamp; + else { if (span->month != 0) @@ -1898,7 +1923,7 @@ timestamp_pl_interval(PG_FUNCTION_ARGS) *tm = &tt; fsec_t fsec; - if (timestamp2tm(timestamp, NULL, tm, &fsec, NULL) != 0) + if (timestamp2tm(timestamp, NULL, tm, &fsec, NULL) !=0) ereport(ERROR, (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), errmsg("timestamp out of range"))); @@ -1919,13 +1944,13 @@ timestamp_pl_interval(PG_FUNCTION_ARGS) if (tm->tm_mday > day_tab[isleap(tm->tm_year)][tm->tm_mon - 1]) tm->tm_mday = (day_tab[isleap(tm->tm_year)][tm->tm_mon - 1]); - if (tm2timestamp(tm, fsec, NULL, ×tamp) != 0) + if (tm2timestamp(tm, fsec, NULL, ×tamp) !=0) ereport(ERROR, (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), errmsg("timestamp out of range"))); } - timestamp += span->time; + timestamp +=span->time; result = timestamp; } @@ -1935,7 +1960,7 @@ timestamp_pl_interval(PG_FUNCTION_ARGS) Datum timestamp_mi_interval(PG_FUNCTION_ARGS) { - Timestamp timestamp = PG_GETARG_TIMESTAMP(0); + Timestamp timestamp = PG_GETARG_TIMESTAMP(0); Interval *span = PG_GETARG_INTERVAL_P(1); Interval tspan; @@ -1968,6 +1993,7 @@ timestamptz_pl_interval(PG_FUNCTION_ARGS) if (TIMESTAMP_NOT_FINITE(timestamp)) result = timestamp; + else { if (span->month != 0) @@ -1976,7 +2002,7 @@ timestamptz_pl_interval(PG_FUNCTION_ARGS) *tm = &tt; fsec_t fsec; - if (timestamp2tm(timestamp, &tz, tm, &fsec, &tzn) != 0) + if (timestamp2tm(timestamp, &tz, tm, &fsec, &tzn) !=0) ereport(ERROR, (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), errmsg("timestamp out of range"))); @@ -1999,13 +2025,13 @@ timestamptz_pl_interval(PG_FUNCTION_ARGS) tz = DetermineLocalTimeZone(tm); - if (tm2timestamp(tm, fsec, &tz, ×tamp) != 0) + if (tm2timestamp(tm, fsec, &tz, ×tamp) !=0) ereport(ERROR, (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), errmsg("timestamp out of range"))); } - timestamp += span->time; + timestamp +=span->time; result = timestamp; } @@ -2513,7 +2539,7 @@ Datum timestamp_text(PG_FUNCTION_ARGS) { /* Input is a Timestamp, but may as well leave it in Datum form */ - Datum timestamp = PG_GETARG_DATUM(0); + Datum timestamp = PG_GETARG_DATUM(0); text *result; char *str; int len; @@ -2574,7 +2600,7 @@ Datum timestamptz_text(PG_FUNCTION_ARGS) { /* Input is a Timestamp, but may as well leave it in Datum form */ - Datum timestamp = PG_GETARG_DATUM(0); + Datum timestamp = PG_GETARG_DATUM(0); text *result; char *str; int len; @@ -2694,7 +2720,7 @@ Datum timestamp_trunc(PG_FUNCTION_ARGS) { text *units = PG_GETARG_TEXT_P(0); - Timestamp timestamp = PG_GETARG_TIMESTAMP(1); + Timestamp timestamp = PG_GETARG_TIMESTAMP(1); Timestamp result; int type, val; @@ -2714,7 +2740,7 @@ timestamp_trunc(PG_FUNCTION_ARGS) if (type == UNITS) { - if (timestamp2tm(timestamp, NULL, tm, &fsec, NULL) != 0) + if (timestamp2tm(timestamp, NULL, tm, &fsec, NULL) !=0) ereport(ERROR, (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), errmsg("timestamp out of range"))); @@ -2833,7 +2859,7 @@ timestamptz_trunc(PG_FUNCTION_ARGS) if (type == UNITS) { - if (timestamp2tm(timestamp, &tz, tm, &fsec, &tzn) != 0) + if (timestamp2tm(timestamp, &tz, tm, &fsec, &tzn) !=0) ereport(ERROR, (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), errmsg("timestamp out of range"))); @@ -3175,7 +3201,7 @@ Datum timestamp_part(PG_FUNCTION_ARGS) { text *units = PG_GETARG_TEXT_P(0); - Timestamp timestamp = PG_GETARG_TIMESTAMP(1); + Timestamp timestamp = PG_GETARG_TIMESTAMP(1); float8 result; int type, val; @@ -3200,7 +3226,7 @@ timestamp_part(PG_FUNCTION_ARGS) if (type == UNITS) { - if (timestamp2tm(timestamp, NULL, tm, &fsec, NULL) != 0) + if (timestamp2tm(timestamp, NULL, tm, &fsec, NULL) !=0) ereport(ERROR, (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), errmsg("timestamp out of range"))); @@ -3279,9 +3305,9 @@ timestamp_part(PG_FUNCTION_ARGS) case DTK_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. + * 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. */ if (tm->tm_year > 0) result = ((tm->tm_year + 99) / 100); @@ -3333,7 +3359,7 @@ timestamp_part(PG_FUNCTION_ARGS) * convert to timestamptz to produce consistent * results */ - if (timestamp2tm(timestamp, NULL, tm, &fsec, NULL) != 0) + if (timestamp2tm(timestamp, NULL, tm, &fsec, NULL) !=0) ereport(ERROR, (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), errmsg("timestamp out of range"))); @@ -3353,7 +3379,7 @@ timestamp_part(PG_FUNCTION_ARGS) break; } case DTK_DOW: - if (timestamp2tm(timestamp, NULL, tm, &fsec, NULL) != 0) + if (timestamp2tm(timestamp, NULL, tm, &fsec, NULL) !=0) ereport(ERROR, (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), errmsg("timestamp out of range"))); @@ -3361,7 +3387,7 @@ timestamp_part(PG_FUNCTION_ARGS) break; case DTK_DOY: - if (timestamp2tm(timestamp, NULL, tm, &fsec, NULL) != 0) + if (timestamp2tm(timestamp, NULL, tm, &fsec, NULL) !=0) ereport(ERROR, (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), errmsg("timestamp out of range"))); @@ -3424,7 +3450,7 @@ timestamptz_part(PG_FUNCTION_ARGS) if (type == UNITS) { - if (timestamp2tm(timestamp, &tz, tm, &fsec, &tzn) != 0) + if (timestamp2tm(timestamp, &tz, tm, &fsec, &tzn) !=0) ereport(ERROR, (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), errmsg("timestamp out of range"))); @@ -3548,14 +3574,14 @@ timestamptz_part(PG_FUNCTION_ARGS) { case DTK_EPOCH: #ifdef HAVE_INT64_TIMESTAMP - result = ((timestamp - SetEpochTimestamp()) / 1000000e0); + result = ((timestamp -SetEpochTimestamp()) /1000000e0); #else - result = timestamp - SetEpochTimestamp(); + result = timestamp -SetEpochTimestamp(); #endif break; case DTK_DOW: - if (timestamp2tm(timestamp, &tz, tm, &fsec, &tzn) != 0) + if (timestamp2tm(timestamp, &tz, tm, &fsec, &tzn) !=0) ereport(ERROR, (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), errmsg("timestamp out of range"))); @@ -3563,7 +3589,7 @@ timestamptz_part(PG_FUNCTION_ARGS) break; case DTK_DOY: - if (timestamp2tm(timestamp, &tz, tm, &fsec, &tzn) != 0) + if (timestamp2tm(timestamp, &tz, tm, &fsec, &tzn) !=0) ereport(ERROR, (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), errmsg("timestamp out of range"))); @@ -3738,7 +3764,7 @@ Datum timestamp_zone(PG_FUNCTION_ARGS) { text *zone = PG_GETARG_TEXT_P(0); - Timestamp timestamp = PG_GETARG_TIMESTAMP(1); + Timestamp timestamp = PG_GETARG_TIMESTAMP(1); TimestampTz result; int tz; int type, @@ -3780,7 +3806,7 @@ Datum timestamp_izone(PG_FUNCTION_ARGS) { Interval *zone = PG_GETARG_INTERVAL_P(0); - Timestamp timestamp = PG_GETARG_TIMESTAMP(1); + Timestamp timestamp = PG_GETARG_TIMESTAMP(1); TimestampTz result; int tz; @@ -3811,7 +3837,7 @@ timestamp_izone(PG_FUNCTION_ARGS) Datum timestamp_timestamptz(PG_FUNCTION_ARGS) { - Timestamp timestamp = PG_GETARG_TIMESTAMP(0); + Timestamp timestamp = PG_GETARG_TIMESTAMP(0); PG_RETURN_TIMESTAMPTZ(timestamp2timestamptz(timestamp)); } @@ -3827,9 +3853,10 @@ timestamp2timestamptz(Timestamp timestamp) if (TIMESTAMP_NOT_FINITE(timestamp)) result = timestamp; + else { - if (timestamp2tm(timestamp, NULL, tm, &fsec, NULL) != 0) + if (timestamp2tm(timestamp, NULL, tm, &fsec, NULL) !=0) ereport(ERROR, (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), errmsg("timestamp out of range"))); @@ -3861,9 +3888,10 @@ timestamptz_timestamp(PG_FUNCTION_ARGS) if (TIMESTAMP_NOT_FINITE(timestamp)) result = timestamp; + else { - if (timestamp2tm(timestamp, &tz, tm, &fsec, &tzn) != 0) + if (timestamp2tm(timestamp, &tz, tm, &fsec, &tzn) !=0) ereport(ERROR, (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE), errmsg("timestamp out of range"))); |
