You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@drill.apache.org by "Jacques Nadeau (JIRA)" <ji...@apache.org> on 2014/05/29 17:46:11 UTC

[jira] [Resolved] (DRILL-262) Implement support for DATETIME and TIMESTAMP types

     [ https://issues.apache.org/jira/browse/DRILL-262?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Jacques Nadeau resolved DRILL-262.
----------------------------------

    Resolution: Fixed

> Implement support for DATETIME and TIMESTAMP types
> --------------------------------------------------
>
>                 Key: DRILL-262
>                 URL: https://issues.apache.org/jira/browse/DRILL-262
>             Project: Apache Drill
>          Issue Type: Task
>            Reporter: Ben Becker
>
> Many functions and operators in Drill need to handle DATETIME and TIMESTAMP types.  This may require two formats; the most important of which is an expanded format for use during processing:
> {code}
>         struct pg_tm
>         {
>           int     tm_sec;
>           int     tm_min;
>           int     tm_hour;
>           int     tm_mday;
>           int     tm_mon;     /* origin 0, not 1 */
>           int     tm_year;    /* relative to 1900 */
>           int     tm_wday;
>           int     tm_yday;
>           int     tm_isdst;
>           long int  tm_gmtoff;
>           const char *tm_zone;
>         };
> {code}
> Note that:
> - Fractions of seconds are stored in an auxiliary 32-bit integer (thus internal time functions usually take both pg_tm and fsec_t arguments).
> - Resolution is guaranteed to the microsecond, with a date range of 4713 BC - 294276 AD.
> - MySQL stores datetime values as simple unix time format (second resolution, 1970 - 2038 date range)
> In Postgres, the TIMESTAMP type is encoded into 64 bits for storage as follows:
> - The date portion is packed in the upper 28 bits as the delta of years, months and days since postgres epoch (1/1/2000).
> - The time portion is packed in the lower 36 bits as hours, minutes, seconds and fsecs (fractions of a second).
> - The specific encoding logic can be found in {{src/backend/utils/adt/timestamp.c}} in {{tm2timestamp()}}, {{date2j()}} and {{time2t()}}.



--
This message was sent by Atlassian JIRA
(v6.2#6252)