diff -U3 /tmp/cirrus-ci-build/src/test/regress/expected/plancache.out /tmp/cirrus-ci-build/src/test/recovery/tmp_check/results/plancache.out --- /tmp/cirrus-ci-build/src/test/regress/expected/plancache.out 2025-08-23 17:08:06.860731060 +0000 +++ /tmp/cirrus-ci-build/src/test/recovery/tmp_check/results/plancache.out 2025-08-23 17:16:05.680021859 +0000 @@ -398,3 +398,36 @@ (1 row) drop table test_mode; +-- Check the interference between plan_cache_mode and cursor_options +-- EXPLAIN (COSTS OFF, GENERIC_PLAN) +SELECT prepare_spi_plan(NULL, NULL, NULL); -- ERROR +ERROR: query text cannot be null +SELECT prepare_spi_plan( + 'EXPLAIN (COSTS OFF) SELECT * FROM pcachetest WHERE q1 = $1', + NULL, 'integer') AS p1 \gset +SELECT prepare_spi_plan( + 'SELECT * FROM pcachetest WHERE q1 = $1 OR q1 = $2', + NULL, 'integer', NULL); --ERROR +ERROR: type name cannot be NULL +SELECT prepare_spi_plan( + 'SELECT * FROM pcachetest WHERE q1 = $1 OR q1 = 3', + NULL, 'integer', 'numeric') AS p2 \gset +SELECT execute_spi_plan(:p1, 'generic_plan', 42); + execute_spi_plan +---------------------------- + ("Seq Scan on pcachetest") + (" Filter: (q1 = 42)") +(2 rows) + +SELECT free_spi_plan(:p1); + free_spi_plan +--------------- + +(1 row) + +SELECT free_spi_plan(:p2); + free_spi_plan +--------------- + +(1 row) +