Update oidjoins regression test for v13.
authorTom Lane <tgl@sss.pgh.pa.us>
Sat, 9 May 2020 17:05:08 +0000 (13:05 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Sat, 9 May 2020 17:05:08 +0000 (13:05 -0400)
We seem to have forgotten to do this in the v12 cycle, so add it as
a task in the RELEASE_CHANGES list, in hopes we won't forget again.

While here, fix findoidjoins.c so that it actually works in the
new dispensation where OID is a regular column, and change it to only
consider system relations (this avoids being fooled by the OID column
in the brintest test table).

Also tweak the largeobject test so that the somewhat-recently-added
manual creation of a LO with an OID in the system range doesn't
fool findoidjoins.c.  For the moment I just made that use an unused
OID, but we might have to find a more robust solution someday.

src/test/regress/expected/oidjoins.out
src/test/regress/input/largeobject.source
src/test/regress/output/largeobject.source
src/test/regress/output/largeobject_1.source
src/test/regress/sql/oidjoins.sql
src/tools/RELEASE_CHANGES
src/tools/findoidjoins/README
src/tools/findoidjoins/findoidjoins.c

index 1302cc271bacffd4bd020104abd5d492c29bb462..92f9143d06f50aef5769a318f223be27e36da162 100644 (file)
@@ -961,6 +961,46 @@ WHERE  staop5 != 0 AND
 ------+--------
 (0 rows)
 
+SELECT ctid, stacoll1
+FROM   pg_catalog.pg_statistic fk
+WHERE  stacoll1 != 0 AND
+   NOT EXISTS(SELECT 1 FROM pg_catalog.pg_collation pk WHERE pk.oid = fk.stacoll1);
+ ctid | stacoll1 
+------+----------
+(0 rows)
+
+SELECT ctid, stacoll2
+FROM   pg_catalog.pg_statistic fk
+WHERE  stacoll2 != 0 AND
+   NOT EXISTS(SELECT 1 FROM pg_catalog.pg_collation pk WHERE pk.oid = fk.stacoll2);
+ ctid | stacoll2 
+------+----------
+(0 rows)
+
+SELECT ctid, stacoll3
+FROM   pg_catalog.pg_statistic fk
+WHERE  stacoll3 != 0 AND
+   NOT EXISTS(SELECT 1 FROM pg_catalog.pg_collation pk WHERE pk.oid = fk.stacoll3);
+ ctid | stacoll3 
+------+----------
+(0 rows)
+
+SELECT ctid, stacoll4
+FROM   pg_catalog.pg_statistic fk
+WHERE  stacoll4 != 0 AND
+   NOT EXISTS(SELECT 1 FROM pg_catalog.pg_collation pk WHERE pk.oid = fk.stacoll4);
+ ctid | stacoll4 
+------+----------
+(0 rows)
+
+SELECT ctid, stacoll5
+FROM   pg_catalog.pg_statistic fk
+WHERE  stacoll5 != 0 AND
+   NOT EXISTS(SELECT 1 FROM pg_catalog.pg_collation pk WHERE pk.oid = fk.stacoll5);
+ ctid | stacoll5 
+------+----------
+(0 rows)
+
 SELECT ctid, stxrelid
 FROM   pg_catalog.pg_statistic_ext fk
 WHERE  stxrelid != 0 AND
@@ -1041,6 +1081,14 @@ WHERE    tgrelid != 0 AND
 ------+---------
 (0 rows)
 
+SELECT ctid, tgparentid
+FROM   pg_catalog.pg_trigger fk
+WHERE  tgparentid != 0 AND
+   NOT EXISTS(SELECT 1 FROM pg_catalog.pg_trigger pk WHERE pk.oid = fk.tgparentid);
+ ctid | tgparentid 
+------+------------
+(0 rows)
+
 SELECT ctid, tgfoid
 FROM   pg_catalog.pg_trigger fk
 WHERE  tgfoid != 0 AND
index 7e45b1172adbf580eab98dc4792854dc9ad582a8..f40338ddf8875374bfc52c981f7f16e5e090b05a 100644 (file)
@@ -253,9 +253,9 @@ SELECT lo_get(:newloid);
 
 -- Create one more object that we leave behind for testing pg_dump/pg_upgrade;
 -- this one intentionally has an OID in the system range
-SELECT lo_create(3001);
+SELECT lo_create(2121);
 
-COMMENT ON LARGE OBJECT 3001 IS 'testing comments';
+COMMENT ON LARGE OBJECT 2121 IS 'testing comments';
 
 -- Clean up
 DROP TABLE lotest_stash_values;
index 761d7ff30157a5634ae7fa2171ed91d2a49bfb59..ea712a5e2fd29464778230263ee18ae1c1a27948 100644 (file)
@@ -469,13 +469,13 @@ SELECT lo_get(:newloid);
 
 -- Create one more object that we leave behind for testing pg_dump/pg_upgrade;
 -- this one intentionally has an OID in the system range
-SELECT lo_create(3001);
+SELECT lo_create(2121);
  lo_create 
 -----------
-      3001
+      2121
 (1 row)
 
-COMMENT ON LARGE OBJECT 3001 IS 'testing comments';
+COMMENT ON LARGE OBJECT 2121 IS 'testing comments';
 -- Clean up
 DROP TABLE lotest_stash_values;
 DROP ROLE regress_lo_user;
index 7de3e7ea6f641aec86a6e4c577597f4c52500e27..f01596cea7beda8ebb2d124b3108c9053d3a8735 100644 (file)
@@ -469,13 +469,13 @@ SELECT lo_get(:newloid);
 
 -- Create one more object that we leave behind for testing pg_dump/pg_upgrade;
 -- this one intentionally has an OID in the system range
-SELECT lo_create(3001);
+SELECT lo_create(2121);
  lo_create 
 -----------
-      3001
+      2121
 (1 row)
 
-COMMENT ON LARGE OBJECT 3001 IS 'testing comments';
+COMMENT ON LARGE OBJECT 2121 IS 'testing comments';
 -- Clean up
 DROP TABLE lotest_stash_values;
 DROP ROLE regress_lo_user;
index b774cbca5b63aebd8381f1a9cff229086b4e614e..8a833a23fda8782089b7d8ebcd830806daa7cc7a 100644 (file)
@@ -481,6 +481,26 @@ SELECT ctid, staop5
 FROM   pg_catalog.pg_statistic fk
 WHERE  staop5 != 0 AND
    NOT EXISTS(SELECT 1 FROM pg_catalog.pg_operator pk WHERE pk.oid = fk.staop5);
+SELECT ctid, stacoll1
+FROM   pg_catalog.pg_statistic fk
+WHERE  stacoll1 != 0 AND
+   NOT EXISTS(SELECT 1 FROM pg_catalog.pg_collation pk WHERE pk.oid = fk.stacoll1);
+SELECT ctid, stacoll2
+FROM   pg_catalog.pg_statistic fk
+WHERE  stacoll2 != 0 AND
+   NOT EXISTS(SELECT 1 FROM pg_catalog.pg_collation pk WHERE pk.oid = fk.stacoll2);
+SELECT ctid, stacoll3
+FROM   pg_catalog.pg_statistic fk
+WHERE  stacoll3 != 0 AND
+   NOT EXISTS(SELECT 1 FROM pg_catalog.pg_collation pk WHERE pk.oid = fk.stacoll3);
+SELECT ctid, stacoll4
+FROM   pg_catalog.pg_statistic fk
+WHERE  stacoll4 != 0 AND
+   NOT EXISTS(SELECT 1 FROM pg_catalog.pg_collation pk WHERE pk.oid = fk.stacoll4);
+SELECT ctid, stacoll5
+FROM   pg_catalog.pg_statistic fk
+WHERE  stacoll5 != 0 AND
+   NOT EXISTS(SELECT 1 FROM pg_catalog.pg_collation pk WHERE pk.oid = fk.stacoll5);
 SELECT ctid, stxrelid
 FROM   pg_catalog.pg_statistic_ext fk
 WHERE  stxrelid != 0 AND
@@ -521,6 +541,10 @@ SELECT ctid, tgrelid
 FROM   pg_catalog.pg_trigger fk
 WHERE  tgrelid != 0 AND
    NOT EXISTS(SELECT 1 FROM pg_catalog.pg_class pk WHERE pk.oid = fk.tgrelid);
+SELECT ctid, tgparentid
+FROM   pg_catalog.pg_trigger fk
+WHERE  tgparentid != 0 AND
+   NOT EXISTS(SELECT 1 FROM pg_catalog.pg_trigger pk WHERE pk.oid = fk.tgparentid);
 SELECT ctid, tgfoid
 FROM   pg_catalog.pg_trigger fk
 WHERE  tgfoid != 0 AND
index a7bff76b768ab505a5f4bb03fe6be2b33306715b..6ba9121e303a899e977f914031c0f10eba5461a0 100644 (file)
@@ -80,6 +80,8 @@ but there may be reasons to do them at other times as well.
 * Update Unicode data: Edit UNICODE_VERSION and CLDR_VERSION in
   src/Makefile.global.in, run make update-unicode, and commit.
 
+* Update the oidjoins regression test (see src/tools/findoidjoins/).
+
 
 Starting a New Development Cycle
 ================================
index e5fc3104d3b92143f64a5a0efa27b7837f1c4807..a177c10375bc7ba0c4fb1d5361aa8a65eec1d637 100644 (file)
@@ -180,15 +180,22 @@ Join pg_catalog.pg_statistic.staop2 => pg_catalog.pg_operator.oid
 Join pg_catalog.pg_statistic.staop3 => pg_catalog.pg_operator.oid
 Join pg_catalog.pg_statistic.staop4 => pg_catalog.pg_operator.oid
 Join pg_catalog.pg_statistic.staop5 => pg_catalog.pg_operator.oid
+Join pg_catalog.pg_statistic.stacoll1 => pg_catalog.pg_collation.oid
+Join pg_catalog.pg_statistic.stacoll2 => pg_catalog.pg_collation.oid
+Join pg_catalog.pg_statistic.stacoll3 => pg_catalog.pg_collation.oid
+Join pg_catalog.pg_statistic.stacoll4 => pg_catalog.pg_collation.oid
+Join pg_catalog.pg_statistic.stacoll5 => pg_catalog.pg_collation.oid
 Join pg_catalog.pg_statistic_ext.stxrelid => pg_catalog.pg_class.oid
 Join pg_catalog.pg_statistic_ext.stxnamespace => pg_catalog.pg_namespace.oid
 Join pg_catalog.pg_statistic_ext.stxowner => pg_catalog.pg_authid.oid
+Join pg_catalog.pg_statistic_ext_data.stxoid => pg_catalog.pg_statistic_ext.oid
 Join pg_catalog.pg_tablespace.spcowner => pg_catalog.pg_authid.oid
 Join pg_catalog.pg_transform.trftype => pg_catalog.pg_type.oid
 Join pg_catalog.pg_transform.trflang => pg_catalog.pg_language.oid
 Join pg_catalog.pg_transform.trffromsql => pg_catalog.pg_proc.oid
 Join pg_catalog.pg_transform.trftosql => pg_catalog.pg_proc.oid
 Join pg_catalog.pg_trigger.tgrelid => pg_catalog.pg_class.oid
+Join pg_catalog.pg_trigger.tgparentid => pg_catalog.pg_trigger.oid
 Join pg_catalog.pg_trigger.tgfoid => pg_catalog.pg_proc.oid
 Join pg_catalog.pg_trigger.tgconstrrelid => pg_catalog.pg_class.oid
 Join pg_catalog.pg_trigger.tgconstrindid => pg_catalog.pg_class.oid
index 562a98a5b73713603b299d113bfdb442144dc3b0..ade11a53a2cb5381ef653d79b6cc93588e78058a 100644 (file)
@@ -7,6 +7,7 @@
  */
 #include "postgres_fe.h"
 
+#include "access/transam.h"
 #include "catalog/pg_class_d.h"
 
 #include "fe_utils/connect.h"
@@ -55,18 +56,20 @@ main(int argc, char **argv)
    }
    PQclear(res);
 
