1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-28 23:42:10 +03:00

Ensure variables live across calls in generate_series(numeric, numeric).

In generate_series_step_numeric(), the variables "start_num"
and "stop_num" may be potentially freed until the next call.
So they should be put in the location which can survive across calls.
But previously they were not, and which could cause incorrect
behavior of generate_series(numeric, numeric). This commit fixes
this problem by copying them on multi_call_memory_ctx.

Andrew Gierth
This commit is contained in:
Fujii Masao
2014-12-18 21:13:52 +09:00
parent ccf292cd2e
commit 19e065c049
3 changed files with 50 additions and 3 deletions

View File

@ -1461,3 +1461,41 @@ select (i / (10::numeric ^ 131071))::numeric(1,0)
9
(4 rows)
-- Check usage with variables
select * from generate_series(1::numeric, 3::numeric) i, generate_series(i,3) j;
i | j
---+---
1 | 1
1 | 2
1 | 3
2 | 2
2 | 3
3 | 3
(6 rows)
select * from generate_series(1::numeric, 3::numeric) i, generate_series(1,i) j;
i | j
---+---
1 | 1
2 | 1
2 | 2
3 | 1
3 | 2
3 | 3
(6 rows)
select * from generate_series(1::numeric, 3::numeric) i, generate_series(1,5,i) j;
i | j
---+---
1 | 1
1 | 2
1 | 3
1 | 4
1 | 5
2 | 1
2 | 3
2 | 5
3 | 1
3 | 4
(10 rows)

View File

@ -854,3 +854,7 @@ select (i / (10::numeric ^ 131071))::numeric(1,0)
from generate_series(6 * (10::numeric ^ 131071),
9 * (10::numeric ^ 131071),
10::numeric ^ 131071) as a(i);
-- Check usage with variables
select * from generate_series(1::numeric, 3::numeric) i, generate_series(i,3) j;
select * from generate_series(1::numeric, 3::numeric) i, generate_series(1,i) j;
select * from generate_series(1::numeric, 3::numeric) i, generate_series(1,5,i) j;