mirror of https://github.com/postgres/postgres
We suppressed one of these test cases in commit feb1cc559
because
it was failing to produce the expected results on CLOBBER_CACHE_ALWAYS
buildfarm members. But now we need another test with similar behavior,
so let's set up a test file that is expected to vary between regular and
CLOBBER_CACHE_ALWAYS cases, and provide variant expected files.
Someday we should fix plpgsql's failure for change-of-field-type, and
then the discrepancy will go away and we can fold these tests back
into plpgsql_record.sql. But today is not that day.
Discussion: https://postgr.es/m/87wotkfju1.fsf@news-spur.riddles.org.uk
pull/34/head
parent
662d12aea1
commit
9f77ad2672
@ -0,0 +1,67 @@ |
|||||||
|
-- |
||||||
|
-- Cache-behavior-dependent test cases |
||||||
|
-- |
||||||
|
-- These tests logically belong in plpgsql_record.sql, and perhaps someday |
||||||
|
-- can be merged back into it. For now, however, their results are different |
||||||
|
-- between regular and CLOBBER_CACHE_ALWAYS builds, so we must have two |
||||||
|
-- expected-output files to cover both cases. To minimize the maintenance |
||||||
|
-- effort resulting from that, this file should contain only tests that |
||||||
|
-- do have different results under CLOBBER_CACHE_ALWAYS. |
||||||
|
-- |
||||||
|
-- check behavior with changes of a named rowtype |
||||||
|
create table c_mutable(f1 int, f2 text); |
||||||
|
create function c_sillyaddone(int) returns int language plpgsql as |
||||||
|
$$ declare r c_mutable; begin r.f1 := $1; return r.f1 + 1; end $$; |
||||||
|
select c_sillyaddone(42); |
||||||
|
c_sillyaddone |
||||||
|
--------------- |
||||||
|
43 |
||||||
|
(1 row) |
||||||
|
|
||||||
|
alter table c_mutable drop column f1; |
||||||
|
alter table c_mutable add column f1 float8; |
||||||
|
-- currently, this fails due to cached plan for "r.f1 + 1" expression |
||||||
|
-- (but a CLOBBER_CACHE_ALWAYS build will succeed) |
||||||
|
select c_sillyaddone(42); |
||||||
|
ERROR: type of parameter 4 (double precision) does not match that when preparing the plan (integer) |
||||||
|
CONTEXT: PL/pgSQL function c_sillyaddone(integer) line 1 at RETURN |
||||||
|
-- but it's OK if we force plan rebuilding |
||||||
|
discard plans; |
||||||
|
select c_sillyaddone(42); |
||||||
|
c_sillyaddone |
||||||
|
--------------- |
||||||
|
43 |
||||||
|
(1 row) |
||||||
|
|
||||||
|
-- check behavior with changes in a record rowtype |
||||||
|
create function show_result_type(text) returns text language plpgsql as |
||||||
|
$$ |
||||||
|
declare |
||||||
|
r record; |
||||||
|
t text; |
||||||
|
begin |
||||||
|
execute $1 into r; |
||||||
|
select pg_typeof(r.a) into t; |
||||||
|
return format('type %s value %s', t, r.a::text); |
||||||
|
end; |
||||||
|
$$; |
||||||
|
select show_result_type('select 1 as a'); |
||||||
|
show_result_type |
||||||
|
---------------------- |
||||||
|
type integer value 1 |
||||||
|
(1 row) |
||||||
|
|
||||||
|
-- currently this fails due to cached plan for pg_typeof expression |
||||||
|
-- (but a CLOBBER_CACHE_ALWAYS build will succeed) |
||||||
|
select show_result_type('select 2.0 as a'); |
||||||
|
ERROR: type of parameter 5 (numeric) does not match that when preparing the plan (integer) |
||||||
|
CONTEXT: SQL statement "select pg_typeof(r.a)" |
||||||
|
PL/pgSQL function show_result_type(text) line 7 at SQL statement |
||||||
|
-- but it's OK if we force plan rebuilding |
||||||
|
discard plans; |
||||||
|
select show_result_type('select 2.0 as a'); |
||||||
|
show_result_type |
||||||
|
------------------------ |
||||||
|
type numeric value 2.0 |
||||||
|
(1 row) |
||||||
|
|
@ -0,0 +1,72 @@ |
|||||||
|
-- |
||||||
|
-- Cache-behavior-dependent test cases |
||||||
|
-- |
||||||
|
-- These tests logically belong in plpgsql_record.sql, and perhaps someday |
||||||
|
-- can be merged back into it. For now, however, their results are different |
||||||
|
-- between regular and CLOBBER_CACHE_ALWAYS builds, so we must have two |
||||||
|
-- expected-output files to cover both cases. To minimize the maintenance |
||||||
|
-- effort resulting from that, this file should contain only tests that |
||||||
|
-- do have different results under CLOBBER_CACHE_ALWAYS. |
||||||
|
-- |
||||||
|
-- check behavior with changes of a named rowtype |
||||||
|
create table c_mutable(f1 int, f2 text); |
||||||
|
create function c_sillyaddone(int) returns int language plpgsql as |
||||||
|
$$ declare r c_mutable; begin r.f1 := $1; return r.f1 + 1; end $$; |
||||||
|
select c_sillyaddone(42); |
||||||
|
c_sillyaddone |
||||||
|
--------------- |
||||||
|
43 |
||||||
|
(1 row) |
||||||
|
|
||||||
|
alter table c_mutable drop column f1; |
||||||
|
alter table c_mutable add column f1 float8; |
||||||
|
-- currently, this fails due to cached plan for "r.f1 + 1" expression |
||||||
|
-- (but a CLOBBER_CACHE_ALWAYS build will succeed) |
||||||
|
select c_sillyaddone(42); |
||||||
|
c_sillyaddone |
||||||
|
--------------- |
||||||
|
43 |
||||||
|
(1 row) |
||||||
|
|
||||||
|
-- but it's OK if we force plan rebuilding |
||||||
|
discard plans; |
||||||
|
select c_sillyaddone(42); |
||||||
|
c_sillyaddone |
||||||
|
--------------- |
||||||
|
43 |
||||||
|
(1 row) |
||||||
|
|
||||||
|
-- check behavior with changes in a record rowtype |
||||||
|
create function show_result_type(text) returns text language plpgsql as |
||||||
|
$$ |
||||||
|
declare |
||||||
|
r record; |
||||||
|
t text; |
||||||
|
begin |
||||||
|
execute $1 into r; |
||||||
|
select pg_typeof(r.a) into t; |
||||||
|
return format('type %s value %s', t, r.a::text); |
||||||
|
end; |
||||||
|
$$; |
||||||
|
select show_result_type('select 1 as a'); |
||||||
|
show_result_type |
||||||
|
---------------------- |
||||||
|
type integer value 1 |
||||||
|
(1 row) |
||||||
|
|
||||||
|
-- currently this fails due to cached plan for pg_typeof expression |
||||||
|
-- (but a CLOBBER_CACHE_ALWAYS build will succeed) |
||||||
|
select show_result_type('select 2.0 as a'); |
||||||
|
show_result_type |
||||||
|
------------------------ |
||||||
|
type numeric value 2.0 |
||||||
|
(1 row) |
||||||
|
|
||||||
|
-- but it's OK if we force plan rebuilding |
||||||
|
discard plans; |
||||||
|
select show_result_type('select 2.0 as a'); |
||||||
|
show_result_type |
||||||
|
------------------------ |
||||||
|
type numeric value 2.0 |
||||||
|
(1 row) |
||||||
|
|
@ -0,0 +1,50 @@ |
|||||||
|
-- |
||||||
|
-- Cache-behavior-dependent test cases |
||||||
|
-- |
||||||
|
-- These tests logically belong in plpgsql_record.sql, and perhaps someday |
||||||
|
-- can be merged back into it. For now, however, their results are different |
||||||
|
-- between regular and CLOBBER_CACHE_ALWAYS builds, so we must have two |
||||||
|
-- expected-output files to cover both cases. To minimize the maintenance |
||||||
|
-- effort resulting from that, this file should contain only tests that |
||||||
|
-- do have different results under CLOBBER_CACHE_ALWAYS. |
||||||
|
-- |
||||||
|
|
||||||
|
-- check behavior with changes of a named rowtype |
||||||
|
create table c_mutable(f1 int, f2 text); |
||||||
|
|
||||||
|
create function c_sillyaddone(int) returns int language plpgsql as |
||||||
|
$$ declare r c_mutable; begin r.f1 := $1; return r.f1 + 1; end $$; |
||||||
|
select c_sillyaddone(42); |
||||||
|
|
||||||
|
alter table c_mutable drop column f1; |
||||||
|
alter table c_mutable add column f1 float8; |
||||||
|
|
||||||
|
-- currently, this fails due to cached plan for "r.f1 + 1" expression |
||||||
|
-- (but a CLOBBER_CACHE_ALWAYS build will succeed) |
||||||
|
select c_sillyaddone(42); |
||||||
|
|
||||||
|
-- but it's OK if we force plan rebuilding |
||||||
|
discard plans; |
||||||
|
select c_sillyaddone(42); |
||||||
|
|
||||||
|
-- check behavior with changes in a record rowtype |
||||||
|
create function show_result_type(text) returns text language plpgsql as |
||||||
|
$$ |
||||||
|
declare |
||||||
|
r record; |
||||||
|
t text; |
||||||
|
begin |
||||||
|
execute $1 into r; |
||||||
|
select pg_typeof(r.a) into t; |
||||||
|
return format('type %s value %s', t, r.a::text); |
||||||
|
end; |
||||||
|
$$; |
||||||
|
|
||||||
|
select show_result_type('select 1 as a'); |
||||||
|
-- currently this fails due to cached plan for pg_typeof expression |
||||||
|
-- (but a CLOBBER_CACHE_ALWAYS build will succeed) |
||||||
|
select show_result_type('select 2.0 as a'); |
||||||
|
|
||||||
|
-- but it's OK if we force plan rebuilding |
||||||
|
discard plans; |
||||||
|
select show_result_type('select 2.0 as a'); |
Loading…
Reference in new issue