-   /* Get a list of relations that have OIDs */
+   /* Get a list of system relations that have OIDs */
 
-   printfPQExpBuffer(&sql, "%s",
+   printfPQExpBuffer(&sql,
                      "SET search_path = public;"
                      "SELECT c.relname, (SELECT nspname FROM "
                      "pg_catalog.pg_namespace n WHERE n.oid = c.relnamespace) AS nspname "
                      "FROM pg_catalog.pg_class c "
                      "WHERE c.relkind = " CppAsString2(RELKIND_RELATION)
+                     " AND c.oid < '%u'"
                      " AND EXISTS(SELECT * FROM pg_attribute a"
                      "            WHERE a.attrelid = c.oid AND a.attname = 'oid' "
                      "                  AND a.atttypid = 'oid'::regtype)"
-                     "ORDER BY nspname, c.relname"
+                     "ORDER BY nspname, c.relname",
+                     FirstNormalObjectId
        );
 
    res = PQexec(conn, sql.data);
@@ -77,15 +80,17 @@ main(int argc, char **argv)
    }
    pkrel_res = res;
 
-   /* Get a list of columns of OID type (or any OID-alias type) */
+   /* Get a list of system columns of OID type (or any OID-alias type) */
 
-   printfPQExpBuffer(&sql, "%s",
+   printfPQExpBuffer(&sql,
                      "SELECT c.relname, "
                      "(SELECT nspname FROM pg_catalog.pg_namespace n WHERE n.oid = c.relnamespace) AS nspname, "
                      "a.attname "
                      "FROM pg_catalog.pg_class c, pg_catalog.pg_attribute a "
                      "WHERE a.attnum > 0"
+                     " AND a.attname != 'oid'"
                      " AND c.relkind = " CppAsString2(RELKIND_RELATION)
+                     " AND c.oid < '%u'"
                      " AND a.attrelid = c.oid"
                      " AND a.atttypid IN ('pg_catalog.oid'::regtype, "
                      " 'pg_catalog.regclass'::regtype, "
@@ -96,7 +101,8 @@ main(int argc, char **argv)
                      " 'pg_catalog.regtype'::regtype, "
                      " 'pg_catalog.regconfig'::regtype, "
                      " 'pg_catalog.regdictionary'::regtype) "
-                     "ORDER BY nspname, c.relname, a.attnum"
+                     "ORDER BY nspname, c.relname, a.attnum",
+                     FirstNormalObjectId
        );
 
    res = PQexec(conn, sql.data);