2006-01-08 08:00:27 +01:00
|
|
|
-- Regression tests for prepareable statements. We query the content
|
|
|
|
-- of the pg_prepared_statements view as prepared statements are
|
|
|
|
-- created and removed.
|
2002-08-27 06:55:12 +02:00
|
|
|
|
2006-01-08 08:00:27 +01:00
|
|
|
SELECT name, statement, parameter_types FROM pg_prepared_statements;
|
|
|
|
|
|
|
|
PREPARE q1 AS SELECT 1 AS a;
|
2002-08-27 06:55:12 +02:00
|
|
|
EXECUTE q1;
|
|
|
|
|
2006-01-08 08:00:27 +01:00
|
|
|
SELECT name, statement, parameter_types FROM pg_prepared_statements;
|
|
|
|
|
2002-08-27 06:55:12 +02:00
|
|
|
-- should fail
|
|
|
|
PREPARE q1 AS SELECT 2;
|
|
|
|
|
|
|
|
-- should succeed
|
|
|
|
DEALLOCATE q1;
|
|
|
|
PREPARE q1 AS SELECT 2;
|
|
|
|
EXECUTE q1;
|
|
|
|
|
2006-01-08 08:00:27 +01:00
|
|
|
PREPARE q2 AS SELECT 2 AS b;
|
|
|
|
SELECT name, statement, parameter_types FROM pg_prepared_statements;
|
|
|
|
|
2002-08-27 06:55:12 +02:00
|
|
|
-- sql92 syntax
|
|
|
|
DEALLOCATE PREPARE q1;
|
|
|
|
|
2006-01-08 08:00:27 +01:00
|
|
|
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;
|
|
|
|
|
2002-08-27 06:55:12 +02:00
|
|
|
-- parameterized queries
|
|
|
|
PREPARE q2(text) AS
|
|
|
|
SELECT datname, datistemplate, datallowconn
|
|
|
|
FROM pg_database WHERE datname = $1;
|
2006-01-08 08:00:27 +01:00
|
|
|
|
2008-07-03 18:01:10 +02:00
|
|
|
EXECUTE q2('postgres');
|
2002-08-27 06:55:12 +02:00
|
|
|
|
|
|
|
PREPARE q3(text, int, float, boolean, oid, smallint) AS
|
|
|
|
SELECT * FROM tenk1 WHERE string4 = $1 AND (four = $2 OR
|
2007-06-09 19:24:46 +02:00
|
|
|
ten = $3::bigint OR true = $4 OR oid = $5 OR odd = $6::int)
|
|
|
|
ORDER BY unique1;
|
2002-08-27 06:55:12 +02:00
|
|
|
|
|
|
|
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;
|
|
|
|
|
2003-07-01 02:04:31 +02:00
|
|
|
-- create table as execute
|
2002-08-27 06:55:12 +02:00
|
|
|
PREPARE q5(int, text) AS
|
2007-06-09 19:24:46 +02:00
|
|
|
SELECT * FROM tenk1 WHERE unique1 = $1 OR stringu1 = $2
|
|
|
|
ORDER BY unique1;
|
2003-07-01 02:04:31 +02:00
|
|
|
CREATE TEMPORARY TABLE q5_prep_results AS EXECUTE q5(200, 'DTAAAA');
|
2002-08-27 06:55:12 +02:00
|
|
|
SELECT * FROM q5_prep_results;
|
2006-01-15 23:18:47 +01:00
|
|
|
|
|
|
|
-- unknown or unspecified parameter types: should succeed
|
|
|
|
PREPARE q6 AS
|
|
|
|
SELECT * FROM tenk1 WHERE unique1 = $1 AND stringu1 = $2;
|
|
|
|
PREPARE q7(unknown) AS
|
|
|
|
SELECT * FROM road WHERE thepath = $1;
|
|
|
|
|
|
|
|
SELECT name, statement, parameter_types FROM pg_prepared_statements
|
|
|
|
ORDER BY name;
|
2007-04-12 08:53:49 +02:00
|
|
|
|
|
|
|
-- test DEALLOCATE ALL;
|
|
|
|
DEALLOCATE ALL;
|
|
|
|
SELECT name, statement, parameter_types FROM pg_prepared_statements
|
|
|
|
ORDER BY name;
|
|
|
|
|