Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitf954254

Browse files
committed
Fix hstore_plperl regression tests on some platforms
On some platforms, plperl and plperlu cannot be loaded at the sametime. So split the test into two separate test files.
1 parent2e3ca04 commitf954254

File tree

5 files changed

+311
-281
lines changed

5 files changed

+311
-281
lines changed

‎contrib/hstore_plperl/Makefile

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@ PG_CPPFLAGS = -I$(top_srcdir)/src/pl/plperl -I$(perl_archlibexp)/CORE -I$(top_sr
88
EXTENSION = hstore_plperl hstore_plperlu
99
DATA = hstore_plperl--1.0.sql hstore_plperlu--1.0.sql
1010

11-
REGRESS = hstore_plperl create_transform
12-
REGRESS_OPTS = --load-extension=hstore --load-extension=plperl --load-extension=plperlu
11+
REGRESS = hstore_plperl hstore_plperlu create_transform
1312
EXTRA_INSTALL = contrib/hstore
1413

1514
ifdefUSE_PGXS
Lines changed: 7 additions & 172 deletions
Original file line numberDiff line numberDiff line change
@@ -1,103 +1,17 @@
1+
CREATE EXTENSION hstore;
2+
CREATE EXTENSION plperl;
13
CREATE EXTENSION hstore_plperl;
2-
CREATE EXTENSION hstore_plperlu;
34
SELECT transforms.udt_schema, transforms.udt_name,
45
routine_schema, routine_name,
56
group_name, transform_type
67
FROM information_schema.transforms JOIN information_schema.routines
78
USING (specific_catalog, specific_schema, specific_name)
89
ORDER BY 1, 2, 5, 6;
9-
udt_schema | udt_name | routine_schema | routine_name | group_name | transform_type
10-
------------+----------+----------------+-------------------+------------+----------------
11-
public | hstore | public | hstore_to_plperl | plperl | FROM SQL
12-
public | hstore | public | plperl_to_hstore | plperl | TO SQL
13-
public | hstore | public | hstore_to_plperlu | plperlu | FROM SQL
14-
public | hstore | public | plperlu_to_hstore | plperlu | TO SQL
15-
(4 rows)
16-
17-
-- test hstore -> perl
18-
CREATE FUNCTION test1(val hstore) RETURNS int
19-
LANGUAGE plperlu
20-
TRANSFORM FOR TYPE hstore
21-
AS $$
22-
use Data::Dumper;
23-
$Data::Dumper::Sortkeys = 1;
24-
elog(INFO, Dumper($_[0]));
25-
return scalar(keys %{$_[0]});
26-
$$;
27-
SELECT test1('aa=>bb, cc=>NULL'::hstore);
28-
INFO: $VAR1 = {
29-
'aa' => 'bb',
30-
'cc' => undef
31-
};
32-
33-
CONTEXT: PL/Perl function "test1"
34-
test1
35-
-------
36-
2
37-
(1 row)
38-
39-
CREATE FUNCTION test1none(val hstore) RETURNS int
40-
LANGUAGE plperlu
41-
AS $$
42-
use Data::Dumper;
43-
$Data::Dumper::Sortkeys = 1;
44-
elog(INFO, Dumper($_[0]));
45-
return scalar(keys %{$_[0]});
46-
$$;
47-
SELECT test1none('aa=>bb, cc=>NULL'::hstore);
48-
INFO: $VAR1 = '"aa"=>"bb", "cc"=>NULL';
49-
50-
CONTEXT: PL/Perl function "test1none"
51-
test1none
52-
-----------
53-
0
54-
(1 row)
55-
56-
CREATE FUNCTION test1list(val hstore) RETURNS int
57-
LANGUAGE plperlu
58-
TRANSFORM FOR TYPE hstore
59-
AS $$
60-
use Data::Dumper;
61-
$Data::Dumper::Sortkeys = 1;
62-
elog(INFO, Dumper($_[0]));
63-
return scalar(keys %{$_[0]});
64-
$$;
65-
SELECT test1list('aa=>bb, cc=>NULL'::hstore);
66-
INFO: $VAR1 = {
67-
'aa' => 'bb',
68-
'cc' => undef
69-
};
70-
71-
CONTEXT: PL/Perl function "test1list"
72-
test1list
73-
-----------
74-
2
75-
(1 row)
76-
77-
-- test hstore[] -> perl
78-
CREATE FUNCTION test1arr(val hstore[]) RETURNS int
79-
LANGUAGE plperlu
80-
TRANSFORM FOR TYPE hstore
81-
AS $$
82-
use Data::Dumper;
83-
$Data::Dumper::Sortkeys = 1;
84-
elog(INFO, Dumper($_[0]->[0], $_[0]->[1]));
85-
return scalar(keys %{$_[0]});
86-
$$;
87-
SELECT test1arr(array['aa=>bb, cc=>NULL'::hstore, 'dd=>ee']);
88-
INFO: $VAR1 = {
89-
'aa' => 'bb',
90-
'cc' => undef
91-
};
92-
$VAR2 = {
93-
'dd' => 'ee'
94-
};
95-
96-
CONTEXT: PL/Perl function "test1arr"
97-
test1arr
98-
----------
99-
2
100-
(1 row)
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)
10115

