mirror of
https://github.com/postgres/postgres.git
synced 2025-05-17 06:41:24 +03:00
"AT TIME ZONE", and not just the shorlist previously available. For example: SELECT CURRENT_TIMESTAMP AT TIME ZONE 'Europe/London'; works fine now. It will also obey whatever DST rules were in effect at just that date, which the previous implementation did not. It also supports the AT TIME ZONE on the timetz datatype. The whole handling of DST is a bit bogus there, so I chose to make it use whatever DST rules are in effect at the time of executig the query. not sure if anybody is actuallyi *using* timetz though, it seems pretty unpredictable just because of this... Magnus Hagander
64 lines
1.6 KiB
C
64 lines
1.6 KiB
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* pgtz.h
|
|
* Timezone Library Integration Functions
|
|
*
|
|
* Note: this file contains only definitions that are private to the
|
|
* timezone library. Public definitions are in pgtime.h.
|
|
*
|
|
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
|
|
*
|
|
* IDENTIFICATION
|
|
* $PostgreSQL: pgsql/src/timezone/pgtz.h,v 1.12 2005/06/15 00:34:11 momjian Exp $
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
#ifndef _PGTZ_H
|
|
#define _PGTZ_H
|
|
|
|
#include "tzfile.h"
|
|
|
|
extern char *pg_TZDIR(void);
|
|
|
|
#define BIGGEST(a, b) (((a) > (b)) ? (a) : (b))
|
|
|
|
struct ttinfo
|
|
{ /* time type information */
|
|
long tt_gmtoff; /* UTC offset in seconds */
|
|
int tt_isdst; /* used to set tm_isdst */
|
|
int tt_abbrind; /* abbreviation list index */
|
|
int tt_ttisstd; /* TRUE if transition is std time */
|
|
int tt_ttisgmt; /* TRUE if transition is UTC */
|
|
};
|
|
|
|
struct lsinfo
|
|
{ /* leap second information */
|
|
pg_time_t ls_trans; /* transition time */
|
|
long ls_corr; /* correction to apply */
|
|
};
|
|
|
|
struct state
|
|
{
|
|
int leapcnt;
|
|
int timecnt;
|
|
int typecnt;
|
|
int charcnt;
|
|
pg_time_t ats[TZ_MAX_TIMES];
|
|
unsigned char types[TZ_MAX_TIMES];
|
|
struct ttinfo ttis[TZ_MAX_TYPES];
|
|
char chars[BIGGEST(BIGGEST(TZ_MAX_CHARS + 1, 3 /* sizeof gmt */),
|
|
(2 * (TZ_STRLEN_MAX + 1)))];
|
|
struct lsinfo lsis[TZ_MAX_LEAPS];
|
|
};
|
|
|
|
|
|
struct pg_tz {
|
|
char TZname[TZ_STRLEN_MAX + 1];
|
|
struct state state;
|
|
};
|
|
|
|
int tzload(const char *name, struct state * sp);
|
|
int tzparse(const char *name, struct state * sp, int lastditch);
|
|
|
|
#endif /* _PGTZ_H */
|