File: plpgsql_cache.sql

package info (click to toggle)
libpg-query 17-6.1.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 32,420 kB
  • sloc: ansic: 171,152; sql: 78,873; ruby: 1,547; makefile: 266; cpp: 221
file content (50 lines) | stat: -rw-r--r-- 1,669 bytes parent folder | download | duplicates (6)
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');