OSDN Git Service

Extend the BKI infrastructure to allow system catalogs to be given
authorTom Lane <tgl@sss.pgh.pa.us>
Sat, 26 Sep 2009 22:42:03 +0000 (22:42 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Sat, 26 Sep 2009 22:42:03 +0000 (22:42 +0000)
hand-assigned rowtype OIDs, even when they are not "bootstrapped" catalogs
that have handmade type rows in pg_type.h.  Give pg_database such an OID.
Restore the availability of C macros for the rowtype OIDs of the bootstrapped
catalogs.  (These macros are now in the individual catalogs' .h files,
though, not in pg_type.h.)

This commit doesn't do anything especially useful by itself, but it's
necessary infrastructure for reverting some ill-considered changes in
relcache.c.

20 files changed:
doc/src/sgml/bki.sgml
src/backend/bootstrap/bootparse.y
src/backend/bootstrap/bootscanner.l
src/backend/catalog/genbki.sh
src/backend/catalog/heap.c
src/backend/catalog/toasting.c
src/backend/commands/cluster.c
src/backend/commands/tablecmds.c
src/backend/executor/execMain.c
src/include/catalog/catversion.h
src/include/catalog/duplicate_oids
src/include/catalog/genbki.h
src/include/catalog/heap.h
src/include/catalog/pg_attribute.h
src/include/catalog/pg_class.h
src/include/catalog/pg_database.h
src/include/catalog/pg_proc.h
src/include/catalog/pg_type.h
src/include/catalog/unused_oids
src/tools/msvc/Genbki.pm

index 61a736b..d0c08e0 100644 (file)
@@ -1,4 +1,4 @@
-<!-- $PostgreSQL: pgsql/doc/src/sgml/bki.sgml,v 1.21 2007/02/01 00:28:16 momjian Exp $ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/bki.sgml,v 1.22 2009/09/26 22:42:00 tgl Exp $ -->
 
 <chapter id="bki">
  <title><acronym>BKI</acronym> Backend Interface</title>
   <variablelist>
    <varlistentry>
     <term>
-     <literal>create</> 
+     <literal>create</>
+     <replaceable class="parameter">tablename</replaceable>
+     <replaceable class="parameter">tableoid</replaceable>
      <optional><literal>bootstrap</></optional>
      <optional><literal>shared_relation</></optional>
      <optional><literal>without_oids</></optional>
-     <replaceable class="parameter">tablename</replaceable>
-     <replaceable class="parameter">tableoid</replaceable>
+     <optional><literal>rowtype_oid</> <replaceable>oid</></optional>
      (<replaceable class="parameter">name1</replaceable> =
      <replaceable class="parameter">type1</replaceable> <optional>,
      <replaceable class="parameter">name2</replaceable> = <replaceable
       The table is created as shared if <literal>shared_relation</> is
       specified.
       It will have OIDs unless <literal>without_oids</> is specified.
+      The table's rowtype OID (<structname>pg_type</> OID) can optionally
+      be specified via the <literal>rowtype_oid</> clause; if not specified,
+      an OID is automatically generated for it.  (The <literal>rowtype_oid</>
+      clause is useless if <literal>bootstrap</> is specified, but it can be
+      provided anyway for documentation.)
      </para>
     </listitem>
    </varlistentry>
index 1670e46..0b27331 100644 (file)
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/bootstrap/bootparse.y,v 1.97 2009/07/29 20:56:18 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/bootstrap/bootparse.y,v 1.98 2009/09/26 22:42:01 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -108,13 +108,13 @@ int num_columns_read = 0;
 %type <ival>  boot_const boot_ident
 %type <ival>  optbootstrap optsharedrelation optwithoutoids
 %type <ival>  boot_tuple boot_tuplelist
-%type <oidval> oidspec optoideq
+%type <oidval> oidspec optoideq optrowtypeoid
 
 %token <ival> CONST_P ID
 %token OPEN XCLOSE XCREATE INSERT_TUPLE
 %token XDECLARE INDEX ON USING XBUILD INDICES UNIQUE XTOAST
 %token COMMA EQUALS LPAREN RPAREN
-%token OBJ_ID XBOOTSTRAP XSHARED_RELATION XWITHOUT_OIDS NULLVAL
+%token OBJ_ID XBOOTSTRAP XSHARED_RELATION XWITHOUT_OIDS XROWTYPE_OID NULLVAL
 %start TopLevel
 
 %nonassoc low
@@ -168,15 +168,15 @@ Boot_CloseStmt:
                ;
 
 Boot_CreateStmt:
-                 XCREATE optbootstrap optsharedrelation optwithoutoids boot_ident oidspec LPAREN
+                 XCREATE boot_ident oidspec optbootstrap optsharedrelation optwithoutoids optrowtypeoid LPAREN
                                {
                                        do_start();
                                        numattr = 0;
                                        elog(DEBUG4, "creating%s%s relation %s %u",
-                                                $2 ? " bootstrap" : "",
-                                                $3 ? " shared" : "",
-                                                LexIDStr($5),
-                                                $6);
+                                                $4 ? " bootstrap" : "",
+                                                $5 ? " shared" : "",
+                                                LexIDStr($2),
+                                                $3);
                                }
                  boot_typelist
                                {
@@ -188,9 +188,9 @@ Boot_CreateStmt:
 
                                        do_start();
 
-                                       tupdesc = CreateTupleDesc(numattr, !($4), attrtypes);
+                                       tupdesc = CreateTupleDesc(numattr, !($6), attrtypes);
 
-                                       if ($2)
+                                       if ($4)
                                        {
                                                if (boot_reldesc)
                                                {
@@ -198,13 +198,13 @@ Boot_CreateStmt:
                                                        closerel(NULL);
                                                }
 
-                                               boot_reldesc = heap_create(LexIDStr($5),
+                                               boot_reldesc = heap_create(LexIDStr($2),
                                                                                                   PG_CATALOG_NAMESPACE,
-                                                                                                  $3 ? GLOBALTABLESPACE_OID : 0,
-                                                                                                  $6,
+                                                                                                  $5 ? GLOBALTABLESPACE_OID : 0,
+                                                                                                  $3,
                                                                                                   tupdesc,
                                                                                                   RELKIND_RELATION,
-                                                                                                  $3,
+                                                                                                  $5,
                                                                                                   true);
                                                elog(DEBUG4, "bootstrap relation created");
                                        }
@@ -212,15 +212,16 @@ Boot_CreateStmt:
                                        {
                                                Oid id;
 
-                                               id = heap_create_with_catalog(LexIDStr($5),
+                                               id = heap_create_with_catalog(LexIDStr($2),
                                                                                                          PG_CATALOG_NAMESPACE,
-                                                                                                         $3 ? GLOBALTABLESPACE_OID : 0,
-                                                                                                         $6,
+                                                                                                         $5 ? GLOBALTABLESPACE_OID : 0,
+                                                                                                         $3,
+                                                                                                         $7,
                                                                                                          BOOTSTRAP_SUPERUSERID,
                                                                                                          tupdesc,
                                                                                                          NIL,
                                                                                                          RELKIND_RELATION,
-                                                                                                         $3,
+                                                                                                         $5,
                                                                                                          true,
                                                                                                          0,
                                                                                                          ONCOMMIT_NOOP,
@@ -343,6 +344,11 @@ optwithoutoids:
                |                                       { $$ = 0; }
                ;
 
+optrowtypeoid:
+                       XROWTYPE_OID oidspec    { $$ = $2; }
+               |                                                       { $$ = InvalidOid; }
+               ;
+
 boot_typelist:
                  boot_type_thing
                | boot_typelist COMMA boot_type_thing
@@ -363,7 +369,7 @@ oidspec:
 
 optoideq:
                        OBJ_ID EQUALS oidspec                           { $$ = $3; }
-               |                                                                               { $$ = (Oid) 0; }
+               |                                                                               { $$ = InvalidOid; }
                ;
 
 boot_tuplelist:
index ec5d694..d4bcffe 100644 (file)
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/bootstrap/bootscanner.l,v 1.48 2009/01/01 17:23:36 momjian Exp $
+ *       $PostgreSQL: pgsql/src/backend/bootstrap/bootscanner.l,v 1.49 2009/09/26 22:42:01 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -77,6 +77,7 @@ OID                           { return(OBJ_ID); }
 bootstrap              { return(XBOOTSTRAP); }
 "shared_relation"      { return(XSHARED_RELATION); }
 "without_oids" { return(XWITHOUT_OIDS); }
+"rowtype_oid"  { return(XROWTYPE_OID); }
 _null_                 { return(NULLVAL); }
 
 insert                 { return(INSERT_TUPLE); }
index 2582f42..bda9a38 100644 (file)
@@ -11,7 +11,7 @@
 #
 #
 # IDENTIFICATION
-#    $PostgreSQL: pgsql/src/backend/catalog/genbki.sh,v 1.46 2009/01/01 17:23:36 momjian Exp $
+#    $PostgreSQL: pgsql/src/backend/catalog/genbki.sh,v 1.47 2009/09/26 22:42:01 tgl Exp $
 #
 # NOTES
 #    non-essential whitespace is removed from the generated file.
@@ -178,6 +178,7 @@ BEGIN {
        bootstrap = "";
        shared_relation = "";
        without_oids = "";
+       rowtype_oid = "";
        nc = 0;
        reln_open = 0;
        comment_level = 0;
@@ -319,13 +320,16 @@ comment_level > 0 { next; }
        oid = substr(catalogandoid, pos+1, length(catalogandoid)-pos);
 
        if ($0 ~ /BKI_BOOTSTRAP/) {
-               bootstrap = "bootstrap ";
+               bootstrap = " bootstrap";
        }
        if ($0 ~ /BKI_SHARED_RELATION/) {
-               shared_relation = "shared_relation ";
+               shared_relation = " shared_relation";
        }
        if ($0 ~ /BKI_WITHOUT_OIDS/) {
-               without_oids = "without_oids ";
+               without_oids = " without_oids";
+       }
+       if ($0 ~ /BKI_ROWTYPE_OID\([0-9]*\)/) {
+               rowtype_oid = gensub(/^.*BKI_ROWTYPE_OID\(([0-9]*)\).*$/, " rowtype_oid \\1", 1);
        }
 
         i = 1;
@@ -351,7 +355,7 @@ inside == 1 {
 #  if this is the last line, then output the bki catalog stuff.
 # ----
        if ($1 ~ /}/) {
-               print "create " bootstrap shared_relation without_oids catalog " " oid;
+               print "create " catalog " " oid bootstrap shared_relation without_oids rowtype_oid;
                print "\t(";
 
                for (j=1; j<i-1; j++) {
@@ -370,6 +374,7 @@ inside == 1 {
                bootstrap = "";
                shared_relation = "";
                without_oids = "";
+               rowtype_oid = "";
                next;
        }
 
index 2d97dba..e9bdc88 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/catalog/heap.c,v 1.358 2009/08/23 19:23:40 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/catalog/heap.c,v 1.359 2009/09/26 22:42:01 tgl Exp $
  *
  *
  * INTERFACE ROUTINES
@@ -80,6 +80,7 @@ static Oid AddNewRelationType(const char *typeName,
                                   Oid new_rel_oid,
                                   char new_rel_kind,
                                   Oid ownerid,
+                                  Oid new_row_type,
                                   Oid new_array_type);
 static void RelationRemoveInheritance(Oid relid);
 static void StoreRelCheck(Relation rel, char *ccname, Node *expr,
@@ -790,10 +791,11 @@ AddNewRelationType(const char *typeName,
                                   Oid new_rel_oid,
                                   char new_rel_kind,
                                   Oid ownerid,
+                                  Oid new_row_type,
                                   Oid new_array_type)
 {
        return
-               TypeCreate(InvalidOid,  /* no predetermined OID */
+               TypeCreate(new_row_type,                /* optional predetermined OID */
                                   typeName,    /* type name */
                                   typeNamespace,               /* type namespace */
                                   new_rel_oid, /* relation oid */
@@ -836,6 +838,7 @@ heap_create_with_catalog(const char *relname,
                                                 Oid relnamespace,
                                                 Oid reltablespace,
                                                 Oid relid,
+                                                Oid reltypeid,
                                                 Oid ownerid,
                                                 TupleDesc tupdesc,
                                                 List *cooked_constraints,
@@ -952,7 +955,9 @@ heap_create_with_catalog(const char *relname,
 
        /*
         * Since defining a relation also defines a complex type, we add a new
-        * system type corresponding to the new relation.
+        * system type corresponding to the new relation.  The OID of the type
+        * can be preselected by the caller, but if reltypeid is InvalidOid,
+        * we'll generate a new OID for it.
         *
         * NOTE: we could get a unique-index failure here, in case someone else is
         * creating the same type name in parallel but hadn't committed yet when
@@ -963,6 +968,7 @@ heap_create_with_catalog(const char *relname,
                                                                          relid,
                                                                          relkind,
                                                                          ownerid,
+                                                                         reltypeid,
                                                                          new_array_oid);
 
        /*
index 9e2f20e..ac7b527 100644 (file)
@@ -8,7 +8,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/catalog/toasting.c,v 1.18 2009/07/29 20:56:18 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/catalog/toasting.c,v 1.19 2009/09/26 22:42:01 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -203,6 +203,7 @@ create_toast_table(Relation rel, Oid toastOid, Oid toastIndexOid,
                                                                                   namespaceid,
                                                                                   rel->rd_rel->reltablespace,
                                                                                   toastOid,
+                                                                                  InvalidOid,
                                                                                   rel->rd_rel->relowner,
                                                                                   tupdesc,
                                                                                   NIL,
index 1fabfb3..5c48361 100644 (file)
@@ -11,7 +11,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/commands/cluster.c,v 1.186 2009/06/11 20:46:11 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/commands/cluster.c,v 1.187 2009/09/26 22:42:01 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -703,6 +703,7 @@ make_new_heap(Oid OIDOldHeap, const char *NewName, Oid NewTableSpace)
                                                                                  RelationGetNamespace(OldHeap),
                                                                                  NewTableSpace,
                                                                                  InvalidOid,
+                                                                                 InvalidOid,
                                                                                  OldHeap->rd_rel->relowner,
                                                                                  tupdesc,
                                                                                  NIL,
index a36cbc5..07b4af6 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/commands/tablecmds.c,v 1.298 2009/08/23 19:23:41 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/commands/tablecmds.c,v 1.299 2009/09/26 22:42:01 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -510,6 +510,7 @@ DefineRelation(CreateStmt *stmt, char relkind)
                                                                                  namespaceId,
                                                                                  tablespaceId,
                                                                                  InvalidOid,
+                                                                                 InvalidOid,
                                                                                  GetUserId(),
                                                                                  descriptor,
                                                                                  list_concat(cookedDefaults,
index 1bfe48e..1fcf2af 100644 (file)
@@ -26,7 +26,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/executor/execMain.c,v 1.327 2009/07/29 20:56:18 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/executor/execMain.c,v 1.328 2009/09/26 22:42:01 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -2925,6 +2925,7 @@ OpenIntoRel(QueryDesc *queryDesc)
                                                                                          namespaceId,
                                                                                          tablespaceId,
                                                                                          InvalidOid,
+                                                                                         InvalidOid,
                                                                                          GetUserId(),
                                                                                          tupdesc,
                                                                                          NIL,
index 5e0fc24..4ae9157 100644 (file)
@@ -37,7 +37,7 @@
  * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/catalog/catversion.h,v 1.539 2009/09/22 23:43:41 tgl Exp $
+ * $PostgreSQL: pgsql/src/include/catalog/catversion.h,v 1.540 2009/09/26 22:42:01 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -53,6 +53,6 @@
  */
 
 /*                                                     yyyymmddN */
-#define CATALOG_VERSION_NO     200909221
+#define CATALOG_VERSION_NO     200909261
 
 #endif
index ea58f4a..ded692c 100755 (executable)
@@ -2,7 +2,7 @@
 #
 # duplicate_oids
 #
-# $PostgreSQL: pgsql/src/include/catalog/duplicate_oids,v 1.8 2006/07/31 01:16:37 tgl Exp $
+# $PostgreSQL: pgsql/src/include/catalog/duplicate_oids,v 1.9 2009/09/26 22:42:01 tgl Exp $
 #
 # finds manually-assigned oids that are duplicated in the system tables.
 #
 #
 
 # note: we exclude BKI_BOOTSTRAP relations since they are expected to have
-# matching DATA lines in pg_class.h
+# matching DATA lines in pg_class.h and pg_type.h
 
 cat pg_*.h toasting.h indexing.h | \
 egrep -v -e '^CATALOG\(.*BKI_BOOTSTRAP' | \
 sed -n -e 's/^DATA(insert *OID *= *\([0-9][0-9]*\).*$/\1/p' \
+       -e 's/^CATALOG([^,]*, *\([0-9][0-9]*\).*BKI_ROWTYPE_OID(\([0-9][0-9]*\)).*$/\1,\2/p' \
        -e 's/^CATALOG([^,]*, *\([0-9][0-9]*\).*$/\1/p' \
        -e 's/^DECLARE_INDEX([^,]*, *\([0-9][0-9]*\).*$/\1/p' \
        -e 's/^DECLARE_UNIQUE_INDEX([^,]*, *\([0-9][0-9]*\).*$/\1/p' \
index 1bdd1f9..4c0952f 100644 (file)
@@ -12,7 +12,7 @@
  * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/catalog/genbki.h,v 1.3 2009/06/11 14:49:09 momjian Exp $
+ * $PostgreSQL: pgsql/src/include/catalog/genbki.h,v 1.4 2009/09/26 22:42:02 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -26,6 +26,7 @@
 #define BKI_BOOTSTRAP
 #define BKI_SHARED_RELATION
 #define BKI_WITHOUT_OIDS
+#define BKI_ROWTYPE_OID(oid)
 
 /* Declarations that provide the initial content of a catalog */
 /* In C, these need to expand into some harmless, repeatable declaration */
index 1d7449f..0d42cf1 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/catalog/heap.h,v 1.92 2009/08/23 19:23:41 tgl Exp $
+ * $PostgreSQL: pgsql/src/include/catalog/heap.h,v 1.93 2009/09/26 22:42:02 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -47,6 +47,7 @@ extern Oid heap_create_with_catalog(const char *relname,
                                                 Oid relnamespace,
                                                 Oid reltablespace,
                                                 Oid relid,
+                                                Oid reltypeid,
                                                 Oid ownerid,
                                                 TupleDesc tupdesc,
                                                 List *cooked_constraints,
index f3c19d7..1315e42 100644 (file)
@@ -8,7 +8,7 @@
  * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/catalog/pg_attribute.h,v 1.152 2009/08/12 20:53:30 tgl Exp $
+ * $PostgreSQL: pgsql/src/include/catalog/pg_attribute.h,v 1.153 2009/09/26 22:42:02 tgl Exp $
  *
  * NOTES
  *       the genbki.sh script reads this file and generates .bki
@@ -35,8 +35,9 @@
  * ----------------
  */
 #define AttributeRelationId  1249
+#define AttributeRelation_Rowtype_Id  75
 
-CATALOG(pg_attribute,1249) BKI_BOOTSTRAP BKI_WITHOUT_OIDS
+CATALOG(pg_attribute,1249) BKI_BOOTSTRAP BKI_WITHOUT_OIDS BKI_ROWTYPE_OID(75)
 {
        Oid                     attrelid;               /* OID of relation containing this attribute */
        NameData        attname;                /* name of attribute */
index 15a3b5f..2ab4e9f 100644 (file)
@@ -8,7 +8,7 @@
  * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/catalog/pg_class.h,v 1.115 2009/08/02 22:14:53 tgl Exp $
+ * $PostgreSQL: pgsql/src/include/catalog/pg_class.h,v 1.116 2009/09/26 22:42:02 tgl Exp $
  *
  * NOTES
  *       the genbki.sh script reads this file and generates .bki
@@ -27,8 +27,9 @@
  * ----------------
  */
 #define RelationRelationId     1259
+#define RelationRelation_Rowtype_Id  83
 
-CATALOG(pg_class,1259) BKI_BOOTSTRAP
+CATALOG(pg_class,1259) BKI_BOOTSTRAP BKI_ROWTYPE_OID(83)
 {
        NameData        relname;                /* class name */
        Oid                     relnamespace;   /* OID of namespace containing this class */
index f7c2327..730c23c 100644 (file)
@@ -8,7 +8,7 @@
  * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/catalog/pg_database.h,v 1.49 2009/01/01 17:23:57 momjian Exp $
+ * $PostgreSQL: pgsql/src/include/catalog/pg_database.h,v 1.50 2009/09/26 22:42:02 tgl Exp $
  *
  * NOTES
  *       the genbki.sh script reads this file and generates .bki
@@ -27,8 +27,9 @@
  * ----------------
  */
 #define DatabaseRelationId     1262
+#define DatabaseRelation_Rowtype_Id  1248
 
-CATALOG(pg_database,1262) BKI_SHARED_RELATION
+CATALOG(pg_database,1262) BKI_SHARED_RELATION BKI_ROWTYPE_OID(1248)
 {
        NameData        datname;                /* database name */
        Oid                     datdba;                 /* owner of database */
index f6a9a8a..0ea8948 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/catalog/pg_proc.h,v 1.550 2009/09/01 02:54:52 alvherre Exp $
+ * $PostgreSQL: pgsql/src/include/catalog/pg_proc.h,v 1.551 2009/09/26 22:42:02 tgl Exp $
  *
  * NOTES
  *       The script catalog/genbki.sh reads this file and generates .bki
@@ -31,8 +31,9 @@
  * ----------------
  */
 #define ProcedureRelationId  1255
+#define ProcedureRelation_Rowtype_Id  81
 
-CATALOG(pg_proc,1255) BKI_BOOTSTRAP
+CATALOG(pg_proc,1255) BKI_BOOTSTRAP BKI_ROWTYPE_OID(81)
 {
        NameData        proname;                /* procedure name */
        Oid                     pronamespace;   /* OID of namespace containing this proc */
index 8bd23da..92e6a7d 100644 (file)
@@ -8,7 +8,7 @@
  * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/catalog/pg_type.h,v 1.209 2009/08/13 21:14:31 petere Exp $
+ * $PostgreSQL: pgsql/src/include/catalog/pg_type.h,v 1.210 2009/09/26 22:42:03 tgl Exp $
  *
  * NOTES
  *       the genbki.sh script reads this file and generates .bki
@@ -32,8 +32,9 @@
  * ----------------
  */
 #define TypeRelationId 1247
+#define TypeRelation_Rowtype_Id  71
 
-CATALOG(pg_type,1247) BKI_BOOTSTRAP
+CATALOG(pg_type,1247) BKI_BOOTSTRAP BKI_ROWTYPE_OID(71)
 {
        NameData        typname;                /* type name */
        Oid                     typnamespace;   /* OID of namespace containing this type */
@@ -330,7 +331,8 @@ DATA(insert OID = 30 (      oidvector  PGNSP PGUID -1 f b A f t \054 0      26 1013 oidvec
 DESCR("array of oids, used in system tables");
 #define OIDVECTOROID   30
 
-/* hand-built rowtype entries for bootstrapped catalogs: */
+/* hand-built rowtype entries for bootstrapped catalogs */
+/* NB: OIDs assigned here must match the BKI_ROWTYPE_OID declarations */
 
 DATA(insert OID = 71 ( pg_type                 PGNSP PGUID -1 f c C f t \054 1247 0 0 record_in record_out record_recv record_send - - - d x f 0 -1 0 _null_ _null_ ));
 DATA(insert OID = 75 ( pg_attribute    PGNSP PGUID -1 f c C f t \054 1249 0 0 record_in record_out record_recv record_send - - - d x f 0 -1 0 _null_ _null_ ));
index 4003bee..3714739 100755 (executable)
@@ -2,7 +2,7 @@
 #
 # unused_oids
 #
-# $PostgreSQL: pgsql/src/include/catalog/unused_oids,v 1.8 2006/07/31 01:16:38 tgl Exp $
+# $PostgreSQL: pgsql/src/include/catalog/unused_oids,v 1.9 2009/09/26 22:42:03 tgl Exp $
 #
 #      finds blocks of manually-assignable oids that have not already been
 #      claimed by post_hackers.  primarily useful for finding available
@@ -25,11 +25,12 @@ export FIRSTOBJECTID
 
 # this part (down to the uniq step) should match the duplicate_oids script
 # note: we exclude BKI_BOOTSTRAP relations since they are expected to have
-# matching DATA lines in pg_class.h
+# matching DATA lines in pg_class.h and pg_type.h
 
 cat pg_*.h toasting.h indexing.h | \
 egrep -v -e '^CATALOG\(.*BKI_BOOTSTRAP' | \
 sed -n -e 's/^DATA(insert *OID *= *\([0-9][0-9]*\).*$/\1/p' \
+       -e 's/^CATALOG([^,]*, *\([0-9][0-9]*\).*BKI_ROWTYPE_OID(\([0-9][0-9]*\)).*$/\1,\2/p' \
        -e 's/^CATALOG([^,]*, *\([0-9][0-9]*\).*$/\1/p' \
        -e 's/^DECLARE_INDEX([^,]*, *\([0-9][0-9]*\).*$/\1/p' \
        -e 's/^DECLARE_UNIQUE_INDEX([^,]*, *\([0-9][0-9]*\).*$/\1/p' \
index 73adc3e..0b0e24f 100644 (file)
@@ -11,7 +11,7 @@
 #
 #
 # IDENTIFICATION
-#    $PostgreSQL: pgsql/src/tools/msvc/Genbki.pm,v 1.6 2009/01/01 17:24:05 momjian Exp $
+#    $PostgreSQL: pgsql/src/tools/msvc/Genbki.pm,v 1.7 2009/09/26 22:42:03 tgl Exp $
 #
 #-------------------------------------------------------------------------
 
@@ -79,6 +79,7 @@ sub genbki
     my $bootstrap = "";
     my $shared_relation = "";
     my $without_oids = "";
+    my $rowtype_oid = "";
     my $nc = 0;
     my $inside = 0;
     my @attr;
@@ -152,18 +153,22 @@ sub genbki
             my @fields = split /,/,$1;
             $catalog = $fields[0];
             $oid = $fields[1];
-            $bootstrap=$shared_relation=$without_oids="";
+            $bootstrap=$shared_relation=$without_oids=$rowtype_oid="";
             if ($rest =~ /BKI_BOOTSTRAP/)
             {
-                $bootstrap = "bootstrap ";
+                $bootstrap = " bootstrap";
             }
             if ($rest =~ /BKI_SHARED_RELATION/)
             {
-                $shared_relation = "shared_relation ";
+                $shared_relation = " shared_relation";
             }
             if ($rest =~ /BKI_WITHOUT_OIDS/)
             {
-                $without_oids = "without_oids ";
+                $without_oids = " without_oids";
+            }
+            if ($rest =~ /BKI_ROWTYPE_OID\((\d+)\)/)
+            {
+                $rowtype_oid = " rowtype_oid $1";
             }
             $nc++;
             $inside = 1;
@@ -176,7 +181,7 @@ sub genbki
             {
 
                 # Last line
-                $bki .= "create $bootstrap$shared_relation$without_oids$catalog $oid\n (\n";
+                $bki .= "create $catalog $oid$bootstrap$shared_relation$without_oids$rowtype_oid\n\t(\n";
                 my $first = 1;
                 for (my $i = 0; $i <= $#attr; $i++)
                 {