diff options
| author | Peter Eisentraut <peter@eisentraut.org> | 2025-11-22 09:40:00 +0100 |
|---|---|---|
| committer | Peter Eisentraut <peter@eisentraut.org> | 2025-11-22 09:42:03 +0100 |
| commit | 5eed8ce50ce9df1067b95593dde9f4fc526dfc72 (patch) | |
| tree | 20f46d20d078d66f693a7ae152ea7a5eec238a2b /src/backend/optimizer/prep/prepjointree.c | |
| parent | 0dceba21d74f01e63aa690879b44808bbb74a9c3 (diff) | |
Add range_minus_multi and multirange_minus_multi functions
The existing range_minus function raises an exception when the range is
"split", because then the result can't be represented by a single range.
For example '[0,10)'::int4range - '[4,5)' would be '[0,4)' and '[5,10)'.
This commit adds new set-returning functions so that callers can get
results even in the case of splits. There is no risk of an exception for
multiranges, but a set-returning function lets us handle them the same
way we handle ranges.
Both functions return zero results if the subtraction would give an
empty range/multirange.
The main use-case for these functions is to implement UPDATE/DELETE FOR
PORTION OF, which must compute the application-time of "temporal
leftovers": the part of history in an updated/deleted row that was not
changed. To preserve the untouched history, we will implicitly insert
one record for each result returned by range/multirange_minus_multi.
Using a set-returning function will also let us support user-defined
types for application-time update/delete in the future.
Author: Paul A. Jungwirth <pj@illuminatedcomputing.com>
Reviewed-by: Peter Eisentraut <peter@eisentraut.org>
Reviewed-by: Chao Li <li.evan.chao@gmail.com>
Discussion: https://www.postgresql.org/message-id/flat/ec498c3d-5f2b-48ec-b989-5561c8aa2024%40illuminatedcomputing.com
Diffstat (limited to 'src/backend/optimizer/prep/prepjointree.c')
0 files changed, 0 insertions, 0 deletions
