1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 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
-- depending on debug_discard_caches, 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 debug_discard_caches.
--
-- 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 if debug_discard_caches is on, it 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 if debug_discard_caches is on, it 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');
|