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

Commit43ac12c

Browse files
committed
In type_sanity, check I/O functions of built-in types are not volatile.
We have a project policy that I/O functions must not be volatile, as percommitaab353a, but we weren't doinganything to enforce that. In most usage the marking of the functiondoesn't matter as long as its behavior is sane --- but I/O casts canexpose the marking as user-visible behavior, as per today's complaintfrom Joe Van Dyk about contrib/ltree.This test as such will only protect us against future errors in built-indata types. To catch the same error in contrib or third-party types,perhaps we should make CREATE TYPE complain? But that's a separateissue from enforcing the policy for built-in types.
1 parentb34d6f0 commit43ac12c

File tree

2 files changed

+81
-0
lines changed

2 files changed

+81
-0
lines changed

‎src/test/regress/expected/type_sanity.out

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,14 @@ ORDER BY 1;
155155
30 | oidvector | 54 | oidvectorin
156156
(2 rows)
157157

158+
-- typinput routines should not be volatile
159+
SELECT p1.oid, p1.typname, p2.oid, p2.proname
160+
FROM pg_type AS p1, pg_proc AS p2
161+
WHERE p1.typinput = p2.oid AND p2.provolatile NOT IN ('i', 's');
162+
oid | typname | oid | proname
163+
-----+---------+-----+---------
164+
(0 rows)
165+
158166
-- Composites, domains, enums, ranges should all use the same input routines
159167
SELECT DISTINCT typtype, typinput
160168
FROM pg_type AS p1
@@ -192,6 +200,14 @@ WHERE p1.typoutput = p2.oid AND NOT
192200
-----+---------+-----+---------
193201
(0 rows)
194202

203+
-- typoutput routines should not be volatile
204+
SELECT p1.oid, p1.typname, p2.oid, p2.proname
205+
FROM pg_type AS p1, pg_proc AS p2
206+
WHERE p1.typoutput = p2.oid AND p2.provolatile NOT IN ('i', 's');
207+
oid | typname | oid | proname
208+
-----+---------+-----+---------
209+
(0 rows)
210+
195211
-- Composites, enums, ranges should all use the same output routines
196212
SELECT DISTINCT typtype, typoutput
197213
FROM pg_type AS p1
@@ -262,6 +278,14 @@ WHERE p1.typinput = p2.oid AND p1.typreceive = p3.oid AND
262278
-----+---------+-----+---------+-----+---------
263279
(0 rows)
264280

281+
-- typreceive routines should not be volatile
282+
SELECT p1.oid, p1.typname, p2.oid, p2.proname
283+
FROM pg_type AS p1, pg_proc AS p2
284+
WHERE p1.typreceive = p2.oid AND p2.provolatile NOT IN ('i', 's');
285+
oid | typname | oid | proname
286+
-----+---------+-----+---------
287+
(0 rows)
288+
265289
-- Composites, domains, enums, ranges should all use the same receive routines
266290
SELECT DISTINCT typtype, typreceive
267291
FROM pg_type AS p1
@@ -299,6 +323,14 @@ WHERE p1.typsend = p2.oid AND NOT
299323
-----+---------+-----+---------
300324
(0 rows)
301325

326+
-- typsend routines should not be volatile
327+
SELECT p1.oid, p1.typname, p2.oid, p2.proname
328+
FROM pg_type AS p1, pg_proc AS p2
329+
WHERE p1.typsend = p2.oid AND p2.provolatile NOT IN ('i', 's');
330+
oid | typname | oid | proname
331+
-----+---------+-----+---------
332+
(0 rows)
333+
302334
-- Composites, enums, ranges should all use the same send routines
303335
SELECT DISTINCT typtype, typsend
304336
FROM pg_type AS p1
@@ -330,6 +362,14 @@ WHERE p1.typmodin = p2.oid AND NOT
330362
-----+---------+-----+---------
331363
(0 rows)
332364

365+
-- typmodin routines should not be volatile
366+
SELECT p1.oid, p1.typname, p2.oid, p2.proname
367+
FROM pg_type AS p1, pg_proc AS p2
368+
WHERE p1.typmodin = p2.oid AND p2.provolatile NOT IN ('i', 's');
369+
oid | typname | oid | proname
370+
-----+---------+-----+---------
371+
(0 rows)
372+
333373
-- Check for bogus typmodout routines
334374
SELECT p1.oid, p1.typname, p2.oid, p2.proname
335375
FROM pg_type AS p1, pg_proc AS p2
@@ -341,6 +381,14 @@ WHERE p1.typmodout = p2.oid AND NOT
341381
-----+---------+-----+---------
342382
(0 rows)
343383

384+
-- typmodout routines should not be volatile
385+
SELECT p1.oid, p1.typname, p2.oid, p2.proname
386+
FROM pg_type AS p1, pg_proc AS p2
387+
WHERE p1.typmodout = p2.oid AND p2.provolatile NOT IN ('i', 's');
388+
oid | typname | oid | proname
389+
-----+---------+-----+---------
390+
(0 rows)
391+
344392
-- Array types should have same typmodin/out as their element types
345393
SELECT p1.oid, p1.typname, p2.oid, p2.typname
346394
FROM pg_type AS p1, pg_type AS p2
@@ -379,6 +427,7 @@ WHERE p1.typanalyze = p2.oid AND NOT
379427
-----+---------+-----+---------
380428
(0 rows)
381429

