summaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
authorNeil Conway2006-01-15 22:18:47 +0000
committerNeil Conway2006-01-15 22:18:47 +0000
commit106a3695f588a1efd4d68e40fd175a6ee6a3ae84 (patch)
treeeb658d7e1f2b3a6e432f120db70bfc18910f00ff /src/test
parentf7ea9312877abcb508669359fa2a05fc69ec91b9 (diff)
Allow the types of parameters to PREPARE to be inferred. If a parameter's
data type is unspecified or is declared to be "unknown", the type will be inferred from the context in which the parameter is used. This was already possible for protocol-level prepared statements.
Diffstat (limited to 'src/test')
-rw-r--r--src/test/regress/expected/prepare.out42
-rw-r--r--src/test/regress/sql/prepare.sql13
2 files changed, 32 insertions, 23 deletions
diff --git a/src/test/regress/expected/prepare.out b/src/test/regress/expected/prepare.out
index 54616199b6..f7d1a75814 100644
--- a/src/test/regress/expected/prepare.out
+++ b/src/test/regress/expected/prepare.out
@@ -58,14 +58,6 @@ SELECT name, statement, parameter_types FROM pg_prepared_statements;
PREPARE q2(text) AS
SELECT datname, datistemplate, datallowconn
FROM pg_database WHERE datname = $1;
-SELECT name, statement, parameter_types FROM pg_prepared_statements;
- name | statement | parameter_types
-------+--------------------------------------------------------------------------------------------------------+-----------------
- q2 | PREPARE q2(text) AS
- SELECT datname, datistemplate, datallowconn
- FROM pg_database WHERE datname = $1; | {25}
-(1 row)
-
EXECUTE q2('regression');
datname | datistemplate | datallowconn
------------+---------------+--------------
@@ -75,17 +67,6 @@ 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;
- name | statement | parameter_types
-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------
- q2 | PREPARE q2(text) AS
- SELECT datname, datistemplate, datallowconn
- FROM pg_database WHERE datname = $1; | {25}
- q3 | 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); | {25,23,701,16,26,21}
-(2 rows)
-
EXECUTE q3('AAAAxx', 5::smallint, 10.5::float, false, 500::oid, 4::bigint);
unique1 | unique2 | two | four | ten | twenty | hundred | thousand | twothousand | fivethous | tenthous | odd | even | stringu1 | stringu2 | string4
---------+---------+-----+------+-----+--------+---------+----------+-------------+-----------+----------+-----+------+----------+----------+---------
@@ -160,3 +141,26 @@ SELECT * FROM q5_prep_results;
5905 | 9537 | 1 | 1 | 5 | 5 | 5 | 905 | 1905 | 905 | 5905 | 10 | 11 | DTAAAA | VCOAAA | HHHHxx
(16 rows)
+-- 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;
+ name | statement | parameter_types
+------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------
+ q2 | PREPARE q2(text) AS
+ SELECT datname, datistemplate, datallowconn
+ FROM pg_database WHERE datname = $1; | {25}
+ q3 | 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); | {25,23,701,16,26,21}
+ q5 | PREPARE q5(int, text) AS
+ SELECT * FROM tenk1 WHERE unique1 = $1 OR stringu1 = $2; | {23,25}
+ q6 | PREPARE q6 AS
+ SELECT * FROM tenk1 WHERE unique1 = $1 AND stringu1 = $2; | {23,19}
+ q7 | PREPARE q7(unknown) AS
+ SELECT * FROM road WHERE thepath = $1; | {602}
+(5 rows)
+
diff --git a/src/test/regress/sql/prepare.sql b/src/test/regress/sql/prepare.sql
index 95db2a0910..d42b7a0879 100644
--- a/src/test/regress/sql/prepare.sql
+++ b/src/test/regress/sql/prepare.sql
@@ -34,16 +34,12 @@ 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
@@ -63,3 +59,12 @@ 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;
+
+-- 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;