1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-26 01:22:12 +03:00
Allow conversion from perl to postgresql array in OUT parameters. Second,
allow hash form output from procedures with one OUT argument.

Pavel Stehule
This commit is contained in:
Bruce Momjian
2006-08-11 19:42:35 +00:00
parent 33bf73a79a
commit c07fbcf577
3 changed files with 186 additions and 23 deletions

View File

@ -337,3 +337,87 @@ CREATE OR REPLACE FUNCTION perl_spi_prepared_set(INTEGER, INTEGER) RETURNS SETOF
$$ LANGUAGE plperl;
SELECT * from perl_spi_prepared_set(1,2);
---
--- Some OUT and OUT array tests
---
CREATE OR REPLACE FUNCTION test_out_params(OUT a varchar, OUT b varchar) AS $$
return { a=> 'ahoj', b=>'svete'};
$$ LANGUAGE plperl;
SELECT '01' AS i, * FROM test_out_params();
CREATE OR REPLACE FUNCTION test_out_params_array(OUT a varchar[], OUT b varchar[]) AS $$
return { a=> ['ahoj'], b=>['svete']};
$$ LANGUAGE plperl;
SELECT '02' AS i, * FROM test_out_params_array();
CREATE OR REPLACE FUNCTION test_out_params_set(OUT a varchar, out b varchar) RETURNS SETOF RECORD AS $$
return_next { a=> 'ahoj', b=>'svete'};
return_next { a=> 'ahoj', b=>'svete'};
return_next { a=> 'ahoj', b=>'svete'};
$$ LANGUAGE plperl;
SELECT '03' AS I,* FROM test_out_params_set();
CREATE OR REPLACE FUNCTION test_out_params_set_array(OUT a varchar[], out b varchar[]) RETURNS SETOF RECORD AS $$
return_next { a=> ['ahoj'], b=>['velky','svete']};
return_next { a=> ['ahoj'], b=>['velky','svete']};
return_next { a=> ['ahoj'], b=>['velky','svete']};
$$ LANGUAGE plperl;
SELECT '04' AS I,* FROM test_out_params_set_array();
DROP FUNCTION test_out_params();
DROP FUNCTION test_out_params_set();
DROP FUNCTION test_out_params_array();
DROP FUNCTION test_out_params_set_array();
-- one out argument can be returned as scalar or hash
CREATE OR REPLACE FUNCTION test01(OUT a varchar) AS $$
return 'ahoj';
$$ LANGUAGE plperl ;
SELECT '01' AS i,* FROM test01();
CREATE OR REPLACE FUNCTION test02(OUT a varchar[]) AS $$
return {a=>['ahoj']};
$$ LANGUAGE plperl;
SELECT '02' AS i,a[1] FROM test02();
CREATE OR REPLACE FUNCTION test03(OUT a varchar[]) RETURNS SETOF varchar[] AS $$
return_next { a=> ['ahoj']};
return_next { a=> ['ahoj']};
return_next { a=> ['ahoj']};
$$ LANGUAGE plperl;
SELECT '03' AS i,* FROM test03();
CREATE OR REPLACE FUNCTION test04() RETURNS SETOF VARCHAR[] AS $$
return_next ['ahoj'];
return_next ['ahoj'];
$$ LANGUAGE plperl;
SELECT '04' AS i,* FROM test04();
CREATE OR REPLACE FUNCTION test05(OUT a varchar) AS $$
return {a=>'ahoj'};
$$ LANGUAGE plperl;
SELECT '05' AS i,a FROM test05();
CREATE OR REPLACE FUNCTION test06(OUT a varchar) RETURNS SETOF varchar AS $$
return_next { a=> 'ahoj'};
return_next { a=> 'ahoj'};
return_next { a=> 'ahoj'};
$$ LANGUAGE plperl;
SELECT '06' AS i,* FROM test06();
CREATE OR REPLACE FUNCTION test07() RETURNS SETOF VARCHAR AS $$
return_next 'ahoj';
return_next 'ahoj';
$$ LANGUAGE plperl;
SELECT '07' AS i,* FROM test07();
DROP FUNCTION test01();
DROP FUNCTION test02();
DROP FUNCTION test03();
DROP FUNCTION test04();
DROP FUNCTION test05();
DROP FUNCTION test06();
DROP FUNCTION test07();