10216
-- test perl -> hstore
10317
CREATE FUNCTION test2() RETURNS hstore
@@ -127,87 +41,8 @@ SELECT test2arr();
12741
{"\"a\"=>\"1\", \"b\"=>\"boo\", \"c\"=>NULL","\"d\"=>\"2\""}
12842
(1 row)
12943

130-
-- test as part of prepare/execute
131-
CREATE FUNCTION test3() RETURNS void
132-
LANGUAGE plperlu
133-
TRANSFORM FOR TYPE hstore
134-
AS $$
135-
use Data::Dumper;
136-
$Data::Dumper::Sortkeys = 1;
137-
138-
$rv = spi_exec_query(q{SELECT 'aa=>bb, cc=>NULL'::hstore AS col1});
139-
elog(INFO, Dumper($rv->{rows}[0]->{col1}));
140-
141-
$val = {a => 1, b => 'boo', c => undef};
142-
$plan = spi_prepare(q{SELECT $1::text AS col1}, "hstore");
143-
$rv = spi_exec_prepared($plan, {}, $val);
144-
elog(INFO, Dumper($rv->{rows}[0]->{col1}));
145-
$$;
146-
SELECT test3();
147-
INFO: $VAR1 = {
148-
'aa' => 'bb',
149-
'cc' => undef
150-
};
151-
152-
CONTEXT: PL/Perl function "test3"
153-
INFO: $VAR1 = '"a"=>"1", "b"=>"boo", "c"=>NULL';
154-
155-
CONTEXT: PL/Perl function "test3"
156-
test3
157-
-------
158-
159-
(1 row)
160-
161-
-- test trigger
162-
CREATE TABLE test1 (a int, b hstore);
163-
INSERT INTO test1 VALUES (1, 'aa=>bb, cc=>NULL');
164-
SELECT * FROM test1;
165-
a | b
166-
---+------------------------
167-
1 | "aa"=>"bb", "cc"=>NULL
168-
(1 row)
169-
170-
CREATE FUNCTION test4() RETURNS trigger
171-
LANGUAGE plperlu
172-
TRANSFORM FOR TYPE hstore
173-
AS $$
174-
use Data::Dumper;
175-
$Data::Dumper::Sortkeys = 1;
176-
elog(INFO, Dumper($_TD->{new}));
177-
if ($_TD->{new}{a} == 1) {
178-
$_TD->{new}{b} = {a => 1, b => 'boo', c => undef};
179-
}
180-
181-
return "MODIFY";
182-
$$;
183-
CREATE TRIGGER test4 BEFORE UPDATE ON test1 FOR EACH ROW EXECUTE PROCEDURE test4();
184-
UPDATE test1 SET a = a;
185-
INFO: $VAR1 = {
186-
'a' => '1',
187-
'b' => {
188-
'aa' => 'bb',
189-
'cc' => undef
190-
}
191-
};
192-
193-
CONTEXT: PL/Perl function "test4"
194-
SELECT * FROM test1;
195-
a | b
196-
---+---------------------------------
197-
1 | "a"=>"1", "b"=>"boo", "c"=>NULL
198-
(1 row)
199-
200-
DROP TABLE test1;
201-
DROP FUNCTION test1(hstore);
202-
DROP FUNCTION test1none(hstore);
203-
DROP FUNCTION test1list(hstore);
204-
DROP FUNCTION test1arr(hstore[]);
20544
DROP FUNCTION test2();
20645
DROP FUNCTION test2arr();
207-
DROP FUNCTION test3();
208-
DROP FUNCTION test4();
20946
DROP EXTENSION hstore_plperl;
210-
DROP EXTENSION hstore_plperlu;
21147
DROP EXTENSION hstore;
21248
DROP EXTENSION plperl;
213-
DROP EXTENSION plperlu;
Lines changed: 180 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,180 @@
1+
CREATE EXTENSION hstore;
2+
CREATE EXTENSION plperlu;
3+
CREATE EXTENSION hstore_plperlu;
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+
udt_schema | udt_name | routine_schema | routine_name | group_name | transform_type
11+
------------+----------+----------------+-------------------+------------+----------------
12+
public | hstore | public | hstore_to_plperlu | plperlu | FROM SQL
13+
public | hstore | public | plperlu_to_hstore | plperlu | TO SQL
14+
(2 rows)
15+
16+
-- test hstore -> perl
17+
CREATE FUNCTION test1(val hstore) RETURNS int
18+
LANGUAGE plperlu
19+
TRANSFORM FOR TYPE hstore
20+
AS $$
21+
use Data::Dumper;
22+
$Data::Dumper::Sortkeys = 1;
23+
elog(INFO, Dumper($_[0]));
24+
return scalar(keys %{$_[0]});
25+
$$;
26+
SELECT test1('aa=>bb, cc=>NULL'::hstore);
27+
INFO: $VAR1 = {
28+
'aa' => 'bb',
29+
'cc' => undef
30+
};
31+
32+
CONTEXT: PL/Perl function "test1"
33+
test1
34+
-------
35+
2
36+
(1 row)
37+
38+
CREATE FUNCTION test1none(val hstore) RETURNS int
39+
LANGUAGE plperlu
40+
AS $$
41+
use Data::Dumper;
42+
$Data::Dumper::Sortkeys = 1;
43+
elog(INFO, Dumper($_[0]));
44+
return scalar(keys %{$_[0]});
45+
$$;
46+
SELECT test1none('aa=>bb, cc=>NULL'::hstore);
47+
INFO: $VAR1 = '"aa"=>"bb", "cc"=>NULL';
48+
49+
CONTEXT: PL/Perl function "test1none"
50+
test1none
51+
-----------
52+
0
53+
(1 row)
54+
55+
CREATE FUNCTION test1list(val hstore) RETURNS int
56+
LANGUAGE plperlu
57+
TRANSFORM FOR TYPE hstore
58+
AS $$
59+
use Data::Dumper;
60+
$Data::Dumper::Sortkeys = 1;
61+
elog(INFO, Dumper($_[0]));
62+
return scalar(keys %{$_[0]});
63+
$$;
64+
SELECT test1list('aa=>bb, cc=>NULL'::hstore);
65+
INFO: $VAR1 = {
66+
'aa' => 'bb',
67+
'cc' => undef
68+
};
69+
70+
CONTEXT: PL/Perl function "test1list"
71+
test1list
72+
-----------
73+
2
74+
(1 row)
75+
76+
-- test hstore[] -> perl
77+
CREATE FUNCTION test1arr(val hstore[]) RETURNS int
78+
LANGUAGE plperlu
79+
TRANSFORM FOR TYPE hstore
80+
AS $$
81+
use Data::Dumper;
82+
$Data::Dumper::Sortkeys = 1;
83+
elog(INFO, Dumper($_[0]->[0], $_[0]->[1]));
84+
return scalar(keys %{$_[0]});
85+
$$;
86+
SELECT test1arr(array['aa=>bb, cc=>NULL'::hstore, 'dd=>ee']);
87+
INFO: $VAR1 = {
88+
'aa' => 'bb',
89+
'cc' => undef
90+
};
91+
$VAR2 = {
92+
'dd' => 'ee'
93+
};
94+
95+
CONTEXT: PL/Perl function "test1arr"
96+
test1arr
97+
----------
98+
2
99+
(1 row)
100+
101+
-- test as part of prepare/execute
102+
CREATE FUNCTION test3() RETURNS void
103+
LANGUAGE plperlu
104+
TRANSFORM FOR TYPE hstore
105+
AS $$
106+
use Data::Dumper;
107+
$Data::Dumper::Sortkeys = 1;
108+
109+
$rv = spi_exec_query(q{SELECT 'aa=>bb, cc=>NULL'::hstore AS col1});
110+
elog(INFO, Dumper($rv->{rows}[0]->{col1}));
111+
112+
$val = {a => 1, b => 'boo', c => undef};
113+
$plan = spi_prepare(q{SELECT $1::text AS col1}, "hstore");
114+
$rv = spi_exec_prepared($plan, {}, $val);
115+
elog(INFO, Dumper($rv->{rows}[0]->{col1}));
116+
$$;
117+
SELECT test3();
118+
INFO: $VAR1 = {
119+
'aa' => 'bb',
120+
'cc' => undef
121+
};
122+
123+
CONTEXT: PL/Perl function "test3"
124+
INFO: $VAR1 = '"a"=>"1", "b"=>"boo", "c"=>NULL';
125+
126+
CONTEXT: PL/Perl function "test3"
127+
test3
128+
-------
129+
130+
(1 row)
131+
132+
-- test trigger
133+
CREATE TABLE test1 (a int, b hstore);
134+
INSERT INTO test1 VALUES (1, 'aa=>bb, cc=>NULL');
135+
SELECT * FROM test1;
136+
a | b
137+
---+------------------------
138+
1 | "aa"=>"bb", "cc"=>NULL
139+
(1 row)
140+
141+
CREATE FUNCTION test4() RETURNS trigger
142+
LANGUAGE plperlu
143+
TRANSFORM FOR TYPE hstore
144+
AS $$
145+
use Data::Dumper;
146+
$Data::Dumper::Sortkeys = 1;
147+
elog(INFO, Dumper($_TD->{new}));
148+
if ($_TD->{new}{a} == 1) {
149+
$_TD->{new}{b} = {a => 1, b => 'boo', c => undef};
150+
}
151+
152+
return "MODIFY";
153+
$$;
154+
CREATE TRIGGER test4 BEFORE UPDATE ON test1 FOR EACH ROW EXECUTE PROCEDURE test4();
155+
UPDATE test1 SET a = a;
156+
INFO: $VAR1 = {
157+
'a' => '1',
158+
'b' => {
159+
'aa' => 'bb',
160+
'cc' => undef
161+
}
162+
};
163+
164+
CONTEXT: PL/Perl function "test4"
165+
SELECT * FROM test1;
166+
a | b
167+
---+---------------------------------
168+
1 | "a"=>"1", "b"=>"boo", "c"=>NULL
169+
(1 row)
170+
171+
DROP TABLE test1;
172+
DROP FUNCTION test1(hstore);
173+
DROP FUNCTION test1none(hstore);
174+
DROP FUNCTION test1list(hstore);
175+
DROP FUNCTION test1arr(hstore[]);
176+
DROP FUNCTION test3();
177+
DROP FUNCTION test4();
178+
DROP EXTENSION hstore_plperlu;
179+
DROP EXTENSION hstore;
180+
DROP EXTENSION plperlu;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp