diff options
Diffstat (limited to 'src/backend/commands')
-rw-r--r-- | src/backend/commands/creatinh.c | 46 | ||||
-rw-r--r-- | src/backend/commands/variable.c | 52 |
2 files changed, 95 insertions, 3 deletions
diff --git a/src/backend/commands/creatinh.c b/src/backend/commands/creatinh.c index b8f8a56eafd..f33d301ded2 100644 --- a/src/backend/commands/creatinh.c +++ b/src/backend/commands/creatinh.c @@ -8,7 +8,11 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/Attic/creatinh.c,v 1.58 2000/05/30 00:49:43 momjian Exp $ +<<<<<<< creatinh.c + * $Header: /cvsroot/pgsql/src/backend/commands/Attic/creatinh.c,v 1.59 2000/06/09 01:44:03 momjian Exp $ +======= + * $Header: /cvsroot/pgsql/src/backend/commands/Attic/creatinh.c,v 1.59 2000/06/09 01:44:03 momjian Exp $ +>>>>>>> 1.58 * *------------------------------------------------------------------------- */ @@ -34,6 +38,9 @@ static bool checkAttrExists(const char *attributeName, const char *attributeType, List *schema); static List *MergeAttributes(List *schema, List *supers, List **supconstr); static void StoreCatalogInheritance(Oid relationId, List *supers); +static void +setRelhassubclassInRelation(Oid relationId, bool relhassubclass); + /* ---------------------------------------------------------------- * DefineRelation @@ -326,6 +333,7 @@ MergeAttributes(List *schema, List *supers, List **supconstr) TupleConstr *constr; relation = heap_openr(name, AccessShareLock); + setRelhassubclassInRelation(relation->rd_id, true); tupleDesc = RelationGetDescr(relation); constr = tupleDesc->constr; @@ -660,3 +668,39 @@ checkAttrExists(const char *attributeName, const char *attributeType, List *sche } return false; } + + +static void +setRelhassubclassInRelation(Oid relationId, bool relhassubclass) +{ + Relation relationRelation; + HeapTuple tuple; + Relation idescs[Num_pg_class_indices]; + + /* + * Lock a relation given its Oid. Go to the RelationRelation (i.e. + * pg_relation), find the appropriate tuple, and add the specified + * lock to it. + */ + relationRelation = heap_openr(RelationRelationName, RowExclusiveLock); + tuple = SearchSysCacheTuple(RELOID, + ObjectIdGetDatum(relationId), + 0, 0, 0) +; + Assert(HeapTupleIsValid(tuple)); + + ((Form_pg_class) GETSTRUCT(tuple))->relhassubclass = relhassubclass; + heap_update(relationRelation, &tuple->t_self, tuple, NULL); + + /* keep the catalog indices up to date */ + CatalogOpenIndices(Num_pg_class_indices, Name_pg_class_indices, idescs); + CatalogIndexInsert(idescs, Num_pg_class_indices, relationRelation, tuple +); + CatalogCloseIndices(Num_pg_class_indices, idescs); + + heap_close(relationRelation, RowExclusiveLock); +} + + + + diff --git a/src/backend/commands/variable.c b/src/backend/commands/variable.c index 18b39d66aac..aeddade12ec 100644 --- a/src/backend/commands/variable.c +++ b/src/backend/commands/variable.c @@ -9,7 +9,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/variable.c,v 1.35 2000/05/31 00:28:15 petere Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/variable.c,v 1.36 2000/06/09 01:44:03 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -49,7 +49,12 @@ static bool parse_XactIsoLevel(char *); static bool parse_random_seed(char *); static bool show_random_seed(void); static bool reset_random_seed(void); +static bool parse_examine_subclass(char *); +static bool show_examine_subclass(void); +static bool reset_examine_subclass(void); +#define examine_subclass_default true +bool examine_subclass = examine_subclass_default; /* * get_token @@ -164,6 +169,44 @@ get_token(char **tok, char **val, char *str) return str; } +/* + * + * EXAMINE_SUBCLASS + * + */ +#define EXAMINE_SUBCLASS "EXAMINE_SUBCLASS" + +static bool +parse_examine_subclass(char *value) +{ + if (strcasecmp(value, "on") == 0) + examine_subclass = true; + else if (strcasecmp(value, "off") == 0) + examine_subclass = false; + else if (strcasecmp(value, "default") == 0) + examine_subclass = examine_subclass_default; + else + elog(ERROR, "Bad value for %s (%s)", EXAMINE_SUBCLASS, value); + return TRUE; +} + +static bool +show_examine_subclass() +{ + + if (examine_subclass) + elog(NOTICE, "%s is ON", EXAMINE_SUBCLASS); + else + elog(NOTICE, "%s is OFF", EXAMINE_SUBCLASS); + return TRUE; +} + +static bool +reset_examine_subclass(void) +{ + examine_subclass = examine_subclass_default; + return TRUE; +} /* * DATE_STYLE @@ -545,6 +588,8 @@ SetPGVariable(const char *name, const char *value) #endif else if (strcasecmp(name, "random_seed")==0) parse_random_seed(pstrdup(value)); + else if (strcasecmp(name, "examine_subclass")==0) + parse_examine_subclass(pstrdup(value)); else SetConfigOption(name, value, superuser() ? PGC_SUSET : PGC_USERSET); } @@ -567,6 +612,8 @@ GetPGVariable(const char *name) #endif else if (strcasecmp(name, "random_seed")==0) show_random_seed(); + else if (strcasecmp(name, "examine_subclass")==0) + show_examine_subclass(); else { const char * val = GetConfigOption(name, superuser()); @@ -574,7 +621,6 @@ GetPGVariable(const char *name) } } - void ResetPGVariable(const char *name) { @@ -592,6 +638,8 @@ ResetPGVariable(const char *name) #endif else if (strcasecmp(name, "random_seed")==0) reset_random_seed(); + else if (strcasecmp(name, "examine_subclass")==0) + reset_examine_subclass(); else SetConfigOption(name, NULL, superuser() ? PGC_SUSET : PGC_USERSET); } |