• Bruce Momjian's avatar
    Attached is a patch that limits the range tested by horology to · d7f10705
    Bruce Momjian authored
    what is capable using integer-datatime timestamps. It does attempt
    to exercise the maximum allowable timestamp range.
    Also is a small error check when converting a timestamp from external
    to internal format that prevents out of range timestamps from being
    entered.
    
    Files patched:
            Index: src/backend/utils/adt/timestamp.c
                    Added range check to prevent out of range timestamps
                    from being used.
    
            Index: src/test/regress/sql/horology.sql
            Index: src/test/regress/expected/horology-no-DST-before-1970.out
            Index: src/test/regress/expected/horology-solaris-1947.out
                    Limited range of timestamps being checked to
                    Jan 1, 4713 BC  to Dec 31, 294276
    
    In creating this patch, I have seen some definite problems with integer
    timestamps and how they react when used near their limits. For example,
    the following statement gives the correct result:
    
            SELECT timestamp without time zone 'Jan 1, 4713 BC'
                   + interval '109203489 days' AS "Dec 31, 294276";
    
    However, this statement which is the logical inverse of the above
    gives incorrect results:
    
            SELECT timestamp without time zone '12/31/294276'
                 - timestamp without time zone 'Jan 1, 4713 BC' AS "109203489 Days";
    
    John Cochran
    d7f10705
timestamp.c 76.7 KB