mirror of
https://github.com/postgres/postgres.git
synced 2025-05-02 11:44:50 +03:00
Fix tqueue.c's range-remapping code.
It's depressingly clear that nobody ever tested this.
This commit is contained in:
parent
80b346c208
commit
bf4ae685ae
@ -371,7 +371,7 @@ tqueueWalkRange(TQueueDestReceiver *tqueue, Datum value)
|
|||||||
* called in the first place: GetRemapClass should have returned NULL when
|
* called in the first place: GetRemapClass should have returned NULL when
|
||||||
* asked about this range type.
|
* asked about this range type.
|
||||||
*/
|
*/
|
||||||
remapclass = GetRemapClass(typeid);
|
remapclass = GetRemapClass(typcache->rngelemtype->type_id);
|
||||||
Assert(remapclass != TQUEUE_REMAP_NONE);
|
Assert(remapclass != TQUEUE_REMAP_NONE);
|
||||||
|
|
||||||
/* Walk each bound, if present. */
|
/* Walk each bound, if present. */
|
||||||
@ -749,7 +749,7 @@ TupleQueueRemapRange(TupleQueueReader *reader, Datum value)
|
|||||||
* called in the first place: GetRemapClass should have returned NULL when
|
* called in the first place: GetRemapClass should have returned NULL when
|
||||||
* asked about this range type.
|
* asked about this range type.
|
||||||
*/
|
*/
|
||||||
remapclass = GetRemapClass(typeid);
|
remapclass = GetRemapClass(typcache->rngelemtype->type_id);
|
||||||
Assert(remapclass != TQUEUE_REMAP_NONE);
|
Assert(remapclass != TQUEUE_REMAP_NONE);
|
||||||
|
|
||||||
/* Remap each bound, if present. */
|
/* Remap each bound, if present. */
|
||||||
|
@ -1336,6 +1336,23 @@ select array[1,3] <@ arrayrange(array[1,2], array[2,1]);
|
|||||||
t
|
t
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Ranges of composites
|
||||||
|
--
|
||||||
|
create type two_ints as (a int, b int);
|
||||||
|
create type two_ints_range as range (subtype = two_ints);
|
||||||
|
-- with force_parallel_mode on, this exercises tqueue.c's range remapping
|
||||||
|
select *, row_to_json(upper(t)) as u from
|
||||||
|
(values (two_ints_range(row(1,2), row(3,4))),
|
||||||
|
(two_ints_range(row(5,6), row(7,8)))) v(t);
|
||||||
|
t | u
|
||||||
|
-------------------+---------------
|
||||||
|
["(1,2)","(3,4)") | {"a":3,"b":4}
|
||||||
|
["(5,6)","(7,8)") | {"a":7,"b":8}
|
||||||
|
(2 rows)
|
||||||
|
|
||||||
|
drop type two_ints cascade;
|
||||||
|
NOTICE: drop cascades to type two_ints_range
|
||||||
--
|
--
|
||||||
-- OUT/INOUT/TABLE functions
|
-- OUT/INOUT/TABLE functions
|
||||||
--
|
--
|
||||||
|
@ -447,6 +447,20 @@ select arrayrange(ARRAY[2,1], ARRAY[1,2]); -- fail
|
|||||||
select array[1,1] <@ arrayrange(array[1,2], array[2,1]);
|
select array[1,1] <@ arrayrange(array[1,2], array[2,1]);
|
||||||
select array[1,3] <@ arrayrange(array[1,2], array[2,1]);
|
select array[1,3] <@ arrayrange(array[1,2], array[2,1]);
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Ranges of composites
|
||||||
|
--
|
||||||
|
|
||||||
|
create type two_ints as (a int, b int);
|
||||||
|
create type two_ints_range as range (subtype = two_ints);
|
||||||
|
|
||||||
|
-- with force_parallel_mode on, this exercises tqueue.c's range remapping
|
||||||
|
select *, row_to_json(upper(t)) as u from
|
||||||
|
(values (two_ints_range(row(1,2), row(3,4))),
|
||||||
|
(two_ints_range(row(5,6), row(7,8)))) v(t);
|
||||||
|
|
||||||
|
drop type two_ints cascade;
|
||||||
|
|
||||||
--
|
--
|
||||||
-- OUT/INOUT/TABLE functions
|
-- OUT/INOUT/TABLE functions
|
||||||
--
|
--
|
||||||
|
Loading…
x
Reference in New Issue
Block a user