Index: src/backend/access/common/tupdesc.c
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/backend/access/common/tupdesc.c,v
retrieving revision 1.89
diff -c -r1.89 tupdesc.c
*** src/backend/access/common/tupdesc.c 2002/09/04 20:31:09 1.89
--- src/backend/access/common/tupdesc.c 2002/09/22 01:57:33
***************
*** 271,278 ****
return false;
if (attr1->attisdropped != attr2->attisdropped)
return false;
! if (attr1->attisinherited != attr2->attisinherited)
return false;
}
if (tupdesc1->constr != NULL)
{
--- 271,280 ----
return false;
if (attr1->attisdropped != attr2->attisdropped)
return false;
! if (attr1->attislocal != attr2->attislocal)
return false;
+ if (attr1->attinhcount != attr2->attinhcount)
+ return false;
}
if (tupdesc1->constr != NULL)
{
***************
*** 396,402 ****
att->attnotnull = false;
att->atthasdef = false;
att->attisdropped = false;
! att->attisinherited = false;
tuple = SearchSysCache(TYPEOID,
ObjectIdGetDatum(oidtypeid),
--- 398,405 ----
att->attnotnull = false;
att->atthasdef = false;
att->attisdropped = false;
! att->attislocal = true;
! att->attinhcount = 0;
tuple = SearchSysCache(TYPEOID,
ObjectIdGetDatum(oidtypeid),
***************
*** 543,549 ****
desc->attrs[attnum - 1]->atthasdef = true;
}
! desc->attrs[attnum - 1]->attisinherited = entry->is_inherited;
}
if (constr->has_not_null || ndef > 0)
--- 546,553 ----
desc->attrs[attnum - 1]->atthasdef = true;
}
! desc->attrs[attnum - 1]->attinhcount = entry->inhcount;
! desc->attrs[attnum - 1]->attislocal = entry->is_local;
}
if (constr->has_not_null || ndef > 0)
Index: src/backend/catalog/index.c
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/backend/catalog/index.c,v
retrieving revision 1.197
diff -c -r1.197 index.c
*** src/backend/catalog/index.c 2002/09/22 00:37:09 1.197
--- src/backend/catalog/index.c 2002/09/22 01:57:37
***************
*** 259,265 ****
to->attcacheoff = -1;
to->attnotnull = false;
to->atthasdef = false;
! to->attisinherited = false;
/*
* We do not yet have the correct relation OID for the index, so
--- 259,266 ----
to->attcacheoff = -1;
to->attnotnull = false;
to->atthasdef = false;
! to->attislocal = true;
! to->attinhcount = 0;
/*
* We do not yet have the correct relation OID for the index, so
Index: src/backend/commands/sequence.c
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/backend/commands/sequence.c,v
retrieving revision 1.87
diff -c -r1.87 sequence.c
*** src/backend/commands/sequence.c 2002/09/04 20:31:15 1.87
--- src/backend/commands/sequence.c 2002/09/22 01:57:40
***************
*** 127,133 ****
coldef = makeNode(ColumnDef);
coldef->typename = typnam;
! coldef->is_inherited = false;
coldef->is_not_null = true;
coldef->raw_default = NULL;
coldef->cooked_default = NULL;
--- 127,134 ----
coldef = makeNode(ColumnDef);
coldef->typename = typnam;
! coldef->is_local = true;
! coldef->inhcount = 0;
coldef->is_not_null = true;
coldef->raw_default = NULL;
coldef->cooked_default = NULL;
Index: src/backend/commands/tablecmds.c
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/backend/commands/tablecmds.c,v
retrieving revision 1.42
diff -c -r1.42 tablecmds.c
*** src/backend/commands/tablecmds.c 2002/09/22 00:37:09 1.42
--- src/backend/commands/tablecmds.c 2002/09/22 01:57:48
***************
*** 613,618 ****
--- 613,619 ----
def->is_not_null |= attribute->attnotnull;
/* Default and other constraints are handled below */
newattno[parent_attno - 1] = exist_attno;
+ def->inhcount++;
}
else
{
***************
*** 625,631 ****
typename->typeid = attribute->atttypid;
typename->typmod = attribute->atttypmod;
def->typename = typename;
! def->is_inherited = true;
def->is_not_null = attribute->attnotnull;
def->raw_default = NULL;
def->cooked_default = NULL;
--- 626,633 ----
typename->typeid = attribute->atttypid;
typename->typmod = attribute->atttypmod;
def->typename = typename;
! def->inhcount = 1;
! def->is_local = false;
def->is_not_null = attribute->attnotnull;
def->raw_default = NULL;
def->cooked_default = NULL;
***************
*** 758,763 ****
--- 760,767 ----
attributeName,
TypeNameToString(def->typename),
TypeNameToString(newdef->typename));
+ /* Mark the column as locally defined */
+ def->is_local = true;
/* Merge of NOT NULL constraints = OR 'em together */
def->is_not_null |= newdef->is_not_null;
/* If new def has a default, override previous default */
***************
*** 1155,1161 ****
* if the attribute is inherited, forbid the renaming, unless we are
* already inside a recursive rename.
*/
! if (attform->attisinherited && !recursing)
elog(ERROR, "renameatt: inherited attribute \"%s\" may not be renamed",
oldattname);
--- 1159,1165 ----
* if the attribute is inherited, forbid the renaming, unless we are
* already inside a recursive rename.
*/
! if (attform->attinhcount > 0 && !recursing)
elog(ERROR, "renameatt: inherited attribute \"%s\" may not be renamed",
oldattname);
***************
*** 1628,1634 ****
*children;
ColumnDef *colDefChild = copyObject(colDef);
! colDefChild->is_inherited = true;
/* this routine is actually in the planner */
children = find_all_inheritors(myrelid);
--- 1632,1639 ----
*children;
ColumnDef *colDefChild = copyObject(colDef);
! colDefChild->inhcount++;
! colDefChild->is_local = false;
/* this routine is actually in the planner */
children = find_all_inheritors(myrelid);
***************
*** 1742,1748 ****
attribute->atthasdef = (colDef->raw_default != NULL ||
colDef->cooked_default != NULL);
attribute->attisdropped = false;
! attribute->attisinherited = colDef->is_inherited;
ReleaseSysCache(typeTuple);
--- 1747,1754 ----
attribute->atthasdef = (colDef->raw_default != NULL ||
colDef->cooked_default != NULL);
attribute->attisdropped = false;
! attribute->attislocal = colDef->is_local;
! attribute->attinhcount = colDef->inhcount;
ReleaseSysCache(typeTuple);
***************
*** 2373,2385 ****
RelationGetRelationName(rel));
/* Don't drop inherited columns */
! if (tupleDesc->attrs[attnum - 1]->attisinherited && !recursing)
elog(ERROR, "ALTER TABLE: Cannot drop inherited column \"%s\"",
colName);
/*
* If we are asked to drop ONLY in this table (no recursion), we need
! * to mark the inheritors' attribute as non-inherited.
*/
if (!recurse && !recursing)
{
--- 2379,2392 ----
RelationGetRelationName(rel));
/* Don't drop inherited columns */
! if (tupleDesc->attrs[attnum - 1]->attinhcount > 0 && !recursing)
elog(ERROR, "ALTER TABLE: Cannot drop inherited column \"%s\"",
colName);
/*
* If we are asked to drop ONLY in this table (no recursion), we need
! * to substract one from inheritors' attinhcount. When it gets to zero,
! * we need to set attislocal to true.
*/
if (!recurse && !recursing)
{
***************
*** 2396,2401 ****
--- 2403,2409 ----
Oid childrelid = lfirsti(child);
Relation childrel;
HeapTuple tuple;
+ Form_pg_attribute attform;
childrel = heap_open(childrelid, AccessExclusiveLock);
***************
*** 2404,2410 ****
elog(ERROR, "ALTER TABLE: relation %u has no column \"%s\"",
childrelid, colName);
! ((Form_pg_attribute) GETSTRUCT(tuple))->attisinherited = false;
simple_heap_update(attr_rel, &tuple->t_self, tuple);
--- 2412,2421 ----
elog(ERROR, "ALTER TABLE: relation %u has no column \"%s\"",
childrelid, colName);
! attform = (Form_pg_attribute) GETSTRUCT(tuple);
! attform->attinhcount--;
! if (attform->attinhcount == 0)
! attform->attislocal = true;
simple_heap_update(attr_rel, &tuple->t_self, tuple);
***************
*** 2412,2417 ****
--- 2423,2429 ----
CatalogUpdateIndexes(attr_rel, tuple);
heap_close(childrel, NoLock);
+ heap_freetuple(tuple);
}
heap_close(attr_rel, RowExclusiveLock);
}
***************
*** 2425,2444 ****
*children;
/* this routine is actually in the planner */
! children = find_all_inheritors(myrelid);
/*
! * find_all_inheritors does the recursive search of the
! * inheritance hierarchy, so all we have to do is process all of
! * the relids in the list that it returns.
*/
foreach(child, children)
{
Oid childrelid = lfirsti(child);
if (childrelid == myrelid)
continue;
! AlterTableDropColumn(childrelid, false, true, colName, behavior);
}
}
--- 2437,2490 ----
*children;
/* this routine is actually in the planner */
! children = find_inheritance_children(myrelid);
/*
! * find_inheritance_children only gets direct inheritors;
! * we'll have to check whether further recursion is needed
! * on a case by case basis.
*/
foreach(child, children)
{
Oid childrelid = lfirsti(child);
+ HeapTuple tuple;
+ Form_pg_attribute attform;
if (childrelid == myrelid)
continue;
!
! tuple = SearchSysCacheCopyAttName(childrelid, colName);
! if (!HeapTupleIsValid(tuple)) /* this shouldn't happen */
! elog(ERROR, "ALTER TABLE: relation %u does not have column %s",
! childrelid, colName);
! attform = (Form_pg_attribute) GETSTRUCT(tuple);
!
! /*
! * If attinhcount is 1 and attislocal is false, the column
! * should be recursively dropped.
! */
! if (attform->attinhcount == 1 && !attform->attislocal)
! AlterTableDropColumn(childrelid, true, true, colName, behavior);
! else
! {
! /*
! * Decrease attinhcount. If it reaches zero, attislocal
! * should be marked true.
! */
! Relation attr_rel;
! attr_rel = heap_openr(AttributeRelationName, RowExclusiveLock);
!
! attform->attinhcount--;
! if (attform->attinhcount == 0)
! attform->attislocal = true;
! simple_heap_update(attr_rel, &tuple->t_self, tuple);
!
! /* keep the system catalog indexes current */
! CatalogUpdateIndexes(attr_rel, tuple);
! heap_close(attr_rel, RowExclusiveLock);
! }
!
! heap_freetuple(tuple);
}
}
Index: src/backend/commands/view.c
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/backend/commands/view.c,v
retrieving revision 1.71
diff -c -r1.71 view.c
*** src/backend/commands/view.c 2002/09/04 20:31:17 1.71
--- src/backend/commands/view.c 2002/09/22 01:57:50
***************
*** 71,77 ****
typename->typmod = res->restypmod;
def->typename = typename;
! def->is_inherited = false;
def->is_not_null = false;
def->raw_default = NULL;
def->cooked_default = NULL;
--- 71,78 ----
typename->typmod = res->restypmod;
def->typename = typename;
! def->is_local = true;
! def->inhcount = 0;
def->is_not_null = false;
def->raw_default = NULL;
def->cooked_default = NULL;
Index: src/backend/nodes/copyfuncs.c
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/backend/nodes/copyfuncs.c,v
retrieving revision 1.212
diff -c -r1.212 copyfuncs.c
*** src/backend/nodes/copyfuncs.c 2002/09/18 21:35:20 1.212
--- src/backend/nodes/copyfuncs.c 2002/09/22 01:57:56
***************
*** 1732,1738 ****
if (from->colname)
newnode->colname = pstrdup(from->colname);
Node_Copy(from, newnode, typename);
! newnode->is_inherited = from->is_inherited;
newnode->is_not_null = from->is_not_null;
Node_Copy(from, newnode, raw_default);
if (from->cooked_default)
--- 1732,1739 ----
if (from->colname)
newnode->colname = pstrdup(from->colname);
Node_Copy(from, newnode, typename);
! newnode->inhcount = from->inhcount;
! newnode->is_local = from->is_local;
newnode->is_not_null = from->is_not_null;
Node_Copy(from, newnode, raw_default);
if (from->cooked_default)
Index: src/backend/nodes/equalfuncs.c
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/backend/nodes/equalfuncs.c,v
retrieving revision 1.159
diff -c -r1.159 equalfuncs.c
*** src/backend/nodes/equalfuncs.c 2002/09/18 21:35:20 1.159
--- src/backend/nodes/equalfuncs.c 2002/09/22 01:58:00
***************
*** 1769,1775 ****
return false;
if (!equal(a->typename, b->typename))
return false;
! if (a->is_inherited != b->is_inherited)
return false;
if (a->is_not_null != b->is_not_null)
return false;
--- 1769,1777 ----
return false;
if (!equal(a->typename, b->typename))
return false;
! if (a->is_local != b->is_local)
! return false;
! if (a->inhcount != b->inhcount)
return false;
if (a->is_not_null != b->is_not_null)
return false;
Index: src/backend/nodes/outfuncs.c
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/backend/nodes/outfuncs.c,v
retrieving revision 1.174
diff -c -r1.174 outfuncs.c
*** src/backend/nodes/outfuncs.c 2002/09/18 21:35:21 1.174
--- src/backend/nodes/outfuncs.c 2002/09/22 01:58:04
***************
*** 176,184 ****
_outToken(str, node->colname);
appendStringInfo(str, " :typename ");
_outNode(str, node->typename);
! appendStringInfo(str, " :is_inherited %s :is_not_null %s :raw_default ",
! booltostr(node->is_inherited),
! booltostr(node->is_not_null));
_outNode(str, node->raw_default);
appendStringInfo(str, " :cooked_default ");
_outToken(str, node->cooked_default);
--- 176,185 ----
_outToken(str, node->colname);
appendStringInfo(str, " :typename ");
_outNode(str, node->typename);
! appendStringInfo(str, " :is_local %s :is_not_null %s :inhcount %d :raw_default ",
! booltostr(node->is_local),
! booltostr(node->is_not_null),
! node->inhcount);
_outNode(str, node->raw_default);
appendStringInfo(str, " :cooked_default ");
_outToken(str, node->cooked_default);
Index: src/backend/nodes/readfuncs.c
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/backend/nodes/readfuncs.c,v
retrieving revision 1.133
diff -c -r1.133 readfuncs.c
*** src/backend/nodes/readfuncs.c 2002/09/18 21:35:21 1.133
--- src/backend/nodes/readfuncs.c 2002/09/22 01:58:08
***************
*** 1526,1538 ****
token = pg_strtok(&length); /* eat :typename */
local_node->typename = nodeRead(true); /* now read it */
! token = pg_strtok(&length); /* eat :is_inherited */
! token = pg_strtok(&length); /* get :is_inherited */
! local_node->is_inherited = strtobool(token);
token = pg_strtok(&length); /* eat :is_not_null */
token = pg_strtok(&length); /* get :is_not_null */
local_node->is_not_null = strtobool(token);
token = pg_strtok(&length); /* eat :raw_default */
local_node->raw_default = nodeRead(true); /* now read it */
--- 1526,1542 ----
token = pg_strtok(&length); /* eat :typename */
local_node->typename = nodeRead(true); /* now read it */
! token = pg_strtok(&length); /* eat :is_local */
! token = pg_strtok(&length); /* get is_local */
! local_node->is_local = strtobool(token);
token = pg_strtok(&length); /* eat :is_not_null */
token = pg_strtok(&length); /* get :is_not_null */
local_node->is_not_null = strtobool(token);
+
+ token = pg_strtok(&length); /* eat :inhcount */
+ token = pg_strtok(&length); /* get inhcount */
+ local_node->inhcount = atoi(token);
token = pg_strtok(&length); /* eat :raw_default */
local_node->raw_default = nodeRead(true); /* now read it */
Index: src/backend/parser/gram.y
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/backend/parser/gram.y,v
retrieving revision 2.367
diff -c -r2.367 gram.y
*** src/backend/parser/gram.y 2002/09/18 21:35:21 2.367
--- src/backend/parser/gram.y 2002/09/22 01:58:22
***************
*** 1453,1458 ****
--- 1453,1459 ----
n->colname = $1;
n->typename = $2;
n->constraints = $3;
+ n->is_local = true;
if ($4 != NULL)
elog(NOTICE,
Index: src/include/catalog/pg_attribute.h
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/include/catalog/pg_attribute.h,v
retrieving revision 1.99
diff -c -r1.99 pg_attribute.h
*** src/include/catalog/pg_attribute.h 2002/09/04 20:31:37 1.99
--- src/include/catalog/pg_attribute.h 2002/09/22 01:58:25
***************
*** 147,154 ****
/* Is dropped (ie, logically invisible) or not */
bool attisdropped;
! /* Is inherited from a parent relation */
! bool attisinherited;
} FormData_pg_attribute;
/*
--- 147,157 ----
/* Is dropped (ie, logically invisible) or not */
bool attisdropped;
! /* Is locally defined (i.e. not inherited) */
! bool attislocal;
!
! /* Number of parents this attribute has */
! int2 attinhcount;
} FormData_pg_attribute;
/*
***************
*** 157,163 ****
* because of alignment padding at the end of the struct.)
*/
#define ATTRIBUTE_TUPLE_SIZE \
! (offsetof(FormData_pg_attribute,attisinherited) + sizeof(bool))
/* ----------------
* Form_pg_attribute corresponds to a pointer to a tuple with
--- 160,166 ----
* because of alignment padding at the end of the struct.)
*/
#define ATTRIBUTE_TUPLE_SIZE \
! (offsetof(FormData_pg_attribute,attinhcount) + sizeof(int2))
/* ----------------
* Form_pg_attribute corresponds to a pointer to a tuple with
***************
*** 171,177 ****
* ----------------
*/
! #define Natts_pg_attribute 17
#define Anum_pg_attribute_attrelid 1
#define Anum_pg_attribute_attname 2
#define Anum_pg_attribute_atttypid 3
--- 174,180 ----
* ----------------
*/
! #define Natts_pg_attribute 18
#define Anum_pg_attribute_attrelid 1
#define Anum_pg_attribute_attname 2
#define Anum_pg_attribute_atttypid 3
***************
*** 188,194 ****
#define Anum_pg_attribute_attnotnull 14
#define Anum_pg_attribute_atthasdef 15
#define Anum_pg_attribute_attisdropped 16
! #define Anum_pg_attribute_attisinherited 17
--- 191,198 ----
#define Anum_pg_attribute_attnotnull 14
#define Anum_pg_attribute_atthasdef 15
#define Anum_pg_attribute_attisdropped 16
! #define Anum_pg_attribute_attislocal 17
! #define Anum_pg_attribute_attinhcount 18
***************
*** 219,486 ****
* ----------------
*/
#define Schema_pg_type \
! { 1247, {"typname"}, 19, -1, NAMEDATALEN, 1, 0, -1, -1, false, 'p', false, 'i', true, false, false, false }, \
! { 1247, {"typnamespace"}, 26, -1, 4, 2, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1247, {"typowner"}, 23, 0, 4, 3, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1247, {"typlen"}, 21, 0, 2, 4, 0, -1, -1, true, 'p', false, 's', true, false, false, false }, \
! { 1247, {"typbyval"}, 16, 0, 1, 5, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1247, {"typtype"}, 18, -1, 1, 6, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1247, {"typisdefined"}, 16, -1, 1, 7, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1247, {"typdelim"}, 18, 0, 1, 8, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1247, {"typrelid"}, 26, 0, 4, 9, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1247, {"typelem"}, 26, 0, 4, 10, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1247, {"typinput"}, 24, 0, 4, 11, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1247, {"typoutput"}, 24, 0, 4, 12, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1247, {"typalign"}, 18, 0, 1, 13, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1247, {"typstorage"}, 18, 0, 1, 14, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1247, {"typnotnull"}, 16, 0, 1, 15, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1247, {"typbasetype"}, 26, 0, 4, 16, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1247, {"typtypmod"}, 23, 0, 4, 17, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1247, {"typndims"}, 23, 0, 4, 18, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1247, {"typdefaultbin"}, 25, 0, -1, 19, 0, -1, -1, false, 'x', false, 'i', false, false, false, false }, \
! { 1247, {"typdefault"}, 25, 0, -1, 20, 0, -1, -1, false, 'x', false, 'i', false, false, false, false }
!
!
! DATA(insert ( 1247 typname 19 -1 NAMEDATALEN 1 0 -1 -1 f p f i t f f f));
! DATA(insert ( 1247 typnamespace 26 -1 4 2 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1247 typowner 23 0 4 3 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1247 typlen 21 0 2 4 0 -1 -1 t p f s t f f f));
! DATA(insert ( 1247 typbyval 16 0 1 5 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1247 typtype 18 -1 1 6 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1247 typisdefined 16 -1 1 7 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1247 typdelim 18 0 1 8 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1247 typrelid 26 0 4 9 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1247 typelem 26 0 4 10 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1247 typinput 24 0 4 11 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1247 typoutput 24 0 4 12 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1247 typalign 18 0 1 13 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1247 typstorage 18 0 1 14 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1247 typnotnull 16 0 1 15 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1247 typbasetype 26 0 4 16 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1247 typtypmod 23 0 4 17 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1247 typndims 23 0 4 18 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1247 typdefaultbin 25 0 -1 19 0 -1 -1 f x f i f f f f));
! DATA(insert ( 1247 typdefault 25 0 -1 20 0 -1 -1 f x f i f f f f));
! DATA(insert ( 1247 ctid 27 0 6 -1 0 -1 -1 f p f i t f f f));
! DATA(insert ( 1247 oid 26 0 4 -2 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1247 xmin 28 0 4 -3 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1247 cmin 29 0 4 -4 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1247 xmax 28 0 4 -5 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1247 cmax 29 0 4 -6 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1247 tableoid 26 0 4 -7 0 -1 -1 t p f i t f f f));
/* ----------------
* pg_database
* ----------------
*/
! DATA(insert ( 1262 datname 19 0 NAMEDATALEN 1 0 -1 -1 f p f i t f f f));
! DATA(insert ( 1262 datdba 23 0 4 2 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1262 encoding 23 0 4 3 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1262 datistemplate 16 0 1 4 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1262 datallowconn 16 0 1 5 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1262 datlastsysoid 26 0 4 6 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1262 datvacuumxid 28 0 4 7 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1262 datfrozenxid 28 0 4 8 0 -1 -1 t p f i t f f f));
/* do not mark datpath as toastable; GetRawDatabaseInfo won't cope */
! DATA(insert ( 1262 datpath 25 0 -1 9 0 -1 -1 f p f i t f f f));
! DATA(insert ( 1262 datconfig 1009 0 -1 10 0 -1 -1 f x f i f f f f));
! DATA(insert ( 1262 datacl 1034 0 -1 11 0 -1 -1 f x f i f f f f));
! DATA(insert ( 1262 ctid 27 0 6 -1 0 -1 -1 f p f i t f f f));
! DATA(insert ( 1262 oid 26 0 4 -2 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1262 xmin 28 0 4 -3 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1262 cmin 29 0 4 -4 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1262 xmax 28 0 4 -5 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1262 cmax 29 0 4 -6 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1262 tableoid 26 0 4 -7 0 -1 -1 t p f i t f f f));
/* ----------------
* pg_proc
* ----------------
*/
#define Schema_pg_proc \
! { 1255, {"proname"}, 19, -1, NAMEDATALEN, 1, 0, -1, -1, false, 'p', false, 'i', true, false, false, false }, \
! { 1255, {"pronamespace"}, 26, -1, 4, 2, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1255, {"proowner"}, 23, 0, 4, 3, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1255, {"prolang"}, 26, 0, 4, 4, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1255, {"proisagg"}, 16, -1, 1, 5, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1255, {"prosecdef"}, 16, 0, 1, 6, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1255, {"proisstrict"}, 16, 0, 1, 7, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1255, {"proretset"}, 16, 0, 1, 8, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1255, {"provolatile"}, 18, 0, 1, 9, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1255, {"pronargs"}, 21, 0, 2, 10, 0, -1, -1, true, 'p', false, 's', true, false, false, false }, \
! { 1255, {"prorettype"}, 26, 0, 4, 11, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1255, {"proargtypes"}, 30, 0, INDEX_MAX_KEYS*4, 12, 0, -1, -1, false, 'p', false, 'i', true, false, false, false }, \
! { 1255, {"prosrc"}, 25, 0, -1, 13, 0, -1, -1, false, 'x', false, 'i', false, false, false, false }, \
! { 1255, {"probin"}, 17, 0, -1, 14, 0, -1, -1, false, 'x', false, 'i', false, false, false, false }, \
! { 1255, {"proacl"}, 1034, 0, -1, 15, 0, -1, -1, false, 'x', false, 'i', false, false, false, false }
!
! DATA(insert ( 1255 proname 19 -1 NAMEDATALEN 1 0 -1 -1 f p f i t f f f));
! DATA(insert ( 1255 pronamespace 26 -1 4 2 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1255 proowner 23 0 4 3 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1255 prolang 26 0 4 4 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1255 proisagg 16 -1 1 5 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1255 prosecdef 16 0 1 6 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1255 proisstrict 16 0 1 7 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1255 proretset 16 0 1 8 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1255 provolatile 18 0 1 9 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1255 pronargs 21 0 2 10 0 -1 -1 t p f s t f f f));
! DATA(insert ( 1255 prorettype 26 0 4 11 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1255 proargtypes 30 0 INDEX_MAX_KEYS*4 12 0 -1 -1 f p f i t f f f));
! DATA(insert ( 1255 prosrc 25 0 -1 13 0 -1 -1 f x f i f f f f));
! DATA(insert ( 1255 probin 17 0 -1 14 0 -1 -1 f x f i f f f f));
! DATA(insert ( 1255 proacl 1034 0 -1 15 0 -1 -1 f x f i f f f f));
! DATA(insert ( 1255 ctid 27 0 6 -1 0 -1 -1 f p f i t f f f));
! DATA(insert ( 1255 oid 26 0 4 -2 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1255 xmin 28 0 4 -3 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1255 cmin 29 0 4 -4 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1255 xmax 28 0 4 -5 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1255 cmax 29 0 4 -6 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1255 tableoid 26 0 4 -7 0 -1 -1 t p f i t f f f));
/* ----------------
* pg_shadow
* ----------------
*/
! DATA(insert ( 1260 usename 19 -1 NAMEDATALEN 1 0 -1 -1 f p f i t f f f));
! DATA(insert ( 1260 usesysid 23 -1 4 2 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1260 usecreatedb 16 0 1 3 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1260 usesuper 16 0 1 4 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1260 usecatupd 16 0 1 5 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1260 passwd 25 0 -1 6 0 -1 -1 f x f i f f f f));
! DATA(insert ( 1260 valuntil 702 0 4 7 0 -1 -1 t p f i f f f f));
! DATA(insert ( 1260 useconfig 1009 0 -1 8 0 -1 -1 f x f i f f f f));
! DATA(insert ( 1260 ctid 27 0 6 -1 0 -1 -1 f p f i t f f f));
/* no OIDs in pg_shadow */
! DATA(insert ( 1260 xmin 28 0 4 -3 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1260 cmin 29 0 4 -4 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1260 xmax 28 0 4 -5 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1260 cmax 29 0 4 -6 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1260 tableoid 26 0 4 -7 0 -1 -1 t p f i t f f f));
/* ----------------
* pg_group
* ----------------
*/
! DATA(insert ( 1261 groname 19 -1 NAMEDATALEN 1 0 -1 -1 f p f i t f f f));
! DATA(insert ( 1261 grosysid 23 -1 4 2 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1261 grolist 1007 0 -1 3 0 -1 -1 f x f i f f f f));
! DATA(insert ( 1261 ctid 27 0 6 -1 0 -1 -1 f p f i t f f f));
/* no OIDs in pg_group */
! DATA(insert ( 1261 xmin 28 0 4 -3 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1261 cmin 29 0 4 -4 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1261 xmax 28 0 4 -5 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1261 cmax 29 0 4 -6 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1261 tableoid 26 0 4 -7 0 -1 -1 t p f i t f f f));
/* ----------------
* pg_attribute
* ----------------
*/
#define Schema_pg_attribute \
! { 1249, {"attrelid"}, 26, -1, 4, 1, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1249, {"attname"}, 19, -1, NAMEDATALEN, 2, 0, -1, -1, false, 'p', false, 'i', true, false, false, false }, \
! { 1249, {"atttypid"}, 26, 0, 4, 3, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1249, {"attstattarget"}, 23, 0, 4, 4, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1249, {"attlen"}, 21, 0, 2, 5, 0, -1, -1, true, 'p', false, 's', true, false, false, false }, \
! { 1249, {"attnum"}, 21, 0, 2, 6, 0, -1, -1, true, 'p', false, 's', true, false, false, false }, \
! { 1249, {"attndims"}, 23, 0, 4, 7, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1249, {"attcacheoff"}, 23, 0, 4, 8, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1249, {"atttypmod"}, 23, 0, 4, 9, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1249, {"attbyval"}, 16, 0, 1, 10, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1249, {"attstorage"}, 18, 0, 1, 11, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1249, {"attisset"}, 16, 0, 1, 12, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1249, {"attalign"}, 18, 0, 1, 13, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1249, {"attnotnull"}, 16, 0, 1, 14, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1249, {"atthasdef"}, 16, 0, 1, 15, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1249, {"attisdropped"}, 16, 0, 1, 16, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1249, {"attisinherited"},16,0, 1, 17, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }
!
! DATA(insert ( 1249 attrelid 26 -1 4 1 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1249 attname 19 -1 NAMEDATALEN 2 0 -1 -1 f p f i t f f f));
! DATA(insert ( 1249 atttypid 26 0 4 3 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1249 attstattarget 23 0 4 4 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1249 attlen 21 0 2 5 0 -1 -1 t p f s t f f f));
! DATA(insert ( 1249 attnum 21 0 2 6 0 -1 -1 t p f s t f f f));
! DATA(insert ( 1249 attndims 23 0 4 7 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1249 attcacheoff 23 0 4 8 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1249 atttypmod 23 0 4 9 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1249 attbyval 16 0 1 10 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1249 attstorage 18 0 1 11 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1249 attisset 16 0 1 12 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1249 attalign 18 0 1 13 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1249 attnotnull 16 0 1 14 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1249 atthasdef 16 0 1 15 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1249 attisdropped 16 0 1 16 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1249 attisinherited 16 0 1 17 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1249 ctid 27 0 6 -1 0 -1 -1 f p f i t f f f));
/* no OIDs in pg_attribute */
! DATA(insert ( 1249 xmin 28 0 4 -3 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1249 cmin 29 0 4 -4 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1249 xmax 28 0 4 -5 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1249 cmax 29 0 4 -6 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1249 tableoid 26 0 4 -7 0 -1 -1 t p f i t f f f));
/* ----------------
* pg_class
* ----------------
*/
#define Schema_pg_class \
! { 1259, {"relname"}, 19, -1, NAMEDATALEN, 1, 0, -1, -1, false, 'p', false, 'i', true, false, false, false }, \
! { 1259, {"relnamespace"}, 26, -1, 4, 2, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1259, {"reltype"}, 26, 0, 4, 3, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1259, {"relowner"}, 23, 0, 4, 4, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1259, {"relam"}, 26, 0, 4, 5, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1259, {"relfilenode"}, 26, 0, 4, 6, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1259, {"relpages"}, 23, 0, 4, 7, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1259, {"reltuples"}, 700, 0, 4, 8, 0, -1, -1, false, 'p', false, 'i', true, false, false, false }, \
! { 1259, {"reltoastrelid"}, 26, 0, 4, 9, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1259, {"reltoastidxid"}, 26, 0, 4, 10, 0, -1, -1, true, 'p', false, 'i', true, false, false, false }, \
! { 1259, {"relhasindex"}, 16, 0, 1, 11, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1259, {"relisshared"}, 16, 0, 1, 12, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1259, {"relkind"}, 18, -1, 1, 13, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1259, {"relnatts"}, 21, 0, 2, 14, 0, -1, -1, true, 'p', false, 's', true, false, false, false }, \
! { 1259, {"relchecks"}, 21, 0, 2, 15, 0, -1, -1, true, 'p', false, 's', true, false, false, false }, \
! { 1259, {"reltriggers"}, 21, 0, 2, 16, 0, -1, -1, true, 'p', false, 's', true, false, false, false }, \
! { 1259, {"relukeys"}, 21, 0, 2, 17, 0, -1, -1, true, 'p', false, 's', true, false, false, false }, \
! { 1259, {"relfkeys"}, 21, 0, 2, 18, 0, -1, -1, true, 'p', false, 's', true, false, false, false }, \
! { 1259, {"relrefs"}, 21, 0, 2, 19, 0, -1, -1, true, 'p', false, 's', true, false, false, false }, \
! { 1259, {"relhasoids"}, 16, 0, 1, 20, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1259, {"relhaspkey"}, 16, 0, 1, 21, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1259, {"relhasrules"}, 16, 0, 1, 22, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1259, {"relhassubclass"},16, 0, 1, 23, 0, -1, -1, true, 'p', false, 'c', true, false, false, false }, \
! { 1259, {"relacl"}, 1034, 0, -1, 24, 0, -1, -1, false, 'x', false, 'i', false, false, false, false }
!
! DATA(insert ( 1259 relname 19 -1 NAMEDATALEN 1 0 -1 -1 f p f i t f f f));
! DATA(insert ( 1259 relnamespace 26 -1 4 2 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1259 reltype 26 0 4 3 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1259 relowner 23 0 4 4 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1259 relam 26 0 4 5 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1259 relfilenode 26 0 4 6 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1259 relpages 23 0 4 7 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1259 reltuples 700 0 4 8 0 -1 -1 f p f i t f f f));
! DATA(insert ( 1259 reltoastrelid 26 0 4 9 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1259 reltoastidxid 26 0 4 10 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1259 relhasindex 16 0 1 11 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1259 relisshared 16 0 1 12 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1259 relkind 18 -1 1 13 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1259 relnatts 21 0 2 14 0 -1 -1 t p f s t f f f));
! DATA(insert ( 1259 relchecks 21 0 2 15 0 -1 -1 t p f s t f f f));
! DATA(insert ( 1259 reltriggers 21 0 2 16 0 -1 -1 t p f s t f f f));
! DATA(insert ( 1259 relukeys 21 0 2 17 0 -1 -1 t p f s t f f f));
! DATA(insert ( 1259 relfkeys 21 0 2 18 0 -1 -1 t p f s t f f f));
! DATA(insert ( 1259 relrefs 21 0 2 19 0 -1 -1 t p f s t f f f));
! DATA(insert ( 1259 relhasoids 16 0 1 20 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1259 relhaspkey 16 0 1 21 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1259 relhasrules 16 0 1 22 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1259 relhassubclass 16 0 1 23 0 -1 -1 t p f c t f f f));
! DATA(insert ( 1259 relacl 1034 0 -1 24 0 -1 -1 f x f i f f f f));
! DATA(insert ( 1259 ctid 27 0 6 -1 0 -1 -1 f p f i t f f f));
! DATA(insert ( 1259 oid 26 0 4 -2 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1259 xmin 28 0 4 -3 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1259 cmin 29 0 4 -4 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1259 xmax 28 0 4 -5 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1259 cmax 29 0 4 -6 0 -1 -1 t p f i t f f f));
! DATA(insert ( 1259 tableoid 26 0 4 -7 0 -1 -1 t p f i t f f f));
/* ----------------
* pg_xactlock - this is not a real relation, but is a placeholder
--- 223,492 ----
* ----------------
*/
#define Schema_pg_type \
! { 1247, {"typname"}, 19, -1, NAMEDATALEN, 1, 0, -1, -1, false, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1247, {"typnamespace"}, 26, -1, 4, 2, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1247, {"typowner"}, 23, 0, 4, 3, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1247, {"typlen"}, 21, 0, 2, 4, 0, -1, -1, true, 'p', false, 's', true, false, false, true, 0 }, \
! { 1247, {"typbyval"}, 16, 0, 1, 5, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1247, {"typtype"}, 18, -1, 1, 6, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1247, {"typisdefined"}, 16, -1, 1, 7, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1247, {"typdelim"}, 18, 0, 1, 8, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1247, {"typrelid"}, 26, 0, 4, 9, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1247, {"typelem"}, 26, 0, 4, 10, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1247, {"typinput"}, 24, 0, 4, 11, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1247, {"typoutput"}, 24, 0, 4, 12, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1247, {"typalign"}, 18, 0, 1, 13, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1247, {"typstorage"}, 18, 0, 1, 14, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1247, {"typnotnull"}, 16, 0, 1, 15, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1247, {"typbasetype"}, 26, 0, 4, 16, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1247, {"typtypmod"}, 23, 0, 4, 17, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1247, {"typndims"}, 23, 0, 4, 18, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1247, {"typdefaultbin"}, 25, 0, -1, 19, 0, -1, -1, false, 'x', false, 'i', false, false, false, true, 0 }, \
! { 1247, {"typdefault"}, 25, 0, -1, 20, 0, -1, -1, false, 'x', false, 'i', false, false, false, true, 0 }
!
!
! DATA(insert ( 1247 typname 19 -1 NAMEDATALEN 1 0 -1 -1 f p f i t f f t 0));
! DATA(insert ( 1247 typnamespace 26 -1 4 2 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 typowner 23 0 4 3 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 typlen 21 0 2 4 0 -1 -1 t p f s t f f t 0));
! DATA(insert ( 1247 typbyval 16 0 1 5 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1247 typtype 18 -1 1 6 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1247 typisdefined 16 -1 1 7 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1247 typdelim 18 0 1 8 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1247 typrelid 26 0 4 9 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 typelem 26 0 4 10 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 typinput 24 0 4 11 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 typoutput 24 0 4 12 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 typalign 18 0 1 13 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1247 typstorage 18 0 1 14 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1247 typnotnull 16 0 1 15 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1247 typbasetype 26 0 4 16 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 typtypmod 23 0 4 17 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 typndims 23 0 4 18 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 typdefaultbin 25 0 -1 19 0 -1 -1 f x f i f f f t 0));
! DATA(insert ( 1247 typdefault 25 0 -1 20 0 -1 -1 f x f i f f f t 0));
! DATA(insert ( 1247 ctid 27 0 6 -1 0 -1 -1 f p f i t f f t 0));
! DATA(insert ( 1247 oid 26 0 4 -2 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 xmin 28 0 4 -3 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 cmin 29 0 4 -4 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 xmax 28 0 4 -5 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 cmax 29 0 4 -6 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1247 tableoid 26 0 4 -7 0 -1 -1 t p f i t f f t 0));
/* ----------------
* pg_database
* ----------------
*/
! DATA(insert ( 1262 datname 19 0 NAMEDATALEN 1 0 -1 -1 f p f i t f f t 0));
! DATA(insert ( 1262 datdba 23 0 4 2 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1262 encoding 23 0 4 3 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1262 datistemplate 16 0 1 4 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1262 datallowconn 16 0 1 5 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1262 datlastsysoid 26 0 4 6 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1262 datvacuumxid 28 0 4 7 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1262 datfrozenxid 28 0 4 8 0 -1 -1 t p f i t f f t 0));
/* do not mark datpath as toastable; GetRawDatabaseInfo won't cope */
! DATA(insert ( 1262 datpath 25 0 -1 9 0 -1 -1 f p f i t f f t 0));
! DATA(insert ( 1262 datconfig 1009 0 -1 10 0 -1 -1 f x f i f f f t 0));
! DATA(insert ( 1262 datacl 1034 0 -1 11 0 -1 -1 f x f i f f f t 0));
! DATA(insert ( 1262 ctid 27 0 6 -1 0 -1 -1 f p f i t f f t 0));
! DATA(insert ( 1262 oid 26 0 4 -2 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1262 xmin 28 0 4 -3 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1262 cmin 29 0 4 -4 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1262 xmax 28 0 4 -5 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1262 cmax 29 0 4 -6 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1262 tableoid 26 0 4 -7 0 -1 -1 t p f i t f f t 0));
/* ----------------
* pg_proc
* ----------------
*/
#define Schema_pg_proc \
! { 1255, {"proname"}, 19, -1, NAMEDATALEN, 1, 0, -1, -1, false, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1255, {"pronamespace"}, 26, -1, 4, 2, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1255, {"proowner"}, 23, 0, 4, 3, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1255, {"prolang"}, 26, 0, 4, 4, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1255, {"proisagg"}, 16, -1, 1, 5, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1255, {"prosecdef"}, 16, 0, 1, 6, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1255, {"proisstrict"}, 16, 0, 1, 7, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1255, {"proretset"}, 16, 0, 1, 8, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1255, {"provolatile"}, 18, 0, 1, 9, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1255, {"pronargs"}, 21, 0, 2, 10, 0, -1, -1, true, 'p', false, 's', true, false, false, true, 0 }, \
! { 1255, {"prorettype"}, 26, 0, 4, 11, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1255, {"proargtypes"}, 30, 0, INDEX_MAX_KEYS*4, 12, 0, -1, -1, false, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1255, {"prosrc"}, 25, 0, -1, 13, 0, -1, -1, false, 'x', false, 'i', false, false, false, true, 0 }, \
! { 1255, {"probin"}, 17, 0, -1, 14, 0, -1, -1, false, 'x', false, 'i', false, false, false, true, 0 }, \
! { 1255, {"proacl"}, 1034, 0, -1, 15, 0, -1, -1, false, 'x', false, 'i', false, false, false, true, 0 }
!
! DATA(insert ( 1255 proname 19 -1 NAMEDATALEN 1 0 -1 -1 f p f i t f f t 0));
! DATA(insert ( 1255 pronamespace 26 -1 4 2 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1255 proowner 23 0 4 3 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1255 prolang 26 0 4 4 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1255 proisagg 16 -1 1 5 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1255 prosecdef 16 0 1 6 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1255 proisstrict 16 0 1 7 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1255 proretset 16 0 1 8 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1255 provolatile 18 0 1 9 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1255 pronargs 21 0 2 10 0 -1 -1 t p f s t f f t 0));
! DATA(insert ( 1255 prorettype 26 0 4 11 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1255 proargtypes 30 0 INDEX_MAX_KEYS*4 12 0 -1 -1 f p f i t f f t 0));
! DATA(insert ( 1255 prosrc 25 0 -1 13 0 -1 -1 f x f i f f f t 0));
! DATA(insert ( 1255 probin 17 0 -1 14 0 -1 -1 f x f i f f f t 0));
! DATA(insert ( 1255 proacl 1034 0 -1 15 0 -1 -1 f x f i f f f t 0));
! DATA(insert ( 1255 ctid 27 0 6 -1 0 -1 -1 f p f i t f f t 0));
! DATA(insert ( 1255 oid 26 0 4 -2 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1255 xmin 28 0 4 -3 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1255 cmin 29 0 4 -4 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1255 xmax 28 0 4 -5 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1255 cmax 29 0 4 -6 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1255 tableoid 26 0 4 -7 0 -1 -1 t p f i t f f t 0));
/* ----------------
* pg_shadow
* ----------------
*/
! DATA(insert ( 1260 usename 19 -1 NAMEDATALEN 1 0 -1 -1 f p f i t f f t 0));
! DATA(insert ( 1260 usesysid 23 -1 4 2 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1260 usecreatedb 16 0 1 3 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1260 usesuper 16 0 1 4 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1260 usecatupd 16 0 1 5 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1260 passwd 25 0 -1 6 0 -1 -1 f x f i f f f t 0));
! DATA(insert ( 1260 valuntil 702 0 4 7 0 -1 -1 t p f i f f f t 0));
! DATA(insert ( 1260 useconfig 1009 0 -1 8 0 -1 -1 f x f i f f f t 0));
! DATA(insert ( 1260 ctid 27 0 6 -1 0 -1 -1 f p f i t f f t 0));
/* no OIDs in pg_shadow */
! DATA(insert ( 1260 xmin 28 0 4 -3 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1260 cmin 29 0 4 -4 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1260 xmax 28 0 4 -5 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1260 cmax 29 0 4 -6 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1260 tableoid 26 0 4 -7 0 -1 -1 t p f i t f f t 0));
/* ----------------
* pg_group
* ----------------
*/
! DATA(insert ( 1261 groname 19 -1 NAMEDATALEN 1 0 -1 -1 f p f i t f f t 0));
! DATA(insert ( 1261 grosysid 23 -1 4 2 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1261 grolist 1007 0 -1 3 0 -1 -1 f x f i f f f t 0));
! DATA(insert ( 1261 ctid 27 0 6 -1 0 -1 -1 f p f i t f f t 0));
/* no OIDs in pg_group */
! DATA(insert ( 1261 xmin 28 0 4 -3 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1261 cmin 29 0 4 -4 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1261 xmax 28 0 4 -5 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1261 cmax 29 0 4 -6 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1261 tableoid 26 0 4 -7 0 -1 -1 t p f i t f f t 0));
/* ----------------
* pg_attribute
* ----------------
*/
#define Schema_pg_attribute \
! { 1249, {"attrelid"}, 26, -1, 4, 1, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1249, {"attname"}, 19, -1, NAMEDATALEN, 2, 0, -1, -1, false, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1249, {"atttypid"}, 26, 0, 4, 3, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1249, {"attstattarget"}, 23, 0, 4, 4, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1249, {"attlen"}, 21, 0, 2, 5, 0, -1, -1, true, 'p', false, 's', true, false, false, true, 0 }, \
! { 1249, {"attnum"}, 21, 0, 2, 6, 0, -1, -1, true, 'p', false, 's', true, false, false, true, 0 }, \
! { 1249, {"attndims"}, 23, 0, 4, 7, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1249, {"attcacheoff"}, 23, 0, 4, 8, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1249, {"atttypmod"}, 23, 0, 4, 9, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1249, {"attbyval"}, 16, 0, 1, 10, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1249, {"attstorage"}, 18, 0, 1, 11, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1249, {"attisset"}, 16, 0, 1, 12, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1249, {"attalign"}, 18, 0, 1, 13, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1249, {"attnotnull"}, 16, 0, 1, 14, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1249, {"atthasdef"}, 16, 0, 1, 15, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1249, {"attisdropped"}, 16, 0, 1, 16, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1249, {"attislocal"}, 16, 0, 1, 17, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1249, {"attinhcount"}, 21, 0, 2, 18, 0, -1, -1, true, 'p', false, 's', true, false, false, true, 0 }
!
! DATA(insert ( 1249 attrelid 26 -1 4 1 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1249 attname 19 -1 NAMEDATALEN 2 0 -1 -1 f p f i t f f t 0));
! DATA(insert ( 1249 atttypid 26 0 4 3 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1249 attstattarget 23 0 4 4 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1249 attlen 21 0 2 5 0 -1 -1 t p f s t f f t 0));
! DATA(insert ( 1249 attnum 21 0 2 6 0 -1 -1 t p f s t f f t 0));
! DATA(insert ( 1249 attndims 23 0 4 7 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1249 attcacheoff 23 0 4 8 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1249 atttypmod 23 0 4 9 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1249 attbyval 16 0 1 10 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1249 attstorage 18 0 1 11 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1249 attisset 16 0 1 12 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1249 attalign 18 0 1 13 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1249 attnotnull 16 0 1 14 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1249 atthasdef 16 0 1 15 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1249 attisdropped 16 0 1 16 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1249 attislocal 16 0 1 17 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1249 attinhcount 21 0 2 18 0 -1 -1 t p f s t f f t 0));
! DATA(insert ( 1249 ctid 27 0 6 -1 0 -1 -1 f p f i t f f t 0));
/* no OIDs in pg_attribute */
! DATA(insert ( 1249 xmin 28 0 4 -3 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1249 cmin 29 0 4 -4 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1249 xmax 28 0 4 -5 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1249 cmax 29 0 4 -6 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1249 tableoid 26 0 4 -7 0 -1 -1 t p f i t f f t 0));
/* ----------------
* pg_class
* ----------------
*/
#define Schema_pg_class \
! { 1259, {"relname"}, 19, -1, NAMEDATALEN, 1, 0, -1, -1, false, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1259, {"relnamespace"}, 26, -1, 4, 2, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1259, {"reltype"}, 26, 0, 4, 3, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1259, {"relowner"}, 23, 0, 4, 4, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1259, {"relam"}, 26, 0, 4, 5, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1259, {"relfilenode"}, 26, 0, 4, 6, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1259, {"relpages"}, 23, 0, 4, 7, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1259, {"reltuples"}, 700, 0, 4, 8, 0, -1, -1, false, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1259, {"reltoastrelid"}, 26, 0, 4, 9, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1259, {"reltoastidxid"}, 26, 0, 4, 10, 0, -1, -1, true, 'p', false, 'i', true, false, false, true, 0 }, \
! { 1259, {"relhasindex"}, 16, 0, 1, 11, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1259, {"relisshared"}, 16, 0, 1, 12, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1259, {"relkind"}, 18, -1, 1, 13, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1259, {"relnatts"}, 21, 0, 2, 14, 0, -1, -1, true, 'p', false, 's', true, false, false, true, 0 }, \
! { 1259, {"relchecks"}, 21, 0, 2, 15, 0, -1, -1, true, 'p', false, 's', true, false, false, true, 0 }, \
! { 1259, {"reltriggers"}, 21, 0, 2, 16, 0, -1, -1, true, 'p', false, 's', true, false, false, true, 0 }, \
! { 1259, {"relukeys"}, 21, 0, 2, 17, 0, -1, -1, true, 'p', false, 's', true, false, false, true, 0 }, \
! { 1259, {"relfkeys"}, 21, 0, 2, 18, 0, -1, -1, true, 'p', false, 's', true, false, false, true, 0 }, \
! { 1259, {"relrefs"}, 21, 0, 2, 19, 0, -1, -1, true, 'p', false, 's', true, false, false, true, 0 }, \
! { 1259, {"relhasoids"}, 16, 0, 1, 20, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1259, {"relhaspkey"}, 16, 0, 1, 21, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1259, {"relhasrules"}, 16, 0, 1, 22, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1259, {"relhassubclass"},16, 0, 1, 23, 0, -1, -1, true, 'p', false, 'c', true, false, false, true, 0 }, \
! { 1259, {"relacl"}, 1034, 0, -1, 24, 0, -1, -1, false, 'x', false, 'i', false, false, false, true, 0 }
!
! DATA(insert ( 1259 relname 19 -1 NAMEDATALEN 1 0 -1 -1 f p f i t f f t 0));
! DATA(insert ( 1259 relnamespace 26 -1 4 2 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1259 reltype 26 0 4 3 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1259 relowner 23 0 4 4 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1259 relam 26 0 4 5 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1259 relfilenode 26 0 4 6 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1259 relpages 23 0 4 7 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1259 reltuples 700 0 4 8 0 -1 -1 f p f i t f f t 0));
! DATA(insert ( 1259 reltoastrelid 26 0 4 9 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1259 reltoastidxid 26 0 4 10 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1259 relhasindex 16 0 1 11 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1259 relisshared 16 0 1 12 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1259 relkind 18 -1 1 13 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1259 relnatts 21 0 2 14 0 -1 -1 t p f s t f f t 0));
! DATA(insert ( 1259 relchecks 21 0 2 15 0 -1 -1 t p f s t f f t 0));
! DATA(insert ( 1259 reltriggers 21 0 2 16 0 -1 -1 t p f s t f f t 0));
! DATA(insert ( 1259 relukeys 21 0 2 17 0 -1 -1 t p f s t f f t 0));
! DATA(insert ( 1259 relfkeys 21 0 2 18 0 -1 -1 t p f s t f f t 0));
! DATA(insert ( 1259 relrefs 21 0 2 19 0 -1 -1 t p f s t f f t 0));
! DATA(insert ( 1259 relhasoids 16 0 1 20 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1259 relhaspkey 16 0 1 21 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1259 relhasrules 16 0 1 22 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1259 relhassubclass 16 0 1 23 0 -1 -1 t p f c t f f t 0));
! DATA(insert ( 1259 relacl 1034 0 -1 24 0 -1 -1 f x f i f f f t 0));
! DATA(insert ( 1259 ctid 27 0 6 -1 0 -1 -1 f p f i t f f t 0));
! DATA(insert ( 1259 oid 26 0 4 -2 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1259 xmin 28 0 4 -3 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1259 cmin 29 0 4 -4 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1259 xmax 28 0 4 -5 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1259 cmax 29 0 4 -6 0 -1 -1 t p f i t f f t 0));
! DATA(insert ( 1259 tableoid 26 0 4 -7 0 -1 -1 t p f i t f f t 0));
/* ----------------
* pg_xactlock - this is not a real relation, but is a placeholder
***************
*** 490,495 ****
* table; and this entry is just to link to that one.
* ----------------
*/
! DATA(insert ( 376 xactlockfoo 26 0 4 1 0 -1 -1 t p f i t f f f));
#endif /* PG_ATTRIBUTE_H */
--- 496,501 ----
* table; and this entry is just to link to that one.
* ----------------
*/
! DATA(insert ( 376 xactlockfoo 26 0 4 1 0 -1 -1 t p f i t f f t 0));
#endif /* PG_ATTRIBUTE_H */
Index: src/include/catalog/pg_class.h
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/include/catalog/pg_class.h,v
retrieving revision 1.73
diff -c -r1.73 pg_class.h
*** src/include/catalog/pg_class.h 2002/09/04 20:31:37 1.73
--- src/include/catalog/pg_class.h 2002/09/22 01:58:28
***************
*** 136,142 ****
DATA(insert OID = 1247 ( pg_type PGNSP 71 PGUID 0 1247 0 0 0 0 f f r 20 0 0 0 0 0 t f f f _null_ ));
DESCR("");
! DATA(insert OID = 1249 ( pg_attribute PGNSP 75 PGUID 0 1249 0 0 0 0 f f r 17 0 0 0 0 0 f f f f _null_ ));
DESCR("");
DATA(insert OID = 1255 ( pg_proc PGNSP 81 PGUID 0 1255 0 0 0 0 f f r 15 0 0 0 0 0 t f f f _null_ ));
DESCR("");
--- 136,142 ----
DATA(insert OID = 1247 ( pg_type PGNSP 71 PGUID 0 1247 0 0 0 0 f f r 20 0 0 0 0 0 t f f f _null_ ));
DESCR("");
! DATA(insert OID = 1249 ( pg_attribute PGNSP 75 PGUID 0 1249 0 0 0 0 f f r 18 0 0 0 0 0 f f f f _null_ ));
DESCR("");
DATA(insert OID = 1255 ( pg_proc PGNSP 81 PGUID 0 1255 0 0 0 0 f f r 15 0 0 0 0 0 t f f f _null_ ));
DESCR("");
Index: src/include/nodes/parsenodes.h
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/include/nodes/parsenodes.h,v
retrieving revision 1.207
diff -c -r1.207 parsenodes.h
*** src/include/nodes/parsenodes.h 2002/09/18 21:35:24 1.207
--- src/include/nodes/parsenodes.h 2002/09/22 01:58:32
***************
*** 301,307 ****
NodeTag type;
char *colname; /* name of column */
TypeName *typename; /* type of column */
! bool is_inherited; /* column is inherited? */
bool is_not_null; /* NOT NULL constraint specified? */
Node *raw_default; /* default value (untransformed parse
* tree) */
--- 301,308 ----
NodeTag type;
char *colname; /* name of column */
TypeName *typename; /* type of column */
! bool is_local; /* column is locally defined (not inherited) */
! int2 inhcount; /* number of parents of the column */
bool is_not_null; /* NOT NULL constraint specified? */
Node *raw_default; /* default value (untransformed parse
* tree) */
Index: src/test/regress/expected/alter_table.out
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/test/regress/expected/alter_table.out,v
retrieving revision 1.50
diff -c -r1.50 alter_table.out
*** src/test/regress/expected/alter_table.out 2002/09/22 00:37:09 1.50
--- src/test/regress/expected/alter_table.out 2002/09/22 01:58:36
***************
*** 1054,1056 ****
--- 1054,1172 ----
-- this should fail
alter table only renameColumn add column x int;
ERROR: Attribute must be added to child tables too
+ create table p (f1 int, f2 int);
+ create table c (f1 int not null) inherits(p);
+ NOTICE: CREATE TABLE: merging attribute "f1" with inherited definition
+ -- should be rejected since c.f1 is inherited
+ alter table c drop column f1;
+ ERROR: ALTER TABLE: Cannot drop inherited column "f1"
+ alter table p drop column f1;
+ -- c.f1 is still there, but no longer inherited
+ select f1 from c;
+ f1
+ ----
+ (0 rows)
+
+ alter table c drop column f1;
+ select f1 from c;
+ ERROR: Attribute "f1" not found
+ drop table p cascade;
+ NOTICE: Drop cascades to table c
+ create table p (f1 int, f2 int);
+ create table c () inherits(p);
+ -- should be rejected since c.f1 is inherited
+ alter table c drop column f1;
+ ERROR: ALTER TABLE: Cannot drop inherited column "f1"
+ alter table p drop column f1;
+ -- c.f1 is dropped now, since there is no local definition for it
+ select f1 from c;
+ ERROR: Attribute "f1" not found
+ drop table p cascade;
+ NOTICE: Drop cascades to table c
+ create table p (f1 int, f2 int);
+ create table c () inherits(p);
+ -- should be rejected since c.f1 is inherited
+ alter table c drop column f1;
+ ERROR: ALTER TABLE: Cannot drop inherited column "f1"
+ alter table only p drop column f1;
+ -- c.f1 is NOT dropped, but must now be considered non-inherited
+ alter table c drop column f1;
+ drop table p cascade;
+ NOTICE: Drop cascades to table c
+ create table p (f1 int, f2 int);
+ create table c (f1 int not null) inherits(p);
+ NOTICE: CREATE TABLE: merging attribute "f1" with inherited definition
+ -- should be rejected since c.f1 is inherited
+ alter table c drop column f1;
+ ERROR: ALTER TABLE: Cannot drop inherited column "f1"
+ alter table only p drop column f1;
+ -- c.f1 is still there, but no longer inherited
+ alter table c drop column f1;
+ drop table p cascade;
+ NOTICE: Drop cascades to table c
+ create table p1(id int, name text);
+ create table p2(id2 int, name text, height int);
+ create table c1(age int) inherits(p1,p2);
+ NOTICE: CREATE TABLE: merging multiple inherited definitions of attribute "name"
+ create table gc1() inherits (c1);
+ select relname, attname, attinhcount, attislocal from pg_class join
+ pg_attribute on (pg_class.oid=pg_attribute.attrelid) where relname
+ ~'^(p1|p2|c1|gc1)$' and attnum>0 order by relname, attname;
+ relname | attname | attinhcount | attislocal
+ ---------+---------+-------------+------------
+ c1 | age | 0 | t
+ c1 | height | 1 | f
+ c1 | id | 1 | f
+ c1 | id2 | 1 | f
+ c1 | name | 2 | f
+ gc1 | age | 1 | f
+ gc1 | height | 1 | f
+ gc1 | id | 1 | f
+ gc1 | id2 | 1 | f
+ gc1 | name | 1 | f
+ p1 | id | 0 | t
+ p1 | name | 0 | t
+ p2 | height | 0 | t
+ p2 | id2 | 0 | t
+ p2 | name | 0 | t
+ (15 rows)
+
+ -- should work
+ alter table only p1 drop column name;
+ -- should work. Now c1.name is local and inhcount is 0.
+ alter table only p2 drop column name;
+ -- should be rejected since its inherited
+ alter table gc1 drop column name;
+ ERROR: ALTER TABLE: Cannot drop inherited column "name"
+ -- should work, and drop gc1.name along
+ alter table c1 drop column name;
+ -- should fail: column does not exist
+ alter table gc1 drop column name;
+ ERROR: Relation "gc1" has no column "name"
+ -- should work and drop the attribute in all tables
+ alter table p2 drop column height;
+ select relname, attname, attinhcount, attislocal from pg_class join
+ pg_attribute on (pg_class.oid=pg_attribute.attrelid) where relname
+ ~'^(p1|p2|c1|gc1)$' and attnum>0 order by relname, attname;
+ relname | attname | attinhcount | attislocal
+ ---------+------------------------------+-------------+------------
+ c1 | ........pg.dropped.2........ | 0 | t
+ c1 | ........pg.dropped.4........ | 1 | f
+ c1 | age | 0 | t
+ c1 | id | 1 | f
+ c1 | id2 | 1 | f
+ gc1 | ........pg.dropped.2........ | 1 | f
+ gc1 | ........pg.dropped.4........ | 1 | f
+ gc1 | age | 1 | f
+ gc1 | id | 1 | f
+ gc1 | id2 | 1 | f
+ p1 | ........pg.dropped.2........ | 0 | t
+ p1 | id | 0 | t
+ p2 | ........pg.dropped.2........ | 0 | t
+ p2 | ........pg.dropped.3........ | 0 | t
+ p2 | id2 | 0 | t
+ (15 rows)
+
+ drop table p1, p2 cascade;
+ NOTICE: Drop cascades to table c1
+ NOTICE: Drop cascades to table gc1
Index: src/test/regress/sql/alter_table.sql
===================================================================
RCS file: /projects/cvsroot/pgsql-server/src/test/regress/sql/alter_table.sql,v
retrieving revision 1.32
diff -c -r1.32 alter_table.sql
*** src/test/regress/sql/alter_table.sql 2002/08/30 19:23:20 1.32
--- src/test/regress/sql/alter_table.sql 2002/09/22 01:58:39
***************
*** 764,766 ****
--- 764,840 ----
-- this should fail
alter table only renameColumn add column x int;
+
+ create table p (f1 int, f2 int);
+ create table c (f1 int not null) inherits(p);
+
+ -- should be rejected since c.f1 is inherited
+ alter table c drop column f1;
+ alter table p drop column f1;
+ -- c.f1 is still there, but no longer inherited
+ select f1 from c;
+ alter table c drop column f1;
+ select f1 from c;
+
+ drop table p cascade;
+
+ create table p (f1 int, f2 int);
+ create table c () inherits(p);
+
+ -- should be rejected since c.f1 is inherited
+ alter table c drop column f1;
+ alter table p drop column f1;
+ -- c.f1 is dropped now, since there is no local definition for it
+ select f1 from c;
+
+ drop table p cascade;
+
+ create table p (f1 int, f2 int);
+ create table c () inherits(p);
+
+ -- should be rejected since c.f1 is inherited
+ alter table c drop column f1;
+ alter table only p drop column f1;
+ -- c.f1 is NOT dropped, but must now be considered non-inherited
+ alter table c drop column f1;
+
+ drop table p cascade;
+
+ create table p (f1 int, f2 int);
+ create table c (f1 int not null) inherits(p);
+
+ -- should be rejected since c.f1 is inherited
+ alter table c drop column f1;
+ alter table only p drop column f1;
+ -- c.f1 is still there, but no longer inherited
+ alter table c drop column f1;
+
+ drop table p cascade;
+
+ create table p1(id int, name text);
+ create table p2(id2 int, name text, height int);
+ create table c1(age int) inherits(p1,p2);
+ create table gc1() inherits (c1);
+
+ select relname, attname, attinhcount, attislocal from pg_class join
+ pg_attribute on (pg_class.oid=pg_attribute.attrelid) where relname
+ ~'^(p1|p2|c1|gc1)$' and attnum>0 order by relname, attname;
+
+ -- should work
+ alter table only p1 drop column name;
+ -- should work. Now c1.name is local and inhcount is 0.
+ alter table only p2 drop column name;
+ -- should be rejected since its inherited
+ alter table gc1 drop column name;
+ -- should work, and drop gc1.name along
+ alter table c1 drop column name;
+ -- should fail: column does not exist
+ alter table gc1 drop column name;
+ -- should work and drop the attribute in all tables
+ alter table p2 drop column height;
+
+ select relname, attname, attinhcount, attislocal from pg_class join
+ pg_attribute on (pg_class.oid=pg_attribute.attrelid) where relname
+ ~'^(p1|p2|c1|gc1)$' and attnum>0 order by relname, attname;
+
+ drop table p1, p2 cascade;
Index: doc/src/sgml/catalogs.sgml
===================================================================
RCS file: /projects/cvsroot/pgsql-server/doc/src/sgml/catalogs.sgml,v
retrieving revision 2.60
diff -c -r2.60 catalogs.sgml
*** doc/src/sgml/catalogs.sgml 2002/09/18 21:35:20 2.60
--- doc/src/sgml/catalogs.sgml 2002/09/22 01:58:46
***************
*** 822,835 ****
! attisinherited
bool
! This column is inherited from some other relation. An inherited
! column cannot be dropped nor renamed.
--- 822,846 ----
! attislocal
bool
! This column is defined locally in the relation (as opposed to
! being inherited). Note that a column may be locally defined
! and inherited simultaneously.
+
+
+ attinhcount
+ int2
+
+
+ The number of ancestors this column has. A column with a
+ nonzero number of ancestors cannot be dropped nor renamed.
+
+