mirror of
https://github.com/postgres/postgres.git
synced 2026-02-19 02:29:10 -05:00
access information about the prepared statements that are available in the current session. Original patch from Joachim Wieland, various improvements by Neil Conway. The "statement" column of the view contains the literal query string sent by the client, without any rewriting or pretty printing. This means that prepared statements created via SQL will be prefixed with "PREPARE ... AS ", whereas those prepared via the FE/BE protocol will not. That is unfortunate, but discussion on -patches did not yield an efficient way to improve this, and there is some merit in returning exactly what the client sent to the backend. Catalog version bumped, regression tests updated.
65 lines
1.8 KiB
SQL
65 lines
1.8 KiB
SQL
-- Regression tests for prepareable statements. We query the content
|
|
-- of the pg_prepared_statements view as prepared statements are
|
|
-- created and removed.
|
|
|
|
SELECT name, statement, parameter_types FROM pg_prepared_statements;
|
|
|
|
PREPARE q1 AS SELECT 1 AS a;
|
|
EXECUTE q1;
|
|
|
|
SELECT name, statement, parameter_types FROM pg_prepared_statements;
|
|
|
|
-- should fail
|
|
PREPARE q1 AS SELECT 2;
|
|
|
|
-- should succeed
|
|
DEALLOCATE q1;
|
|
PREPARE q1 AS SELECT 2;
|
|
EXECUTE q1;
|
|
|
|
PREPARE q2 AS SELECT 2 AS b;
|
|
SELECT name, statement, parameter_types FROM pg_prepared_statements;
|
|
|
|
-- sql92 syntax
|
|
DEALLOCATE PREPARE q1;
|
|
|
|
SELECT name, statement, parameter_types FROM pg_prepared_statements;
|
|
|
|
DEALLOCATE PREPARE q2;
|
|
-- the view should return the empty set again
|
|
SELECT name, statement, parameter_types FROM pg_prepared_statements;
|
|
|
|
-- parameterized queries
|
|
PREPARE q2(text) AS
|
|
SELECT datname, datistemplate, datallowconn
|
|
FROM pg_database WHERE datname = $1;
|
|
|
|
SELECT name, statement, parameter_types FROM pg_prepared_statements;
|
|
|
|
EXECUTE q2('regression');
|
|
|
|
PREPARE q3(text, int, float, boolean, oid, smallint) AS
|
|
SELECT * FROM tenk1 WHERE string4 = $1 AND (four = $2 OR
|
|
ten = $3::bigint OR true = $4 OR oid = $5 OR odd = $6::int);
|
|
|
|
SELECT name, statement, parameter_types FROM pg_prepared_statements;
|
|
|
|
EXECUTE q3('AAAAxx', 5::smallint, 10.5::float, false, 500::oid, 4::bigint);
|
|
|
|
-- too few params
|
|
EXECUTE q3('bool');
|
|
|
|
-- too many params
|
|
EXECUTE q3('bytea', 5::smallint, 10.5::float, false, 500::oid, 4::bigint, true);
|
|
|
|
-- wrong param types
|
|
EXECUTE q3(5::smallint, 10.5::float, false, 500::oid, 4::bigint, 'bytea');
|
|
|
|
-- invalid type
|
|
PREPARE q4(nonexistenttype) AS SELECT $1;
|
|
|
|
-- create table as execute
|
|
PREPARE q5(int, text) AS
|
|
SELECT * FROM tenk1 WHERE unique1 = $1 OR stringu1 = $2;
|
|
CREATE TEMPORARY TABLE q5_prep_results AS EXECUTE q5(200, 'DTAAAA');
|
|
SELECT * FROM q5_prep_results;
|