430+
-- there does not seem to be a reason to care about volatility of typanalyze
382431
-- domains inherit their base type's typanalyze
383432
SELECT d.oid, d.typname, d.typanalyze, t.oid, t.typname, t.typanalyze
384433
FROM pg_type d JOIN pg_type t ON d.typbasetype = t.oid

‎src/test/regress/sql/type_sanity.sql

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,11 @@ WHERE p1.typinput = p2.oid AND
122122
(p2.oid='array_in'::regproc)
123123
ORDER BY1;
124124

125+
-- typinput routines should not be volatile
126+
SELECTp1.oid,p1.typname,p2.oid,p2.proname
127+
FROM pg_typeAS p1, pg_procAS p2
128+
WHEREp1.typinput=p2.oidANDp2.provolatile NOTIN ('i','s');
129+
125130
-- Composites, domains, enums, ranges should all use the same input routines
126131
SELECT DISTINCT typtype, typinput
127132
FROM pg_typeAS p1
@@ -146,6 +151,11 @@ FROM pg_type AS p1, pg_proc AS p2
146151
WHEREp1.typoutput=p2.oidAND NOT
147152
(p2.prorettype='cstring'::regtypeAND NOTp2.proretset);
148153

154+
-- typoutput routines should not be volatile
155+
SELECTp1.oid,p1.typname,p2.oid,p2.proname
156+
FROM pg_typeAS p1, pg_procAS p2
157+
WHEREp1.typoutput=p2.oidANDp2.provolatile NOTIN ('i','s');
158+
149159
-- Composites, enums, ranges should all use the same output routines
150160
SELECT DISTINCT typtype, typoutput
151161
FROM pg_typeAS p1
@@ -193,6 +203,11 @@ FROM pg_type AS p1, pg_proc AS p2, pg_proc AS p3
193203
WHEREp1.typinput=p2.oidANDp1.typreceive=p3.oidAND
194204
p2.pronargs!=p3.pronargs;
195205

206+
-- typreceive routines should not be volatile
207+
SELECTp1.oid,p1.typname,p2.oid,p2.proname
208+
FROM pg_typeAS p1, pg_procAS p2
209+
WHEREp1.typreceive=p2.oidANDp2.provolatile NOTIN ('i','s');
210+
196211
-- Composites, domains, enums, ranges should all use the same receive routines
197212
SELECT DISTINCT typtype, typreceive
198213
FROM pg_typeAS p1
@@ -217,6 +232,11 @@ FROM pg_type AS p1, pg_proc AS p2
217232
WHEREp1.typsend=p2.oidAND NOT
218233
(p2.prorettype='bytea'::regtypeAND NOTp2.proretset);
219234

235+
-- typsend routines should not be volatile
236+
SELECTp1.oid,p1.typname,p2.oid,p2.proname
237+
FROM pg_typeAS p1, pg_procAS p2
238+
WHEREp1.typsend=p2.oidANDp2.provolatile NOTIN ('i','s');
239+
220240
-- Composites, enums, ranges should all use the same send routines
221241
SELECT DISTINCT typtype, typsend
222242
FROM pg_typeAS p1
@@ -237,6 +257,11 @@ WHERE p1.typmodin = p2.oid AND NOT
237257
p2.proargtypes[0]='cstring[]'::regtypeAND
238258
p2.prorettype='int4'::regtypeAND NOTp2.proretset);
239259

260+
-- typmodin routines should not be volatile
261+
SELECTp1.oid,p1.typname,p2.oid,p2.proname
262+
FROM pg_typeAS p1, pg_procAS p2
263+
WHEREp1.typmodin=p2.oidANDp2.provolatile NOTIN ('i','s');
264+
240265
-- Check for bogus typmodout routines
241266

242267
SELECTp1.oid,p1.typname,p2.oid,p2.proname
@@ -246,6 +271,11 @@ WHERE p1.typmodout = p2.oid AND NOT
246271
p2.proargtypes[0]='int4'::regtypeAND
247272
p2.prorettype='cstring'::regtypeAND NOTp2.proretset);
248273

274+
-- typmodout routines should not be volatile
275+
SELECTp1.oid,p1.typname,p2.oid,p2.proname
276+
FROM pg_typeAS p1, pg_procAS p2
277+
WHEREp1.typmodout=p2.oidANDp2.provolatile NOTIN ('i','s');
278+
249279
-- Array types should have same typmodin/out as their element types
250280

251281
SELECTp1.oid,p1.typname,p2.oid,p2.typname
@@ -276,6 +306,8 @@ WHERE p1.typanalyze = p2.oid AND NOT
276306
p2.proargtypes[0]='internal'::regtypeAND
277307
p2.prorettype='bool'::regtypeAND NOTp2.proretset);
278308

309+
-- there does not seem to be a reason to care about volatility of typanalyze
310+
279311
-- domains inherit their base type's typanalyze
280312

281313
SELECTd.oid,d.typname,d.typanalyze,t.oid,t.typname,t.typanalyze

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp