Re: Infinite Interval

jian he <jian.universality@gmail.com>

From: jian he <jian.universality@gmail.com>
To: Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>
Cc: Dean Rasheed <dean.a.rasheed@gmail.com>, Joseph Koshakow <koshy44@gmail.com>, Tom Lane <tgl@sss.pgh.pa.us>, "Gregory Stark (as CFM)" <stark.cfm@gmail.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2023-10-31T00:00:00Z
Lists: pgsql-hackers
On Mon, Oct 30, 2023 at 6:01 PM Ashutosh Bapat
<ashutosh.bapat.oss@gmail.com> wrote:
>
>
> Here's my version of commit message
>
> ```
> Support Infinite interval values
>
> Interval datatype uses the same input and output representation for
> infinite intervals as other datatypes representing time that support
> infinity. An interval larger than any other interval is represented by
> string literal 'infinity' or '+infinity'. An interval which is smaller
> than any other interval is represented as '-infinity'. Internally
> positive infinity is represented as maximum values supported by all
> the member types of Interval datastructure and negative infinity is
> represented as minimum values set to all the members. INTERVAL_NOBEGIN
> and INTERVAL_NOEND macros can be used to set an Interval structure to
> negative and positive infinity respectively. INTERVAL_IS_NOBEGIN and
> INTERVAL_IS_NOEND macros are used to test respective values.
> INTERVAL_NOT_FINITE macro is used to test whether a given Interval
> value is infinite.
>
> Implementation of all known operators now handles infinite interval
> values along with operations related to BRIN index, windowing and
> selectivity. Regression tests are added to test these implementation.
>
> If a user has stored interval values '-2147483648 months -2147483648
> days -9223372036854775807 us' and '2147483647 months 2147483647 days
> 9223372036854775806 us' in PostgreSQL versions 16 or earlier. Those
> values will turn into '-infinity' and 'infinity' respectively after
> upgrading to v17. These values are outside the documented range
> supported by interval datatype and thus there's almost no possibility
> of this occurrence. But it will be good to watch for these values
> during upgrade.
> ```
>
the message is plain enough. I can understand it. thanks!



Commits

  1. Support +/- infinity in the interval data type.

  2. Avoid integer overflow hazard in interval_time().

  3. Guard against overflow in make_interval().

  4. Fix minmax-multi on infinite date/timestamp values

  5. Optimize various aggregate deserialization functions, take 2

  6. Remove dead code in DecodeInterval()

  7. Accept "+infinity" in date and timestamp[tz] input.

  8. Fix overflow hazards in interval input and output conversions.