]> granicus.if.org Git - postgresql/blob - contrib/hstore_plperl/sql/hstore_plperl.sql
d42311b49b333f6625d8295e4434fbcf56d219f9
[postgresql] / contrib / hstore_plperl / sql / hstore_plperl.sql
1 CREATE EXTENSION hstore_plperl;
2 CREATE EXTENSION hstore_plperlu;
3
4 SELECT transforms.udt_schema, transforms.udt_name,
5        routine_schema, routine_name,
6        group_name, transform_type
7 FROM information_schema.transforms JOIN information_schema.routines
8      USING (specific_catalog, specific_schema, specific_name)
9 ORDER BY 1, 2, 5, 6;
10
11
12 -- test hstore -> perl
13 CREATE FUNCTION test1(val hstore) RETURNS int
14 LANGUAGE plperlu
15 TRANSFORM FOR TYPE hstore
16 AS $$
17 use Data::Dumper;
18 $Data::Dumper::Sortkeys = 1;
19 elog(INFO, Dumper($_[0]));
20 return scalar(keys %{$_[0]});
21 $$;
22
23 SELECT test1('aa=>bb, cc=>NULL'::hstore);
24
25 CREATE FUNCTION test1none(val hstore) RETURNS int
26 LANGUAGE plperlu
27 AS $$
28 use Data::Dumper;
29 $Data::Dumper::Sortkeys = 1;
30 elog(INFO, Dumper($_[0]));
31 return scalar(keys %{$_[0]});
32 $$;
33
34 SELECT test1none('aa=>bb, cc=>NULL'::hstore);
35
36 CREATE FUNCTION test1list(val hstore) RETURNS int
37 LANGUAGE plperlu
38 TRANSFORM FOR TYPE hstore
39 AS $$
40 use Data::Dumper;
41 $Data::Dumper::Sortkeys = 1;
42 elog(INFO, Dumper($_[0]));
43 return scalar(keys %{$_[0]});
44 $$;
45
46 SELECT test1list('aa=>bb, cc=>NULL'::hstore);
47
48
49 -- test hstore[] -> perl
50 CREATE FUNCTION test1arr(val hstore[]) RETURNS int
51 LANGUAGE plperlu
52 TRANSFORM FOR TYPE hstore
53 AS $$
54 use Data::Dumper;
55 $Data::Dumper::Sortkeys = 1;
56 elog(INFO, Dumper($_[0]->[0], $_[0]->[1]));
57 return scalar(keys %{$_[0]});
58 $$;
59
60 SELECT test1arr(array['aa=>bb, cc=>NULL'::hstore, 'dd=>ee']);
61
62
63 -- test perl -> hstore
64 CREATE FUNCTION test2() RETURNS hstore
65 LANGUAGE plperl
66 TRANSFORM FOR TYPE hstore
67 AS $$
68 $val = {a => 1, b => 'boo', c => undef};
69 return $val;
70 $$;
71
72 SELECT test2();
73
74
75 -- test perl -> hstore[]
76 CREATE FUNCTION test2arr() RETURNS hstore[]
77 LANGUAGE plperl
78 TRANSFORM FOR TYPE hstore
79 AS $$
80 $val = [{a => 1, b => 'boo', c => undef}, {d => 2}];
81 return $val;
82 $$;
83
84 SELECT test2arr();
85
86
87 -- test as part of prepare/execute
88 CREATE FUNCTION test3() RETURNS void
89 LANGUAGE plperlu
90 TRANSFORM FOR TYPE hstore
91 AS $$
92 use Data::Dumper;
93 $Data::Dumper::Sortkeys = 1;
94
95 $rv = spi_exec_query(q{SELECT 'aa=>bb, cc=>NULL'::hstore AS col1});
96 elog(INFO, Dumper($rv->{rows}[0]->{col1}));
97
98 $val = {a => 1, b => 'boo', c => undef};
99 $plan = spi_prepare(q{SELECT $1::text AS col1}, "hstore");
100 $rv = spi_exec_prepared($plan, {}, $val);
101 elog(INFO, Dumper($rv->{rows}[0]->{col1}));
102 $$;
103
104 SELECT test3();
105
106
107 -- test trigger
108 CREATE TABLE test1 (a int, b hstore);
109 INSERT INTO test1 VALUES (1, 'aa=>bb, cc=>NULL');
110 SELECT * FROM test1;
111
112 CREATE FUNCTION test4() RETURNS trigger
113 LANGUAGE plperlu
114 TRANSFORM FOR TYPE hstore
115 AS $$
116 use Data::Dumper;
117 $Data::Dumper::Sortkeys = 1;
118 elog(INFO, Dumper($_TD->{new}));
119 if ($_TD->{new}{a} == 1) {
120     $_TD->{new}{b} = {a => 1, b => 'boo', c => undef};
121 }
122
123 return "MODIFY";
124 $$;
125
126 CREATE TRIGGER test4 BEFORE UPDATE ON test1 FOR EACH ROW EXECUTE PROCEDURE test4();
127
128 UPDATE test1 SET a = a;
129 SELECT * FROM test1;
130
131
132 DROP TABLE test1;
133
134 DROP FUNCTION test1(hstore);
135 DROP FUNCTION test1none(hstore);
136 DROP FUNCTION test1list(hstore);
137 DROP FUNCTION test1arr(hstore[]);
138 DROP FUNCTION test2();
139 DROP FUNCTION test2arr();
140 DROP FUNCTION test3();
141 DROP FUNCTION test4();
142
143
144 DROP EXTENSION hstore_plperl;
145 DROP EXTENSION hstore_plperlu;
146 DROP EXTENSION hstore;
147 DROP EXTENSION plperl;
148 DROP EXTENSION plperlu;