summaryrefslogtreecommitdiff
path: root/src/pl/plperl/sql/plperl_util.sql
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2017-10-28 14:02:21 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2017-10-28 14:02:21 -0400
commit60651e4cddbb77e8f1a0c7fc0be6a7e7bf626fe0 (patch)
tree2766613270dfe0131b0d7a38266a52fa1b6c5d4d /src/pl/plperl/sql/plperl_util.sql
parentc6fd5cd7062283575a436ec4ea3ed7899ace79a0 (diff)
Support domains over composite types in PL/Perl.
In passing, don't insist on rsi->expectedDesc being set unless we actually need it; this allows succeeding in a couple of cases where PL/Perl functions returning setof composite would have failed before, and makes the error message more apropos in other cases. Discussion: https://postgr.es/m/4206.1499798337@sss.pgh.pa.us
Diffstat (limited to 'src/pl/plperl/sql/plperl_util.sql')
-rw-r--r--src/pl/plperl/sql/plperl_util.sql9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/pl/plperl/sql/plperl_util.sql b/src/pl/plperl/sql/plperl_util.sql
index 143d0478020..5b31605ccde 100644
--- a/src/pl/plperl/sql/plperl_util.sql
+++ b/src/pl/plperl/sql/plperl_util.sql
@@ -102,11 +102,20 @@ select perl_looks_like_number();
-- test encode_typed_literal
create type perl_foo as (a integer, b text[]);
create type perl_bar as (c perl_foo[]);
+create domain perl_foo_pos as perl_foo check((value).a > 0);
+
create or replace function perl_encode_typed_literal() returns setof text language plperl as $$
return_next encode_typed_literal(undef, 'text');
return_next encode_typed_literal([[1,2,3],[3,2,1],[1,3,2]], 'integer[]');
return_next encode_typed_literal({a => 1, b => ['PL','/','Perl']}, 'perl_foo');
return_next encode_typed_literal({c => [{a => 9, b => ['PostgreSQL']}, {b => ['Postgres'], a => 1}]}, 'perl_bar');
+ return_next encode_typed_literal({a => 1, b => ['PL','/','Perl']}, 'perl_foo_pos');
$$;
select perl_encode_typed_literal();
+
+create or replace function perl_encode_typed_literal() returns setof text language plperl as $$
+ return_next encode_typed_literal({a => 0, b => ['PL','/','Perl']}, 'perl_foo_pos');
+$$;
+
+select perl_encode_typed_literal(); -- fail