Commit 49856352 authored by Tom Lane's avatar Tom Lane

Extend the BKI infrastructure to allow system catalogs to be given

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.
parent c2e228d4
<!-- $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"> <chapter id="bki">
<title><acronym>BKI</acronym> Backend Interface</title> <title><acronym>BKI</acronym> Backend Interface</title>
...@@ -67,12 +67,13 @@ ...@@ -67,12 +67,13 @@
<variablelist> <variablelist>
<varlistentry> <varlistentry>
<term> <term>
<literal>create</> <literal>create</>
<replaceable class="parameter">tablename</replaceable>
<replaceable class="parameter">tableoid</replaceable>
<optional><literal>bootstrap</></optional> <optional><literal>bootstrap</></optional>
<optional><literal>shared_relation</></optional> <optional><literal>shared_relation</></optional>
<optional><literal>without_oids</></optional> <optional><literal>without_oids</></optional>
<replaceable class="parameter">tablename</replaceable> <optional><literal>rowtype_oid</> <replaceable>oid</></optional>
<replaceable class="parameter">tableoid</replaceable>
(<replaceable class="parameter">name1</replaceable> = (<replaceable class="parameter">name1</replaceable> =
<replaceable class="parameter">type1</replaceable> <optional>, <replaceable class="parameter">type1</replaceable> <optional>,
<replaceable class="parameter">name2</replaceable> = <replaceable <replaceable class="parameter">name2</replaceable> = <replaceable
...@@ -121,6 +122,11 @@ ...@@ -121,6 +122,11 @@
The table is created as shared if <literal>shared_relation</> is The table is created as shared if <literal>shared_relation</> is
specified. specified.
It will have OIDs unless <literal>without_oids</> 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> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
* *
* *
* IDENTIFICATION * 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; ...@@ -108,13 +108,13 @@ int num_columns_read = 0;
%type <ival> boot_const boot_ident %type <ival> boot_const boot_ident
%type <ival> optbootstrap optsharedrelation optwithoutoids %type <ival> optbootstrap optsharedrelation optwithoutoids
%type <ival> boot_tuple boot_tuplelist %type <ival> boot_tuple boot_tuplelist
%type <oidval> oidspec optoideq %type <oidval> oidspec optoideq optrowtypeoid
%token <ival> CONST_P ID %token <ival> CONST_P ID
%token OPEN XCLOSE XCREATE INSERT_TUPLE %token OPEN XCLOSE XCREATE INSERT_TUPLE
%token XDECLARE INDEX ON USING XBUILD INDICES UNIQUE XTOAST %token XDECLARE INDEX ON USING XBUILD INDICES UNIQUE XTOAST
%token COMMA EQUALS LPAREN RPAREN %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 %start TopLevel
%nonassoc low %nonassoc low
...@@ -168,15 +168,15 @@ Boot_CloseStmt: ...@@ -168,15 +168,15 @@ Boot_CloseStmt:
; ;
Boot_CreateStmt: Boot_CreateStmt:
XCREATE optbootstrap optsharedrelation optwithoutoids boot_ident oidspec LPAREN XCREATE boot_ident oidspec optbootstrap optsharedrelation optwithoutoids optrowtypeoid LPAREN
{ {
do_start(); do_start();
numattr = 0; numattr = 0;
elog(DEBUG4, "creating%s%s relation %s %u", elog(DEBUG4, "creating%s%s relation %s %u",
$2 ? " bootstrap" : "", $4 ? " bootstrap" : "",
$3 ? " shared" : "", $5 ? " shared" : "",
LexIDStr($5), LexIDStr($2),
$6); $3);
} }
boot_typelist boot_typelist
{ {
...@@ -188,9 +188,9 @@ Boot_CreateStmt: ...@@ -188,9 +188,9 @@ Boot_CreateStmt:
do_start(); do_start();
tupdesc = CreateTupleDesc(numattr, !($4), attrtypes); tupdesc = CreateTupleDesc(numattr, !($6), attrtypes);
if ($2) if ($4)
{ {
if (boot_reldesc) if (boot_reldesc)
{ {
...@@ -198,13 +198,13 @@ Boot_CreateStmt: ...@@ -198,13 +198,13 @@ Boot_CreateStmt:
closerel(NULL); closerel(NULL);
} }
boot_reldesc = heap_create(LexIDStr($5), boot_reldesc = heap_create(LexIDStr($2),
PG_CATALOG_NAMESPACE, PG_CATALOG_NAMESPACE,
$3 ? GLOBALTABLESPACE_OID : 0, $5 ? GLOBALTABLESPACE_OID : 0,
$6, $3,
tupdesc, tupdesc,
RELKIND_RELATION, RELKIND_RELATION,
$3, $5,
true); true);
elog(DEBUG4, "bootstrap relation created"); elog(DEBUG4, "bootstrap relation created");
} }
...@@ -212,15 +212,16 @@ Boot_CreateStmt: ...@@ -212,15 +212,16 @@ Boot_CreateStmt:
{ {
Oid id; Oid id;
id = heap_create_with_catalog(LexIDStr($5), id = heap_create_with_catalog(LexIDStr($2),
PG_CATALOG_NAMESPACE, PG_CATALOG_NAMESPACE,
$3 ? GLOBALTABLESPACE_OID : 0, $5 ? GLOBALTABLESPACE_OID : 0,
$6, $3,
$7,
BOOTSTRAP_SUPERUSERID, BOOTSTRAP_SUPERUSERID,
tupdesc, tupdesc,
NIL, NIL,
RELKIND_RELATION, RELKIND_RELATION,
$3, $5,
true, true,
0, 0,
ONCOMMIT_NOOP, ONCOMMIT_NOOP,
...@@ -343,6 +344,11 @@ optwithoutoids: ...@@ -343,6 +344,11 @@ optwithoutoids:
| { $$ = 0; } | { $$ = 0; }
; ;
optrowtypeoid:
XROWTYPE_OID oidspec { $$ = $2; }
| { $$ = InvalidOid; }
;
boot_typelist: boot_typelist:
boot_type_thing boot_type_thing
| boot_typelist COMMA boot_type_thing | boot_typelist COMMA boot_type_thing
...@@ -363,7 +369,7 @@ oidspec: ...@@ -363,7 +369,7 @@ oidspec:
optoideq: optoideq:
OBJ_ID EQUALS oidspec { $$ = $3; } OBJ_ID EQUALS oidspec { $$ = $3; }
| { $$ = (Oid) 0; } | { $$ = InvalidOid; }
; ;
boot_tuplelist: boot_tuplelist:
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
* *
* *
* IDENTIFICATION * 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); } ...@@ -77,6 +77,7 @@ OID { return(OBJ_ID); }
bootstrap { return(XBOOTSTRAP); } bootstrap { return(XBOOTSTRAP); }
"shared_relation" { return(XSHARED_RELATION); } "shared_relation" { return(XSHARED_RELATION); }
"without_oids" { return(XWITHOUT_OIDS); } "without_oids" { return(XWITHOUT_OIDS); }
"rowtype_oid" { return(XROWTYPE_OID); }
_null_ { return(NULLVAL); } _null_ { return(NULLVAL); }
insert { return(INSERT_TUPLE); } insert { return(INSERT_TUPLE); }
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
# #
# #
# IDENTIFICATION # 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 # NOTES
# non-essential whitespace is removed from the generated file. # non-essential whitespace is removed from the generated file.
...@@ -178,6 +178,7 @@ BEGIN { ...@@ -178,6 +178,7 @@ BEGIN {
bootstrap = ""; bootstrap = "";
shared_relation = ""; shared_relation = "";
without_oids = ""; without_oids = "";
rowtype_oid = "";
nc = 0; nc = 0;
reln_open = 0; reln_open = 0;
comment_level = 0; comment_level = 0;
...@@ -319,13 +320,16 @@ comment_level > 0 { next; } ...@@ -319,13 +320,16 @@ comment_level > 0 { next; }
oid = substr(catalogandoid, pos+1, length(catalogandoid)-pos); oid = substr(catalogandoid, pos+1, length(catalogandoid)-pos);
if ($0 ~ /BKI_BOOTSTRAP/) { if ($0 ~ /BKI_BOOTSTRAP/) {
bootstrap = "bootstrap "; bootstrap = " bootstrap";
} }
if ($0 ~ /BKI_SHARED_RELATION/) { if ($0 ~ /BKI_SHARED_RELATION/) {
shared_relation = "shared_relation "; shared_relation = " shared_relation";
} }
if ($0 ~ /BKI_WITHOUT_OIDS/) { 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; i = 1;
...@@ -351,7 +355,7 @@ inside == 1 { ...@@ -351,7 +355,7 @@ inside == 1 {
# if this is the last line, then output the bki catalog stuff. # if this is the last line, then output the bki catalog stuff.
# ---- # ----
if ($1 ~ /}/) { if ($1 ~ /}/) {
print "create " bootstrap shared_relation without_oids catalog " " oid; print "create " catalog " " oid bootstrap shared_relation without_oids rowtype_oid;
print "\t("; print "\t(";
for (j=1; j<i-1; j++) { for (j=1; j<i-1; j++) {
...@@ -370,6 +374,7 @@ inside == 1 { ...@@ -370,6 +374,7 @@ inside == 1 {
bootstrap = ""; bootstrap = "";
shared_relation = ""; shared_relation = "";
without_oids = ""; without_oids = "";
rowtype_oid = "";
next; next;
} }
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * 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 * INTERFACE ROUTINES
...@@ -80,6 +80,7 @@ static Oid AddNewRelationType(const char *typeName, ...@@ -80,6 +80,7 @@ static Oid AddNewRelationType(const char *typeName,
Oid new_rel_oid, Oid new_rel_oid,
char new_rel_kind, char new_rel_kind,
Oid ownerid, Oid ownerid,
Oid new_row_type,
Oid new_array_type); Oid new_array_type);
static void RelationRemoveInheritance(Oid relid); static void RelationRemoveInheritance(Oid relid);
static void StoreRelCheck(Relation rel, char *ccname, Node *expr, static void StoreRelCheck(Relation rel, char *ccname, Node *expr,
...@@ -790,10 +791,11 @@ AddNewRelationType(const char *typeName, ...@@ -790,10 +791,11 @@ AddNewRelationType(const char *typeName,
Oid new_rel_oid, Oid new_rel_oid,
char new_rel_kind, char new_rel_kind,
Oid ownerid, Oid ownerid,
Oid new_row_type,
Oid new_array_type) Oid new_array_type)
{ {
return return
TypeCreate(InvalidOid, /* no predetermined OID */ TypeCreate(new_row_type, /* optional predetermined OID */
typeName, /* type name */ typeName, /* type name */
typeNamespace, /* type namespace */ typeNamespace, /* type namespace */
new_rel_oid, /* relation oid */ new_rel_oid, /* relation oid */
...@@ -836,6 +838,7 @@ heap_create_with_catalog(const char *relname, ...@@ -836,6 +838,7 @@ heap_create_with_catalog(const char *relname,
Oid relnamespace, Oid relnamespace,
Oid reltablespace, Oid reltablespace,
Oid relid, Oid relid,
Oid reltypeid,
Oid ownerid, Oid ownerid,
TupleDesc tupdesc, TupleDesc tupdesc,
List *cooked_constraints, List *cooked_constraints,
...@@ -952,7 +955,9 @@ heap_create_with_catalog(const char *relname, ...@@ -952,7 +955,9 @@ heap_create_with_catalog(const char *relname,
/* /*
* Since defining a relation also defines a complex type, we add a new * 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 * 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 * creating the same type name in parallel but hadn't committed yet when
...@@ -963,6 +968,7 @@ heap_create_with_catalog(const char *relname, ...@@ -963,6 +968,7 @@ heap_create_with_catalog(const char *relname,
relid, relid,
relkind, relkind,
ownerid, ownerid,
reltypeid,
new_array_oid); new_array_oid);
/* /*
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* IDENTIFICATION * 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, ...@@ -203,6 +203,7 @@ create_toast_table(Relation rel, Oid toastOid, Oid toastIndexOid,
namespaceid, namespaceid,
rel->rd_rel->reltablespace, rel->rd_rel->reltablespace,
toastOid, toastOid,
InvalidOid,
rel->rd_rel->relowner, rel->rd_rel->relowner,
tupdesc, tupdesc,
NIL, NIL,
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
* *
* *
* IDENTIFICATION * 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) ...@@ -703,6 +703,7 @@ make_new_heap(Oid OIDOldHeap, const char *NewName, Oid NewTableSpace)
RelationGetNamespace(OldHeap), RelationGetNamespace(OldHeap),
NewTableSpace, NewTableSpace,
InvalidOid, InvalidOid,
InvalidOid,
OldHeap->rd_rel->relowner, OldHeap->rd_rel->relowner,
tupdesc, tupdesc,
NIL, NIL,
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * 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) ...@@ -510,6 +510,7 @@ DefineRelation(CreateStmt *stmt, char relkind)
namespaceId, namespaceId,
tablespaceId, tablespaceId,
InvalidOid, InvalidOid,
InvalidOid,
GetUserId(), GetUserId(),
descriptor, descriptor,
list_concat(cookedDefaults, list_concat(cookedDefaults,
......
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
* *
* *
* IDENTIFICATION * 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) ...@@ -2925,6 +2925,7 @@ OpenIntoRel(QueryDesc *queryDesc)
namespaceId, namespaceId,
tablespaceId, tablespaceId,
InvalidOid, InvalidOid,
InvalidOid,
GetUserId(), GetUserId(),
tupdesc, tupdesc,
NIL, NIL,
......
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
* Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California * 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 @@ ...@@ -53,6 +53,6 @@
*/ */
/* yyyymmddN */ /* yyyymmddN */
#define CATALOG_VERSION_NO 200909221 #define CATALOG_VERSION_NO 200909261
#endif #endif
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
# #
# duplicate_oids # 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. # finds manually-assigned oids that are duplicated in the system tables.
# #
...@@ -10,11 +10,12 @@ ...@@ -10,11 +10,12 @@
# #
# note: we exclude BKI_BOOTSTRAP relations since they are expected to have # 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 | \ cat pg_*.h toasting.h indexing.h | \
egrep -v -e '^CATALOG\(.*BKI_BOOTSTRAP' | \ egrep -v -e '^CATALOG\(.*BKI_BOOTSTRAP' | \
sed -n -e 's/^DATA(insert *OID *= *\([0-9][0-9]*\).*$/\1/p' \ 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/^CATALOG([^,]*, *\([0-9][0-9]*\).*$/\1/p' \
-e 's/^DECLARE_INDEX([^,]*, *\([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' \ -e 's/^DECLARE_UNIQUE_INDEX([^,]*, *\([0-9][0-9]*\).*$/\1/p' \
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
* Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California * 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 @@ ...@@ -26,6 +26,7 @@
#define BKI_BOOTSTRAP #define BKI_BOOTSTRAP
#define BKI_SHARED_RELATION #define BKI_SHARED_RELATION
#define BKI_WITHOUT_OIDS #define BKI_WITHOUT_OIDS
#define BKI_ROWTYPE_OID(oid)
/* Declarations that provide the initial content of a catalog */ /* Declarations that provide the initial content of a catalog */
/* In C, these need to expand into some harmless, repeatable declaration */ /* In C, these need to expand into some harmless, repeatable declaration */
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California * 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, ...@@ -47,6 +47,7 @@ extern Oid heap_create_with_catalog(const char *relname,
Oid relnamespace, Oid relnamespace,
Oid reltablespace, Oid reltablespace,
Oid relid, Oid relid,
Oid reltypeid,
Oid ownerid, Oid ownerid,
TupleDesc tupdesc, TupleDesc tupdesc,
List *cooked_constraints, List *cooked_constraints,
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California * 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 * NOTES
* the genbki.sh script reads this file and generates .bki * the genbki.sh script reads this file and generates .bki
...@@ -35,8 +35,9 @@ ...@@ -35,8 +35,9 @@
* ---------------- * ----------------
*/ */
#define AttributeRelationId 1249 #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 */ Oid attrelid; /* OID of relation containing this attribute */
NameData attname; /* name of attribute */ NameData attname; /* name of attribute */
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California * 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 * NOTES
* the genbki.sh script reads this file and generates .bki * the genbki.sh script reads this file and generates .bki
...@@ -27,8 +27,9 @@ ...@@ -27,8 +27,9 @@
* ---------------- * ----------------
*/ */
#define RelationRelationId 1259 #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 */ NameData relname; /* class name */
Oid relnamespace; /* OID of namespace containing this class */ Oid relnamespace; /* OID of namespace containing this class */
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California * 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 * NOTES
* the genbki.sh script reads this file and generates .bki * the genbki.sh script reads this file and generates .bki
...@@ -27,8 +27,9 @@ ...@@ -27,8 +27,9 @@
* ---------------- * ----------------
*/ */
#define DatabaseRelationId 1262 #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 */ NameData datname; /* database name */
Oid datdba; /* owner of database */ Oid datdba; /* owner of database */
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California * 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 * NOTES
* The script catalog/genbki.sh reads this file and generates .bki * The script catalog/genbki.sh reads this file and generates .bki
...@@ -31,8 +31,9 @@ ...@@ -31,8 +31,9 @@
* ---------------- * ----------------
*/ */
#define ProcedureRelationId 1255 #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 */ NameData proname; /* procedure name */
Oid pronamespace; /* OID of namespace containing this proc */ Oid pronamespace; /* OID of namespace containing this proc */
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California * 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 * NOTES
* the genbki.sh script reads this file and generates .bki * the genbki.sh script reads this file and generates .bki
...@@ -32,8 +32,9 @@ ...@@ -32,8 +32,9 @@
* ---------------- * ----------------
*/ */
#define TypeRelationId 1247 #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 */ NameData typname; /* type name */
Oid typnamespace; /* OID of namespace containing this type */ 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 ...@@ -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"); DESCR("array of oids, used in system tables");
#define OIDVECTOROID 30 #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 = 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_ )); 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_ ));
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
# #
# unused_oids # 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 # finds blocks of manually-assignable oids that have not already been
# claimed by post_hackers. primarily useful for finding available # claimed by post_hackers. primarily useful for finding available
...@@ -25,11 +25,12 @@ export FIRSTOBJECTID ...@@ -25,11 +25,12 @@ export FIRSTOBJECTID
# this part (down to the uniq step) should match the duplicate_oids script # 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 # 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 | \ cat pg_*.h toasting.h indexing.h | \
egrep -v -e '^CATALOG\(.*BKI_BOOTSTRAP' | \ egrep -v -e '^CATALOG\(.*BKI_BOOTSTRAP' | \
sed -n -e 's/^DATA(insert *OID *= *\([0-9][0-9]*\).*$/\1/p' \ 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/^CATALOG([^,]*, *\([0-9][0-9]*\).*$/\1/p' \
-e 's/^DECLARE_INDEX([^,]*, *\([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' \ -e 's/^DECLARE_UNIQUE_INDEX([^,]*, *\([0-9][0-9]*\).*$/\1/p' \
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
# #
# #
# IDENTIFICATION # 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 ...@@ -79,6 +79,7 @@ sub genbki
my $bootstrap = ""; my $bootstrap = "";
my $shared_relation = ""; my $shared_relation = "";
my $without_oids = ""; my $without_oids = "";
my $rowtype_oid = "";
my $nc = 0; my $nc = 0;
my $inside = 0; my $inside = 0;
my @attr; my @attr;
...@@ -152,18 +153,22 @@ sub genbki ...@@ -152,18 +153,22 @@ sub genbki
my @fields = split /,/,$1; my @fields = split /,/,$1;
$catalog = $fields[0]; $catalog = $fields[0];
$oid = $fields[1]; $oid = $fields[1];
$bootstrap=$shared_relation=$without_oids=""; $bootstrap=$shared_relation=$without_oids=$rowtype_oid="";
if ($rest =~ /BKI_BOOTSTRAP/) if ($rest =~ /BKI_BOOTSTRAP/)
{ {
$bootstrap = "bootstrap "; $bootstrap = " bootstrap";
} }
if ($rest =~ /BKI_SHARED_RELATION/) if ($rest =~ /BKI_SHARED_RELATION/)
{ {
$shared_relation = "shared_relation "; $shared_relation = " shared_relation";
} }
if ($rest =~ /BKI_WITHOUT_OIDS/) 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++; $nc++;
$inside = 1; $inside = 1;
...@@ -176,7 +181,7 @@ sub genbki ...@@ -176,7 +181,7 @@ sub genbki
{ {
# Last line # 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; my $first = 1;
for (my $i = 0; $i <= $#attr; $i++) for (my $i = 0; $i <= $#attr; $i++)
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment