| 1 | /*------------------------------------------------------------------------- |
| 2 | * |
| 3 | * datetime.h |
| 4 | * Definitions for date/time support code. |
| 5 | * The support code is shared with other date data types, |
| 6 | * including abstime, reltime, date, and time. |
| 7 | * |
| 8 | * |
| 9 | * Portions Copyright (c) 1996-2015, PostgreSQL Global Development PGGroup |
| 10 | * Portions Copyright (c) 1994, Regents of the University of California |
| 11 | * |
| 12 | * src/include/utils/datetime.h |
| 13 | * |
| 14 | *------------------------------------------------------------------------- |
| 15 | */ |
| 16 | #pragma once |
| 17 | |
| 18 | #include "nodes/nodes.hpp" |
| 19 | #include "utils/timestamp.hpp" |
| 20 | |
| 21 | |
| 22 | /* |
| 23 | * Field types for time decoding. |
| 24 | * |
| 25 | * Can't have more of these than there are bits in an unsigned int |
| 26 | * since these are turned into bit masks during parsing and decoding. |
| 27 | * |
| 28 | * Furthermore, the values for YEAR, MONTH, DAY, HOUR, MINUTE, SECOND |
| 29 | * must be in the range 0..14 so that the associated bitmasks can fit |
| 30 | * into the left half of an INTERVAL's typmod value. Since those bits |
| 31 | * are stored in typmods, you can't change them without initdb! |
| 32 | */ |
| 33 | |
| 34 | #define RESERV 0 |
| 35 | #define MONTH 1 |
| 36 | #define YEAR 2 |
| 37 | #define DAY 3 |
| 38 | #define JULIAN 4 |
| 39 | #define TZ 5 /* fixed-offset timezone abbreviation */ |
| 40 | #define DTZ 6 /* fixed-offset timezone abbrev, DST */ |
| 41 | #define DYNTZ 7 /* dynamic timezone abbreviation */ |
| 42 | #define IGNORE_DTF 8 |
| 43 | #define AMPM 9 |
| 44 | #define HOUR 10 |
| 45 | #define MINUTE 11 |
| 46 | #define SECOND 12 |
| 47 | #define MILLISECOND 13 |
| 48 | #define MICROSECOND 14 |
| 49 | #define DOY 15 |
| 50 | #define DOW 16 |
| 51 | #define UNITS 17 |
| 52 | #define ADBC 18 |
| 53 | /* these are only for relative dates */ |
| 54 | #define AGO 19 |
| 55 | #define ABS_BEFORE 20 |
| 56 | #define ABS_AFTER 21 |
| 57 | /* generic fields to help with parsing */ |
| 58 | #define ISODATE 22 |
| 59 | #define ISOTIME 23 |
| 60 | /* these are only for parsing intervals */ |
| 61 | #define WEEK 24 |
| 62 | #define DECADE 25 |
| 63 | #define CENTURY 26 |
| 64 | #define MILLENNIUM 27 |
| 65 | /* hack for parsing two-word timezone specs "MET DST" etc */ |
| 66 | #define DTZMOD 28 /* "DST" as a separate word */ |
| 67 | /* reserved for unrecognized string values */ |
| 68 | #define UNKNOWN_FIELD 31 |
| 69 | |
| 70 | |
| 71 | |