diff options
author | Bruce Momjian <bruce@momjian.us> | 1997-09-07 05:04:48 +0000 |
---|---|---|
committer | Bruce Momjian <bruce@momjian.us> | 1997-09-07 05:04:48 +0000 |
commit | 1ccd423235a48739d6f7a4d7889705b5f9ecc69b (patch) | |
tree | 8001c4e839dfad8f29ceda7f8c5f5dbb8759b564 /src/backend/commands/purge.c | |
parent | 8fecd4febf8357f3cc20383ed29ced484877d5ac (diff) | |
download | postgresql-1ccd423235a48739d6f7a4d7889705b5f9ecc69b.tar.gz postgresql-1ccd423235a48739d6f7a4d7889705b5f9ecc69b.zip |
Massive commit to run PGINDENT on all *.c and *.h files.
Diffstat (limited to 'src/backend/commands/purge.c')
-rw-r--r-- | src/backend/commands/purge.c | 271 |
1 files changed, 141 insertions, 130 deletions
diff --git a/src/backend/commands/purge.c b/src/backend/commands/purge.c index 5c514fc8675..8000bbc7352 100644 --- a/src/backend/commands/purge.c +++ b/src/backend/commands/purge.c @@ -1,17 +1,17 @@ /*------------------------------------------------------------------------- * * purge.c-- - * the POSTGRES purge command. + * the POSTGRES purge command. * * Copyright (c) 1994, Regents of the University of California * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/Attic/purge.c,v 1.6 1997/08/12 22:52:25 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/Attic/purge.c,v 1.7 1997/09/07 04:40:51 momjian Exp $ * * Note: - * XXX There are many instances of int32 instead of ...Time. These - * should be changed once it is decided the signed'ness will be. + * XXX There are many instances of int32 instead of ...Time. These + * should be changed once it is decided the signed'ness will be. * *------------------------------------------------------------------------- */ @@ -21,145 +21,156 @@ #include <access/heapam.h> #include <access/xact.h> -#include <utils/tqual.h> /* for NowTimeQual */ +#include <utils/tqual.h> /* for NowTimeQual */ #include <catalog/catname.h> #include <catalog/indexing.h> #include <fmgr.h> #include <commands/purge.h> -#include <utils/builtins.h> /* for isreltime() */ +#include <utils/builtins.h> /* for isreltime() */ -static char cmdname[] = "RelationPurge"; +static char cmdname[] = "RelationPurge"; -#define RELATIVE 01 -#define ABSOLUTE 02 +#define RELATIVE 01 +#define ABSOLUTE 02 int32 RelationPurge(char *relationName, - char *absoluteTimeString, - char *relativeTimeString) + char *absoluteTimeString, + char *relativeTimeString) { - register i; - AbsoluteTime absoluteTime = INVALID_ABSTIME; - RelativeTime relativeTime = INVALID_RELTIME; - bits8 dateTag; - Relation relation; - HeapScanDesc scan; - static ScanKeyData key[1] = { - { 0, Anum_pg_class_relname, F_NAMEEQ } - }; - Buffer buffer; - HeapTuple newTuple, oldTuple; - AbsoluteTime currentTime; - char *values[Natts_pg_class]; - char nulls[Natts_pg_class]; - char replace[Natts_pg_class]; - Relation idescs[Num_pg_class_indices]; - - /* - * XXX for some reason getmyrelids (in inval.c) barfs when - * you heap_replace tuples from these classes. i thought - * setheapoverride would fix it but it didn't. for now, - * just disallow purge on these classes. - */ - if (strcmp(RelationRelationName, relationName) == 0 || - strcmp(AttributeRelationName, relationName) == 0 || - strcmp(AccessMethodRelationName, relationName) == 0 || - strcmp(AccessMethodOperatorRelationName, relationName) == 0) { - elog(WARN, "%s: cannot purge catalog \"%s\"", - cmdname, relationName); - } - - if (PointerIsValid(absoluteTimeString)) { - absoluteTime = (int32) nabstimein(absoluteTimeString); - absoluteTimeString[0] = '\0'; - if (absoluteTime == INVALID_ABSTIME) { - elog(NOTICE, "%s: bad absolute time string \"%s\"", - cmdname, absoluteTimeString); - elog(WARN, "purge not executed"); + register i; + AbsoluteTime absoluteTime = INVALID_ABSTIME; + RelativeTime relativeTime = INVALID_RELTIME; + bits8 dateTag; + Relation relation; + HeapScanDesc scan; + static ScanKeyData key[1] = { + {0, Anum_pg_class_relname, F_NAMEEQ} + }; + Buffer buffer; + HeapTuple newTuple, + oldTuple; + AbsoluteTime currentTime; + char *values[Natts_pg_class]; + char nulls[Natts_pg_class]; + char replace[Natts_pg_class]; + Relation idescs[Num_pg_class_indices]; + + /* + * XXX for some reason getmyrelids (in inval.c) barfs when you + * heap_replace tuples from these classes. i thought setheapoverride + * would fix it but it didn't. for now, just disallow purge on these + * classes. + */ + if (strcmp(RelationRelationName, relationName) == 0 || + strcmp(AttributeRelationName, relationName) == 0 || + strcmp(AccessMethodRelationName, relationName) == 0 || + strcmp(AccessMethodOperatorRelationName, relationName) == 0) + { + elog(WARN, "%s: cannot purge catalog \"%s\"", + cmdname, relationName); } - } - -#ifdef PURGEDEBUG - elog(DEBUG, "%s: absolute time `%s' is %d.", - cmdname, absoluteTimeString, absoluteTime); -#endif /* defined(PURGEDEBUG) */ - - if (PointerIsValid(relativeTimeString)) { - if (isreltime(relativeTimeString) != 1) { - elog(WARN, "%s: bad relative time string \"%s\"", - cmdname, relativeTimeString); + + if (PointerIsValid(absoluteTimeString)) + { + absoluteTime = (int32) nabstimein(absoluteTimeString); + absoluteTimeString[0] = '\0'; + if (absoluteTime == INVALID_ABSTIME) + { + elog(NOTICE, "%s: bad absolute time string \"%s\"", + cmdname, absoluteTimeString); + elog(WARN, "purge not executed"); + } } - relativeTime = reltimein(relativeTimeString); - + +#ifdef PURGEDEBUG + elog(DEBUG, "%s: absolute time `%s' is %d.", + cmdname, absoluteTimeString, absoluteTime); +#endif /* defined(PURGEDEBUG) */ + + if (PointerIsValid(relativeTimeString)) + { + if (isreltime(relativeTimeString) != 1) + { + elog(WARN, "%s: bad relative time string \"%s\"", + cmdname, relativeTimeString); + } + relativeTime = reltimein(relativeTimeString); + #ifdef PURGEDEBUG - elog(DEBUG, "%s: relative time `%s' is %d.", - cmdname, relativeTimeString, relativeTime); -#endif /* defined(PURGEDEBUG) */ - } - - /* - * Find the RELATION relation tuple for the given relation. - */ - relation = heap_openr(RelationRelationName); - key[0].sk_argument = PointerGetDatum(relationName); - fmgr_info(key[0].sk_procedure, &key[0].sk_func, &key[0].sk_nargs); - - scan = heap_beginscan(relation, 0, NowTimeQual, 1, key); - oldTuple = heap_getnext(scan, 0, &buffer); - if (!HeapTupleIsValid(oldTuple)) { + elog(DEBUG, "%s: relative time `%s' is %d.", + cmdname, relativeTimeString, relativeTime); +#endif /* defined(PURGEDEBUG) */ + } + + /* + * Find the RELATION relation tuple for the given relation. + */ + relation = heap_openr(RelationRelationName); + key[0].sk_argument = PointerGetDatum(relationName); + fmgr_info(key[0].sk_procedure, &key[0].sk_func, &key[0].sk_nargs); + + scan = heap_beginscan(relation, 0, NowTimeQual, 1, key); + oldTuple = heap_getnext(scan, 0, &buffer); + if (!HeapTupleIsValid(oldTuple)) + { + heap_endscan(scan); + heap_close(relation); + elog(WARN, "%s: no such relation: %s", cmdname, relationName); + return (0); + } + + /* + * Dig around in the tuple. + */ + currentTime = GetCurrentTransactionStartTime(); + if (!RelativeTimeIsValid(relativeTime)) + { + dateTag = ABSOLUTE; + if (!AbsoluteTimeIsValid(absoluteTime)) + absoluteTime = currentTime; + } + else if (!AbsoluteTimeIsValid(absoluteTime)) + dateTag = RELATIVE; + else + dateTag = ABSOLUTE | RELATIVE; + + for (i = 0; i < Natts_pg_class; ++i) + { + nulls[i] = heap_attisnull(oldTuple, i + 1) ? 'n' : ' '; + values[i] = NULL; + replace[i] = ' '; + } + if (dateTag & ABSOLUTE) + { + values[Anum_pg_class_relexpires - 1] = + (char *) UInt32GetDatum(absoluteTime); + replace[Anum_pg_class_relexpires - 1] = 'r'; + } + if (dateTag & RELATIVE) + { + values[Anum_pg_class_relpreserved - 1] = + (char *) UInt32GetDatum(relativeTime); + replace[Anum_pg_class_relpreserved - 1] = 'r'; + } + + /* + * Change the RELATION relation tuple for the given relation. + */ + newTuple = heap_modifytuple(oldTuple, buffer, relation, (Datum *) values, + nulls, replace); + + /* XXX How do you detect an insertion error?? */ + heap_replace(relation, &newTuple->t_ctid, newTuple); + + /* keep the system catalog indices current */ + CatalogOpenIndices(Num_pg_class_indices, Name_pg_class_indices, idescs); + CatalogIndexInsert(idescs, Num_pg_class_indices, relation, newTuple); + CatalogCloseIndices(Num_pg_class_indices, idescs); + + pfree(newTuple); + heap_endscan(scan); heap_close(relation); - elog(WARN, "%s: no such relation: %s", cmdname, relationName); - return(0); - } - - /* - * Dig around in the tuple. - */ - currentTime = GetCurrentTransactionStartTime(); - if (!RelativeTimeIsValid(relativeTime)) { - dateTag = ABSOLUTE; - if (!AbsoluteTimeIsValid(absoluteTime)) - absoluteTime = currentTime; - } else if (!AbsoluteTimeIsValid(absoluteTime)) - dateTag = RELATIVE; - else - dateTag = ABSOLUTE | RELATIVE; - - for (i = 0; i < Natts_pg_class; ++i) { - nulls[i] = heap_attisnull(oldTuple, i+1) ? 'n' : ' '; - values[i] = NULL; - replace[i] = ' '; - } - if (dateTag & ABSOLUTE) { - values[Anum_pg_class_relexpires-1] = - (char *) UInt32GetDatum(absoluteTime); - replace[Anum_pg_class_relexpires-1] = 'r'; - } - if (dateTag & RELATIVE) { - values[Anum_pg_class_relpreserved-1] = - (char *) UInt32GetDatum(relativeTime); - replace[Anum_pg_class_relpreserved-1] = 'r'; - } - - /* - * Change the RELATION relation tuple for the given relation. - */ - newTuple = heap_modifytuple(oldTuple, buffer, relation, (Datum*)values, - nulls, replace); - - /* XXX How do you detect an insertion error?? */ - heap_replace(relation, &newTuple->t_ctid, newTuple); - - /* keep the system catalog indices current */ - CatalogOpenIndices(Num_pg_class_indices, Name_pg_class_indices, idescs); - CatalogIndexInsert(idescs, Num_pg_class_indices, relation, newTuple); - CatalogCloseIndices(Num_pg_class_indices, idescs); - - pfree(newTuple); - - heap_endscan(scan); - heap_close(relation); - return(1); + return (1); } - |