1CREATE EXTENSION hstore_plperl CASCADE;
2NOTICE:  installing required extension "hstore"
3NOTICE:  installing required extension "plperl"
4SELECT transforms.udt_schema, transforms.udt_name,
5       routine_schema, routine_name,
6       group_name, transform_type
7FROM information_schema.transforms JOIN information_schema.routines
8     USING (specific_catalog, specific_schema, specific_name)
9ORDER BY 1, 2, 5, 6;
10 udt_schema | udt_name | routine_schema |   routine_name   | group_name | transform_type
11------------+----------+----------------+------------------+------------+----------------
12 public     | hstore   | public         | hstore_to_plperl | plperl     | FROM SQL
13 public     | hstore   | public         | plperl_to_hstore | plperl     | TO SQL
14(2 rows)
15
16-- test perl -> hstore
17CREATE FUNCTION test2() RETURNS hstore
18LANGUAGE plperl
19TRANSFORM FOR TYPE hstore
20AS $$
21$val = {a => 1, b => 'boo', c => undef};
22return $val;
23$$;
24SELECT test2();
25              test2
26---------------------------------
27 "a"=>"1", "b"=>"boo", "c"=>NULL
28(1 row)
29
30-- test perl -> hstore[]
31CREATE FUNCTION test2arr() RETURNS hstore[]
32LANGUAGE plperl
33TRANSFORM FOR TYPE hstore
34AS $$
35$val = [{a => 1, b => 'boo', c => undef}, {d => 2}];
36return $val;
37$$;
38SELECT test2arr();
39                           test2arr
40--------------------------------------------------------------
41 {"\"a\"=>\"1\", \"b\"=>\"boo\", \"c\"=>NULL","\"d\"=>\"2\""}
42(1 row)
43
44-- check error cases
45CREATE OR REPLACE FUNCTION test2() RETURNS hstore
46LANGUAGE plperl
47TRANSFORM FOR TYPE hstore
48AS $$
49return 42;
50$$;
51SELECT test2();
52ERROR:  cannot transform non-hash Perl value to hstore
53CONTEXT:  PL/Perl function "test2"
54CREATE OR REPLACE FUNCTION test2() RETURNS hstore
55LANGUAGE plperl
56TRANSFORM FOR TYPE hstore
57AS $$
58return [1, 2];
59$$;
60SELECT test2();
61ERROR:  cannot transform non-hash Perl value to hstore
62CONTEXT:  PL/Perl function "test2"
63DROP FUNCTION test2();
64DROP FUNCTION test2arr();
65DROP EXTENSION hstore_plperl;
66DROP EXTENSION hstore;
67DROP EXTENSION plperl;
68