1997-03-15 00:21:12 +01:00
|
|
|
/*-------------------------------------------------------------------------
|
|
|
|
*
|
1999-02-14 00:22:53 +01:00
|
|
|
* datetime.c
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
* Support functions for date/time types.
|
1997-03-15 00:21:12 +01:00
|
|
|
*
|
2001-01-24 20:43:33 +01:00
|
|
|
* Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
* Portions Copyright (c) 1994, Regents of the University of California
|
1997-03-15 00:21:12 +01:00
|
|
|
*
|
|
|
|
*
|
|
|
|
* IDENTIFICATION
|
2001-12-21 07:03:27 +01:00
|
|
|
* $Header: /cvsroot/pgsql/src/backend/utils/adt/datetime.c,v 1.82 2001/12/21 06:03:27 thomas Exp $
|
1997-03-15 00:21:12 +01:00
|
|
|
*
|
|
|
|
*-------------------------------------------------------------------------
|
|
|
|
*/
|
2000-07-13 00:59:15 +02:00
|
|
|
#include "postgres.h"
|
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
#include <ctype.h>
|
|
|
|
#include <math.h>
|
|
|
|
#include <sys/types.h>
|
|
|
|
#include <errno.h>
|
1997-04-04 10:55:29 +02:00
|
|
|
#include <float.h>
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
#include <limits.h>
|
2000-07-13 00:59:15 +02:00
|
|
|
|
From: Thomas Lockhart <Thomas.G.Lockhart@jpl.nasa.gov>
Subject: [HACKERS] More date time functions
Here are some additional patches mostly related to the date and time
data types. It includes some type conversion routines to move between
the different date types and some other date manipulation routines such
as date_part(units,datetime).
I noticed Edmund Mergl et al's neat trick for getting function overloading
for builtin functions, so started to use that for the date and time stuff.
Later, if someone figures out how to get function overloading directly
for internal C code, then we can move to that technique.
These patches include documentation updates (don't faint!) for the built-in
man page. Doesn't yet include mention of timestamp, since I don't know
much about it and since it may change a bit to become a _real_ ANSI timestamp
which would include parser support for the declaration syntax (what do you
think, Dan?).
The patches were developed on the 970330 release, but have been rebuilt
off of the 970402 release. The first patch below is to get libpq to compile,
on my Linux box, but is not related to the rest of the patches and you can
choose not to apply that one at this time. Thanks in advance, scrappy!
1997-04-02 20:36:24 +02:00
|
|
|
#include "miscadmin.h"
|
2001-06-18 18:14:44 +02:00
|
|
|
#include "utils/guc.h"
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
#include "utils/datetime.h"
|
1997-03-15 00:21:12 +01:00
|
|
|
|
2001-07-10 03:41:47 +02:00
|
|
|
|
2000-06-09 00:38:00 +02:00
|
|
|
static int DecodeNumber(int flen, char *field,
|
2001-10-25 07:50:21 +02:00
|
|
|
int fmask, int *tmask,
|
|
|
|
struct tm * tm, double *fsec, int *is2digits);
|
2000-06-09 00:38:00 +02:00
|
|
|
static int DecodeNumberField(int len, char *str,
|
2001-10-25 07:50:21 +02:00
|
|
|
int fmask, int *tmask,
|
|
|
|
struct tm * tm, double *fsec, int *is2digits);
|
2000-06-09 00:38:00 +02:00
|
|
|
static int DecodeTime(char *str, int fmask, int *tmask,
|
2001-10-25 07:50:21 +02:00
|
|
|
struct tm * tm, double *fsec);
|
2000-06-09 00:38:00 +02:00
|
|
|
static int DecodeTimezone(char *str, int *tzp);
|
|
|
|
static datetkn *datebsearch(char *key, datetkn *base, unsigned int nel);
|
2001-03-22 05:01:46 +01:00
|
|
|
static int DecodeDate(char *str, int fmask, int *tmask, struct tm * tm);
|
2000-04-12 19:17:23 +02:00
|
|
|
static int DecodePosixTimezone(char *str, int *val);
|
2001-10-25 07:50:21 +02:00
|
|
|
void TrimTrailingZeros(char *str);
|
2000-03-16 15:38:42 +01:00
|
|
|
|
2001-07-10 03:41:47 +02:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
int day_tab[2][13] = {
|
|
|
|
{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 0},
|
2001-10-25 07:50:21 +02:00
|
|
|
{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 0}};
|
1997-09-07 07:04:48 +02:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
char *months[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun",
|
2001-10-25 07:50:21 +02:00
|
|
|
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec", NULL};
|
1997-03-15 00:21:12 +01:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
char *days[] = {"Sunday", "Monday", "Tuesday", "Wednesday",
|
2001-10-25 07:50:21 +02:00
|
|
|
"Thursday", "Friday", "Saturday", NULL};
|
1997-09-07 07:04:48 +02:00
|
|
|
|
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
/*****************************************************************************
|
|
|
|
* PRIVATE ROUTINES *
|
|
|
|
*****************************************************************************/
|
1997-03-15 00:21:12 +01:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
/* definitions for squeezing values into "value" */
|
2001-07-10 03:41:47 +02:00
|
|
|
#define ABS_SIGNBIT ((char) 0200)
|
|
|
|
#define VALMASK ((char) 0177)
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
#define NEG(n) ((n)|ABS_SIGNBIT)
|
|
|
|
#define SIGNEDCHAR(c) ((c)&ABS_SIGNBIT? -((c)&VALMASK): (c))
|
|
|
|
#define FROMVAL(tp) (-SIGNEDCHAR((tp)->value) * 10) /* uncompress */
|
|
|
|
#define TOVAL(tp, v) ((tp)->value = ((v) < 0? NEG((-(v))/10): (v)/10))
|
|
|
|
|
|
|
|
/*
|
|
|
|
* to keep this table reasonably small, we divide the lexval for TZ and DTZ
|
|
|
|
* entries by 10 and truncate the text field at MAXTOKLEN characters.
|
|
|
|
* the text field is not guaranteed to be NULL-terminated.
|
|
|
|
*/
|
|
|
|
static datetkn datetktbl[] = {
|
2001-09-28 10:09:14 +02:00
|
|
|
/* text, token, lexval */
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{EARLY, RESERV, DTK_EARLY}, /* "-infinity" reserved for "early time" */
|
|
|
|
{"acsst", DTZ, 63}, /* Cent. Australia */
|
2001-11-21 06:58:51 +01:00
|
|
|
{"acst", DTZ, NEG(24)}, /* Atlantic/Porto Acre */
|
|
|
|
{"act", TZ, NEG(30)}, /* Atlantic/Porto Acre */
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{DA_D, ADBC, AD}, /* "ad" for years >= 0 */
|
|
|
|
{"abstime", IGNORE, 0}, /* "abstime" for pre-v6.1 "Invalid
|
|
|
|
* Abstime" */
|
|
|
|
{"adt", DTZ, NEG(18)}, /* Atlantic Daylight Time */
|
|
|
|
{"aesst", DTZ, 66}, /* E. Australia */
|
|
|
|
{"aest", TZ, 60}, /* Australia Eastern Std Time */
|
2001-11-21 06:58:51 +01:00
|
|
|
{"aft", TZ, 27}, /* Kabul */
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"ahst", TZ, NEG(60)}, /* Alaska-Hawaii Std Time */
|
2001-11-21 06:58:51 +01:00
|
|
|
{"akdt", DTZ, NEG(48)}, /* Alaska Daylight Time */
|
|
|
|
{"akst", DTZ, NEG(54)}, /* Alaska Standard Time */
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"allballs", RESERV, DTK_ZULU}, /* 00:00:00 */
|
2001-11-21 06:58:51 +01:00
|
|
|
{"almt", TZ, 36}, /* Almaty Time */
|
|
|
|
{"almst", TZ, 42}, /* Almaty Savings Time */
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"am", AMPM, AM},
|
2001-11-21 06:58:51 +01:00
|
|
|
#if 0
|
|
|
|
{"amst", DTZ, 30}, /* Yerevan */
|
|
|
|
{"amst", DTZ, NEG(18)}, /* Porto Velho */
|
|
|
|
amt
|
|
|
|
anast
|
|
|
|
anat
|
|
|
|
aqtst
|
|
|
|
aqtt
|
|
|
|
arst
|
|
|
|
art
|
|
|
|
ashst
|
|
|
|
#endif
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"apr", MONTH, 4},
|
|
|
|
{"april", MONTH, 4},
|
|
|
|
{"ast", TZ, NEG(24)}, /* Atlantic Std Time (Canada) */
|
|
|
|
{"at", IGNORE, 0}, /* "at" (throwaway) */
|
|
|
|
{"aug", MONTH, 8},
|
|
|
|
{"august", MONTH, 8},
|
|
|
|
{"awsst", DTZ, 54}, /* W. Australia */
|
|
|
|
{"awst", TZ, 48}, /* W. Australia */
|
2001-11-21 06:58:51 +01:00
|
|
|
{"awt", DTZ, NEG(18)},
|
|
|
|
#if 0
|
|
|
|
azost
|
|
|
|
azot
|
|
|
|
azst
|
|
|
|
azt
|
|
|
|
#endif
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{DB_C, ADBC, BC}, /* "bc" for years < 0 */
|
2001-11-06 17:29:51 +01:00
|
|
|
{"bdst", TZ, 12}, /* British Double Summer Time */
|
2001-11-21 06:58:51 +01:00
|
|
|
{"bdt", TZ, 36}, /* Dacca */
|
|
|
|
#if 0
|
|
|
|
bnt
|
|
|
|
bort
|
|
|
|
bortst
|
|
|
|
bost
|
|
|
|
bot
|
|
|
|
brst
|
|
|
|
brt
|
|
|
|
#endif
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"bst", TZ, 6}, /* British Summer Time */
|
|
|
|
{"bt", TZ, 18}, /* Baghdad Time */
|
2001-11-21 06:58:51 +01:00
|
|
|
#if 0
|
|
|
|
btt
|
|
|
|
#endif
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"cadt", DTZ, 63}, /* Central Australian DST */
|
|
|
|
{"cast", TZ, 57}, /* Central Australian ST */
|
|
|
|
{"cat", TZ, NEG(60)}, /* Central Alaska Time */
|
|
|
|
{"cct", TZ, 48}, /* China Coast */
|
2001-11-21 06:58:51 +01:00
|
|
|
#if 0
|
|
|
|
{"cct", TZ, 39}, /* Indian Cocos (Island) Time */
|
|
|
|
#endif
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"cdt", DTZ, NEG(30)}, /* Central Daylight Time */
|
2001-10-05 08:38:59 +02:00
|
|
|
{"cest", DTZ, 12}, /* Central European Dayl.Time */
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"cet", TZ, 6}, /* Central European Time */
|
|
|
|
{"cetdst", DTZ, 12}, /* Central European Dayl.Time */
|
2001-11-21 06:58:51 +01:00
|
|
|
#if 0
|
|
|
|
chadt
|
|
|
|
chast
|
|
|
|
ckhst
|
|
|
|
ckt
|
|
|
|
clst
|
|
|
|
clt
|
|
|
|
cost
|
|
|
|
cot
|
|
|
|
#endif
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"cst", TZ, NEG(36)}, /* Central Standard Time */
|
2001-11-21 06:58:51 +01:00
|
|
|
#if 0
|
|
|
|
cvst
|
|
|
|
cvt
|
|
|
|
#endif
|
|
|
|
{"cxt", TZ, 42}, /* Indian Christmas (Island) Time */
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{DCURRENT, RESERV, DTK_CURRENT}, /* "current" is always now */
|
2001-09-28 10:09:14 +02:00
|
|
|
{"d", UNITS, DAY}, /* "day of month" for ISO input */
|
2001-11-21 06:58:51 +01:00
|
|
|
#if 0
|
|
|
|
davt
|
|
|
|
ddut
|
|
|
|
#endif
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"dec", MONTH, 12},
|
|
|
|
{"december", MONTH, 12},
|
|
|
|
{"dnt", TZ, 6}, /* Dansk Normal Tid */
|
|
|
|
{"dow", RESERV, DTK_DOW}, /* day of week */
|
|
|
|
{"doy", RESERV, DTK_DOY}, /* day of year */
|
|
|
|
{"dst", DTZMOD, 6},
|
2001-11-21 06:58:51 +01:00
|
|
|
#if 0
|
|
|
|
{"dusst", DTZ, 36}, /* Dushanbe Summer Time */
|
|
|
|
{"easst", DTZ, NEG(30)}, /* Easter Island */
|
|
|
|
{"east", TZ, NEG(36)}, /* Easter Island */
|
|
|
|
#endif
|
|
|
|
{"east", TZ, 24}, /* Indian Antananarivo Savings Time */
|
|
|
|
{"eat", TZ, 18}, /* Indian Antananarivo Time */
|
|
|
|
#if 0
|
|
|
|
ect
|
|
|
|
#endif
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"edt", DTZ, NEG(24)}, /* Eastern Daylight Time */
|
2001-11-21 06:58:51 +01:00
|
|
|
#if 0
|
|
|
|
eest
|
|
|
|
#endif
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"eet", TZ, 12}, /* East. Europe, USSR Zone 1 */
|
|
|
|
{"eetdst", DTZ, 18}, /* Eastern Europe */
|
2001-11-21 06:58:51 +01:00
|
|
|
#if 0
|
|
|
|
egst
|
|
|
|
egt
|
|
|
|
ehdt
|
|
|
|
#endif
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{EPOCH, RESERV, DTK_EPOCH}, /* "epoch" reserved for system epoch time */
|
|
|
|
{"est", TZ, NEG(30)}, /* Eastern Standard Time */
|
|
|
|
{"feb", MONTH, 2},
|
|
|
|
{"february", MONTH, 2},
|
2001-11-21 06:58:51 +01:00
|
|
|
#if 0
|
|
|
|
fjst
|
|
|
|
fjt
|
|
|
|
fkst
|
|
|
|
fkt
|
|
|
|
fnst
|
|
|
|
fnt
|
|
|
|
#endif
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"fri", DOW, 5},
|
|
|
|
{"friday", DOW, 5},
|
|
|
|
{"fst", TZ, 6}, /* French Summer Time */
|
|
|
|
{"fwt", DTZ, 12}, /* French Winter Time */
|
2001-11-21 06:58:51 +01:00
|
|
|
#if 0
|
|
|
|
galt
|
|
|
|
gamt
|
|
|
|
gest
|
|
|
|
get
|
|
|
|
gft
|
|
|
|
ghst
|
|
|
|
gilt
|
|
|
|
#endif
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"gmt", TZ, 0}, /* Greenwish Mean Time */
|
|
|
|
{"gst", TZ, 60}, /* Guam Std Time, USSR Zone 9 */
|
2001-11-21 06:58:51 +01:00
|
|
|
#if 0
|
|
|
|
gyt
|
|
|
|
#endif
|
2001-09-28 10:09:14 +02:00
|
|
|
{"h", UNITS, HOUR}, /* "hour" */
|
2001-11-21 06:58:51 +01:00
|
|
|
#if 0
|
|
|
|
hadt
|
|
|
|
hast
|
|
|
|
#endif
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"hdt", DTZ, NEG(54)}, /* Hawaii/Alaska */
|
2001-11-21 06:58:51 +01:00
|
|
|
#if 0
|
|
|
|
hkst
|
|
|
|
hkt
|
|
|
|
#endif
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"hmt", DTZ, 18}, /* Hellas ? ? */
|
2001-11-21 06:58:51 +01:00
|
|
|
#if 0
|
|
|
|
hovst
|
|
|
|
hovt
|
|
|
|
#endif
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"hst", TZ, NEG(60)}, /* Hawaii Std Time */
|
2001-11-21 06:58:51 +01:00
|
|
|
#if 0
|
|
|
|
hwt
|
|
|
|
ict
|
|
|
|
#endif
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"idle", TZ, 72}, /* Intl. Date Line, East */
|
|
|
|
{"idlw", TZ, NEG(72)}, /* Intl. Date Line, West */
|
2001-11-21 06:58:51 +01:00
|
|
|
#if 0
|
|
|
|
idt
|
|
|
|
#endif
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{LATE, RESERV, DTK_LATE}, /* "infinity" reserved for "late time" */
|
2001-11-21 06:58:51 +01:00
|
|
|
{INVALID, RESERV, DTK_INVALID}, /* "invalid" reserved for bad time */
|
|
|
|
{"iot", TZ, 30}, /* Indian Chagos Time */
|
|
|
|
#if 0
|
|
|
|
irkst
|
|
|
|
irkt
|
|
|
|
irt
|
|
|
|
isst
|
|
|
|
#endif
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"ist", TZ, 12}, /* Israel */
|
|
|
|
{"it", TZ, 21}, /* Iran Time */
|
2001-09-28 10:09:14 +02:00
|
|
|
{"j", UNITS, JULIAN},
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"jan", MONTH, 1},
|
|
|
|
{"january", MONTH, 1},
|
2001-11-21 06:58:51 +01:00
|
|
|
#if 0
|
|
|
|
javt
|
|
|
|
jayt
|
|
|
|
#endif
|
2001-09-28 10:09:14 +02:00
|
|
|
{"jd", UNITS, JULIAN},
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"jst", TZ, 54}, /* Japan Std Time,USSR Zone 8 */
|
|
|
|
{"jt", TZ, 45}, /* Java Time */
|
|
|
|
{"jul", MONTH, 7},
|
2001-09-28 10:09:14 +02:00
|
|
|
{"julian", UNITS, JULIAN},
|
2001-12-21 07:03:27 +01:00
|
|
|
{"july", MONTH, 7},
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"jun", MONTH, 6},
|
|
|
|
{"june", MONTH, 6},
|
2001-11-21 06:58:51 +01:00
|
|
|
#if 0
|
|
|
|
kdt
|
|
|
|
kgst
|
|
|
|
kgt
|
|
|
|
kost
|
|
|
|
krast
|
|
|
|
krat
|
|
|
|
#endif
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"kst", TZ, 54}, /* Korea Standard Time */
|
2001-11-21 06:58:51 +01:00
|
|
|
#if 0
|
|
|
|
lhst
|
|
|
|
#endif
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"ligt", TZ, 60}, /* From Melbourne, Australia */
|
2001-11-21 06:58:51 +01:00
|
|
|
#if 0
|
|
|
|
lint
|
|
|
|
lkt
|
|
|
|
#endif
|
2001-09-28 10:09:14 +02:00
|
|
|
{"m", UNITS, MONTH}, /* "month" for ISO input */
|
2001-11-21 06:58:51 +01:00
|
|
|
#if 0
|
|
|
|
magst
|
|
|
|
magt
|
|
|
|
#endif
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"mar", MONTH, 3},
|
|
|
|
{"march", MONTH, 3},
|
2001-11-21 06:58:51 +01:00
|
|
|
#if 0
|
|
|
|
mart
|
|
|
|
#endif
|
|
|
|
{"mawt", TZ, 36}, /* Mawson, Antarctica */
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"may", MONTH, 5},
|
|
|
|
{"mdt", DTZ, NEG(36)}, /* Mountain Daylight Time */
|
|
|
|
{"mest", DTZ, 12}, /* Middle Europe Summer Time */
|
|
|
|
{"met", TZ, 6}, /* Middle Europe Time */
|
|
|
|
{"metdst", DTZ, 12}, /* Middle Europe Daylight Time */
|
|
|
|
{"mewt", TZ, 6}, /* Middle Europe Winter Time */
|
|
|
|
{"mez", TZ, 6}, /* Middle Europe Zone */
|
2001-11-21 06:58:51 +01:00
|
|
|
{"mht", TZ, 72}, /* Kwajalein */
|
2001-09-28 10:09:14 +02:00
|
|
|
{"mm", UNITS, MINUTE}, /* "minute" for ISO input */
|
2001-11-21 06:58:51 +01:00
|
|
|
#if 0
|
|
|
|
mmt
|
|
|
|
#endif
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"mon", DOW, 1},
|
|
|
|
{"monday", DOW, 1},
|
2001-11-21 06:58:51 +01:00
|
|
|
#if 0
|
|
|
|
most
|
|
|
|
mpt
|
|
|
|
msd
|
|
|
|
msk
|
|
|
|
#endif
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"mst", TZ, NEG(42)}, /* Mountain Standard Time */
|
|
|
|
{"mt", TZ, 51}, /* Moluccas Time */
|
2001-11-21 06:58:51 +01:00
|
|
|
{"mut", DTZ, 24}, /* Mauritius Island Time */
|
|
|
|
{"mvt", DTZ, 30}, /* Maldives Island Time */
|
|
|
|
#if 0
|
|
|
|
myt
|
|
|
|
ncst
|
|
|
|
nct
|
|
|
|
#endif
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"ndt", DTZ, NEG(15)}, /* Nfld. Daylight Time */
|
|
|
|
{"nft", TZ, NEG(21)}, /* Newfoundland Standard Time */
|
|
|
|
{"nor", TZ, 6}, /* Norway Standard Time */
|
|
|
|
{"nov", MONTH, 11},
|
|
|
|
{"november", MONTH, 11},
|
2001-11-21 06:58:51 +01:00
|
|
|
#if 0
|
|
|
|
novst
|
|
|
|
novt
|
|
|
|
#endif
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{NOW, RESERV, DTK_NOW}, /* current transaction time */
|
|
|
|
{"nst", TZ, NEG(21)}, /* Nfld. Standard Time */
|
|
|
|
{"nt", TZ, NEG(66)}, /* Nome Time */
|
2001-11-21 06:58:51 +01:00
|
|
|
#if 0
|
|
|
|
nut
|
|
|
|
#endif
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"nzdt", DTZ, 78}, /* New Zealand Daylight Time */
|
|
|
|
{"nzst", TZ, 72}, /* New Zealand Standard Time */
|
|
|
|
{"nzt", TZ, 72}, /* New Zealand Time */
|
|
|
|
{"oct", MONTH, 10},
|
|
|
|
{"october", MONTH, 10},
|
2001-11-21 06:58:51 +01:00
|
|
|
#if 0
|
|
|
|
omsst
|
|
|
|
omst
|
|
|
|
#endif
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"on", IGNORE, 0}, /* "on" (throwaway) */
|
|
|
|
{"pdt", DTZ, NEG(42)}, /* Pacific Daylight Time */
|
2001-11-21 06:58:51 +01:00
|
|
|
#if 0
|
|
|
|
pest
|
|
|
|
pet
|
|
|
|
petst
|
|
|
|
pett
|
|
|
|
pgt
|
|
|
|
phot
|
|
|
|
phst
|
|
|
|
pht
|
|
|
|
pkt
|
|
|
|
#endif
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"pm", AMPM, PM},
|
2001-11-21 06:58:51 +01:00
|
|
|
#if 0
|
|
|
|
pmdt
|
|
|
|
pmst
|
|
|
|
pont
|
|
|
|
#endif
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"pst", TZ, NEG(48)}, /* Pacific Standard Time */
|
2001-11-21 06:58:51 +01:00
|
|
|
#if 0
|
|
|
|
pwt
|
|
|
|
pyst
|
|
|
|
pyt
|
|
|
|
#endif
|
|
|
|
{"ret", DTZ, 24}, /* Reunion Island Time */
|
2001-09-28 10:09:14 +02:00
|
|
|
{"s", UNITS, SECOND}, /* "seconds" for ISO input */
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"sadt", DTZ, 63}, /* S. Australian Dayl. Time */
|
2001-11-21 06:58:51 +01:00
|
|
|
#if 0
|
|
|
|
samst
|
|
|
|
samt
|
|
|
|
#endif
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"sast", TZ, 57}, /* South Australian Std Time */
|
|
|
|
{"sat", DOW, 6},
|
|
|
|
{"saturday", DOW, 6},
|
2001-11-21 06:58:51 +01:00
|
|
|
#if 0
|
|
|
|
sbt
|
|
|
|
#endif
|
|
|
|
{"sct", DTZ, 24}, /* Mahe Island Time */
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"sep", MONTH, 9},
|
|
|
|
{"sept", MONTH, 9},
|
|
|
|
{"september", MONTH, 9},
|
|
|
|
{"set", TZ, NEG(6)}, /* Seychelles Time ?? */
|
2001-11-21 06:58:51 +01:00
|
|
|
#if 0
|
|
|
|
sgt
|
|
|
|
#endif
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"sst", DTZ, 12}, /* Swedish Summer Time */
|
|
|
|
{"sun", DOW, 0},
|
|
|
|
{"sunday", DOW, 0},
|
|
|
|
{"swt", TZ, 6}, /* Swedish Winter Time */
|
2001-11-21 06:58:51 +01:00
|
|
|
#if 0
|
|
|
|
syot
|
|
|
|
#endif
|
2001-09-28 10:09:14 +02:00
|
|
|
{"t", DTK_ISO_TIME, 0}, /* Filler for ISO time fields */
|
2001-11-21 06:58:51 +01:00
|
|
|
#if 0
|
|
|
|
taht
|
|
|
|
#endif
|
|
|
|
{"tft", TZ, 30}, /* Kerguelen Time */
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"thu", DOW, 4},
|
|
|
|
{"thur", DOW, 4},
|
|
|
|
{"thurs", DOW, 4},
|
|
|
|
{"thursday", DOW, 4},
|
2001-11-21 06:58:51 +01:00
|
|
|
#if 0
|
|
|
|
tjt
|
|
|
|
tkt
|
|
|
|
tmt
|
|
|
|
#endif
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{TODAY, RESERV, DTK_TODAY}, /* midnight */
|
|
|
|
{TOMORROW, RESERV, DTK_TOMORROW}, /* tomorrow midnight */
|
2001-11-21 06:58:51 +01:00
|
|
|
#if 0
|
|
|
|
tost
|
|
|
|
tot
|
|
|
|
tpt
|
|
|
|
trut
|
|
|
|
#endif
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"tue", DOW, 2},
|
|
|
|
{"tues", DOW, 2},
|
|
|
|
{"tuesday", DOW, 2},
|
2001-11-21 06:58:51 +01:00
|
|
|
#if 0
|
|
|
|
tvt
|
|
|
|
uct
|
|
|
|
ulast
|
|
|
|
ulat
|
|
|
|
#endif
|
2000-11-06 16:57:00 +01:00
|
|
|
{"undefined", RESERV, DTK_INVALID}, /* pre-v6.1 invalid time */
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"ut", TZ, 0},
|
|
|
|
{"utc", TZ, 0},
|
2001-11-21 06:58:51 +01:00
|
|
|
#if 0
|
|
|
|
uyst
|
|
|
|
uyt
|
|
|
|
uzst
|
|
|
|
uzt
|
|
|
|
vet
|
|
|
|
vlast
|
|
|
|
vlat
|
|
|
|
vust
|
|
|
|
vut
|
|
|
|
#endif
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"wadt", DTZ, 48}, /* West Australian DST */
|
2001-11-21 06:58:51 +01:00
|
|
|
#if 0
|
|
|
|
wakt
|
|
|
|
warst
|
|
|
|
#endif
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"wast", TZ, 42}, /* West Australian Std Time */
|
|
|
|
{"wat", TZ, NEG(6)}, /* West Africa Time */
|
|
|
|
{"wdt", DTZ, 54}, /* West Australian DST */
|
|
|
|
{"wed", DOW, 3},
|
|
|
|
{"wednesday", DOW, 3},
|
|
|
|
{"weds", DOW, 3},
|
2001-11-21 06:58:51 +01:00
|
|
|
#if 0
|
|
|
|
west
|
|
|
|
#endif
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"wet", TZ, 0}, /* Western Europe */
|
|
|
|
{"wetdst", DTZ, 6}, /* Western Europe */
|
2001-11-21 06:58:51 +01:00
|
|
|
#if 0
|
|
|
|
wft
|
|
|
|
wgst
|
|
|
|
wgt
|
|
|
|
#endif
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"wst", TZ, 48}, /* West Australian Std Time */
|
2001-09-28 10:09:14 +02:00
|
|
|
{"y", UNITS, YEAR}, /* "year" for ISO input */
|
2001-11-21 06:58:51 +01:00
|
|
|
#if 0
|
|
|
|
yakst
|
|
|
|
yakt
|
|
|
|
yapt
|
|
|
|
#endif
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"ydt", DTZ, NEG(48)}, /* Yukon Daylight Time */
|
2001-11-21 06:58:51 +01:00
|
|
|
#if 0
|
|
|
|
yekst
|
|
|
|
yekt
|
|
|
|
#endif
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{YESTERDAY, RESERV, DTK_YESTERDAY}, /* yesterday midnight */
|
|
|
|
{"yst", TZ, NEG(54)}, /* Yukon Standard Time */
|
2000-11-06 16:57:00 +01:00
|
|
|
{"z", RESERV, DTK_ZULU}, /* 00:00:00 */
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"zp4", TZ, NEG(24)}, /* GMT +4 hours. */
|
|
|
|
{"zp5", TZ, NEG(30)}, /* GMT +5 hours. */
|
|
|
|
{"zp6", TZ, NEG(36)}, /* GMT +6 hours. */
|
|
|
|
{ZULU, RESERV, DTK_ZULU}, /* 00:00:00 */
|
|
|
|
};
|
|
|
|
|
|
|
|
static unsigned int szdatetktbl = sizeof datetktbl / sizeof datetktbl[0];
|
|
|
|
|
2001-06-18 18:14:44 +02:00
|
|
|
/* Used for SET australian_timezones to override North American ones */
|
|
|
|
static datetkn australian_datetktbl[] = {
|
2001-11-21 06:58:51 +01:00
|
|
|
{"acst", TZ, 57}, /* Cent. Australia */
|
2001-09-28 10:09:14 +02:00
|
|
|
{"cst", TZ, 63}, /* Australia Central Std Time */
|
2001-11-21 06:58:51 +01:00
|
|
|
{"east", TZ, 60}, /* East Australian Std Time */
|
2001-06-18 18:14:44 +02:00
|
|
|
{"est", TZ, 60}, /* Australia Eastern Std Time */
|
|
|
|
{"sat", TZ, 57},
|
|
|
|
};
|
|
|
|
|
|
|
|
static unsigned int australian_szdatetktbl = sizeof australian_datetktbl /
|
2001-10-25 07:50:21 +02:00
|
|
|
sizeof australian_datetktbl[0];
|
2001-06-18 18:14:44 +02:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
static datetkn deltatktbl[] = {
|
2001-10-18 19:30:21 +02:00
|
|
|
/* text, token, lexval */
|
|
|
|
{"@", IGNORE, 0}, /* postgres relative prefix */
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{DAGO, AGO, 0}, /* "ago" indicates negative time offset */
|
2001-10-18 19:30:21 +02:00
|
|
|
{"c", UNITS, DTK_CENTURY}, /* "century" relative */
|
|
|
|
{"cent", UNITS, DTK_CENTURY}, /* "century" relative */
|
|
|
|
{"centuries", UNITS, DTK_CENTURY}, /* "centuries" relative */
|
|
|
|
{DCENTURY, UNITS, DTK_CENTURY}, /* "century" relative */
|
2001-10-25 07:50:21 +02:00
|
|
|
{"d", UNITS, DTK_DAY}, /* "day" relative */
|
|
|
|
{DDAY, UNITS, DTK_DAY}, /* "day" relative */
|
|
|
|
{"days", UNITS, DTK_DAY}, /* "days" relative */
|
|
|
|
{"dec", UNITS, DTK_DECADE}, /* "decade" relative */
|
2001-10-28 07:26:15 +01:00
|
|
|
{"decs", UNITS, DTK_DECADE}, /* "decades" relative */
|
2001-10-18 19:30:21 +02:00
|
|
|
{DDECADE, UNITS, DTK_DECADE}, /* "decade" relative */
|
|
|
|
{"decades", UNITS, DTK_DECADE}, /* "decades" relative */
|
2001-10-25 07:50:21 +02:00
|
|
|
{"h", UNITS, DTK_HOUR}, /* "hour" relative */
|
|
|
|
{DHOUR, UNITS, DTK_HOUR}, /* "hour" relative */
|
|
|
|
{"hours", UNITS, DTK_HOUR}, /* "hours" relative */
|
|
|
|
{"hr", UNITS, DTK_HOUR}, /* "hour" relative */
|
|
|
|
{"hrs", UNITS, DTK_HOUR}, /* "hours" relative */
|
2000-04-14 17:22:10 +02:00
|
|
|
{INVALID, RESERV, DTK_INVALID}, /* reserved for invalid time */
|
2001-10-25 07:50:21 +02:00
|
|
|
{"m", UNITS, DTK_MINUTE}, /* "minute" relative */
|
|
|
|
{"microsecon", UNITS, DTK_MICROSEC}, /* "microsecond" relative */
|
|
|
|
{"mil", UNITS, DTK_MILLENNIUM}, /* "millennium" relative */
|
|
|
|
{"millennia", UNITS, DTK_MILLENNIUM}, /* "millennia" relative */
|
|
|
|
{DMILLENNIUM, UNITS, DTK_MILLENNIUM}, /* "millennium" relative */
|
|
|
|
{"millisecon", UNITS, DTK_MILLISEC}, /* relative */
|
2001-10-18 19:30:21 +02:00
|
|
|
{"mils", UNITS, DTK_MILLENNIUM}, /* "millennia" relative */
|
2001-10-25 07:50:21 +02:00
|
|
|
{"min", UNITS, DTK_MINUTE}, /* "minute" relative */
|
2001-10-28 07:26:15 +01:00
|
|
|
{"mins", UNITS, DTK_MINUTE}, /* "minutes" relative */
|
|
|
|
{"mins", UNITS, DTK_MINUTE}, /* "minutes" relative */
|
2001-10-18 19:30:21 +02:00
|
|
|
{DMINUTE, UNITS, DTK_MINUTE}, /* "minute" relative */
|
|
|
|
{"minutes", UNITS, DTK_MINUTE}, /* "minutes" relative */
|
2001-10-25 07:50:21 +02:00
|
|
|
{"mon", UNITS, DTK_MONTH}, /* "months" relative */
|
|
|
|
{"mons", UNITS, DTK_MONTH}, /* "months" relative */
|
|
|
|
{DMONTH, UNITS, DTK_MONTH}, /* "month" relative */
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"months", UNITS, DTK_MONTH},
|
|
|
|
{"ms", UNITS, DTK_MILLISEC},
|
|
|
|
{"msec", UNITS, DTK_MILLISEC},
|
|
|
|
{DMILLISEC, UNITS, DTK_MILLISEC},
|
|
|
|
{"mseconds", UNITS, DTK_MILLISEC},
|
|
|
|
{"msecs", UNITS, DTK_MILLISEC},
|
2001-10-28 07:26:15 +01:00
|
|
|
{"qtr", UNITS, DTK_QUARTER}, /* "quarter" relative */
|
2001-10-18 19:30:21 +02:00
|
|
|
{DQUARTER, UNITS, DTK_QUARTER}, /* "quarter" relative */
|
|
|
|
{"reltime", IGNORE, 0}, /* pre-v6.1 "Undefined Reltime" */
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"s", UNITS, DTK_SECOND},
|
|
|
|
{"sec", UNITS, DTK_SECOND},
|
|
|
|
{DSECOND, UNITS, DTK_SECOND},
|
|
|
|
{"seconds", UNITS, DTK_SECOND},
|
|
|
|
{"secs", UNITS, DTK_SECOND},
|
2001-10-25 07:50:21 +02:00
|
|
|
{DTIMEZONE, UNITS, DTK_TZ}, /* "timezone" time offset */
|
2001-10-28 07:26:15 +01:00
|
|
|
{"timezone", UNITS, DTK_TZ}, /* "timezone" time offset */
|
2001-10-25 07:50:21 +02:00
|
|
|
{"timezone_h", UNITS, DTK_TZ_HOUR}, /* timezone hour units */
|
|
|
|
{"timezone_m", UNITS, DTK_TZ_MINUTE}, /* timezone minutes units */
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{"undefined", RESERV, DTK_INVALID}, /* pre-v6.1 invalid time */
|
2001-10-28 07:26:15 +01:00
|
|
|
{"us", UNITS, DTK_MICROSEC}, /* "microsecond" relative */
|
2001-10-18 19:30:21 +02:00
|
|
|
{"usec", UNITS, DTK_MICROSEC}, /* "microsecond" relative */
|
|
|
|
{DMICROSEC, UNITS, DTK_MICROSEC}, /* "microsecond" relative */
|
|
|
|
{"useconds", UNITS, DTK_MICROSEC}, /* "microseconds" relative */
|
|
|
|
{"usecs", UNITS, DTK_MICROSEC}, /* "microseconds" relative */
|
|
|
|
{"w", UNITS, DTK_WEEK}, /* "week" relative */
|
|
|
|
{DWEEK, UNITS, DTK_WEEK}, /* "week" relative */
|
|
|
|
{"weeks", UNITS, DTK_WEEK}, /* "weeks" relative */
|
|
|
|
{"y", UNITS, DTK_YEAR}, /* "year" relative */
|
|
|
|
{DYEAR, UNITS, DTK_YEAR}, /* "year" relative */
|
|
|
|
{"years", UNITS, DTK_YEAR}, /* "years" relative */
|
|
|
|
{"yr", UNITS, DTK_YEAR}, /* "year" relative */
|
|
|
|
{"yrs", UNITS, DTK_YEAR}, /* "years" relative */
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
static unsigned int szdeltatktbl = sizeof deltatktbl / sizeof deltatktbl[0];
|
|
|
|
|
|
|
|
datetkn *datecache[MAXDATEFIELDS] = {NULL};
|
|
|
|
|
|
|
|
datetkn *deltacache[MAXDATEFIELDS] = {NULL};
|
1997-03-15 00:21:12 +01:00
|
|
|
|
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
/*
|
|
|
|
* Calendar time to Julian date conversions.
|
|
|
|
* Julian date is commonly used in astronomical applications,
|
|
|
|
* since it is numerically accurate and computationally simple.
|
|
|
|
* The algorithms here will accurately convert between Julian day
|
|
|
|
* and calendar date for all non-negative Julian days
|
|
|
|
* (i.e. from Nov 23, -4713 on).
|
|
|
|
*
|
|
|
|
* Ref: Explanatory Supplement to the Astronomical Almanac, 1992.
|
|
|
|
* University Science Books, 20 Edgehill Rd. Mill Valley CA 94941.
|
|
|
|
*
|
|
|
|
* Use the algorithm by Henry Fliegel, a former NASA/JPL colleague
|
|
|
|
* now at Aerospace Corp. (hi, Henry!)
|
|
|
|
*
|
2001-09-28 10:09:14 +02:00
|
|
|
* These routines will be used by other date/time packages
|
|
|
|
* - thomas 97/02/25
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
*/
|
1997-03-15 00:21:12 +01:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
int
|
|
|
|
date2j(int y, int m, int d)
|
1997-03-15 00:21:12 +01:00
|
|
|
{
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
int m12 = (m - 14) / 12;
|
1997-03-15 00:21:12 +01:00
|
|
|
|
2001-10-18 19:30:21 +02:00
|
|
|
return ((1461 * (y + 4800 + m12)) / 4
|
|
|
|
+ (367 * (m - 2 - 12 * (m12))) / 12
|
|
|
|
- (3 * ((y + 4900 + m12) / 100)) / 4
|
|
|
|
+ d - 32075);
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
} /* date2j() */
|
1997-03-15 00:21:12 +01:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
void
|
|
|
|
j2date(int jd, int *year, int *month, int *day)
|
1997-03-15 00:21:12 +01:00
|
|
|
{
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
int j,
|
|
|
|
y,
|
|
|
|
m,
|
|
|
|
d;
|
|
|
|
|
|
|
|
int i,
|
|
|
|
l,
|
|
|
|
n;
|
|
|
|
|
|
|
|
l = jd + 68569;
|
|
|
|
n = (4 * l) / 146097;
|
|
|
|
l -= (146097 * n + 3) / 4;
|
|
|
|
i = (4000 * (l + 1)) / 1461001;
|
|
|
|
l += 31 - (1461 * i) / 4;
|
|
|
|
j = (80 * l) / 2447;
|
|
|
|
d = l - (2447 * j) / 80;
|
|
|
|
l = j / 11;
|
|
|
|
m = (j + 2) - (12 * l);
|
|
|
|
y = 100 * (n - 49) + i + l;
|
|
|
|
|
|
|
|
*year = y;
|
|
|
|
*month = m;
|
|
|
|
*day = d;
|
|
|
|
return;
|
|
|
|
} /* j2date() */
|
1997-03-15 00:21:12 +01:00
|
|
|
|
|
|
|
int
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
j2day(int date)
|
1997-03-15 00:21:12 +01:00
|
|
|
{
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
int day;
|
|
|
|
|
|
|
|
day = (date + 1) % 7;
|
1997-03-15 00:21:12 +01:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
return day;
|
|
|
|
} /* j2day() */
|
|
|
|
|
|
|
|
|
2001-10-20 03:02:22 +02:00
|
|
|
/* TrimTrailingZeros()
|
|
|
|
* ... resulting from printing numbers with full precision.
|
|
|
|
*/
|
2001-10-18 19:30:21 +02:00
|
|
|
void
|
|
|
|
TrimTrailingZeros(char *str)
|
|
|
|
{
|
2001-10-25 07:50:21 +02:00
|
|
|
int len = strlen(str);
|
2001-10-18 19:30:21 +02:00
|
|
|
|
2001-10-20 03:02:22 +02:00
|
|
|
#if 0
|
2001-10-18 19:30:21 +02:00
|
|
|
/* chop off trailing one to cope with interval rounding */
|
|
|
|
if (strcmp((str + len - 4), "0001") == 0)
|
|
|
|
{
|
|
|
|
len -= 4;
|
|
|
|
*(str + len) = '\0';
|
|
|
|
}
|
2001-10-20 03:02:22 +02:00
|
|
|
#endif
|
2001-10-18 19:30:21 +02:00
|
|
|
|
|
|
|
/* chop off trailing zeros... */
|
|
|
|
while ((*(str + len - 1) == '0')
|
|
|
|
&& (*(str + len - 3) != '.'))
|
|
|
|
{
|
|
|
|
len--;
|
|
|
|
*(str + len) = '\0';
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
1997-03-15 00:21:12 +01:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
/* ParseDateTime()
|
|
|
|
* Break string into tokens based on a date/time context.
|
1997-10-25 07:16:09 +02:00
|
|
|
*/
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
int
|
|
|
|
ParseDateTime(char *timestr, char *lowstr,
|
|
|
|
char **field, int *ftype, int maxfields, int *numfields)
|
1997-03-15 00:21:12 +01:00
|
|
|
{
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
int nf = 0;
|
|
|
|
char *cp = timestr;
|
|
|
|
char *lp = lowstr;
|
|
|
|
|
|
|
|
/* outer loop through fields */
|
|
|
|
while (*cp != '\0')
|
|
|
|
{
|
|
|
|
field[nf] = lp;
|
|
|
|
|
|
|
|
/* leading digit? then date or time */
|
2000-12-03 21:45:40 +01:00
|
|
|
if (isdigit((unsigned char) *cp) || (*cp == '.'))
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{
|
|
|
|
*lp++ = *cp++;
|
2000-12-03 21:45:40 +01:00
|
|
|
while (isdigit((unsigned char) *cp))
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
*lp++ = *cp++;
|
|
|
|
/* time field? */
|
|
|
|
if (*cp == ':')
|
|
|
|
{
|
|
|
|
ftype[nf] = DTK_TIME;
|
2001-09-28 10:09:14 +02:00
|
|
|
*lp++ = *cp++;
|
2000-12-03 21:45:40 +01:00
|
|
|
while (isdigit((unsigned char) *cp) ||
|
|
|
|
(*cp == ':') || (*cp == '.'))
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
*lp++ = *cp++;
|
|
|
|
|
|
|
|
}
|
|
|
|
/* date field? allow embedded text month */
|
|
|
|
else if ((*cp == '-') || (*cp == '/') || (*cp == '.'))
|
|
|
|
{
|
|
|
|
ftype[nf] = DTK_DATE;
|
2001-09-28 10:09:14 +02:00
|
|
|
*lp++ = *cp++;
|
|
|
|
/* second field is all digits? then no embedded text month */
|
|
|
|
if (isdigit((unsigned char) *cp))
|
|
|
|
{
|
|
|
|
while (isdigit((unsigned char) *cp) || (*cp == '-') ||
|
|
|
|
(*cp == '/') || (*cp == '.'))
|
|
|
|
*lp++ = *cp++;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
while (isalnum((unsigned char) *cp) || (*cp == '-') ||
|
|
|
|
(*cp == '/') || (*cp == '.'))
|
|
|
|
*lp++ = tolower((unsigned char) *cp++);
|
|
|
|
}
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* otherwise, number only and will determine year, month, or
|
|
|
|
* day later
|
|
|
|
*/
|
|
|
|
else
|
|
|
|
ftype[nf] = DTK_NUMBER;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* text? then date string, month, day of week, special, or
|
|
|
|
* timezone
|
|
|
|
*/
|
2000-12-03 21:45:40 +01:00
|
|
|
else if (isalpha((unsigned char) *cp))
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{
|
|
|
|
ftype[nf] = DTK_STRING;
|
2000-12-03 21:45:40 +01:00
|
|
|
*lp++ = tolower((unsigned char) *cp++);
|
|
|
|
while (isalpha((unsigned char) *cp))
|
|
|
|
*lp++ = tolower((unsigned char) *cp++);
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
|
2000-04-12 19:17:23 +02:00
|
|
|
/*
|
|
|
|
* Full date string with leading text month? Could also be a
|
|
|
|
* POSIX time zone...
|
2000-03-16 15:38:42 +01:00
|
|
|
*/
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
if ((*cp == '-') || (*cp == '/') || (*cp == '.'))
|
|
|
|
{
|
|
|
|
ftype[nf] = DTK_DATE;
|
2000-12-03 21:45:40 +01:00
|
|
|
while (isdigit((unsigned char) *cp) ||
|
|
|
|
(*cp == '-') || (*cp == '/') || (*cp == '.'))
|
|
|
|
*lp++ = tolower((unsigned char) *cp++);
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/* skip leading spaces */
|
|
|
|
}
|
2000-12-03 21:45:40 +01:00
|
|
|
else if (isspace((unsigned char) *cp))
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{
|
|
|
|
cp++;
|
|
|
|
continue;
|
|
|
|
|
|
|
|
/* sign? then special or numeric timezone */
|
|
|
|
}
|
|
|
|
else if ((*cp == '+') || (*cp == '-'))
|
|
|
|
{
|
|
|
|
*lp++ = *cp++;
|
|
|
|
/* soak up leading whitespace */
|
2000-12-03 21:45:40 +01:00
|
|
|
while (isspace((unsigned char) *cp))
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
cp++;
|
|
|
|
/* numeric timezone? */
|
2000-12-03 21:45:40 +01:00
|
|
|
if (isdigit((unsigned char) *cp))
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{
|
|
|
|
ftype[nf] = DTK_TZ;
|
|
|
|
*lp++ = *cp++;
|
2000-12-03 21:45:40 +01:00
|
|
|
while (isdigit((unsigned char) *cp) ||
|
|
|
|
(*cp == ':') || (*cp == '.'))
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
*lp++ = *cp++;
|
|
|
|
|
|
|
|
/* special? */
|
|
|
|
}
|
2000-12-03 21:45:40 +01:00
|
|
|
else if (isalpha((unsigned char) *cp))
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{
|
|
|
|
ftype[nf] = DTK_SPECIAL;
|
2000-12-03 21:45:40 +01:00
|
|
|
*lp++ = tolower((unsigned char) *cp++);
|
|
|
|
while (isalpha((unsigned char) *cp))
|
|
|
|
*lp++ = tolower((unsigned char) *cp++);
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
|
|
|
|
/* otherwise something wrong... */
|
|
|
|
}
|
|
|
|
else
|
|
|
|
return -1;
|
|
|
|
|
|
|
|
/* ignore punctuation but use as delimiter */
|
|
|
|
}
|
2000-12-03 21:45:40 +01:00
|
|
|
else if (ispunct((unsigned char) *cp))
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{
|
|
|
|
cp++;
|
|
|
|
continue;
|
|
|
|
|
|
|
|
}
|
|
|
|
else
|
|
|
|
return -1;
|
|
|
|
|
|
|
|
/* force in a delimiter */
|
|
|
|
*lp++ = '\0';
|
|
|
|
nf++;
|
|
|
|
if (nf > MAXDATEFIELDS)
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
*numfields = nf;
|
1997-03-15 00:21:12 +01:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
return 0;
|
|
|
|
} /* ParseDateTime() */
|
|
|
|
|
|
|
|
|
|
|
|
/* DecodeDateTime()
|
|
|
|
* Interpret previously parsed fields for general date and time.
|
|
|
|
* Return 0 if full date, 1 if only time, and -1 if problems.
|
|
|
|
* External format(s):
|
|
|
|
* "<weekday> <month>-<day>-<year> <hour>:<minute>:<second>"
|
|
|
|
* "Fri Feb-7-1997 15:23:27"
|
|
|
|
* "Feb-7-1997 15:23:27"
|
|
|
|
* "2-7-1997 15:23:27"
|
|
|
|
* "1997-2-7 15:23:27"
|
|
|
|
* "1997.038 15:23:27" (day of year 1-366)
|
|
|
|
* Also supports input in compact time:
|
|
|
|
* "970207 152327"
|
|
|
|
* "97038 152327"
|
|
|
|
*
|
|
|
|
* Use the system-provided functions to get the current time zone
|
|
|
|
* if not specified in the input string.
|
|
|
|
* If the date is outside the time_t system-supported time range,
|
2001-09-28 10:09:14 +02:00
|
|
|
* then assume GMT time zone. - thomas 1997/05/27
|
1997-10-25 07:16:09 +02:00
|
|
|
*/
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
int
|
|
|
|
DecodeDateTime(char **field, int *ftype, int nf,
|
|
|
|
int *dtype, struct tm * tm, double *fsec, int *tzp)
|
1997-03-15 00:21:12 +01:00
|
|
|
{
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
int fmask = 0,
|
|
|
|
tmask,
|
|
|
|
type;
|
2001-10-25 07:50:21 +02:00
|
|
|
int ptype = 0; /* "prefix type" for ISO y2001m02d04
|
|
|
|
* format */
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
int i;
|
|
|
|
int flen,
|
|
|
|
val;
|
|
|
|
int mer = HR24;
|
|
|
|
int haveTextMonth = FALSE;
|
|
|
|
int is2digits = FALSE;
|
|
|
|
int bc = FALSE;
|
|
|
|
|
2001-10-25 07:50:21 +02:00
|
|
|
/*
|
|
|
|
* We'll insist on at least all of the date fields, but initialize the
|
|
|
|
* remaining fields in case they are not set later...
|
2001-09-28 10:09:14 +02:00
|
|
|
*/
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
*dtype = DTK_DATE;
|
|
|
|
tm->tm_hour = 0;
|
|
|
|
tm->tm_min = 0;
|
|
|
|
tm->tm_sec = 0;
|
|
|
|
*fsec = 0;
|
2001-10-25 07:50:21 +02:00
|
|
|
tm->tm_isdst = -1; /* don't know daylight savings time status
|
|
|
|
* apriori */
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
if (tzp != NULL)
|
|
|
|
*tzp = 0;
|
|
|
|
|
|
|
|
for (i = 0; i < nf; i++)
|
|
|
|
{
|
|
|
|
switch (ftype[i])
|
|
|
|
{
|
|
|
|
case DTK_DATE:
|
2001-10-25 07:50:21 +02:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Previous field was a label for "julian date"? then this
|
|
|
|
* should be a julian date with fractional day...
|
2001-09-28 10:09:14 +02:00
|
|
|
*/
|
|
|
|
if (ptype == JULIAN)
|
|
|
|
{
|
2001-10-25 07:50:21 +02:00
|
|
|
char *cp;
|
|
|
|
double dt,
|
|
|
|
date,
|
|
|
|
time;
|
2000-04-12 19:17:23 +02:00
|
|
|
|
2001-09-28 10:09:14 +02:00
|
|
|
dt = strtod(field[i], &cp);
|
|
|
|
if (*cp != '\0')
|
|
|
|
return -1;
|
|
|
|
|
|
|
|
time = dt * 86400;
|
|
|
|
TMODULO(time, date, 86400e0);
|
|
|
|
j2date((int) date, &tm->tm_year, &tm->tm_mon, &tm->tm_mday);
|
|
|
|
dt2time(time, &tm->tm_hour, &tm->tm_min, fsec);
|
|
|
|
|
|
|
|
tmask = DTK_DATE_M | DTK_TIME_M;
|
|
|
|
*dtype = DTK_DATE;
|
|
|
|
}
|
|
|
|
|
2001-10-25 07:50:21 +02:00
|
|
|
/*
|
|
|
|
* Already have a date? Then this might be a POSIX time
|
|
|
|
* zone with an embedded dash (e.g. "PST-3" == "EST") -
|
|
|
|
* thomas 2000-03-15
|
2000-03-16 15:38:42 +01:00
|
|
|
*/
|
2001-09-28 10:09:14 +02:00
|
|
|
else if ((fmask & DTK_DATE_M) == DTK_DATE_M)
|
2000-03-16 15:38:42 +01:00
|
|
|
{
|
|
|
|
if ((tzp == NULL)
|
|
|
|
|| (DecodePosixTimezone(field[i], tzp) != 0))
|
|
|
|
return -1;
|
|
|
|
|
|
|
|
ftype[i] = DTK_TZ;
|
|
|
|
tmask = DTK_M(TZ);
|
|
|
|
}
|
|
|
|
else if (DecodeDate(field[i], fmask, &tmask, tm) != 0)
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
return -1;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case DTK_TIME:
|
|
|
|
if (DecodeTime(field[i], fmask, &tmask, tm, fsec) != 0)
|
|
|
|
return -1;
|
|
|
|
|
2001-10-25 07:50:21 +02:00
|
|
|
/*
|
|
|
|
* Check upper limit on hours; other limits checked in
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
* DecodeTime()
|
|
|
|
*/
|
|
|
|
if (tm->tm_hour > 23)
|
|
|
|
return -1;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case DTK_TZ:
|
|
|
|
if (tzp == NULL)
|
|
|
|
return -1;
|
2000-03-16 15:38:42 +01:00
|
|
|
|
|
|
|
{
|
2000-04-12 19:17:23 +02:00
|
|
|
int tz;
|
2000-03-16 15:38:42 +01:00
|
|
|
|
|
|
|
if (DecodeTimezone(field[i], &tz) != 0)
|
|
|
|
return -1;
|
|
|
|
|
2000-04-12 19:17:23 +02:00
|
|
|
/*
|
|
|
|
* Already have a time zone? Then maybe this is the
|
|
|
|
* second field of a POSIX time: EST+3 (equivalent to
|
|
|
|
* PST)
|
2000-03-16 15:38:42 +01:00
|
|
|
*/
|
|
|
|
if ((i > 0) && ((fmask & DTK_M(TZ)) != 0)
|
2001-09-28 10:09:14 +02:00
|
|
|
&& (ftype[i - 1] == DTK_TZ)
|
|
|
|
&& (isalpha((unsigned char) *field[i - 1])))
|
2000-03-16 15:38:42 +01:00
|
|
|
{
|
|
|
|
*tzp -= tz;
|
|
|
|
tmask = 0;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
*tzp = tz;
|
|
|
|
tmask = DTK_M(TZ);
|
|
|
|
}
|
|
|
|
}
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
break;
|
|
|
|
|
|
|
|
case DTK_NUMBER:
|
|
|
|
flen = strlen(field[i]);
|
|
|
|
|
2001-10-25 07:50:21 +02:00
|
|
|
/*
|
|
|
|
* Was this an "ISO date" with embedded field labels? An
|
|
|
|
* example is "y2001m02d04" - thomas 2001-02-04
|
2001-09-28 10:09:14 +02:00
|
|
|
*/
|
|
|
|
if (ptype != 0)
|
|
|
|
{
|
2001-10-25 07:50:21 +02:00
|
|
|
char *cp;
|
|
|
|
int val;
|
2001-09-28 10:09:14 +02:00
|
|
|
|
|
|
|
val = strtol(field[i], &cp, 10);
|
|
|
|
if (*cp != '\0')
|
|
|
|
return -1;
|
|
|
|
|
2001-10-25 07:50:21 +02:00
|
|
|
switch (ptype)
|
|
|
|
{
|
2001-09-28 10:09:14 +02:00
|
|
|
case YEAR:
|
|
|
|
tm->tm_year = val;
|
|
|
|
tmask = DTK_M(ptype);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case MONTH:
|
|
|
|
tm->tm_mon = val;
|
|
|
|
tmask = DTK_M(ptype);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case DAY:
|
|
|
|
tm->tm_mday = val;
|
|
|
|
tmask = DTK_M(ptype);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case HOUR:
|
|
|
|
tm->tm_hour = val;
|
|
|
|
tmask = DTK_M(ptype);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case MINUTE:
|
|
|
|
tm->tm_min = val;
|
|
|
|
tmask = DTK_M(ptype);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case SECOND:
|
|
|
|
tm->tm_sec = val;
|
|
|
|
tmask = DTK_M(ptype);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case JULIAN:
|
2001-10-25 07:50:21 +02:00
|
|
|
|
|
|
|
/*
|
|
|
|
* previous field was a label for "julian
|
|
|
|
* date"? then this is a julian day with no
|
|
|
|
* fractional part (see DTK_DATE for cases
|
|
|
|
* involving fractional parts)
|
2001-09-28 10:09:14 +02:00
|
|
|
*/
|
|
|
|
j2date(val, &tm->tm_year, &tm->tm_mon, &tm->tm_mday);
|
|
|
|
|
|
|
|
tmask = DTK_DATE_M;
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
return -1;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
ptype = 0;
|
|
|
|
*dtype = DTK_DATE;
|
|
|
|
}
|
2001-10-25 07:50:21 +02:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
/*
|
|
|
|
* long numeric string and either no date or no time read
|
|
|
|
* yet? then interpret as a concatenated date or time...
|
|
|
|
*/
|
2001-09-28 10:09:14 +02:00
|
|
|
else if ((flen > 4) && !((fmask & DTK_DATE_M) && (fmask & DTK_TIME_M)))
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{
|
|
|
|
if (DecodeNumberField(flen, field[i], fmask, &tmask, tm, fsec, &is2digits) != 0)
|
|
|
|
return -1;
|
|
|
|
|
|
|
|
}
|
|
|
|
/* otherwise it is a single date/time field... */
|
2001-09-28 10:09:14 +02:00
|
|
|
else if (DecodeNumber(flen, field[i], fmask, &tmask, tm, fsec, &is2digits) != 0)
|
|
|
|
return -1;
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
break;
|
|
|
|
|
|
|
|
case DTK_STRING:
|
|
|
|
case DTK_SPECIAL:
|
|
|
|
type = DecodeSpecial(i, field[i], &val);
|
|
|
|
if (type == IGNORE)
|
|
|
|
continue;
|
|
|
|
|
|
|
|
tmask = DTK_M(type);
|
|
|
|
switch (type)
|
|
|
|
{
|
|
|
|
case RESERV:
|
|
|
|
switch (val)
|
|
|
|
{
|
2001-09-28 10:09:14 +02:00
|
|
|
case DTK_CURRENT:
|
2001-11-21 06:58:51 +01:00
|
|
|
elog(ERROR, "'CURRENT' is no longer supported");
|
|
|
|
return -1;
|
|
|
|
break;
|
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
case DTK_NOW:
|
|
|
|
tmask = (DTK_DATE_M | DTK_TIME_M | DTK_M(TZ));
|
|
|
|
*dtype = DTK_DATE;
|
2001-09-28 10:09:14 +02:00
|
|
|
GetCurrentTimeUsec(tm, fsec);
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
if (tzp != NULL)
|
|
|
|
*tzp = CTimeZone;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case DTK_YESTERDAY:
|
|
|
|
tmask = DTK_DATE_M;
|
|
|
|
*dtype = DTK_DATE;
|
|
|
|
GetCurrentTime(tm);
|
|
|
|
j2date((date2j(tm->tm_year, tm->tm_mon, tm->tm_mday) - 1),
|
|
|
|
&tm->tm_year, &tm->tm_mon, &tm->tm_mday);
|
|
|
|
tm->tm_hour = 0;
|
|
|
|
tm->tm_min = 0;
|
|
|
|
tm->tm_sec = 0;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case DTK_TODAY:
|
|
|
|
tmask = DTK_DATE_M;
|
|
|
|
*dtype = DTK_DATE;
|
|
|
|
GetCurrentTime(tm);
|
|
|
|
tm->tm_hour = 0;
|
|
|
|
tm->tm_min = 0;
|
|
|
|
tm->tm_sec = 0;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case DTK_TOMORROW:
|
|
|
|
tmask = DTK_DATE_M;
|
|
|
|
*dtype = DTK_DATE;
|
|
|
|
GetCurrentTime(tm);
|
|
|
|
j2date((date2j(tm->tm_year, tm->tm_mon, tm->tm_mday) + 1),
|
|
|
|
&tm->tm_year, &tm->tm_mon, &tm->tm_mday);
|
|
|
|
tm->tm_hour = 0;
|
|
|
|
tm->tm_min = 0;
|
|
|
|
tm->tm_sec = 0;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case DTK_ZULU:
|
|
|
|
tmask = (DTK_TIME_M | DTK_M(TZ));
|
|
|
|
*dtype = DTK_DATE;
|
|
|
|
tm->tm_hour = 0;
|
|
|
|
tm->tm_min = 0;
|
|
|
|
tm->tm_sec = 0;
|
|
|
|
if (tzp != NULL)
|
|
|
|
*tzp = 0;
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
*dtype = val;
|
|
|
|
}
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
case MONTH:
|
2000-04-12 19:17:23 +02:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
/*
|
|
|
|
* already have a (numeric) month? then see if we
|
|
|
|
* can substitute...
|
|
|
|
*/
|
|
|
|
if ((fmask & DTK_M(MONTH)) && (!haveTextMonth)
|
|
|
|
&& (!(fmask & DTK_M(DAY)))
|
|
|
|
&& ((tm->tm_mon >= 1) && (tm->tm_mon <= 31)))
|
|
|
|
{
|
|
|
|
tm->tm_mday = tm->tm_mon;
|
|
|
|
tmask = DTK_M(DAY);
|
|
|
|
}
|
|
|
|
haveTextMonth = TRUE;
|
|
|
|
tm->tm_mon = val;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case DTZMOD:
|
|
|
|
|
|
|
|
/*
|
|
|
|
* daylight savings time modifier (solves "MET
|
|
|
|
* DST" syntax)
|
|
|
|
*/
|
|
|
|
tmask |= DTK_M(DTZ);
|
|
|
|
tm->tm_isdst = 1;
|
|
|
|
if (tzp == NULL)
|
|
|
|
return -1;
|
|
|
|
*tzp += val * 60;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case DTZ:
|
|
|
|
|
|
|
|
/*
|
|
|
|
* set mask for TZ here _or_ check for DTZ later
|
|
|
|
* when getting default timezone
|
|
|
|
*/
|
|
|
|
tmask |= DTK_M(TZ);
|
|
|
|
tm->tm_isdst = 1;
|
|
|
|
if (tzp == NULL)
|
|
|
|
return -1;
|
|
|
|
*tzp = val * 60;
|
2000-03-16 15:38:42 +01:00
|
|
|
ftype[i] = DTK_TZ;
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
break;
|
|
|
|
|
|
|
|
case TZ:
|
|
|
|
tm->tm_isdst = 0;
|
|
|
|
if (tzp == NULL)
|
|
|
|
return -1;
|
|
|
|
*tzp = val * 60;
|
2000-03-16 15:38:42 +01:00
|
|
|
ftype[i] = DTK_TZ;
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
break;
|
|
|
|
|
|
|
|
case IGNORE:
|
|
|
|
break;
|
|
|
|
|
|
|
|
case AMPM:
|
|
|
|
mer = val;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case ADBC:
|
|
|
|
bc = (val == BC);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case DOW:
|
|
|
|
tm->tm_wday = val;
|
|
|
|
break;
|
|
|
|
|
2001-09-28 10:09:14 +02:00
|
|
|
case UNITS:
|
|
|
|
tmask = 0;
|
2001-10-20 03:02:22 +02:00
|
|
|
ptype = val;
|
2001-09-28 10:09:14 +02:00
|
|
|
break;
|
|
|
|
|
|
|
|
case DTK_ISO_TIME:
|
2001-10-20 03:02:22 +02:00
|
|
|
tmask = 0;
|
2001-10-25 07:50:21 +02:00
|
|
|
if ((i < 1) || (i >= (nf - 1))
|
|
|
|
|| (ftype[i - 1] != DTK_DATE)
|
|
|
|
|| (ftype[i + 1] != DTK_TIME))
|
2001-09-28 10:09:14 +02:00
|
|
|
return -1;
|
|
|
|
break;
|
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
default:
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (tmask & fmask)
|
|
|
|
return -1;
|
|
|
|
fmask |= tmask;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* there is no year zero in AD/BC notation; i.e. "1 BC" == year 0 */
|
|
|
|
if (bc)
|
|
|
|
{
|
|
|
|
if (tm->tm_year > 0)
|
|
|
|
tm->tm_year = -(tm->tm_year - 1);
|
|
|
|
else
|
2001-11-19 10:05:02 +01:00
|
|
|
elog(ERROR, "Inconsistent use of year %04d and 'BC'", tm->tm_year);
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
}
|
|
|
|
else if (is2digits)
|
|
|
|
{
|
|
|
|
if (tm->tm_year < 70)
|
|
|
|
tm->tm_year += 2000;
|
|
|
|
else if (tm->tm_year < 100)
|
|
|
|
tm->tm_year += 1900;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ((mer != HR24) && (tm->tm_hour > 12))
|
|
|
|
return -1;
|
|
|
|
if ((mer == AM) && (tm->tm_hour == 12))
|
|
|
|
tm->tm_hour = 0;
|
|
|
|
else if ((mer == PM) && (tm->tm_hour != 12))
|
|
|
|
tm->tm_hour += 12;
|
|
|
|
|
|
|
|
/* do additional checking for full date specs... */
|
|
|
|
if (*dtype == DTK_DATE)
|
|
|
|
{
|
|
|
|
if ((fmask & DTK_DATE_M) != DTK_DATE_M)
|
|
|
|
return ((fmask & DTK_TIME_M) == DTK_TIME_M) ? 1 : -1;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* check for valid day of month, now that we know for sure the
|
|
|
|
* month and year...
|
|
|
|
*/
|
|
|
|
if ((tm->tm_mday < 1)
|
|
|
|
|| (tm->tm_mday > day_tab[isleap(tm->tm_year)][tm->tm_mon - 1]))
|
|
|
|
return -1;
|
|
|
|
|
|
|
|
/* timezone not specified? then find local timezone if possible */
|
|
|
|
if (((fmask & DTK_DATE_M) == DTK_DATE_M)
|
|
|
|
&& (tzp != NULL) && (!(fmask & DTK_M(TZ))))
|
|
|
|
{
|
|
|
|
/*
|
|
|
|
* daylight savings time modifier but no standard timezone?
|
|
|
|
* then error
|
|
|
|
*/
|
|
|
|
if (fmask & DTK_M(DTZMOD))
|
|
|
|
return -1;
|
|
|
|
|
2001-05-04 00:53:07 +02:00
|
|
|
*tzp = DetermineLocalTimeZone(tm);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
} /* DecodeDateTime() */
|
|
|
|
|
|
|
|
|
|
|
|
/* DetermineLocalTimeZone()
|
|
|
|
* Given a struct tm in which tm_year, tm_mon, tm_mday, tm_hour, tm_min, and
|
|
|
|
* tm_sec fields are set, attempt to determine the applicable local zone
|
|
|
|
* (ie, regular or daylight-savings time) at that time. Set the struct tm's
|
|
|
|
* tm_isdst field accordingly, and return the actual timezone offset.
|
|
|
|
*
|
|
|
|
* This subroutine exists mainly to centralize uses of mktime() and defend
|
|
|
|
* against mktime() bugs on various platforms...
|
|
|
|
*/
|
|
|
|
int
|
|
|
|
DetermineLocalTimeZone(struct tm * tm)
|
|
|
|
{
|
|
|
|
int tz;
|
|
|
|
|
2001-10-18 19:30:21 +02:00
|
|
|
if (HasCTZSet)
|
|
|
|
tz = CTimeZone;
|
|
|
|
else if (IS_VALID_UTIME(tm->tm_year, tm->tm_mon, tm->tm_mday))
|
2001-05-04 00:53:07 +02:00
|
|
|
{
|
2000-10-29 14:17:34 +01:00
|
|
|
#if defined(HAVE_TM_ZONE) || defined(HAVE_INT_TIMEZONE)
|
2001-10-25 07:50:21 +02:00
|
|
|
|
2001-05-04 00:53:07 +02:00
|
|
|
/*
|
2001-10-25 07:50:21 +02:00
|
|
|
* Some buggy mktime() implementations may change the
|
|
|
|
* year/month/day when given a time right at a DST boundary. To
|
|
|
|
* prevent corruption of the caller's data, give mktime() a
|
|
|
|
* copy...
|
2001-05-04 00:53:07 +02:00
|
|
|
*/
|
|
|
|
struct tm tt,
|
|
|
|
*tmp = &tt;
|
|
|
|
|
|
|
|
*tmp = *tm;
|
|
|
|
/* change to Unix conventions for year/month */
|
|
|
|
tmp->tm_year -= 1900;
|
|
|
|
tmp->tm_mon -= 1;
|
|
|
|
|
|
|
|
/* indicate timezone unknown */
|
|
|
|
tmp->tm_isdst = -1;
|
|
|
|
|
|
|
|
mktime(tmp);
|
|
|
|
|
|
|
|
tm->tm_isdst = tmp->tm_isdst;
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
|
2001-03-22 05:01:46 +01:00
|
|
|
#if defined(HAVE_TM_ZONE)
|
2001-05-04 00:53:07 +02:00
|
|
|
/* tm_gmtoff is Sun/DEC-ism */
|
|
|
|
if (tmp->tm_isdst >= 0)
|
|
|
|
tz = -(tmp->tm_gmtoff);
|
|
|
|
else
|
|
|
|
tz = 0; /* assume GMT if mktime failed */
|
2001-03-22 05:01:46 +01:00
|
|
|
#elif defined(HAVE_INT_TIMEZONE)
|
2001-05-04 00:53:07 +02:00
|
|
|
tz = ((tmp->tm_isdst > 0) ? (TIMEZONE_GLOBAL - 3600) : TIMEZONE_GLOBAL);
|
2001-11-05 18:46:40 +01:00
|
|
|
#endif /* HAVE_INT_TIMEZONE */
|
1997-03-15 00:21:12 +01:00
|
|
|
|
2001-03-22 05:01:46 +01:00
|
|
|
#else /* not (HAVE_TM_ZONE || HAVE_INT_TIMEZONE) */
|
2001-05-04 00:53:07 +02:00
|
|
|
tm->tm_isdst = 0;
|
|
|
|
tz = CTimeZone;
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
#endif
|
2001-05-04 00:53:07 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
/* Given date is out of range, so assume GMT */
|
|
|
|
tm->tm_isdst = 0;
|
|
|
|
tz = 0;
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
}
|
From: Thomas Lockhart <Thomas.G.Lockhart@jpl.nasa.gov>
Subject: [HACKERS] More date time functions
Here are some additional patches mostly related to the date and time
data types. It includes some type conversion routines to move between
the different date types and some other date manipulation routines such
as date_part(units,datetime).
I noticed Edmund Mergl et al's neat trick for getting function overloading
for builtin functions, so started to use that for the date and time stuff.
Later, if someone figures out how to get function overloading directly
for internal C code, then we can move to that technique.
These patches include documentation updates (don't faint!) for the built-in
man page. Doesn't yet include mention of timestamp, since I don't know
much about it and since it may change a bit to become a _real_ ANSI timestamp
which would include parser support for the declaration syntax (what do you
think, Dan?).
The patches were developed on the 970330 release, but have been rebuilt
off of the 970402 release. The first patch below is to get libpq to compile,
on my Linux box, but is not related to the rest of the patches and you can
choose not to apply that one at this time. Thanks in advance, scrappy!
1997-04-02 20:36:24 +02:00
|
|
|
|
2001-05-04 00:53:07 +02:00
|
|
|
return tz;
|
|
|
|
}
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
|
|
|
|
|
|
|
|
/* DecodeTimeOnly()
|
|
|
|
* Interpret parsed string as time fields only.
|
2000-03-15 00:06:59 +01:00
|
|
|
* Note that support for time zone is here for
|
|
|
|
* SQL92 TIME WITH TIME ZONE, but it reveals
|
|
|
|
* bogosity with SQL92 date/time standards, since
|
|
|
|
* we must infer a time zone from current time.
|
|
|
|
* - thomas 2000-03-10
|
From: Thomas Lockhart <Thomas.G.Lockhart@jpl.nasa.gov>
Subject: [HACKERS] More date time functions
Here are some additional patches mostly related to the date and time
data types. It includes some type conversion routines to move between
the different date types and some other date manipulation routines such
as date_part(units,datetime).
I noticed Edmund Mergl et al's neat trick for getting function overloading
for builtin functions, so started to use that for the date and time stuff.
Later, if someone figures out how to get function overloading directly
for internal C code, then we can move to that technique.
These patches include documentation updates (don't faint!) for the built-in
man page. Doesn't yet include mention of timestamp, since I don't know
much about it and since it may change a bit to become a _real_ ANSI timestamp
which would include parser support for the declaration syntax (what do you
think, Dan?).
The patches were developed on the 970330 release, but have been rebuilt
off of the 970402 release. The first patch below is to get libpq to compile,
on my Linux box, but is not related to the rest of the patches and you can
choose not to apply that one at this time. Thanks in advance, scrappy!
1997-04-02 20:36:24 +02:00
|
|
|
*/
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
int
|
2000-03-15 00:06:59 +01:00
|
|
|
DecodeTimeOnly(char **field, int *ftype, int nf,
|
|
|
|
int *dtype, struct tm * tm, double *fsec, int *tzp)
|
From: Thomas Lockhart <Thomas.G.Lockhart@jpl.nasa.gov>
Subject: [HACKERS] More date time functions
Here are some additional patches mostly related to the date and time
data types. It includes some type conversion routines to move between
the different date types and some other date manipulation routines such
as date_part(units,datetime).
I noticed Edmund Mergl et al's neat trick for getting function overloading
for builtin functions, so started to use that for the date and time stuff.
Later, if someone figures out how to get function overloading directly
for internal C code, then we can move to that technique.
These patches include documentation updates (don't faint!) for the built-in
man page. Doesn't yet include mention of timestamp, since I don't know
much about it and since it may change a bit to become a _real_ ANSI timestamp
which would include parser support for the declaration syntax (what do you
think, Dan?).
The patches were developed on the 970330 release, but have been rebuilt
off of the 970402 release. The first patch below is to get libpq to compile,
on my Linux box, but is not related to the rest of the patches and you can
choose not to apply that one at this time. Thanks in advance, scrappy!
1997-04-02 20:36:24 +02:00
|
|
|
{
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
int fmask,
|
|
|
|
tmask,
|
|
|
|
type;
|
|
|
|
int i;
|
|
|
|
int flen,
|
|
|
|
val;
|
|
|
|
int is2digits = FALSE;
|
|
|
|
int mer = HR24;
|
|
|
|
|
|
|
|
*dtype = DTK_TIME;
|
|
|
|
tm->tm_hour = 0;
|
|
|
|
tm->tm_min = 0;
|
|
|
|
tm->tm_sec = 0;
|
|
|
|
*fsec = 0;
|
2000-04-12 19:17:23 +02:00
|
|
|
tm->tm_isdst = -1; /* don't know daylight savings time status
|
|
|
|
* apriori */
|
2000-03-15 00:06:59 +01:00
|
|
|
if (tzp != NULL)
|
|
|
|
*tzp = 0;
|
From: Thomas Lockhart <Thomas.G.Lockhart@jpl.nasa.gov>
Subject: [HACKERS] More date time functions
Here are some additional patches mostly related to the date and time
data types. It includes some type conversion routines to move between
the different date types and some other date manipulation routines such
as date_part(units,datetime).
I noticed Edmund Mergl et al's neat trick for getting function overloading
for builtin functions, so started to use that for the date and time stuff.
Later, if someone figures out how to get function overloading directly
for internal C code, then we can move to that technique.
These patches include documentation updates (don't faint!) for the built-in
man page. Doesn't yet include mention of timestamp, since I don't know
much about it and since it may change a bit to become a _real_ ANSI timestamp
which would include parser support for the declaration syntax (what do you
think, Dan?).
The patches were developed on the 970330 release, but have been rebuilt
off of the 970402 release. The first patch below is to get libpq to compile,
on my Linux box, but is not related to the rest of the patches and you can
choose not to apply that one at this time. Thanks in advance, scrappy!
1997-04-02 20:36:24 +02:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
fmask = DTK_DATE_M;
|
From: Thomas Lockhart <Thomas.G.Lockhart@jpl.nasa.gov>
Subject: [HACKERS] More date time functions
Here are some additional patches mostly related to the date and time
data types. It includes some type conversion routines to move between
the different date types and some other date manipulation routines such
as date_part(units,datetime).
I noticed Edmund Mergl et al's neat trick for getting function overloading
for builtin functions, so started to use that for the date and time stuff.
Later, if someone figures out how to get function overloading directly
for internal C code, then we can move to that technique.
These patches include documentation updates (don't faint!) for the built-in
man page. Doesn't yet include mention of timestamp, since I don't know
much about it and since it may change a bit to become a _real_ ANSI timestamp
which would include parser support for the declaration syntax (what do you
think, Dan?).
The patches were developed on the 970330 release, but have been rebuilt
off of the 970402 release. The first patch below is to get libpq to compile,
on my Linux box, but is not related to the rest of the patches and you can
choose not to apply that one at this time. Thanks in advance, scrappy!
1997-04-02 20:36:24 +02:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
for (i = 0; i < nf; i++)
|
|
|
|
{
|
|
|
|
switch (ftype[i])
|
|
|
|
{
|
2000-03-16 15:38:42 +01:00
|
|
|
case DTK_DATE:
|
2000-04-12 19:17:23 +02:00
|
|
|
|
|
|
|
/*
|
|
|
|
* This might be a POSIX time zone with an embedded dash
|
|
|
|
* (e.g. "PST-3" == "EST") - thomas 2000-03-15
|
2000-03-16 15:38:42 +01:00
|
|
|
*/
|
|
|
|
if ((tzp == NULL)
|
|
|
|
|| (DecodePosixTimezone(field[i], tzp) != 0))
|
|
|
|
return -1;
|
|
|
|
|
|
|
|
ftype[i] = DTK_TZ;
|
|
|
|
tmask = DTK_M(TZ);
|
|
|
|
break;
|
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
case DTK_TIME:
|
|
|
|
if (DecodeTime(field[i], fmask, &tmask, tm, fsec) != 0)
|
|
|
|
return -1;
|
|
|
|
break;
|
|
|
|
|
2000-03-15 00:06:59 +01:00
|
|
|
case DTK_TZ:
|
|
|
|
if (tzp == NULL)
|
|
|
|
return -1;
|
2000-03-16 15:38:42 +01:00
|
|
|
|
|
|
|
{
|
2000-04-12 19:17:23 +02:00
|
|
|
int tz;
|
2000-03-16 15:38:42 +01:00
|
|
|
|
|
|
|
if (DecodeTimezone(field[i], &tz) != 0)
|
|
|
|
return -1;
|
|
|
|
|
2000-04-12 19:17:23 +02:00
|
|
|
/*
|
|
|
|
* Already have a time zone? Then maybe this is the
|
|
|
|
* second field of a POSIX time: EST+3 (equivalent to
|
|
|
|
* PST)
|
2000-03-16 15:38:42 +01:00
|
|
|
*/
|
|
|
|
if ((i > 0) && ((fmask & DTK_M(TZ)) != 0)
|
2000-12-03 21:45:40 +01:00
|
|
|
&& (ftype[i - 1] == DTK_TZ) && (isalpha((unsigned char) *field[i - 1])))
|
2000-03-16 15:38:42 +01:00
|
|
|
{
|
|
|
|
*tzp -= tz;
|
|
|
|
tmask = 0;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
*tzp = tz;
|
|
|
|
tmask = DTK_M(TZ);
|
|
|
|
}
|
|
|
|
}
|
2000-03-15 00:06:59 +01:00
|
|
|
break;
|
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
case DTK_NUMBER:
|
|
|
|
flen = strlen(field[i]);
|
|
|
|
|
|
|
|
if (DecodeNumberField(flen, field[i], fmask, &tmask, tm, fsec, &is2digits) != 0)
|
|
|
|
return -1;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case DTK_STRING:
|
|
|
|
case DTK_SPECIAL:
|
|
|
|
type = DecodeSpecial(i, field[i], &val);
|
|
|
|
if (type == IGNORE)
|
|
|
|
continue;
|
|
|
|
|
|
|
|
tmask = DTK_M(type);
|
|
|
|
switch (type)
|
|
|
|
{
|
|
|
|
case RESERV:
|
|
|
|
switch (val)
|
|
|
|
{
|
2001-11-21 06:58:51 +01:00
|
|
|
case DTK_CURRENT:
|
|
|
|
elog(ERROR, "'CURRENT' is no longer supported");
|
|
|
|
return -1;
|
|
|
|
break;
|
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
case DTK_NOW:
|
|
|
|
tmask = DTK_TIME_M;
|
|
|
|
*dtype = DTK_TIME;
|
2001-10-04 19:10:11 +02:00
|
|
|
GetCurrentTimeUsec(tm, fsec);
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
break;
|
|
|
|
|
|
|
|
case DTK_ZULU:
|
|
|
|
tmask = (DTK_TIME_M | DTK_M(TZ));
|
|
|
|
*dtype = DTK_TIME;
|
|
|
|
tm->tm_hour = 0;
|
|
|
|
tm->tm_min = 0;
|
|
|
|
tm->tm_sec = 0;
|
|
|
|
tm->tm_isdst = 0;
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
2000-03-16 15:38:42 +01:00
|
|
|
case DTZMOD:
|
|
|
|
|
|
|
|
/*
|
|
|
|
* daylight savings time modifier (solves "MET
|
|
|
|
* DST" syntax)
|
|
|
|
*/
|
|
|
|
tmask |= DTK_M(DTZ);
|
|
|
|
tm->tm_isdst = 1;
|
|
|
|
if (tzp == NULL)
|
|
|
|
return -1;
|
|
|
|
*tzp += val * 60;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case DTZ:
|
|
|
|
|
|
|
|
/*
|
|
|
|
* set mask for TZ here _or_ check for DTZ later
|
|
|
|
* when getting default timezone
|
|
|
|
*/
|
|
|
|
tmask |= DTK_M(TZ);
|
|
|
|
tm->tm_isdst = 1;
|
|
|
|
if (tzp == NULL)
|
|
|
|
return -1;
|
|
|
|
*tzp = val * 60;
|
|
|
|
ftype[i] = DTK_TZ;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case TZ:
|
|
|
|
tm->tm_isdst = 0;
|
|
|
|
if (tzp == NULL)
|
|
|
|
return -1;
|
|
|
|
*tzp = val * 60;
|
|
|
|
ftype[i] = DTK_TZ;
|
|
|
|
break;
|
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
case IGNORE:
|
|
|
|
break;
|
|
|
|
|
|
|
|
case AMPM:
|
|
|
|
mer = val;
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (tmask & fmask)
|
|
|
|
return -1;
|
|
|
|
fmask |= tmask;
|
|
|
|
}
|
1997-05-16 09:19:50 +02:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
if ((mer != HR24) && (tm->tm_hour > 12))
|
|
|
|
return -1;
|
|
|
|
if ((mer == AM) && (tm->tm_hour == 12))
|
|
|
|
tm->tm_hour = 0;
|
|
|
|
else if ((mer == PM) && (tm->tm_hour != 12))
|
|
|
|
tm->tm_hour += 12;
|
|
|
|
|
|
|
|
if (((tm->tm_hour < 0) || (tm->tm_hour > 23))
|
|
|
|
|| ((tm->tm_min < 0) || (tm->tm_min > 59))
|
|
|
|
|| ((tm->tm_sec < 0) || ((tm->tm_sec + *fsec) >= 60)))
|
|
|
|
return -1;
|
From: Thomas Lockhart <Thomas.G.Lockhart@jpl.nasa.gov>
Subject: [HACKERS] More date time functions
Here are some additional patches mostly related to the date and time
data types. It includes some type conversion routines to move between
the different date types and some other date manipulation routines such
as date_part(units,datetime).
I noticed Edmund Mergl et al's neat trick for getting function overloading
for builtin functions, so started to use that for the date and time stuff.
Later, if someone figures out how to get function overloading directly
for internal C code, then we can move to that technique.
These patches include documentation updates (don't faint!) for the built-in
man page. Doesn't yet include mention of timestamp, since I don't know
much about it and since it may change a bit to become a _real_ ANSI timestamp
which would include parser support for the declaration syntax (what do you
think, Dan?).
The patches were developed on the 970330 release, but have been rebuilt
off of the 970402 release. The first patch below is to get libpq to compile,
on my Linux box, but is not related to the rest of the patches and you can
choose not to apply that one at this time. Thanks in advance, scrappy!
1997-04-02 20:36:24 +02:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
if ((fmask & DTK_TIME_M) != DTK_TIME_M)
|
|
|
|
return -1;
|
From: Thomas Lockhart <Thomas.G.Lockhart@jpl.nasa.gov>
Subject: [HACKERS] More date time functions
Here are some additional patches mostly related to the date and time
data types. It includes some type conversion routines to move between
the different date types and some other date manipulation routines such
as date_part(units,datetime).
I noticed Edmund Mergl et al's neat trick for getting function overloading
for builtin functions, so started to use that for the date and time stuff.
Later, if someone figures out how to get function overloading directly
for internal C code, then we can move to that technique.
These patches include documentation updates (don't faint!) for the built-in
man page. Doesn't yet include mention of timestamp, since I don't know
much about it and since it may change a bit to become a _real_ ANSI timestamp
which would include parser support for the declaration syntax (what do you
think, Dan?).
The patches were developed on the 970330 release, but have been rebuilt
off of the 970402 release. The first patch below is to get libpq to compile,
on my Linux box, but is not related to the rest of the patches and you can
choose not to apply that one at this time. Thanks in advance, scrappy!
1997-04-02 20:36:24 +02:00
|
|
|
|
2000-03-15 00:06:59 +01:00
|
|
|
/* timezone not specified? then find local timezone if possible */
|
|
|
|
if ((tzp != NULL) && (!(fmask & DTK_M(TZ))))
|
|
|
|
{
|
2000-04-12 19:17:23 +02:00
|
|
|
struct tm tt,
|
|
|
|
*tmp = &tt;
|
2000-03-15 00:06:59 +01:00
|
|
|
|
|
|
|
/*
|
2000-04-12 19:17:23 +02:00
|
|
|
* daylight savings time modifier but no standard timezone? then
|
|
|
|
* error
|
2000-03-15 00:06:59 +01:00
|
|
|
*/
|
|
|
|
if (fmask & DTK_M(DTZMOD))
|
|
|
|
return -1;
|
|
|
|
|
|
|
|
GetCurrentTime(tmp);
|
|
|
|
tmp->tm_hour = tm->tm_hour;
|
|
|
|
tmp->tm_min = tm->tm_min;
|
|
|
|
tmp->tm_sec = tm->tm_sec;
|
|
|
|
|
2001-05-04 00:53:07 +02:00
|
|
|
*tzp = DetermineLocalTimeZone(tmp);
|
2000-03-15 00:06:59 +01:00
|
|
|
tm->tm_isdst = tmp->tm_isdst;
|
|
|
|
}
|
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
return 0;
|
|
|
|
} /* DecodeTimeOnly() */
|
From: Thomas Lockhart <Thomas.G.Lockhart@jpl.nasa.gov>
Subject: [HACKERS] More date time functions
Here are some additional patches mostly related to the date and time
data types. It includes some type conversion routines to move between
the different date types and some other date manipulation routines such
as date_part(units,datetime).
I noticed Edmund Mergl et al's neat trick for getting function overloading
for builtin functions, so started to use that for the date and time stuff.
Later, if someone figures out how to get function overloading directly
for internal C code, then we can move to that technique.
These patches include documentation updates (don't faint!) for the built-in
man page. Doesn't yet include mention of timestamp, since I don't know
much about it and since it may change a bit to become a _real_ ANSI timestamp
which would include parser support for the declaration syntax (what do you
think, Dan?).
The patches were developed on the 970330 release, but have been rebuilt
off of the 970402 release. The first patch below is to get libpq to compile,
on my Linux box, but is not related to the rest of the patches and you can
choose not to apply that one at this time. Thanks in advance, scrappy!
1997-04-02 20:36:24 +02:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
/* DecodeDate()
|
|
|
|
* Decode date string which includes delimiters.
|
|
|
|
* Insist on a complete set of fields.
|
From: Thomas Lockhart <Thomas.G.Lockhart@jpl.nasa.gov>
Subject: [HACKERS] More date time functions
Here are some additional patches mostly related to the date and time
data types. It includes some type conversion routines to move between
the different date types and some other date manipulation routines such
as date_part(units,datetime).
I noticed Edmund Mergl et al's neat trick for getting function overloading
for builtin functions, so started to use that for the date and time stuff.
Later, if someone figures out how to get function overloading directly
for internal C code, then we can move to that technique.
These patches include documentation updates (don't faint!) for the built-in
man page. Doesn't yet include mention of timestamp, since I don't know
much about it and since it may change a bit to become a _real_ ANSI timestamp
which would include parser support for the declaration syntax (what do you
think, Dan?).
The patches were developed on the 970330 release, but have been rebuilt
off of the 970402 release. The first patch below is to get libpq to compile,
on my Linux box, but is not related to the rest of the patches and you can
choose not to apply that one at this time. Thanks in advance, scrappy!
1997-04-02 20:36:24 +02:00
|
|
|
*/
|
2000-06-09 00:38:00 +02:00
|
|
|
static int
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
DecodeDate(char *str, int fmask, int *tmask, struct tm * tm)
|
From: Thomas Lockhart <Thomas.G.Lockhart@jpl.nasa.gov>
Subject: [HACKERS] More date time functions
Here are some additional patches mostly related to the date and time
data types. It includes some type conversion routines to move between
the different date types and some other date manipulation routines such
as date_part(units,datetime).
I noticed Edmund Mergl et al's neat trick for getting function overloading
for builtin functions, so started to use that for the date and time stuff.
Later, if someone figures out how to get function overloading directly
for internal C code, then we can move to that technique.
These patches include documentation updates (don't faint!) for the built-in
man page. Doesn't yet include mention of timestamp, since I don't know
much about it and since it may change a bit to become a _real_ ANSI timestamp
which would include parser support for the declaration syntax (what do you
think, Dan?).
The patches were developed on the 970330 release, but have been rebuilt
off of the 970402 release. The first patch below is to get libpq to compile,
on my Linux box, but is not related to the rest of the patches and you can
choose not to apply that one at this time. Thanks in advance, scrappy!
1997-04-02 20:36:24 +02:00
|
|
|
{
|
1997-09-08 04:41:22 +02:00
|
|
|
double fsec;
|
From: Thomas Lockhart <Thomas.G.Lockhart@jpl.nasa.gov>
Subject: [HACKERS] More date time functions
Here are some additional patches mostly related to the date and time
data types. It includes some type conversion routines to move between
the different date types and some other date manipulation routines such
as date_part(units,datetime).
I noticed Edmund Mergl et al's neat trick for getting function overloading
for builtin functions, so started to use that for the date and time stuff.
Later, if someone figures out how to get function overloading directly
for internal C code, then we can move to that technique.
These patches include documentation updates (don't faint!) for the built-in
man page. Doesn't yet include mention of timestamp, since I don't know
much about it and since it may change a bit to become a _real_ ANSI timestamp
which would include parser support for the declaration syntax (what do you
think, Dan?).
The patches were developed on the 970330 release, but have been rebuilt
off of the 970402 release. The first patch below is to get libpq to compile,
on my Linux box, but is not related to the rest of the patches and you can
choose not to apply that one at this time. Thanks in advance, scrappy!
1997-04-02 20:36:24 +02:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
int nf = 0;
|
|
|
|
int i,
|
|
|
|
len;
|
|
|
|
int bc = FALSE;
|
|
|
|
int is2digits = FALSE;
|
|
|
|
int type,
|
|
|
|
val,
|
|
|
|
dmask = 0;
|
|
|
|
char *field[MAXDATEFIELDS];
|
|
|
|
|
|
|
|
/* parse this string... */
|
|
|
|
while ((*str != '\0') && (nf < MAXDATEFIELDS))
|
|
|
|
{
|
|
|
|
/* skip field separators */
|
2000-12-03 21:45:40 +01:00
|
|
|
while (!isalnum((unsigned char) *str))
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
str++;
|
|
|
|
|
|
|
|
field[nf] = str;
|
2000-12-03 21:45:40 +01:00
|
|
|
if (isdigit((unsigned char) *str))
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{
|
2000-12-03 21:45:40 +01:00
|
|
|
while (isdigit((unsigned char) *str))
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
str++;
|
|
|
|
}
|
2000-12-03 21:45:40 +01:00
|
|
|
else if (isalpha((unsigned char) *str))
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{
|
2000-12-03 21:45:40 +01:00
|
|
|
while (isalpha((unsigned char) *str))
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
str++;
|
|
|
|
}
|
|
|
|
|
2001-09-28 10:09:14 +02:00
|
|
|
/* Just get rid of any non-digit, non-alpha characters... */
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
if (*str != '\0')
|
|
|
|
*str++ = '\0';
|
|
|
|
nf++;
|
|
|
|
}
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
/* don't allow too many fields */
|
|
|
|
if (nf > 3)
|
|
|
|
return -1;
|
|
|
|
#endif
|
From: Thomas Lockhart <Thomas.G.Lockhart@jpl.nasa.gov>
Subject: [HACKERS] More date time functions
Here are some additional patches mostly related to the date and time
data types. It includes some type conversion routines to move between
the different date types and some other date manipulation routines such
as date_part(units,datetime).
I noticed Edmund Mergl et al's neat trick for getting function overloading
for builtin functions, so started to use that for the date and time stuff.
Later, if someone figures out how to get function overloading directly
for internal C code, then we can move to that technique.
These patches include documentation updates (don't faint!) for the built-in
man page. Doesn't yet include mention of timestamp, since I don't know
much about it and since it may change a bit to become a _real_ ANSI timestamp
which would include parser support for the declaration syntax (what do you
think, Dan?).
The patches were developed on the 970330 release, but have been rebuilt
off of the 970402 release. The first patch below is to get libpq to compile,
on my Linux box, but is not related to the rest of the patches and you can
choose not to apply that one at this time. Thanks in advance, scrappy!
1997-04-02 20:36:24 +02:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
*tmask = 0;
|
1997-05-16 09:19:50 +02:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
/* look first for text fields, since that will be unambiguous month */
|
|
|
|
for (i = 0; i < nf; i++)
|
1997-09-07 07:04:48 +02:00
|
|
|
{
|
2000-12-03 21:45:40 +01:00
|
|
|
if (isalpha((unsigned char) *field[i]))
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{
|
|
|
|
type = DecodeSpecial(i, field[i], &val);
|
|
|
|
if (type == IGNORE)
|
|
|
|
continue;
|
|
|
|
|
|
|
|
dmask = DTK_M(type);
|
|
|
|
switch (type)
|
|
|
|
{
|
|
|
|
case MONTH:
|
|
|
|
tm->tm_mon = val;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case ADBC:
|
|
|
|
bc = (val == BC);
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
if (fmask & dmask)
|
|
|
|
return -1;
|
|
|
|
|
|
|
|
fmask |= dmask;
|
|
|
|
*tmask |= dmask;
|
|
|
|
|
|
|
|
/* mark this field as being completed */
|
|
|
|
field[i] = NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/* now pick up remaining numeric fields */
|
|
|
|
for (i = 0; i < nf; i++)
|
|
|
|
{
|
|
|
|
if (field[i] == NULL)
|
|
|
|
continue;
|
|
|
|
|
|
|
|
if ((len = strlen(field[i])) <= 0)
|
|
|
|
return -1;
|
|
|
|
|
|
|
|
if (DecodeNumber(len, field[i], fmask, &dmask, tm, &fsec, &is2digits) != 0)
|
|
|
|
return -1;
|
|
|
|
|
|
|
|
if (fmask & dmask)
|
|
|
|
return -1;
|
|
|
|
|
|
|
|
fmask |= dmask;
|
|
|
|
*tmask |= dmask;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ((fmask & ~(DTK_M(DOY) | DTK_M(TZ))) != DTK_DATE_M)
|
|
|
|
return -1;
|
|
|
|
|
|
|
|
/* there is no year zero in AD/BC notation; i.e. "1 BC" == year 0 */
|
|
|
|
if (bc)
|
|
|
|
{
|
|
|
|
if (tm->tm_year > 0)
|
|
|
|
tm->tm_year = -(tm->tm_year - 1);
|
|
|
|
else
|
2001-11-19 10:05:02 +01:00
|
|
|
elog(ERROR, "Inconsistent use of year %04d and 'BC'", tm->tm_year);
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
}
|
|
|
|
else if (is2digits)
|
|
|
|
{
|
|
|
|
if (tm->tm_year < 70)
|
|
|
|
tm->tm_year += 2000;
|
|
|
|
else if (tm->tm_year < 100)
|
|
|
|
tm->tm_year += 1900;
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
} /* DecodeDate() */
|
|
|
|
|
|
|
|
|
|
|
|
/* DecodeTime()
|
|
|
|
* Decode time string which includes delimiters.
|
|
|
|
* Only check the lower limit on hours, since this same code
|
|
|
|
* can be used to represent time spans.
|
|
|
|
*/
|
2000-06-09 00:38:00 +02:00
|
|
|
static int
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
DecodeTime(char *str, int fmask, int *tmask, struct tm * tm, double *fsec)
|
|
|
|
{
|
|
|
|
char *cp;
|
|
|
|
|
|
|
|
*tmask = DTK_TIME_M;
|
|
|
|
|
|
|
|
tm->tm_hour = strtol(str, &cp, 10);
|
|
|
|
if (*cp != ':')
|
|
|
|
return -1;
|
|
|
|
str = cp + 1;
|
|
|
|
tm->tm_min = strtol(str, &cp, 10);
|
|
|
|
if (*cp == '\0')
|
|
|
|
{
|
|
|
|
tm->tm_sec = 0;
|
|
|
|
*fsec = 0;
|
1997-05-16 09:19:50 +02:00
|
|
|
|
1997-09-07 07:04:48 +02:00
|
|
|
}
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
else if (*cp != ':')
|
1997-09-07 07:04:48 +02:00
|
|
|
{
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
return -1;
|
1997-05-16 09:19:50 +02:00
|
|
|
|
1997-09-07 07:04:48 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
str = cp + 1;
|
|
|
|
tm->tm_sec = strtol(str, &cp, 10);
|
|
|
|
if (*cp == '\0')
|
|
|
|
*fsec = 0;
|
|
|
|
else if (*cp == '.')
|
|
|
|
{
|
|
|
|
str = cp;
|
|
|
|
*fsec = strtod(str, &cp);
|
|
|
|
if (cp == str)
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
return -1;
|
1997-09-07 07:04:48 +02:00
|
|
|
}
|
1997-05-16 09:19:50 +02:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
/* do a sanity check */
|
|
|
|
if ((tm->tm_hour < 0)
|
|
|
|
|| (tm->tm_min < 0) || (tm->tm_min > 59)
|
|
|
|
|| (tm->tm_sec < 0) || (tm->tm_sec > 59))
|
|
|
|
return -1;
|
From: Thomas Lockhart <Thomas.G.Lockhart@jpl.nasa.gov>
Subject: [HACKERS] More date time functions
Here are some additional patches mostly related to the date and time
data types. It includes some type conversion routines to move between
the different date types and some other date manipulation routines such
as date_part(units,datetime).
I noticed Edmund Mergl et al's neat trick for getting function overloading
for builtin functions, so started to use that for the date and time stuff.
Later, if someone figures out how to get function overloading directly
for internal C code, then we can move to that technique.
These patches include documentation updates (don't faint!) for the built-in
man page. Doesn't yet include mention of timestamp, since I don't know
much about it and since it may change a bit to become a _real_ ANSI timestamp
which would include parser support for the declaration syntax (what do you
think, Dan?).
The patches were developed on the 970330 release, but have been rebuilt
off of the 970402 release. The first patch below is to get libpq to compile,
on my Linux box, but is not related to the rest of the patches and you can
choose not to apply that one at this time. Thanks in advance, scrappy!
1997-04-02 20:36:24 +02:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
return 0;
|
|
|
|
} /* DecodeTime() */
|
From: Thomas Lockhart <Thomas.G.Lockhart@jpl.nasa.gov>
Subject: [HACKERS] More date time functions
Here are some additional patches mostly related to the date and time
data types. It includes some type conversion routines to move between
the different date types and some other date manipulation routines such
as date_part(units,datetime).
I noticed Edmund Mergl et al's neat trick for getting function overloading
for builtin functions, so started to use that for the date and time stuff.
Later, if someone figures out how to get function overloading directly
for internal C code, then we can move to that technique.
These patches include documentation updates (don't faint!) for the built-in
man page. Doesn't yet include mention of timestamp, since I don't know
much about it and since it may change a bit to become a _real_ ANSI timestamp
which would include parser support for the declaration syntax (what do you
think, Dan?).
The patches were developed on the 970330 release, but have been rebuilt
off of the 970402 release. The first patch below is to get libpq to compile,
on my Linux box, but is not related to the rest of the patches and you can
choose not to apply that one at this time. Thanks in advance, scrappy!
1997-04-02 20:36:24 +02:00
|
|
|
|
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
/* DecodeNumber()
|
|
|
|
* Interpret numeric field as a date value in context.
|
From: Thomas Lockhart <Thomas.G.Lockhart@jpl.nasa.gov>
Subject: [HACKERS] More date time functions
Here are some additional patches mostly related to the date and time
data types. It includes some type conversion routines to move between
the different date types and some other date manipulation routines such
as date_part(units,datetime).
I noticed Edmund Mergl et al's neat trick for getting function overloading
for builtin functions, so started to use that for the date and time stuff.
Later, if someone figures out how to get function overloading directly
for internal C code, then we can move to that technique.
These patches include documentation updates (don't faint!) for the built-in
man page. Doesn't yet include mention of timestamp, since I don't know
much about it and since it may change a bit to become a _real_ ANSI timestamp
which would include parser support for the declaration syntax (what do you
think, Dan?).
The patches were developed on the 970330 release, but have been rebuilt
off of the 970402 release. The first patch below is to get libpq to compile,
on my Linux box, but is not related to the rest of the patches and you can
choose not to apply that one at this time. Thanks in advance, scrappy!
1997-04-02 20:36:24 +02:00
|
|
|
*/
|
2000-06-09 00:38:00 +02:00
|
|
|
static int
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
DecodeNumber(int flen, char *str, int fmask,
|
|
|
|
int *tmask, struct tm * tm, double *fsec, int *is2digits)
|
From: Thomas Lockhart <Thomas.G.Lockhart@jpl.nasa.gov>
Subject: [HACKERS] More date time functions
Here are some additional patches mostly related to the date and time
data types. It includes some type conversion routines to move between
the different date types and some other date manipulation routines such
as date_part(units,datetime).
I noticed Edmund Mergl et al's neat trick for getting function overloading
for builtin functions, so started to use that for the date and time stuff.
Later, if someone figures out how to get function overloading directly
for internal C code, then we can move to that technique.
These patches include documentation updates (don't faint!) for the built-in
man page. Doesn't yet include mention of timestamp, since I don't know
much about it and since it may change a bit to become a _real_ ANSI timestamp
which would include parser support for the declaration syntax (what do you
think, Dan?).
The patches were developed on the 970330 release, but have been rebuilt
off of the 970402 release. The first patch below is to get libpq to compile,
on my Linux box, but is not related to the rest of the patches and you can
choose not to apply that one at this time. Thanks in advance, scrappy!
1997-04-02 20:36:24 +02:00
|
|
|
{
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
int val;
|
|
|
|
char *cp;
|
|
|
|
|
|
|
|
*tmask = 0;
|
1997-09-07 07:04:48 +02:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
val = strtol(str, &cp, 10);
|
|
|
|
if (cp == str)
|
|
|
|
return -1;
|
|
|
|
if (*cp == '.')
|
1997-09-07 07:04:48 +02:00
|
|
|
{
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
*fsec = strtod(cp, &cp);
|
|
|
|
if (*cp != '\0')
|
|
|
|
return -1;
|
|
|
|
}
|
1997-09-08 04:41:22 +02:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
/* Special case day of year? */
|
|
|
|
if ((flen == 3) && (fmask & DTK_M(YEAR))
|
|
|
|
&& ((val >= 1) && (val <= 366)))
|
|
|
|
{
|
|
|
|
*tmask = (DTK_M(DOY) | DTK_M(MONTH) | DTK_M(DAY));
|
|
|
|
tm->tm_yday = val;
|
|
|
|
j2date((date2j(tm->tm_year, 1, 1) + tm->tm_yday - 1),
|
|
|
|
&tm->tm_year, &tm->tm_mon, &tm->tm_mday);
|
1997-09-08 04:41:22 +02:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
}
|
1997-09-08 04:41:22 +02:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
/*
|
|
|
|
* Enough digits to be unequivocal year? Used to test for 4 digits or
|
|
|
|
* more, but we now test first for a three-digit doy so anything
|
2001-10-25 07:50:21 +02:00
|
|
|
* bigger than two digits had better be an explicit year. - thomas
|
|
|
|
* 1999-01-09 Back to requiring a 4 digit year. We accept a two digit
|
2000-04-12 19:17:23 +02:00
|
|
|
* year farther down. - thomas 2000-03-28
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
*/
|
2000-03-29 05:57:18 +02:00
|
|
|
else if (flen >= 4)
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{
|
|
|
|
*tmask = DTK_M(YEAR);
|
1997-09-08 04:41:22 +02:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
/* already have a year? then see if we can substitute... */
|
|
|
|
if ((fmask & DTK_M(YEAR)) && (!(fmask & DTK_M(DAY)))
|
|
|
|
&& ((tm->tm_year >= 1) && (tm->tm_year <= 31)))
|
|
|
|
{
|
|
|
|
tm->tm_mday = tm->tm_year;
|
|
|
|
*tmask = DTK_M(DAY);
|
|
|
|
}
|
|
|
|
|
|
|
|
tm->tm_year = val;
|
1997-09-07 07:04:48 +02:00
|
|
|
}
|
2000-03-29 05:57:18 +02:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
/* already have year? then could be month */
|
|
|
|
else if ((fmask & DTK_M(YEAR)) && (!(fmask & DTK_M(MONTH)))
|
|
|
|
&& ((val >= 1) && (val <= 12)))
|
|
|
|
{
|
|
|
|
*tmask = DTK_M(MONTH);
|
|
|
|
tm->tm_mon = val;
|
2000-03-29 05:57:18 +02:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
}
|
2000-03-29 05:57:18 +02:00
|
|
|
/* no year and EuroDates enabled? then could be day */
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
else if ((EuroDates || (fmask & DTK_M(MONTH)))
|
|
|
|
&& (!(fmask & DTK_M(YEAR)) && !(fmask & DTK_M(DAY)))
|
|
|
|
&& ((val >= 1) && (val <= 31)))
|
|
|
|
{
|
|
|
|
*tmask = DTK_M(DAY);
|
|
|
|
tm->tm_mday = val;
|
|
|
|
}
|
|
|
|
else if ((!(fmask & DTK_M(MONTH)))
|
|
|
|
&& ((val >= 1) && (val <= 12)))
|
|
|
|
{
|
|
|
|
*tmask = DTK_M(MONTH);
|
|
|
|
tm->tm_mon = val;
|
|
|
|
}
|
|
|
|
else if ((!(fmask & DTK_M(DAY)))
|
|
|
|
&& ((val >= 1) && (val <= 31)))
|
|
|
|
{
|
|
|
|
*tmask = DTK_M(DAY);
|
|
|
|
tm->tm_mday = val;
|
|
|
|
}
|
2000-04-12 19:17:23 +02:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Check for 2 or 4 or more digits, but currently we reach here only
|
|
|
|
* if two digits. - thomas 2000-03-28
|
2000-03-29 05:57:18 +02:00
|
|
|
*/
|
|
|
|
else if (!(fmask & DTK_M(YEAR))
|
|
|
|
&& ((flen >= 4) || (flen == 2)))
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{
|
|
|
|
*tmask = DTK_M(YEAR);
|
|
|
|
tm->tm_year = val;
|
|
|
|
|
|
|
|
/* adjust ONLY if exactly two digits... */
|
|
|
|
*is2digits = (flen == 2);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
return -1;
|
From: Thomas Lockhart <Thomas.G.Lockhart@jpl.nasa.gov>
Subject: [HACKERS] More date time functions
Here are some additional patches mostly related to the date and time
data types. It includes some type conversion routines to move between
the different date types and some other date manipulation routines such
as date_part(units,datetime).
I noticed Edmund Mergl et al's neat trick for getting function overloading
for builtin functions, so started to use that for the date and time stuff.
Later, if someone figures out how to get function overloading directly
for internal C code, then we can move to that technique.
These patches include documentation updates (don't faint!) for the built-in
man page. Doesn't yet include mention of timestamp, since I don't know
much about it and since it may change a bit to become a _real_ ANSI timestamp
which would include parser support for the declaration syntax (what do you
think, Dan?).
The patches were developed on the 970330 release, but have been rebuilt
off of the 970402 release. The first patch below is to get libpq to compile,
on my Linux box, but is not related to the rest of the patches and you can
choose not to apply that one at this time. Thanks in advance, scrappy!
1997-04-02 20:36:24 +02:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
return 0;
|
|
|
|
} /* DecodeNumber() */
|
From: Thomas Lockhart <Thomas.G.Lockhart@jpl.nasa.gov>
Subject: [HACKERS] More date time functions
Here are some additional patches mostly related to the date and time
data types. It includes some type conversion routines to move between
the different date types and some other date manipulation routines such
as date_part(units,datetime).
I noticed Edmund Mergl et al's neat trick for getting function overloading
for builtin functions, so started to use that for the date and time stuff.
Later, if someone figures out how to get function overloading directly
for internal C code, then we can move to that technique.
These patches include documentation updates (don't faint!) for the built-in
man page. Doesn't yet include mention of timestamp, since I don't know
much about it and since it may change a bit to become a _real_ ANSI timestamp
which would include parser support for the declaration syntax (what do you
think, Dan?).
The patches were developed on the 970330 release, but have been rebuilt
off of the 970402 release. The first patch below is to get libpq to compile,
on my Linux box, but is not related to the rest of the patches and you can
choose not to apply that one at this time. Thanks in advance, scrappy!
1997-04-02 20:36:24 +02:00
|
|
|
|
1997-05-16 09:19:50 +02:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
/* DecodeNumberField()
|
|
|
|
* Interpret numeric string as a concatenated date field.
|
1997-05-16 09:19:50 +02:00
|
|
|
*/
|
2000-06-09 00:38:00 +02:00
|
|
|
static int
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
DecodeNumberField(int len, char *str, int fmask,
|
|
|
|
int *tmask, struct tm * tm, double *fsec, int *is2digits)
|
1997-05-16 09:19:50 +02:00
|
|
|
{
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
char *cp;
|
1997-05-16 09:19:50 +02:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
/* yyyymmdd? */
|
|
|
|
if (len == 8)
|
|
|
|
{
|
|
|
|
*tmask = DTK_DATE_M;
|
|
|
|
|
|
|
|
tm->tm_mday = atoi(str + 6);
|
|
|
|
*(str + 6) = '\0';
|
|
|
|
tm->tm_mon = atoi(str + 4);
|
|
|
|
*(str + 4) = '\0';
|
|
|
|
tm->tm_year = atoi(str + 0);
|
|
|
|
/* yymmdd or hhmmss? */
|
|
|
|
}
|
|
|
|
else if (len == 6)
|
|
|
|
{
|
|
|
|
if (fmask & DTK_DATE_M)
|
|
|
|
{
|
|
|
|
*tmask = DTK_TIME_M;
|
|
|
|
tm->tm_sec = atoi(str + 4);
|
|
|
|
*(str + 4) = '\0';
|
|
|
|
tm->tm_min = atoi(str + 2);
|
|
|
|
*(str + 2) = '\0';
|
|
|
|
tm->tm_hour = atoi(str + 0);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
*tmask = DTK_DATE_M;
|
|
|
|
tm->tm_mday = atoi(str + 4);
|
|
|
|
*(str + 4) = '\0';
|
|
|
|
tm->tm_mon = atoi(str + 2);
|
|
|
|
*(str + 2) = '\0';
|
|
|
|
tm->tm_year = atoi(str + 0);
|
|
|
|
*is2digits = TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
else if ((len == 5) && !(fmask & DTK_DATE_M))
|
|
|
|
{
|
|
|
|
*tmask = DTK_DATE_M;
|
|
|
|
tm->tm_mday = atoi(str + 2);
|
|
|
|
*(str + 2) = '\0';
|
|
|
|
tm->tm_mon = 1;
|
|
|
|
tm->tm_year = atoi(str + 0);
|
|
|
|
*is2digits = TRUE;
|
|
|
|
}
|
|
|
|
else if (strchr(str, '.') != NULL)
|
|
|
|
{
|
|
|
|
*tmask = DTK_TIME_M;
|
|
|
|
tm->tm_sec = strtod((str + 4), &cp);
|
|
|
|
if (cp == (str + 4))
|
|
|
|
return -1;
|
|
|
|
if (*cp == '.')
|
|
|
|
*fsec = strtod(cp, NULL);
|
|
|
|
*(str + 4) = '\0';
|
|
|
|
tm->tm_min = strtod((str + 2), &cp);
|
|
|
|
*(str + 2) = '\0';
|
|
|
|
tm->tm_hour = strtod((str + 0), &cp);
|
|
|
|
|
|
|
|
}
|
|
|
|
else
|
|
|
|
return -1;
|
|
|
|
|
|
|
|
return 0;
|
2001-03-22 05:01:46 +01:00
|
|
|
} /* DecodeNumberField() */
|
1997-05-16 09:19:50 +02:00
|
|
|
|
1997-09-07 07:04:48 +02:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
/* DecodeTimezone()
|
|
|
|
* Interpret string as a numeric timezone.
|
|
|
|
*/
|
2000-06-09 00:38:00 +02:00
|
|
|
static int
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
DecodeTimezone(char *str, int *tzp)
|
|
|
|
{
|
|
|
|
int tz;
|
|
|
|
int hr,
|
|
|
|
min;
|
|
|
|
char *cp;
|
|
|
|
int len;
|
|
|
|
|
|
|
|
/* assume leading character is "+" or "-" */
|
|
|
|
hr = strtol((str + 1), &cp, 10);
|
|
|
|
|
|
|
|
/* explicit delimiter? */
|
|
|
|
if (*cp == ':')
|
1997-09-07 07:04:48 +02:00
|
|
|
{
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
min = strtol((cp + 1), &cp, 10);
|
1997-05-16 09:19:50 +02:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
/* otherwise, might have run things together... */
|
|
|
|
}
|
|
|
|
else if ((*cp == '\0') && ((len = strlen(str)) > 3))
|
|
|
|
{
|
|
|
|
min = strtol((str + len - 2), &cp, 10);
|
|
|
|
*(str + len - 2) = '\0';
|
|
|
|
hr = strtol((str + 1), &cp, 10);
|
1997-05-16 09:19:50 +02:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
}
|
|
|
|
else
|
|
|
|
min = 0;
|
1997-05-16 09:19:50 +02:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
tz = (hr * 60 + min) * 60;
|
|
|
|
if (*str == '-')
|
|
|
|
tz = -tz;
|
1997-05-16 09:19:50 +02:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
*tzp = -tz;
|
|
|
|
return *cp != '\0';
|
|
|
|
} /* DecodeTimezone() */
|
1997-09-07 07:04:48 +02:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
|
2000-03-16 15:38:42 +01:00
|
|
|
/* DecodePosixTimezone()
|
|
|
|
* Interpret string as a POSIX-compatible timezone:
|
2000-04-12 19:17:23 +02:00
|
|
|
* PST-hh:mm
|
|
|
|
* PST+h
|
2000-03-16 15:38:42 +01:00
|
|
|
* - thomas 2000-03-15
|
|
|
|
*/
|
|
|
|
static int
|
|
|
|
DecodePosixTimezone(char *str, int *tzp)
|
|
|
|
{
|
2000-04-12 19:17:23 +02:00
|
|
|
int val,
|
|
|
|
tz;
|
2000-03-16 15:38:42 +01:00
|
|
|
int type;
|
|
|
|
char *cp;
|
|
|
|
char delim;
|
|
|
|
|
|
|
|
cp = str;
|
2000-12-03 21:45:40 +01:00
|
|
|
while ((*cp != '\0') && isalpha((unsigned char) *cp))
|
2000-03-16 15:38:42 +01:00
|
|
|
cp++;
|
|
|
|
|
|
|
|
if (DecodeTimezone(cp, &tz) != 0)
|
|
|
|
return -1;
|
|
|
|
|
|
|
|
delim = *cp;
|
|
|
|
*cp = '\0';
|
2000-04-12 19:17:23 +02:00
|
|
|
type = DecodeSpecial(MAXDATEFIELDS - 1, str, &val);
|
2000-03-16 15:38:42 +01:00
|
|
|
*cp = delim;
|
|
|
|
|
2000-04-12 19:17:23 +02:00
|
|
|
switch (type)
|
2000-03-16 15:38:42 +01:00
|
|
|
{
|
|
|
|
case DTZ:
|
|
|
|
case TZ:
|
|
|
|
*tzp = (val * 60) - tz;
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
} /* DecodePosixTimezone() */
|
|
|
|
|
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
/* DecodeSpecial()
|
|
|
|
* Decode text string using lookup table.
|
|
|
|
* Implement a cache lookup since it is likely that dates
|
|
|
|
* will be related in format.
|
|
|
|
*/
|
|
|
|
int
|
|
|
|
DecodeSpecial(int field, char *lowtoken, int *val)
|
|
|
|
{
|
|
|
|
int type;
|
|
|
|
datetkn *tp;
|
|
|
|
|
|
|
|
if ((datecache[field] != NULL)
|
|
|
|
&& (strncmp(lowtoken, datecache[field]->token, TOKMAXLEN) == 0))
|
|
|
|
tp = datecache[field];
|
|
|
|
else
|
|
|
|
{
|
2001-06-18 18:14:44 +02:00
|
|
|
tp = NULL;
|
|
|
|
if (Australian_timezones)
|
|
|
|
tp = datebsearch(lowtoken, australian_datetktbl,
|
2001-10-25 07:50:21 +02:00
|
|
|
australian_szdatetktbl);
|
2001-06-18 18:14:44 +02:00
|
|
|
if (!tp)
|
|
|
|
tp = datebsearch(lowtoken, datetktbl, szdatetktbl);
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
}
|
|
|
|
datecache[field] = tp;
|
|
|
|
if (tp == NULL)
|
|
|
|
{
|
2001-09-28 10:09:14 +02:00
|
|
|
type = UNKNOWN_FIELD;
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
*val = 0;
|
1997-09-07 07:04:48 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
type = tp->type;
|
|
|
|
switch (type)
|
|
|
|
{
|
|
|
|
case TZ:
|
|
|
|
case DTZ:
|
|
|
|
case DTZMOD:
|
|
|
|
*val = FROMVAL(tp);
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
*val = tp->value;
|
|
|
|
break;
|
|
|
|
}
|
1997-09-07 07:04:48 +02:00
|
|
|
}
|
1997-05-16 09:19:50 +02:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
return type;
|
|
|
|
} /* DecodeSpecial() */
|
1997-03-15 00:21:12 +01:00
|
|
|
|
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
/* DecodeDateDelta()
|
|
|
|
* Interpret previously parsed fields for general time interval.
|
|
|
|
* Return 0 if decoded and -1 if problems.
|
|
|
|
*
|
|
|
|
* Allow "date" field DTK_DATE since this could be just
|
|
|
|
* an unsigned floating point number. - thomas 1997-11-16
|
|
|
|
*
|
|
|
|
* Allow ISO-style time span, with implicit units on number of days
|
2001-11-21 23:57:01 +01:00
|
|
|
* preceding an hh:mm:ss field. - thomas 1998-04-30
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
*/
|
|
|
|
int
|
|
|
|
DecodeDateDelta(char **field, int *ftype, int nf, int *dtype, struct tm * tm, double *fsec)
|
1997-03-15 00:21:12 +01:00
|
|
|
{
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
int is_before = FALSE;
|
|
|
|
|
|
|
|
char *cp;
|
|
|
|
int fmask = 0,
|
|
|
|
tmask,
|
|
|
|
type;
|
|
|
|
int i;
|
2000-11-06 16:57:00 +01:00
|
|
|
int val;
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
double fval;
|
|
|
|
double sec;
|
|
|
|
|
|
|
|
*dtype = DTK_DELTA;
|
|
|
|
|
2000-11-11 20:55:19 +01:00
|
|
|
type = IGNORE;
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
tm->tm_year = 0;
|
|
|
|
tm->tm_mon = 0;
|
|
|
|
tm->tm_mday = 0;
|
|
|
|
tm->tm_hour = 0;
|
|
|
|
tm->tm_min = 0;
|
|
|
|
tm->tm_sec = 0;
|
|
|
|
*fsec = 0;
|
1997-03-15 00:21:12 +01:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
/* read through list backwards to pick up units before values */
|
|
|
|
for (i = nf - 1; i >= 0; i--)
|
|
|
|
{
|
|
|
|
switch (ftype[i])
|
|
|
|
{
|
|
|
|
case DTK_TIME:
|
|
|
|
if (DecodeTime(field[i], fmask, &tmask, tm, fsec) != 0)
|
|
|
|
return -1;
|
|
|
|
type = DTK_DAY;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case DTK_TZ:
|
2001-03-22 05:01:46 +01:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
/*
|
|
|
|
* Timezone is a token with a leading sign character and
|
2000-11-06 16:57:00 +01:00
|
|
|
* otherwise the same as a non-signed time field
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
*/
|
2000-11-06 16:57:00 +01:00
|
|
|
Assert((*field[i] == '-') || (*field[i] == '+'));
|
2001-03-22 05:01:46 +01:00
|
|
|
|
|
|
|
/*
|
|
|
|
* A single signed number ends up here, but will be
|
|
|
|
* rejected by DecodeTime(). So, work this out to drop
|
|
|
|
* through to DTK_NUMBER, which *can* tolerate this.
|
2000-11-06 16:57:00 +01:00
|
|
|
*/
|
2001-03-22 05:01:46 +01:00
|
|
|
cp = field[i] + 1;
|
2000-11-11 20:55:19 +01:00
|
|
|
while ((*cp != '\0') && (*cp != ':') && (*cp != '.'))
|
2000-11-06 16:57:00 +01:00
|
|
|
cp++;
|
|
|
|
if ((*cp == ':')
|
2001-03-22 05:01:46 +01:00
|
|
|
&& (DecodeTime((field[i] + 1), fmask, &tmask, tm, fsec) == 0))
|
|
|
|
{
|
|
|
|
if (*field[i] == '-')
|
|
|
|
{
|
2000-11-06 16:57:00 +01:00
|
|
|
/* flip the sign on all fields */
|
|
|
|
tm->tm_hour = -tm->tm_hour;
|
|
|
|
tm->tm_min = -tm->tm_min;
|
|
|
|
tm->tm_sec = -tm->tm_sec;
|
|
|
|
*fsec = -(*fsec);
|
|
|
|
}
|
|
|
|
|
2001-03-22 05:01:46 +01:00
|
|
|
/*
|
|
|
|
* Set the next type to be a day, if units are not
|
|
|
|
* specified. This handles the case of '1 +02:03'
|
|
|
|
* since we are reading right to left.
|
2000-11-06 16:57:00 +01:00
|
|
|
*/
|
|
|
|
type = DTK_DAY;
|
|
|
|
tmask = DTK_M(TZ);
|
|
|
|
break;
|
2001-03-22 05:01:46 +01:00
|
|
|
}
|
|
|
|
else if (type == IGNORE)
|
|
|
|
{
|
|
|
|
if (*cp == '.')
|
|
|
|
{
|
|
|
|
/*
|
|
|
|
* Got a decimal point? Then assume some sort of
|
|
|
|
* seconds specification
|
|
|
|
*/
|
2000-11-11 20:55:19 +01:00
|
|
|
type = DTK_SECOND;
|
2001-03-22 05:01:46 +01:00
|
|
|
}
|
|
|
|
else if (*cp == '\0')
|
|
|
|
{
|
|
|
|
/*
|
|
|
|
* Only a signed integer? Then must assume a
|
|
|
|
* timezone-like usage
|
|
|
|
*/
|
2000-11-11 20:55:19 +01:00
|
|
|
type = DTK_HOUR;
|
|
|
|
}
|
2000-11-06 16:57:00 +01:00
|
|
|
}
|
|
|
|
/* DROP THROUGH */
|
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
case DTK_DATE:
|
|
|
|
case DTK_NUMBER:
|
|
|
|
val = strtol(field[i], &cp, 10);
|
2000-11-06 16:57:00 +01:00
|
|
|
|
2001-09-28 10:09:14 +02:00
|
|
|
if (type == IGNORE)
|
|
|
|
type = DTK_SECOND;
|
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
if (*cp == '.')
|
|
|
|
{
|
|
|
|
fval = strtod(cp, &cp);
|
|
|
|
if (*cp != '\0')
|
|
|
|
return -1;
|
|
|
|
|
|
|
|
if (val < 0)
|
|
|
|
fval = -(fval);
|
|
|
|
}
|
|
|
|
else if (*cp == '\0')
|
|
|
|
fval = 0;
|
|
|
|
else
|
|
|
|
return -1;
|
|
|
|
|
|
|
|
tmask = 0; /* DTK_M(type); */
|
|
|
|
|
|
|
|
switch (type)
|
|
|
|
{
|
|
|
|
case DTK_MICROSEC:
|
|
|
|
*fsec += ((val + fval) * 1e-6);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case DTK_MILLISEC:
|
|
|
|
*fsec += ((val + fval) * 1e-3);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case DTK_SECOND:
|
|
|
|
tm->tm_sec += val;
|
|
|
|
*fsec += fval;
|
|
|
|
tmask = DTK_M(SECOND);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case DTK_MINUTE:
|
|
|
|
tm->tm_min += val;
|
|
|
|
if (fval != 0)
|
|
|
|
tm->tm_sec += (fval * 60);
|
|
|
|
tmask = DTK_M(MINUTE);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case DTK_HOUR:
|
|
|
|
tm->tm_hour += val;
|
|
|
|
if (fval != 0)
|
|
|
|
tm->tm_sec += (fval * 3600);
|
|
|
|
tmask = DTK_M(HOUR);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case DTK_DAY:
|
|
|
|
tm->tm_mday += val;
|
|
|
|
if (fval != 0)
|
|
|
|
tm->tm_sec += (fval * 86400);
|
|
|
|
tmask = ((fmask & DTK_M(DAY)) ? 0 : DTK_M(DAY));
|
|
|
|
break;
|
|
|
|
|
|
|
|
case DTK_WEEK:
|
|
|
|
tm->tm_mday += val * 7;
|
|
|
|
if (fval != 0)
|
|
|
|
tm->tm_sec += (fval * (7 * 86400));
|
|
|
|
tmask = ((fmask & DTK_M(DAY)) ? 0 : DTK_M(DAY));
|
|
|
|
break;
|
|
|
|
|
|
|
|
case DTK_MONTH:
|
|
|
|
tm->tm_mon += val;
|
|
|
|
if (fval != 0)
|
|
|
|
tm->tm_sec += (fval * (30 * 86400));
|
|
|
|
tmask = DTK_M(MONTH);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case DTK_YEAR:
|
|
|
|
tm->tm_year += val;
|
|
|
|
if (fval != 0)
|
|
|
|
tm->tm_mon += (fval * 12);
|
|
|
|
tmask = ((fmask & DTK_M(YEAR)) ? 0 : DTK_M(YEAR));
|
|
|
|
break;
|
|
|
|
|
|
|
|
case DTK_DECADE:
|
|
|
|
tm->tm_year += val * 10;
|
|
|
|
if (fval != 0)
|
|
|
|
tm->tm_mon += (fval * 120);
|
|
|
|
tmask = ((fmask & DTK_M(YEAR)) ? 0 : DTK_M(YEAR));
|
|
|
|
break;
|
|
|
|
|
|
|
|
case DTK_CENTURY:
|
|
|
|
tm->tm_year += val * 100;
|
|
|
|
if (fval != 0)
|
|
|
|
tm->tm_mon += (fval * 1200);
|
|
|
|
tmask = ((fmask & DTK_M(YEAR)) ? 0 : DTK_M(YEAR));
|
|
|
|
break;
|
|
|
|
|
2000-04-14 17:22:10 +02:00
|
|
|
case DTK_MILLENNIUM:
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
tm->tm_year += val * 1000;
|
|
|
|
if (fval != 0)
|
|
|
|
tm->tm_mon += (fval * 12000);
|
|
|
|
tmask = ((fmask & DTK_M(YEAR)) ? 0 : DTK_M(YEAR));
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case DTK_STRING:
|
|
|
|
case DTK_SPECIAL:
|
|
|
|
type = DecodeUnits(i, field[i], &val);
|
|
|
|
if (type == IGNORE)
|
|
|
|
continue;
|
|
|
|
|
|
|
|
tmask = 0; /* DTK_M(type); */
|
|
|
|
switch (type)
|
|
|
|
{
|
|
|
|
case UNITS:
|
|
|
|
type = val;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case AGO:
|
|
|
|
is_before = TRUE;
|
|
|
|
type = val;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case RESERV:
|
|
|
|
tmask = (DTK_DATE_M || DTK_TIME_M);
|
|
|
|
*dtype = val;
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (tmask & fmask)
|
|
|
|
return -1;
|
|
|
|
fmask |= tmask;
|
|
|
|
}
|
1997-03-15 00:21:12 +01:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
if (*fsec != 0)
|
|
|
|
{
|
|
|
|
TMODULO(*fsec, sec, 1e0);
|
|
|
|
tm->tm_sec += sec;
|
|
|
|
}
|
1997-03-15 00:21:12 +01:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
if (is_before)
|
|
|
|
{
|
|
|
|
*fsec = -(*fsec);
|
|
|
|
tm->tm_sec = -(tm->tm_sec);
|
|
|
|
tm->tm_min = -(tm->tm_min);
|
|
|
|
tm->tm_hour = -(tm->tm_hour);
|
|
|
|
tm->tm_mday = -(tm->tm_mday);
|
|
|
|
tm->tm_mon = -(tm->tm_mon);
|
|
|
|
tm->tm_year = -(tm->tm_year);
|
|
|
|
}
|
1997-03-15 00:21:12 +01:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
/* ensure that at least one time field has been found */
|
|
|
|
return (fmask != 0) ? 0 : -1;
|
|
|
|
} /* DecodeDateDelta() */
|
1997-03-15 00:21:12 +01:00
|
|
|
|
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
/* DecodeUnits()
|
|
|
|
* Decode text string using lookup table.
|
|
|
|
* This routine supports time interval decoding.
|
|
|
|
*/
|
|
|
|
int
|
|
|
|
DecodeUnits(int field, char *lowtoken, int *val)
|
|
|
|
{
|
|
|
|
int type;
|
|
|
|
datetkn *tp;
|
1997-03-15 00:21:12 +01:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
if ((deltacache[field] != NULL)
|
|
|
|
&& (strncmp(lowtoken, deltacache[field]->token, TOKMAXLEN) == 0))
|
|
|
|
tp = deltacache[field];
|
|
|
|
else
|
|
|
|
tp = datebsearch(lowtoken, deltatktbl, szdeltatktbl);
|
|
|
|
deltacache[field] = tp;
|
|
|
|
if (tp == NULL)
|
|
|
|
{
|
2001-09-28 10:09:14 +02:00
|
|
|
type = UNKNOWN_FIELD;
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
*val = 0;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
type = tp->type;
|
|
|
|
if ((type == TZ) || (type == DTZ))
|
|
|
|
*val = FROMVAL(tp);
|
|
|
|
else
|
|
|
|
*val = tp->value;
|
|
|
|
}
|
|
|
|
|
|
|
|
return type;
|
|
|
|
} /* DecodeUnits() */
|
1997-03-15 00:21:12 +01:00
|
|
|
|
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
/* datebsearch()
|
|
|
|
* Binary search -- from Knuth (6.2.1) Algorithm B. Special case like this
|
|
|
|
* is WAY faster than the generic bsearch().
|
|
|
|
*/
|
2001-03-22 05:01:46 +01:00
|
|
|
static datetkn *
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
datebsearch(char *key, datetkn *base, unsigned int nel)
|
1997-03-15 00:21:12 +01:00
|
|
|
{
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
datetkn *last = base + nel - 1,
|
|
|
|
*position;
|
|
|
|
int result;
|
1997-09-07 07:04:48 +02:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
while (last >= base)
|
|
|
|
{
|
|
|
|
position = base + ((last - base) >> 1);
|
|
|
|
result = key[0] - position->token[0];
|
|
|
|
if (result == 0)
|
|
|
|
{
|
|
|
|
result = strncmp(key, position->token, TOKMAXLEN);
|
|
|
|
if (result == 0)
|
|
|
|
return position;
|
|
|
|
}
|
|
|
|
if (result < 0)
|
|
|
|
last = position - 1;
|
|
|
|
else
|
|
|
|
base = position + 1;
|
|
|
|
}
|
|
|
|
return NULL;
|
|
|
|
}
|
1997-03-15 00:21:12 +01:00
|
|
|
|
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
/* EncodeDateOnly()
|
|
|
|
* Encode date as local time.
|
|
|
|
*/
|
|
|
|
int
|
|
|
|
EncodeDateOnly(struct tm * tm, int style, char *str)
|
|
|
|
{
|
|
|
|
if ((tm->tm_mon < 1) || (tm->tm_mon > 12))
|
|
|
|
return -1;
|
1997-05-16 09:19:50 +02:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
switch (style)
|
|
|
|
{
|
|
|
|
case USE_ISO_DATES:
|
2001-09-28 10:09:14 +02:00
|
|
|
/* compatible with ISO date formats */
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
if (tm->tm_year > 0)
|
|
|
|
sprintf(str, "%04d-%02d-%02d",
|
|
|
|
tm->tm_year, tm->tm_mon, tm->tm_mday);
|
|
|
|
else
|
|
|
|
sprintf(str, "%04d-%02d-%02d %s",
|
|
|
|
-(tm->tm_year - 1), tm->tm_mon, tm->tm_mday, "BC");
|
|
|
|
break;
|
1997-05-16 09:19:50 +02:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
case USE_SQL_DATES:
|
2001-09-28 10:09:14 +02:00
|
|
|
/* compatible with Oracle/Ingres date formats */
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
if (EuroDates)
|
|
|
|
sprintf(str, "%02d/%02d", tm->tm_mday, tm->tm_mon);
|
|
|
|
else
|
|
|
|
sprintf(str, "%02d/%02d", tm->tm_mon, tm->tm_mday);
|
|
|
|
if (tm->tm_year > 0)
|
|
|
|
sprintf((str + 5), "/%04d", tm->tm_year);
|
|
|
|
else
|
|
|
|
sprintf((str + 5), "/%04d %s", -(tm->tm_year - 1), "BC");
|
|
|
|
break;
|
1997-07-01 02:22:46 +02:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
case USE_GERMAN_DATES:
|
2001-09-28 10:09:14 +02:00
|
|
|
/* German-style date format */
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
sprintf(str, "%02d.%02d", tm->tm_mday, tm->tm_mon);
|
|
|
|
if (tm->tm_year > 0)
|
|
|
|
sprintf((str + 5), ".%04d", tm->tm_year);
|
|
|
|
else
|
|
|
|
sprintf((str + 5), ".%04d %s", -(tm->tm_year - 1), "BC");
|
|
|
|
break;
|
1997-03-15 00:21:12 +01:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
case USE_POSTGRES_DATES:
|
|
|
|
default:
|
2001-09-28 10:09:14 +02:00
|
|
|
/* traditional date-only style for Postgres */
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
if (EuroDates)
|
|
|
|
sprintf(str, "%02d-%02d", tm->tm_mday, tm->tm_mon);
|
|
|
|
else
|
|
|
|
sprintf(str, "%02d-%02d", tm->tm_mon, tm->tm_mday);
|
|
|
|
if (tm->tm_year > 0)
|
|
|
|
sprintf((str + 5), "-%04d", tm->tm_year);
|
|
|
|
else
|
|
|
|
sprintf((str + 5), "-%04d %s", -(tm->tm_year - 1), "BC");
|
|
|
|
break;
|
|
|
|
}
|
1997-03-15 00:21:12 +01:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
return TRUE;
|
|
|
|
} /* EncodeDateOnly() */
|
1997-03-15 00:21:12 +01:00
|
|
|
|
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
/* EncodeTimeOnly()
|
|
|
|
* Encode time fields only.
|
|
|
|
*/
|
|
|
|
int
|
2000-03-15 00:06:59 +01:00
|
|
|
EncodeTimeOnly(struct tm * tm, double fsec, int *tzp, int style, char *str)
|
1997-03-15 00:21:12 +01:00
|
|
|
{
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
double sec;
|
1997-03-15 00:21:12 +01:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
if ((tm->tm_hour < 0) || (tm->tm_hour > 24))
|
|
|
|
return -1;
|
1997-03-15 00:21:12 +01:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
sec = (tm->tm_sec + fsec);
|
1997-03-15 00:21:12 +01:00
|
|
|
|
2001-10-03 07:29:27 +02:00
|
|
|
sprintf(str, "%02d:%02d", tm->tm_hour, tm->tm_min);
|
|
|
|
|
2001-10-25 07:50:21 +02:00
|
|
|
/*
|
|
|
|
* If we have fractional seconds, then include a decimal point We will
|
|
|
|
* do up to 6 fractional digits, and we have rounded any inputs to
|
|
|
|
* eliminate anything to the right of 6 digits anyway. If there are no
|
|
|
|
* fractional seconds, then do not bother printing a decimal point at
|
|
|
|
* all. - thomas 2001-09-29
|
2001-10-03 07:29:27 +02:00
|
|
|
*/
|
2001-10-25 07:50:21 +02:00
|
|
|
if (fsec != 0)
|
|
|
|
{
|
2001-10-03 07:29:27 +02:00
|
|
|
sprintf((str + strlen(str)), ":%013.10f", sec);
|
|
|
|
/* chop off trailing pairs of zeros... */
|
|
|
|
while ((strcmp((str + strlen(str) - 2), "00") == 0)
|
|
|
|
&& (*(str + strlen(str) - 3) != '.'))
|
|
|
|
*(str + strlen(str) - 2) = '\0';
|
|
|
|
}
|
|
|
|
else
|
|
|
|
sprintf((str + strlen(str)), ":%02.0f", sec);
|
1997-03-15 00:21:12 +01:00
|
|
|
|
2000-03-15 00:06:59 +01:00
|
|
|
if (tzp != NULL)
|
|
|
|
{
|
2000-04-12 19:17:23 +02:00
|
|
|
int hour,
|
|
|
|
min;
|
2000-03-15 00:06:59 +01:00
|
|
|
|
|
|
|
hour = -(*tzp / 3600);
|
|
|
|
min = ((abs(*tzp) / 60) % 60);
|
|
|
|
sprintf((str + strlen(str)), ((min != 0) ? "%+03d:%02d" : "%+03d"), hour, min);
|
|
|
|
}
|
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
return TRUE;
|
|
|
|
} /* EncodeTimeOnly() */
|
1997-03-15 00:21:12 +01:00
|
|
|
|
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
/* EncodeDateTime()
|
|
|
|
* Encode date and time interpreted as local time.
|
|
|
|
* Support several date styles:
|
|
|
|
* Postgres - day mon hh:mm:ss yyyy tz
|
|
|
|
* SQL - mm/dd/yyyy hh:mm:ss.ss tz
|
|
|
|
* ISO - yyyy-mm-dd hh:mm:ss+/-tz
|
|
|
|
* German - dd.mm/yyyy hh:mm:ss tz
|
|
|
|
* Variants (affects order of month and day for Postgres and SQL styles):
|
|
|
|
* US - mm/dd/yyyy
|
|
|
|
* European - dd/mm/yyyy
|
|
|
|
*/
|
|
|
|
int
|
|
|
|
EncodeDateTime(struct tm * tm, double fsec, int *tzp, char **tzn, int style, char *str)
|
1997-03-15 00:21:12 +01:00
|
|
|
{
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
int day,
|
|
|
|
hour,
|
|
|
|
min;
|
|
|
|
double sec;
|
1997-03-15 00:21:12 +01:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
if ((tm->tm_mon < 1) || (tm->tm_mon > 12))
|
|
|
|
return -1;
|
1997-03-15 00:21:12 +01:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
sec = (tm->tm_sec + fsec);
|
1997-03-15 00:21:12 +01:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
switch (style)
|
|
|
|
{
|
|
|
|
/* compatible with ISO date formats */
|
|
|
|
|
|
|
|
case USE_ISO_DATES:
|
|
|
|
if (tm->tm_year > 0)
|
|
|
|
{
|
2001-10-03 07:29:27 +02:00
|
|
|
sprintf(str, "%04d-%02d-%02d %02d:%02d",
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
tm->tm_year, tm->tm_mon, tm->tm_mday, tm->tm_hour, tm->tm_min);
|
2001-10-03 07:29:27 +02:00
|
|
|
|
2001-10-25 07:50:21 +02:00
|
|
|
/*
|
|
|
|
* If we have fractional seconds, then include a decimal
|
|
|
|
* point We will do up to 6 fractional digits, and we have
|
|
|
|
* rounded any inputs to eliminate anything to the right
|
|
|
|
* of 6 digits anyway. If there are no fractional seconds,
|
|
|
|
* then do not bother printing a decimal point at all. -
|
|
|
|
* thomas 2001-09-29
|
2001-10-03 07:29:27 +02:00
|
|
|
*/
|
2001-10-25 07:50:21 +02:00
|
|
|
if (fsec != 0)
|
|
|
|
{
|
2001-10-03 07:29:27 +02:00
|
|
|
sprintf((str + strlen(str)), ":%013.10f", sec);
|
2001-10-18 19:30:21 +02:00
|
|
|
TrimTrailingZeros(str);
|
2001-10-03 07:29:27 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
sprintf((str + strlen(str)), ":%02.0f", sec);
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
|
2001-10-25 07:50:21 +02:00
|
|
|
/*
|
|
|
|
* tzp == NULL indicates that we don't want *any* time
|
|
|
|
* zone info in the output string. *tzn != NULL indicates
|
|
|
|
* that we have alpha time zone info available. tm_isdst
|
|
|
|
* != -1 indicates that we have a valid time zone
|
|
|
|
* translation.
|
2001-10-18 19:30:21 +02:00
|
|
|
*/
|
2001-10-20 03:02:22 +02:00
|
|
|
if ((tzp != NULL) && (tm->tm_isdst >= 0))
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{
|
2001-10-18 19:30:21 +02:00
|
|
|
hour = -(*tzp / 3600);
|
|
|
|
min = ((abs(*tzp) / 60) % 60);
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
sprintf((str + strlen(str)), ((min != 0) ? "%+03d:%02d" : "%+03d"), hour, min);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (tm->tm_hour || tm->tm_min)
|
|
|
|
sprintf(str, "%04d-%02d-%02d %02d:%02d %s",
|
|
|
|
-(tm->tm_year - 1), tm->tm_mon, tm->tm_mday, tm->tm_hour, tm->tm_min, "BC");
|
|
|
|
else
|
|
|
|
sprintf(str, "%04d-%02d-%02d %s",
|
|
|
|
-(tm->tm_year - 1), tm->tm_mon, tm->tm_mday, "BC");
|
|
|
|
}
|
|
|
|
break;
|
1997-03-15 00:21:12 +01:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
/* compatible with Oracle/Ingres date formats */
|
|
|
|
case USE_SQL_DATES:
|
|
|
|
if (EuroDates)
|
|
|
|
sprintf(str, "%02d/%02d", tm->tm_mday, tm->tm_mon);
|
|
|
|
else
|
|
|
|
sprintf(str, "%02d/%02d", tm->tm_mon, tm->tm_mday);
|
|
|
|
|
|
|
|
if (tm->tm_year > 0)
|
|
|
|
{
|
2001-10-03 07:29:27 +02:00
|
|
|
sprintf((str + 5), "/%04d %02d:%02d",
|
|
|
|
tm->tm_year, tm->tm_hour, tm->tm_min);
|
|
|
|
|
2001-10-25 07:50:21 +02:00
|
|
|
/*
|
|
|
|
* If we have fractional seconds, then include a decimal
|
|
|
|
* point We will do up to 6 fractional digits, and we have
|
|
|
|
* rounded any inputs to eliminate anything to the right
|
|
|
|
* of 6 digits anyway. If there are no fractional seconds,
|
|
|
|
* then do not bother printing a decimal point at all. -
|
|
|
|
* thomas 2001-09-29
|
2001-10-03 07:29:27 +02:00
|
|
|
*/
|
2001-10-25 07:50:21 +02:00
|
|
|
if (fsec != 0)
|
|
|
|
{
|
2001-10-03 07:29:27 +02:00
|
|
|
sprintf((str + strlen(str)), ":%013.10f", sec);
|
2001-10-18 19:30:21 +02:00
|
|
|
TrimTrailingZeros(str);
|
2001-10-03 07:29:27 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
sprintf((str + strlen(str)), ":%02.0f", sec);
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
|
2001-10-20 03:02:22 +02:00
|
|
|
if ((tzp != NULL) && (tm->tm_isdst >= 0))
|
2001-10-18 19:30:21 +02:00
|
|
|
{
|
2001-10-20 03:02:22 +02:00
|
|
|
if (*tzn != NULL)
|
|
|
|
sprintf((str + strlen(str)), " %.*s", MAXTZLEN, *tzn);
|
|
|
|
else
|
|
|
|
{
|
|
|
|
hour = -(*tzp / 3600);
|
|
|
|
min = ((abs(*tzp) / 60) % 60);
|
|
|
|
sprintf((str + strlen(str)), ((min != 0) ? "%+03d:%02d" : "%+03d"), hour, min);
|
|
|
|
}
|
2001-10-18 19:30:21 +02:00
|
|
|
}
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
}
|
|
|
|
else
|
|
|
|
sprintf((str + 5), "/%04d %02d:%02d %s",
|
|
|
|
-(tm->tm_year - 1), tm->tm_hour, tm->tm_min, "BC");
|
|
|
|
break;
|
1997-03-15 00:21:12 +01:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
/* German variant on European style */
|
|
|
|
case USE_GERMAN_DATES:
|
|
|
|
sprintf(str, "%02d.%02d", tm->tm_mday, tm->tm_mon);
|
|
|
|
if (tm->tm_year > 0)
|
|
|
|
{
|
2001-10-03 07:29:27 +02:00
|
|
|
sprintf((str + 5), ".%04d %02d:%02d",
|
|
|
|
tm->tm_year, tm->tm_hour, tm->tm_min);
|
|
|
|
|
2001-10-25 07:50:21 +02:00
|
|
|
/*
|
|
|
|
* If we have fractional seconds, then include a decimal
|
|
|
|
* point We will do up to 6 fractional digits, and we have
|
|
|
|
* rounded any inputs to eliminate anything to the right
|
|
|
|
* of 6 digits anyway. If there are no fractional seconds,
|
|
|
|
* then do not bother printing a decimal point at all. -
|
|
|
|
* thomas 2001-09-29
|
2001-10-03 07:29:27 +02:00
|
|
|
*/
|
2001-10-25 07:50:21 +02:00
|
|
|
if (fsec != 0)
|
|
|
|
{
|
2001-10-03 07:29:27 +02:00
|
|
|
sprintf((str + strlen(str)), ":%013.10f", sec);
|
2001-10-18 19:30:21 +02:00
|
|
|
TrimTrailingZeros(str);
|
2001-10-03 07:29:27 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
sprintf((str + strlen(str)), ":%02.0f", sec);
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
|
2001-10-20 03:02:22 +02:00
|
|
|
if ((tzp != NULL) && (tm->tm_isdst >= 0))
|
2001-10-18 19:30:21 +02:00
|
|
|
{
|
2001-10-20 03:02:22 +02:00
|
|
|
if (*tzn != NULL)
|
|
|
|
sprintf((str + strlen(str)), " %.*s", MAXTZLEN, *tzn);
|
|
|
|
else
|
|
|
|
{
|
|
|
|
hour = -(*tzp / 3600);
|
|
|
|
min = ((abs(*tzp) / 60) % 60);
|
|
|
|
sprintf((str + strlen(str)), ((min != 0) ? "%+03d:%02d" : "%+03d"), hour, min);
|
|
|
|
}
|
2001-10-18 19:30:21 +02:00
|
|
|
}
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
}
|
|
|
|
else
|
|
|
|
sprintf((str + 5), ".%04d %02d:%02d %s",
|
|
|
|
-(tm->tm_year - 1), tm->tm_hour, tm->tm_min, "BC");
|
|
|
|
break;
|
1997-03-15 00:21:12 +01:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
/* backward-compatible with traditional Postgres abstime dates */
|
|
|
|
case USE_POSTGRES_DATES:
|
|
|
|
default:
|
|
|
|
day = date2j(tm->tm_year, tm->tm_mon, tm->tm_mday);
|
|
|
|
tm->tm_wday = j2day(day);
|
|
|
|
|
|
|
|
strncpy(str, days[tm->tm_wday], 3);
|
|
|
|
strcpy((str + 3), " ");
|
|
|
|
|
|
|
|
if (EuroDates)
|
|
|
|
sprintf((str + 4), "%02d %3s", tm->tm_mday, months[tm->tm_mon - 1]);
|
|
|
|
else
|
|
|
|
sprintf((str + 4), "%3s %02d", months[tm->tm_mon - 1], tm->tm_mday);
|
|
|
|
|
|
|
|
if (tm->tm_year > 0)
|
|
|
|
{
|
|
|
|
sprintf((str + 10), " %02d:%02d", tm->tm_hour, tm->tm_min);
|
2001-10-03 07:29:27 +02:00
|
|
|
|
2001-10-25 07:50:21 +02:00
|
|
|
/*
|
|
|
|
* If we have fractional seconds, then include a decimal
|
|
|
|
* point We will do up to 6 fractional digits, and we have
|
|
|
|
* rounded any inputs to eliminate anything to the right
|
|
|
|
* of 6 digits anyway. If there are no fractional seconds,
|
|
|
|
* then do not bother printing a decimal point at all. -
|
|
|
|
* thomas 2001-09-29
|
2001-10-03 07:29:27 +02:00
|
|
|
*/
|
2001-10-25 07:50:21 +02:00
|
|
|
if (fsec != 0)
|
|
|
|
{
|
2001-10-03 07:29:27 +02:00
|
|
|
sprintf((str + strlen(str)), ":%013.10f", sec);
|
2001-10-18 19:30:21 +02:00
|
|
|
TrimTrailingZeros(str);
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
}
|
|
|
|
else
|
2001-10-03 07:29:27 +02:00
|
|
|
sprintf((str + strlen(str)), ":%02.0f", sec);
|
|
|
|
|
|
|
|
sprintf((str + strlen(str)), " %04d", tm->tm_year);
|
2001-10-18 19:30:21 +02:00
|
|
|
|
2001-10-20 03:02:22 +02:00
|
|
|
if ((tzp != NULL) && (tm->tm_isdst >= 0))
|
2001-10-18 19:30:21 +02:00
|
|
|
{
|
2001-10-20 03:02:22 +02:00
|
|
|
if (*tzn != NULL)
|
|
|
|
sprintf((str + strlen(str)), " %.*s", MAXTZLEN, *tzn);
|
|
|
|
else
|
|
|
|
{
|
2001-10-25 07:50:21 +02:00
|
|
|
/*
|
|
|
|
* We have a time zone, but no string version. Use
|
|
|
|
* the numeric form, but be sure to include a
|
|
|
|
* leading space to avoid formatting something
|
|
|
|
* which would be rejected by the date/time parser
|
|
|
|
* later. - thomas 2001-10-19
|
2001-10-20 03:02:22 +02:00
|
|
|
*/
|
|
|
|
hour = -(*tzp / 3600);
|
|
|
|
min = ((abs(*tzp) / 60) % 60);
|
|
|
|
sprintf((str + strlen(str)), ((min != 0) ? " %+03d:%02d" : " %+03d"), hour, min);
|
|
|
|
}
|
2001-10-18 19:30:21 +02:00
|
|
|
}
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
sprintf((str + 10), " %02d:%02d %04d %s",
|
|
|
|
tm->tm_hour, tm->tm_min, -(tm->tm_year - 1), "BC");
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
1997-03-15 00:21:12 +01:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
return TRUE;
|
|
|
|
} /* EncodeDateTime() */
|
From: Thomas Lockhart <Thomas.G.Lockhart@jpl.nasa.gov>
Subject: [HACKERS] More date time functions
Here are some additional patches mostly related to the date and time
data types. It includes some type conversion routines to move between
the different date types and some other date manipulation routines such
as date_part(units,datetime).
I noticed Edmund Mergl et al's neat trick for getting function overloading
for builtin functions, so started to use that for the date and time stuff.
Later, if someone figures out how to get function overloading directly
for internal C code, then we can move to that technique.
These patches include documentation updates (don't faint!) for the built-in
man page. Doesn't yet include mention of timestamp, since I don't know
much about it and since it may change a bit to become a _real_ ANSI timestamp
which would include parser support for the declaration syntax (what do you
think, Dan?).
The patches were developed on the 970330 release, but have been rebuilt
off of the 970402 release. The first patch below is to get libpq to compile,
on my Linux box, but is not related to the rest of the patches and you can
choose not to apply that one at this time. Thanks in advance, scrappy!
1997-04-02 20:36:24 +02:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
|
|
|
|
/* EncodeTimeSpan()
|
|
|
|
* Interpret time structure as a delta time and convert to string.
|
|
|
|
*
|
|
|
|
* Support "traditional Postgres" and ISO-8601 styles.
|
|
|
|
* Actually, afaik ISO does not address time interval formatting,
|
|
|
|
* but this looks similar to the spec for absolute date/time.
|
|
|
|
* - thomas 1998-04-30
|
1997-10-25 07:16:09 +02:00
|
|
|
*/
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
int
|
|
|
|
EncodeTimeSpan(struct tm * tm, double fsec, int style, char *str)
|
1997-10-25 07:16:09 +02:00
|
|
|
{
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
int is_before = FALSE;
|
|
|
|
int is_nonzero = FALSE;
|
|
|
|
char *cp = str;
|
1997-10-25 07:16:09 +02:00
|
|
|
|
2001-03-22 05:01:46 +01:00
|
|
|
/*
|
|
|
|
* The sign of year and month are guaranteed to match, since they are
|
|
|
|
* stored internally as "month". But we'll need to check for is_before
|
|
|
|
* and is_nonzero when determining the signs of hour/minute/seconds
|
|
|
|
* fields.
|
2000-11-06 16:57:00 +01:00
|
|
|
*/
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
switch (style)
|
|
|
|
{
|
|
|
|
/* compatible with ISO date formats */
|
|
|
|
case USE_ISO_DATES:
|
2000-11-06 16:57:00 +01:00
|
|
|
if (tm->tm_year != 0)
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{
|
2000-11-06 16:57:00 +01:00
|
|
|
sprintf(cp, "%d year%s",
|
|
|
|
tm->tm_year, ((tm->tm_year != 1) ? "s" : ""));
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
cp += strlen(cp);
|
2001-01-17 17:46:56 +01:00
|
|
|
is_before = (tm->tm_year < 0);
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
is_nonzero = TRUE;
|
|
|
|
}
|
|
|
|
|
2000-11-06 16:57:00 +01:00
|
|
|
if (tm->tm_mon != 0)
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{
|
2001-01-17 17:46:56 +01:00
|
|
|
sprintf(cp, "%s%s%d mon%s", (is_nonzero ? " " : ""),
|
|
|
|
((is_before && (tm->tm_mon > 0)) ? "+" : ""),
|
2000-11-06 16:57:00 +01:00
|
|
|
tm->tm_mon, ((tm->tm_mon != 1) ? "s" : ""));
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
cp += strlen(cp);
|
2001-01-17 17:46:56 +01:00
|
|
|
is_before = (tm->tm_mon < 0);
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
is_nonzero = TRUE;
|
2000-11-06 16:57:00 +01:00
|
|
|
}
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
|
2000-11-06 16:57:00 +01:00
|
|
|
if (tm->tm_mday != 0)
|
|
|
|
{
|
2001-01-17 17:46:56 +01:00
|
|
|
sprintf(cp, "%s%s%d day%s", (is_nonzero ? " " : ""),
|
|
|
|
((is_before && (tm->tm_mday > 0)) ? "+" : ""),
|
|
|
|
tm->tm_mday, ((tm->tm_mday != 1) ? "s" : ""));
|
2000-11-06 16:57:00 +01:00
|
|
|
cp += strlen(cp);
|
2001-01-17 17:46:56 +01:00
|
|
|
is_before = (tm->tm_mday < 0);
|
2000-11-06 16:57:00 +01:00
|
|
|
is_nonzero = TRUE;
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
}
|
2001-01-18 08:22:43 +01:00
|
|
|
if ((!is_nonzero) || (tm->tm_hour != 0) || (tm->tm_min != 0)
|
|
|
|
|| (tm->tm_sec != 0) || (fsec != 0))
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{
|
2001-03-22 05:01:46 +01:00
|
|
|
int minus = ((tm->tm_hour < 0) || (tm->tm_min < 0)
|
|
|
|
|| (tm->tm_sec < 0) || (fsec < 0));
|
2000-11-06 16:57:00 +01:00
|
|
|
|
|
|
|
sprintf(cp, "%s%s%02d:%02d", (is_nonzero ? " " : ""),
|
2001-01-18 08:22:43 +01:00
|
|
|
(minus ? "-" : (is_before ? "+" : "")),
|
2000-11-06 16:57:00 +01:00
|
|
|
abs(tm->tm_hour), abs(tm->tm_min));
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
cp += strlen(cp);
|
2000-11-06 16:57:00 +01:00
|
|
|
/* Mark as "non-zero" since the fields are now filled in */
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
is_nonzero = TRUE;
|
2000-11-06 16:57:00 +01:00
|
|
|
|
|
|
|
/* fractional seconds? */
|
|
|
|
if (fsec != 0)
|
|
|
|
{
|
|
|
|
fsec += tm->tm_sec;
|
2001-10-18 19:30:21 +02:00
|
|
|
sprintf(cp, ":%013.10f", fabs(fsec));
|
|
|
|
TrimTrailingZeros(cp);
|
2000-11-06 16:57:00 +01:00
|
|
|
cp += strlen(cp);
|
|
|
|
is_nonzero = TRUE;
|
|
|
|
}
|
2001-10-18 19:30:21 +02:00
|
|
|
/* otherwise, integer seconds only? */
|
2000-11-06 16:57:00 +01:00
|
|
|
else if (tm->tm_sec != 0)
|
|
|
|
{
|
|
|
|
sprintf(cp, ":%02d", abs(tm->tm_sec));
|
|
|
|
cp += strlen(cp);
|
|
|
|
is_nonzero = TRUE;
|
|
|
|
}
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
}
|
|
|
|
break;
|
1997-10-25 07:16:09 +02:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
case USE_POSTGRES_DATES:
|
|
|
|
default:
|
2000-11-06 16:57:00 +01:00
|
|
|
strcpy(cp, "@ ");
|
|
|
|
cp += strlen(cp);
|
|
|
|
|
|
|
|
if (tm->tm_year != 0)
|
|
|
|
{
|
2001-03-22 05:01:46 +01:00
|
|
|
int year = tm->tm_year;
|
|
|
|
|
2001-01-18 08:22:43 +01:00
|
|
|
if (tm->tm_year < 0)
|
|
|
|
year = -year;
|
2001-01-17 17:46:56 +01:00
|
|
|
|
|
|
|
sprintf(cp, "%d year%s", year,
|
|
|
|
((year != 1) ? "s" : ""));
|
2000-11-06 16:57:00 +01:00
|
|
|
cp += strlen(cp);
|
2001-01-17 17:46:56 +01:00
|
|
|
is_before = (tm->tm_year < 0);
|
2000-11-06 16:57:00 +01:00
|
|
|
is_nonzero = TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (tm->tm_mon != 0)
|
|
|
|
{
|
2001-03-22 05:01:46 +01:00
|
|
|
int mon = tm->tm_mon;
|
|
|
|
|
2001-01-18 08:22:43 +01:00
|
|
|
if (is_before || ((!is_nonzero) && (tm->tm_mon < 0)))
|
|
|
|
mon = -mon;
|
2001-01-17 17:46:56 +01:00
|
|
|
|
|
|
|
sprintf(cp, "%s%d mon%s", (is_nonzero ? " " : ""), mon,
|
|
|
|
((mon != 1) ? "s" : ""));
|
|
|
|
cp += strlen(cp);
|
2001-03-22 05:01:46 +01:00
|
|
|
if (!is_nonzero)
|
2000-11-06 16:57:00 +01:00
|
|
|
is_before = (tm->tm_mon < 0);
|
|
|
|
is_nonzero = TRUE;
|
|
|
|
}
|
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
if (tm->tm_mday != 0)
|
|
|
|
{
|
2001-03-22 05:01:46 +01:00
|
|
|
int day = tm->tm_mday;
|
|
|
|
|
2001-01-18 08:22:43 +01:00
|
|
|
if (is_before || ((!is_nonzero) && (tm->tm_mday < 0)))
|
|
|
|
day = -day;
|
2001-01-17 17:46:56 +01:00
|
|
|
|
|
|
|
sprintf(cp, "%s%d day%s", (is_nonzero ? " " : ""), day,
|
|
|
|
((day != 1) ? "s" : ""));
|
|
|
|
cp += strlen(cp);
|
2001-03-22 05:01:46 +01:00
|
|
|
if (!is_nonzero)
|
2000-11-06 16:57:00 +01:00
|
|
|
is_before = (tm->tm_mday < 0);
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
is_nonzero = TRUE;
|
|
|
|
}
|
|
|
|
if (tm->tm_hour != 0)
|
|
|
|
{
|
2001-03-22 05:01:46 +01:00
|
|
|
int hour = tm->tm_hour;
|
|
|
|
|
2001-01-18 08:22:43 +01:00
|
|
|
if (is_before || ((!is_nonzero) && (tm->tm_hour < 0)))
|
|
|
|
hour = -hour;
|
2001-01-17 17:46:56 +01:00
|
|
|
|
|
|
|
sprintf(cp, "%s%d hour%s", (is_nonzero ? " " : ""), hour,
|
|
|
|
((hour != 1) ? "s" : ""));
|
|
|
|
cp += strlen(cp);
|
2001-03-22 05:01:46 +01:00
|
|
|
if (!is_nonzero)
|
2000-11-06 16:57:00 +01:00
|
|
|
is_before = (tm->tm_hour < 0);
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
is_nonzero = TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (tm->tm_min != 0)
|
|
|
|
{
|
2001-03-22 05:01:46 +01:00
|
|
|
int min = tm->tm_min;
|
|
|
|
|
2001-01-18 08:22:43 +01:00
|
|
|
if (is_before || ((!is_nonzero) && (tm->tm_min < 0)))
|
|
|
|
min = -min;
|
2001-01-17 17:46:56 +01:00
|
|
|
|
|
|
|
sprintf(cp, "%s%d min%s", (is_nonzero ? " " : ""), min,
|
|
|
|
((min != 1) ? "s" : ""));
|
|
|
|
cp += strlen(cp);
|
2001-03-22 05:01:46 +01:00
|
|
|
if (!is_nonzero)
|
2000-11-06 16:57:00 +01:00
|
|
|
is_before = (tm->tm_min < 0);
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
is_nonzero = TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* fractional seconds? */
|
|
|
|
if (fsec != 0)
|
|
|
|
{
|
2001-03-22 05:01:46 +01:00
|
|
|
double sec;
|
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
fsec += tm->tm_sec;
|
2001-01-18 08:22:43 +01:00
|
|
|
sec = fsec;
|
|
|
|
if (is_before || ((!is_nonzero) && (fsec < 0)))
|
|
|
|
sec = -sec;
|
|
|
|
|
|
|
|
sprintf(cp, "%s%.2f secs", (is_nonzero ? " " : ""), sec);
|
2001-01-17 17:46:56 +01:00
|
|
|
cp += strlen(cp);
|
2001-03-22 05:01:46 +01:00
|
|
|
if (!is_nonzero)
|
2000-11-06 16:57:00 +01:00
|
|
|
is_before = (fsec < 0);
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
is_nonzero = TRUE;
|
|
|
|
|
|
|
|
/* otherwise, integer seconds only? */
|
|
|
|
}
|
|
|
|
else if (tm->tm_sec != 0)
|
|
|
|
{
|
2001-03-22 05:01:46 +01:00
|
|
|
int sec = tm->tm_sec;
|
|
|
|
|
2001-01-18 08:22:43 +01:00
|
|
|
if (is_before || ((!is_nonzero) && (tm->tm_sec < 0)))
|
|
|
|
sec = -sec;
|
2001-01-17 17:46:56 +01:00
|
|
|
|
|
|
|
sprintf(cp, "%s%d sec%s", (is_nonzero ? " " : ""), sec,
|
|
|
|
((sec != 1) ? "s" : ""));
|
|
|
|
cp += strlen(cp);
|
2001-03-22 05:01:46 +01:00
|
|
|
if (!is_nonzero)
|
2000-11-06 16:57:00 +01:00
|
|
|
is_before = (tm->tm_sec < 0);
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
is_nonzero = TRUE;
|
|
|
|
}
|
|
|
|
break;
|
1997-10-25 07:16:09 +02:00
|
|
|
}
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
|
|
|
|
/* identically zero? then put in a unitless zero... */
|
2001-03-22 05:01:46 +01:00
|
|
|
if (!is_nonzero)
|
1997-10-25 07:16:09 +02:00
|
|
|
{
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
strcat(cp, "0");
|
|
|
|
cp += strlen(cp);
|
1997-10-25 07:16:09 +02:00
|
|
|
}
|
|
|
|
|
2001-01-17 17:46:56 +01:00
|
|
|
if (is_before && (style == USE_POSTGRES_DATES))
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
{
|
|
|
|
strcat(cp, " ago");
|
|
|
|
cp += strlen(cp);
|
|
|
|
}
|
1997-10-25 07:16:09 +02:00
|
|
|
|
All regression tests pass except for rules.sql (unrelated).
Implement "date/time grand unification".
Transform datetime and timespan into timestamp and interval.
Deprecate datetime and timespan, though translate to new types in gram.y.
Transform all datetime and timespan catalog entries into new types.
Make "INTERVAL" reserved word allowed as a column identifier in gram.y.
Remove dt.h, dt.c files, and retarget datetime.h, datetime.c as utility
routines for all date/time types.
date.{h,c} now deals with date, time types.
timestamp.{h,c} now deals with timestamp, interval types.
nabstime.{h,c} now deals with abstime, reltime, tinterval types.
Make NUMERIC a known native type for purposes of type coersion. Not tested.
2000-02-16 19:17:02 +01:00
|
|
|
return 0;
|
|
|
|
} /* EncodeTimeSpan() */
|
2001-06-18 18:14:44 +02:00
|
|
|
|
|
|
|
|
2001-10-25 07:50:21 +02:00
|
|
|
void
|
|
|
|
ClearDateCache(bool dummy)
|
2001-06-18 18:14:44 +02:00
|
|
|
{
|
2001-10-25 07:50:21 +02:00
|
|
|
int i;
|
2001-06-18 18:14:44 +02:00
|
|
|
|
2001-10-25 07:50:21 +02:00
|
|
|
for (i = 0; i < MAXDATEFIELDS; i++)
|
2001-06-18 18:14:44 +02:00
|
|
|
datecache[i] = NULL;
|
|
|
|
}
|