From 3ef16c46fb3a64c150a3b42c3cc4a8538a12ff3f Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sat, 9 Jan 2016 17:20:58 -0500 Subject: [PATCH] Add some checks on "char"-type columns to type_sanity and opr_sanity. I noticed that the sanity checks in the regression tests omitted to check a couple of "poor man's enum" columns that you'd reasonably expect them to check. There are other "char"-type columns in system catalogs that are not covered by either type_sanity or opr_sanity, e.g. pg_rewrite.ev_type. However, those catalogs are not populated with any manually-created data during bootstrap, so it seems less necessary to check them this way. --- src/test/regress/expected/opr_sanity.out | 4 +++- src/test/regress/expected/type_sanity.out | 4 +++- src/test/regress/sql/opr_sanity.sql | 4 +++- src/test/regress/sql/type_sanity.sql | 4 +++- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/test/regress/expected/opr_sanity.out b/src/test/regress/expected/opr_sanity.out index 616e67405e..f786962488 100644 --- a/src/test/regress/expected/opr_sanity.out +++ b/src/test/regress/expected/opr_sanity.out @@ -57,7 +57,9 @@ WHERE p1.prolang = 0 OR p1.prorettype = 0 OR array_upper(p1.proargtypes, 1) != p1.pronargs-1 OR 0::oid = ANY (p1.proargtypes) OR procost <= 0 OR - CASE WHEN proretset THEN prorows <= 0 ELSE prorows != 0 END; + CASE WHEN proretset THEN prorows <= 0 ELSE prorows != 0 END OR + provolatile NOT IN ('i', 's', 'v') OR + proparallel NOT IN ('s', 'r', 'u'); oid | proname -----+--------- (0 rows) diff --git a/src/test/regress/expected/type_sanity.out b/src/test/regress/expected/type_sanity.out index e2a7a418a8..e5adfba631 100644 --- a/src/test/regress/expected/type_sanity.out +++ b/src/test/regress/expected/type_sanity.out @@ -465,7 +465,9 @@ ORDER BY 1; -- Look for illegal values in pg_class fields SELECT p1.oid, p1.relname FROM pg_class as p1 -WHERE p1.relkind NOT IN ('r', 'i', 's', 'S', 'c', 't', 'v', 'f'); +WHERE relkind NOT IN ('r', 'i', 's', 'S', 'c', 't', 'v', 'f') OR + relpersistence NOT IN ('p', 'u', 't') OR + relreplident NOT IN ('d', 'n', 'f', 'i'); oid | relname -----+--------- (0 rows) diff --git a/src/test/regress/sql/opr_sanity.sql b/src/test/regress/sql/opr_sanity.sql index d6aa2e8623..9a55aea5d3 100644 --- a/src/test/regress/sql/opr_sanity.sql +++ b/src/test/regress/sql/opr_sanity.sql @@ -64,7 +64,9 @@ WHERE p1.prolang = 0 OR p1.prorettype = 0 OR array_upper(p1.proargtypes, 1) != p1.pronargs-1 OR 0::oid = ANY (p1.proargtypes) OR procost <= 0 OR - CASE WHEN proretset THEN prorows <= 0 ELSE prorows != 0 END; + CASE WHEN proretset THEN prorows <= 0 ELSE prorows != 0 END OR + provolatile NOT IN ('i', 's', 'v') OR + proparallel NOT IN ('s', 'r', 'u'); -- prosrc should never be null or empty SELECT p1.oid, p1.proname diff --git a/src/test/regress/sql/type_sanity.sql b/src/test/regress/sql/type_sanity.sql index 574ef9c6e2..f7c5c9d5d4 100644 --- a/src/test/regress/sql/type_sanity.sql +++ b/src/test/regress/sql/type_sanity.sql @@ -339,7 +339,9 @@ ORDER BY 1; SELECT p1.oid, p1.relname FROM pg_class as p1 -WHERE p1.relkind NOT IN ('r', 'i', 's', 'S', 'c', 't', 'v', 'f'); +WHERE relkind NOT IN ('r', 'i', 's', 'S', 'c', 't', 'v', 'f') OR + relpersistence NOT IN ('p', 'u', 't') OR + relreplident NOT IN ('d', 'n', 'f', 'i'); -- Indexes should have an access method, others not.