Index: doc/src/sgml/runtime.sgml =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/doc/src/sgml/runtime.sgml,v retrieving revision 1.67 diff -c -r1.67 runtime.sgml *** doc/src/sgml/runtime.sgml 2001/05/17 17:44:17 1.67 --- doc/src/sgml/runtime.sgml 2001/06/13 17:11:04 *************** *** 1201,1206 **** --- 1201,1217 ---- + AUSTRALIAN_TIMEZONES (bool) + + + If set to true, CST, EST, + and SAT are interpreted as Australian + timezones rather than as North American Central/Eastern + Timezones and Saturday. The default is false. + + + + SSL Index: src/backend/utils/adt/datetime.c =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/utils/adt/datetime.c,v retrieving revision 1.64 diff -c -r1.64 datetime.c *** src/backend/utils/adt/datetime.c 2001/05/03 22:53:07 1.64 --- src/backend/utils/adt/datetime.c 2001/06/13 17:11:08 *************** *** 22,27 **** --- 22,28 ---- #include #include "miscadmin.h" + #include "utils/guc.h" #include "utils/datetime.h" static int DecodeNumber(int flen, char *field, *************** *** 36,42 **** static datetkn *datebsearch(char *key, datetkn *base, unsigned int nel); static int DecodeDate(char *str, int fmask, int *tmask, struct tm * tm); - #define USE_DATE_CACHE 1 #define ROUND_ALL 0 static int DecodePosixTimezone(char *str, int *val); --- 37,42 ---- *************** *** 117,127 **** {"cdt", DTZ, NEG(30)}, /* Central Daylight Time */ {"cet", TZ, 6}, /* Central European Time */ {"cetdst", DTZ, 12}, /* Central European Dayl.Time */ - #if USE_AUSTRALIAN_RULES - {"cst", TZ, 63}, /* Australia Eastern Std Time */ - #else {"cst", TZ, NEG(36)}, /* Central Standard Time */ - #endif {DCURRENT, RESERV, DTK_CURRENT}, /* "current" is always now */ {"dec", MONTH, 12}, {"december", MONTH, 12}, --- 117,123 ---- *************** *** 134,144 **** {"eet", TZ, 12}, /* East. Europe, USSR Zone 1 */ {"eetdst", DTZ, 18}, /* Eastern Europe */ {EPOCH, RESERV, DTK_EPOCH}, /* "epoch" reserved for system epoch time */ - #if USE_AUSTRALIAN_RULES - {"est", TZ, 60}, /* Australia Eastern Std Time */ - #else {"est", TZ, NEG(30)}, /* Eastern Standard Time */ - #endif {"feb", MONTH, 2}, {"february", MONTH, 2}, {"fri", DOW, 5}, --- 130,136 ---- *************** *** 199,209 **** {"pst", TZ, NEG(48)}, /* Pacific Standard Time */ {"sadt", DTZ, 63}, /* S. Australian Dayl. Time */ {"sast", TZ, 57}, /* South Australian Std Time */ - #if USE_AUSTRALIAN_RULES - {"sat", TZ, 57}, - #else {"sat", DOW, 6}, - #endif {"saturday", DOW, 6}, {"sep", MONTH, 9}, {"sept", MONTH, 9}, --- 191,197 ---- *************** *** 247,252 **** --- 235,250 ---- static unsigned int szdatetktbl = sizeof datetktbl / sizeof datetktbl[0]; + /* Used for SET australian_timezones to override North American ones */ + static datetkn australian_datetktbl[] = { + {"cst", TZ, 63}, /* Australia Eastern Std Time */ + {"est", TZ, 60}, /* Australia Eastern Std Time */ + {"sat", TZ, 57}, + }; + + static unsigned int australian_szdatetktbl = sizeof australian_datetktbl / + sizeof australian_datetktbl[0]; + static datetkn deltatktbl[] = { /* text token lexval */ {"@", IGNORE, 0}, /* postgres relative time prefix */ *************** *** 327,339 **** static unsigned int szdeltatktbl = sizeof deltatktbl / sizeof deltatktbl[0]; - #if USE_DATE_CACHE datetkn *datecache[MAXDATEFIELDS] = {NULL}; datetkn *deltacache[MAXDATEFIELDS] = {NULL}; - #endif - /* * Calendar time to Julian date conversions. --- 325,334 ---- *************** *** 1618,1635 **** int type; datetkn *tp; - #if USE_DATE_CACHE if ((datecache[field] != NULL) && (strncmp(lowtoken, datecache[field]->token, TOKMAXLEN) == 0)) tp = datecache[field]; else { ! #endif ! tp = datebsearch(lowtoken, datetktbl, szdatetktbl); ! #if USE_DATE_CACHE } datecache[field] = tp; - #endif if (tp == NULL) { type = IGNORE; --- 1613,1631 ---- int type; datetkn *tp; if ((datecache[field] != NULL) && (strncmp(lowtoken, datecache[field]->token, TOKMAXLEN) == 0)) tp = datecache[field]; else { ! tp = NULL; ! if (Australian_timezones) ! tp = datebsearch(lowtoken, australian_datetktbl, ! australian_szdatetktbl); ! if (!tp) ! tp = datebsearch(lowtoken, datetktbl, szdatetktbl); } datecache[field] = tp; if (tp == NULL) { type = IGNORE; *************** *** 1937,1954 **** int type; datetkn *tp; - #if USE_DATE_CACHE if ((deltacache[field] != NULL) && (strncmp(lowtoken, deltacache[field]->token, TOKMAXLEN) == 0)) tp = deltacache[field]; else { - #endif tp = datebsearch(lowtoken, deltatktbl, szdeltatktbl); - #if USE_DATE_CACHE } deltacache[field] = tp; - #endif if (tp == NULL) { type = IGNORE; --- 1933,1946 ---- *************** *** 2455,2457 **** --- 2447,2458 ---- return 0; } /* EncodeTimeSpan() */ + + + void ClearDateCache(bool dummy) + { + int i; + + for (i=0; i < MAXDATEFIELDS; i++) + datecache[i] = NULL; + } Index: src/backend/utils/misc/guc.c =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/utils/misc/guc.c,v retrieving revision 1.38 diff -c -r1.38 guc.c *** src/backend/utils/misc/guc.c 2001/06/12 22:54:06 1.38 --- src/backend/utils/misc/guc.c 2001/06/13 17:11:17 *************** *** 33,38 **** --- 33,39 ---- #include "parser/parse_expr.h" #include "storage/proc.h" #include "tcop/tcopprot.h" + #include "utils/datetime.h" /* XXX these should be in other modules' header files */ *************** *** 69,74 **** --- 70,77 ---- bool SQL_inheritance = true; + bool Australian_timezones = false; + #ifndef PG_KRB_SRVTAB #define PG_KRB_SRVTAB "" #endif *************** *** 229,234 **** --- 232,240 ---- {"sql_inheritance", PGC_USERSET, &SQL_inheritance, true, NULL}, + {"australian_timezones", PGC_USERSET, &Australian_timezones, + false, ClearDateCache}, + {"fixbtree", PGC_POSTMASTER, &FixBTree, true, NULL}, {NULL, 0, NULL, false, NULL} *************** *** 327,334 **** DEFAULT_CPU_OPERATOR_COST, 0, DBL_MAX, NULL, NULL}, {"geqo_selection_bias", PGC_USERSET, &Geqo_selection_bias, ! DEFAULT_GEQO_SELECTION_BIAS, MIN_GEQO_SELECTION_BIAS, ! MAX_GEQO_SELECTION_BIAS, NULL, NULL}, {NULL, 0, NULL, 0.0, 0.0, 0.0, NULL, NULL} }; --- 333,340 ---- DEFAULT_CPU_OPERATOR_COST, 0, DBL_MAX, NULL, NULL}, {"geqo_selection_bias", PGC_USERSET, &Geqo_selection_bias, ! DEFAULT_GEQO_SELECTION_BIAS, MIN_GEQO_SELECTION_BIAS, ! MAX_GEQO_SELECTION_BIAS, NULL, NULL}, {NULL, 0, NULL, 0.0, 0.0, 0.0, NULL, NULL} }; *************** *** 360,367 **** "", NULL, NULL}, {"wal_sync_method", PGC_SIGHUP, &XLOG_sync_method, ! XLOG_sync_method_default, ! check_xlog_sync_method, assign_xlog_sync_method}, {NULL, 0, NULL, NULL, NULL, NULL} }; --- 366,373 ---- "", NULL, NULL}, {"wal_sync_method", PGC_SIGHUP, &XLOG_sync_method, ! XLOG_sync_method_default, check_xlog_sync_method, ! assign_xlog_sync_method}, {NULL, 0, NULL, NULL, NULL, NULL} }; *************** *** 956,961 **** --- 962,968 ---- case PGC_BOOL: val = *((struct config_bool *) record)->variable ? "on" : "off"; break; + case PGC_INT: snprintf(buffer, sizeof(buffer), "%d", *((struct config_int *) record)->variable); Index: src/backend/utils/misc/postgresql.conf.sample =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/utils/misc/postgresql.conf.sample,v retrieving revision 1.11 diff -c -r1.11 postgresql.conf.sample *** src/backend/utils/misc/postgresql.conf.sample 2001/05/07 23:32:55 1.11 --- src/backend/utils/misc/postgresql.conf.sample 2001/06/13 17:11:17 *************** *** 85,108 **** # - # Inheritance - # - #sql_inheritance = true - - - # - # Deadlock - # - #deadlock_timeout = 1000 - - - # - # Expression Depth Limitation - # - #max_expr_depth = 10000 # min 10 - - - # # Write-ahead log (WAL) # #wal_buffers = 8 # min 4 --- 85,90 ---- *************** *** 172,174 **** --- 154,166 ---- #trace_lock_oidmin = 16384 #trace_lock_table = 0 #endif + + + # + # Misc + # + #sql_inheritance = true + #australian_timezones = false + #deadlock_timeout = 1000 + #max_expr_depth = 10000 # min 10 + Index: src/include/utils/datetime.h =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/include/utils/datetime.h,v retrieving revision 1.18 diff -c -r1.18 datetime.h *** src/include/utils/datetime.h 2001/05/03 22:53:07 1.18 --- src/include/utils/datetime.h 2001/06/13 17:11:21 *************** *** 182,187 **** --- 182,188 ---- char value; /* this may be unsigned, alas */ } datetkn; + extern datetkn datetktbl[]; /* TMODULO() * Macro to replace modf(), which is broken on some platforms. *************** *** 264,269 **** --- 265,271 ---- extern int DecodeSpecial(int field, char *lowtoken, int *val); extern int DecodeUnits(int field, char *lowtoken, int *val); + extern void ClearDateCache(bool); extern int j2day(int jd); Index: src/include/utils/guc.h =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/include/utils/guc.h,v retrieving revision 1.8 diff -c -r1.8 guc.h *** src/include/utils/guc.h 2001/06/12 22:54:06 1.8 --- src/include/utils/guc.h 2001/06/13 17:11:21 *************** *** 70,74 **** --- 70,75 ---- extern bool Show_btree_build_stats; extern bool SQL_inheritance; + extern bool Australian_timezones; #endif /* GUC_H */ Index: src/test/regress/expected/horology-no-DST-before-1970.out =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/test/regress/expected/horology-no-DST-before-1970.out,v retrieving revision 1.12 diff -c -r1.12 horology-no-DST-before-1970.out *** src/test/regress/expected/horology-no-DST-before-1970.out 2001/04/06 05:50:25 1.12 --- src/test/regress/expected/horology-no-DST-before-1970.out 2001/06/13 17:11:28 *************** *** 4,9 **** --- 4,11 ---- -- -- date, time arithmetic -- + -- needed so tests pass + SET australian_timezones = 'off'; SELECT date '1981-02-03' + time '04:05:06' AS "Date + Time"; Date + Time ------------------------------ Index: src/test/regress/expected/horology-solaris-1947.out =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/test/regress/expected/horology-solaris-1947.out,v retrieving revision 1.10 diff -c -r1.10 horology-solaris-1947.out *** src/test/regress/expected/horology-solaris-1947.out 2001/04/06 05:50:25 1.10 --- src/test/regress/expected/horology-solaris-1947.out 2001/06/13 17:11:29 *************** *** 4,9 **** --- 4,11 ---- -- -- date, time arithmetic -- + -- needed so tests pass + SET australian_timezones = 'off'; SELECT date '1981-02-03' + time '04:05:06' AS "Date + Time"; Date + Time ------------------------------ Index: src/test/regress/expected/horology.out =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/test/regress/expected/horology.out,v retrieving revision 1.23 diff -c -r1.23 horology.out *** src/test/regress/expected/horology.out 2001/04/06 05:50:25 1.23 --- src/test/regress/expected/horology.out 2001/06/13 17:11:31 *************** *** 4,9 **** --- 4,11 ---- -- -- date, time arithmetic -- + -- needed so tests pass + SET australian_timezones = 'off'; SELECT date '1981-02-03' + time '04:05:06' AS "Date + Time"; Date + Time ------------------------------ Index: src/test/regress/expected/timestamp.out =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/test/regress/expected/timestamp.out,v retrieving revision 1.12 diff -c -r1.12 timestamp.out *** src/test/regress/expected/timestamp.out 2001/05/03 19:00:37 1.12 --- src/test/regress/expected/timestamp.out 2001/06/13 17:11:37 *************** *** 4,9 **** --- 4,11 ---- -- Shorthand values -- Not directly usable for regression testing since these are not constants. -- So, just try to test parser and hope for the best - thomas 97/04/26 + -- needed so tests pass + SET australian_timezones = 'off'; SELECT (timestamp 'today' = (timestamp 'yesterday' + interval '1 day')) as "True"; True ------ Index: src/test/regress/sql/horology.sql =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/test/regress/sql/horology.sql,v retrieving revision 1.14 diff -c -r1.14 horology.sql *** src/test/regress/sql/horology.sql 2001/04/06 05:50:29 1.14 --- src/test/regress/sql/horology.sql 2001/06/13 17:11:38 *************** *** 1,10 **** -- -- HOROLOGY -- - -- -- date, time arithmetic -- SELECT date '1981-02-03' + time '04:05:06' AS "Date + Time"; --- 1,11 ---- -- -- HOROLOGY -- -- -- date, time arithmetic -- + -- needed so tests pass + SET australian_timezones = 'off'; SELECT date '1981-02-03' + time '04:05:06' AS "Date + Time"; Index: src/test/regress/sql/timestamp.sql =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/test/regress/sql/timestamp.sql,v retrieving revision 1.7 diff -c -r1.7 timestamp.sql *** src/test/regress/sql/timestamp.sql 2000/11/25 05:00:33 1.7 --- src/test/regress/sql/timestamp.sql 2001/06/13 17:11:38 *************** *** 1,10 **** -- -- DATETIME -- - -- Shorthand values -- Not directly usable for regression testing since these are not constants. -- So, just try to test parser and hope for the best - thomas 97/04/26 SELECT (timestamp 'today' = (timestamp 'yesterday' + interval '1 day')) as "True"; SELECT (timestamp 'today' = (timestamp 'tomorrow' - interval '1 day')) as "True"; --- 1,11 ---- -- -- DATETIME -- -- Shorthand values -- Not directly usable for regression testing since these are not constants. -- So, just try to test parser and hope for the best - thomas 97/04/26 + -- needed so tests pass + SET australian_timezones = 'off'; SELECT (timestamp 'today' = (timestamp 'yesterday' + interval '1 day')) as "True"; SELECT (timestamp 'today' = (timestamp 'tomorrow' - interval '1 day')) as "True";