diff options
Diffstat (limited to 'src/backend')
240 files changed, 8389 insertions, 7775 deletions
diff --git a/src/backend/access/common/heaptuple.c b/src/backend/access/common/heaptuple.c index be725418021..2a07be49f8e 100644 --- a/src/backend/access/common/heaptuple.c +++ b/src/backend/access/common/heaptuple.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/common/heaptuple.c,v 1.50 1999/03/14 20:17:20 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/common/heaptuple.c,v 1.51 1999/05/25 16:06:35 momjian Exp $ * * NOTES * The old interface functions have been converted to macros @@ -124,7 +124,7 @@ DataFill(char *data, *bitP |= bitmask; } - data = (char *)att_align((long)data, att[i]->attlen, att[i]->attalign); + data = (char *) att_align((long) data, att[i]->attlen, att[i]->attalign); switch (att[i]->attlen) { case -1: @@ -151,7 +151,7 @@ DataFill(char *data, att[i]->attlen); break; } - data = (char *)att_addlength((long)data, att[i]->attlen, value[i]); + data = (char *) att_addlength((long) data, att[i]->attlen, value[i]); } } @@ -210,7 +210,7 @@ heap_attisnull(HeapTuple tup, int attnum) int heap_sysattrlen(AttrNumber attno) { - HeapTupleHeader f = NULL; + HeapTupleHeader f = NULL; switch (attno) { @@ -301,6 +301,7 @@ heap_getsysattr(HeapTuple tup, Buffer b, int attnum) } return (Datum) NULL; } + #endif /* ---------------- @@ -328,11 +329,11 @@ nocachegetattr(HeapTuple tuple, TupleDesc tupleDesc, bool *isnull) { - char *tp; /* ptr to att in tuple */ - HeapTupleHeader tup = tuple->t_data; - bits8 *bp = tup->t_bits; /* ptr to att in tuple */ - Form_pg_attribute *att = tupleDesc->attrs; - int slow = 0; /* do we have to walk nulls? */ + char *tp; /* ptr to att in tuple */ + HeapTupleHeader tup = tuple->t_data; + bits8 *bp = tup->t_bits; /* ptr to att in tuple */ + Form_pg_attribute *att = tupleDesc->attrs; + int slow = 0; /* do we have to walk nulls? */ #if IN_MACRO @@ -376,6 +377,7 @@ nocachegetattr(HeapTuple tuple, } else { + /* * there's a null somewhere in the tuple */ @@ -404,12 +406,13 @@ nocachegetattr(HeapTuple tuple, int finalbit = attnum & 0x07; /* check for nulls "before" final bit of last byte */ - if ((~ bp[byte]) & ((1 << finalbit) - 1)) + if ((~bp[byte]) & ((1 << finalbit) - 1)) slow = 1; else { /* check for nulls in any "earlier" bytes */ - int i; + int i; + for (i = 0; i < byte; i++) { if (bp[i] != 0xFF) @@ -439,6 +442,7 @@ nocachegetattr(HeapTuple tuple, else if (!HeapTupleAllFixed(tuple)) { int j; + /* * In for(), we make this <= and not < because we want to test * if we can go past it in initializing offsets. @@ -456,9 +460,9 @@ nocachegetattr(HeapTuple tuple, /* * If slow is zero, and we got here, we know that we have a tuple with - * no nulls or varlenas before the target attribute. - * If possible, we also want to initialize the remainder of the - * attribute cached offset values. + * no nulls or varlenas before the target attribute. If possible, we + * also want to initialize the remainder of the attribute cached + * offset values. */ if (!slow) { @@ -570,7 +574,7 @@ heap_copytuple(HeapTuple tuple) newTuple->t_len = tuple->t_len; newTuple->t_self = tuple->t_self; newTuple->t_data = (HeapTupleHeader) ((char *) newTuple + HEAPTUPLESIZE); - memmove((char *) newTuple->t_data, + memmove((char *) newTuple->t_data, (char *) tuple->t_data, (int) tuple->t_len); return newTuple; } @@ -589,11 +593,11 @@ heap_copytuple_with_tuple(HeapTuple src, HeapTuple dest) dest->t_data = NULL; return; } - + dest->t_len = src->t_len; dest->t_self = src->t_self; dest->t_data = (HeapTupleHeader) palloc(src->t_len); - memmove((char *) dest->t_data, + memmove((char *) dest->t_data, (char *) src->t_data, (int) src->t_len); return; } @@ -657,14 +661,14 @@ heap_formtuple(TupleDesc tupleDescriptor, Datum *value, char *nulls) { - HeapTuple tuple; /* return tuple */ - HeapTupleHeader td; /* tuple data */ - int bitmaplen; - long len; - int hoff; - bool hasnull = false; - int i; - int numberOfAttributes = tupleDescriptor->natts; + HeapTuple tuple; /* return tuple */ + HeapTupleHeader td; /* tuple data */ + int bitmaplen; + long len; + int hoff; + bool hasnull = false; + int i; + int numberOfAttributes = tupleDescriptor->natts; len = offsetof(HeapTupleHeaderData, t_bits); @@ -760,9 +764,9 @@ heap_modifytuple(HeapTuple tuple, if (repl[attoff] == ' ') { value[attoff] = heap_getattr(tuple, - AttrOffsetGetAttrNumber(attoff), - RelationGetDescr(relation), - &isNull); + AttrOffsetGetAttrNumber(attoff), + RelationGetDescr(relation), + &isNull); nulls[attoff] = (isNull) ? 'n' : ' '; } @@ -790,12 +794,12 @@ heap_modifytuple(HeapTuple tuple, infomask = newTuple->t_data->t_infomask; memmove((char *) &newTuple->t_data->t_oid, /* XXX */ (char *) &tuple->t_data->t_oid, - ((char *) &tuple->t_data->t_hoff - - (char *) &tuple->t_data->t_oid)); /* XXX */ + ((char *) &tuple->t_data->t_hoff - + (char *) &tuple->t_data->t_oid)); /* XXX */ newTuple->t_data->t_infomask = infomask; newTuple->t_data->t_natts = numberOfAttributes; newTuple->t_self = tuple->t_self; - + return newTuple; } @@ -809,10 +813,10 @@ heap_addheader(uint32 natts, /* max domain index */ int structlen, /* its length */ char *structure) /* pointer to the struct */ { - HeapTuple tuple; - HeapTupleHeader td; /* tuple data */ - long len; - int hoff; + HeapTuple tuple; + HeapTupleHeader td; /* tuple data */ + long len; + int hoff; AssertArg(natts > 0); diff --git a/src/backend/access/common/printtup.c b/src/backend/access/common/printtup.c index 7615c79a748..0a2eee932f5 100644 --- a/src/backend/access/common/printtup.c +++ b/src/backend/access/common/printtup.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/common/printtup.c,v 1.45 1999/05/10 00:44:50 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/common/printtup.c,v 1.46 1999/05/25 16:06:39 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -25,9 +25,9 @@ #include "libpq/pqformat.h" #include "utils/syscache.h" -static void printtup_setup(DestReceiver* self, TupleDesc typeinfo); -static void printtup(HeapTuple tuple, TupleDesc typeinfo, DestReceiver* self); -static void printtup_cleanup(DestReceiver* self); +static void printtup_setup(DestReceiver * self, TupleDesc typeinfo); +static void printtup(HeapTuple tuple, TupleDesc typeinfo, DestReceiver * self); +static void printtup_cleanup(DestReceiver * self); /* ---------------------------------------------------------------- * printtup / debugtup support @@ -43,7 +43,7 @@ static void printtup_cleanup(DestReceiver* self); * ---------------- */ int -getTypeOutAndElem(Oid type, Oid* typOutput, Oid* typElem) +getTypeOutAndElem(Oid type, Oid *typOutput, Oid *typElem) { HeapTuple typeTuple; @@ -54,6 +54,7 @@ getTypeOutAndElem(Oid type, Oid* typOutput, Oid* typElem) if (HeapTupleIsValid(typeTuple)) { Form_pg_type pt = (Form_pg_type) GETSTRUCT(typeTuple); + *typOutput = (Oid) pt->typoutput; *typElem = (Oid) pt->typelem; return OidIsValid(*typOutput); @@ -70,27 +71,29 @@ getTypeOutAndElem(Oid type, Oid* typOutput, Oid* typElem) * Private state for a printtup destination object * ---------------- */ -typedef struct { /* Per-attribute information */ +typedef struct +{ /* Per-attribute information */ Oid typoutput; /* Oid for the attribute's type output fn */ Oid typelem; /* typelem value to pass to the output fn */ FmgrInfo finfo; /* Precomputed call info for typoutput */ -} PrinttupAttrInfo; +} PrinttupAttrInfo; -typedef struct { - DestReceiver pub; /* publicly-known function pointers */ - TupleDesc attrinfo; /* The attr info we are set up for */ - int nattrs; - PrinttupAttrInfo *myinfo; /* Cached info about each attr */ -} DR_printtup; +typedef struct +{ + DestReceiver pub; /* publicly-known function pointers */ + TupleDesc attrinfo; /* The attr info we are set up for */ + int nattrs; + PrinttupAttrInfo *myinfo; /* Cached info about each attr */ +} DR_printtup; /* ---------------- * Initialize: create a DestReceiver for printtup * ---------------- */ -DestReceiver* +DestReceiver * printtup_create_DR() { - DR_printtup* self = (DR_printtup*) palloc(sizeof(DR_printtup)); + DR_printtup *self = (DR_printtup *) palloc(sizeof(DR_printtup)); self->pub.receiveTuple = printtup; self->pub.setup = printtup_setup; @@ -100,42 +103,43 @@ printtup_create_DR() self->nattrs = 0; self->myinfo = NULL; - return (DestReceiver*) self; + return (DestReceiver *) self; } static void -printtup_setup(DestReceiver* self, TupleDesc typeinfo) +printtup_setup(DestReceiver * self, TupleDesc typeinfo) { /* ---------------- * We could set up the derived attr info at this time, but we postpone it * until the first call of printtup, for 3 reasons: * 1. We don't waste time (compared to the old way) if there are no - * tuples at all to output. + * tuples at all to output. * 2. Checking in printtup allows us to handle the case that the tuples - * change type midway through (although this probably can't happen in - * the current executor). + * change type midway through (although this probably can't happen in + * the current executor). * 3. Right now, ExecutorRun passes a NULL for typeinfo anyway :-( * ---------------- */ } static void -printtup_prepare_info(DR_printtup* myState, TupleDesc typeinfo, int numAttrs) +printtup_prepare_info(DR_printtup * myState, TupleDesc typeinfo, int numAttrs) { - int i; + int i; if (myState->myinfo) - pfree(myState->myinfo); /* get rid of any old data */ + pfree(myState->myinfo); /* get rid of any old data */ myState->myinfo = NULL; myState->attrinfo = typeinfo; myState->nattrs = numAttrs; if (numAttrs <= 0) return; - myState->myinfo = (PrinttupAttrInfo*) + myState->myinfo = (PrinttupAttrInfo *) palloc(numAttrs * sizeof(PrinttupAttrInfo)); for (i = 0; i < numAttrs; i++) { - PrinttupAttrInfo* thisState = myState->myinfo + i; + PrinttupAttrInfo *thisState = myState->myinfo + i; + if (getTypeOutAndElem((Oid) typeinfo->attrs[i]->atttypid, &thisState->typoutput, &thisState->typelem)) fmgr_info(thisState->typoutput, &thisState->finfo); @@ -147,9 +151,9 @@ printtup_prepare_info(DR_printtup* myState, TupleDesc typeinfo, int numAttrs) * ---------------- */ static void -printtup(HeapTuple tuple, TupleDesc typeinfo, DestReceiver* self) +printtup(HeapTuple tuple, TupleDesc typeinfo, DestReceiver * self) { - DR_printtup *myState = (DR_printtup*) self; + DR_printtup *myState = (DR_printtup *) self; StringInfoData buf; int i, j, @@ -178,7 +182,7 @@ printtup(HeapTuple tuple, TupleDesc typeinfo, DestReceiver* self) k = 1 << 7; for (i = 0; i < tuple->t_data->t_natts; ++i) { - if (! heap_attisnull(tuple, i + 1)) + if (!heap_attisnull(tuple, i + 1)) j |= k; /* set bit if not null */ k >>= 1; if (k == 0) /* end of byte? */ @@ -197,7 +201,8 @@ printtup(HeapTuple tuple, TupleDesc typeinfo, DestReceiver* self) */ for (i = 0; i < tuple->t_data->t_natts; ++i) { - PrinttupAttrInfo* thisState = myState->myinfo + i; + PrinttupAttrInfo *thisState = myState->myinfo + i; + attr = heap_getattr(tuple, i + 1, typeinfo, &isnull); if (isnull) continue; @@ -223,9 +228,10 @@ printtup(HeapTuple tuple, TupleDesc typeinfo, DestReceiver* self) * ---------------- */ static void -printtup_cleanup(DestReceiver* self) +printtup_cleanup(DestReceiver * self) { - DR_printtup* myState = (DR_printtup*) self; + DR_printtup *myState = (DR_printtup *) self; + if (myState->myinfo) pfree(myState->myinfo); pfree(myState); @@ -274,7 +280,7 @@ showatts(char *name, TupleDesc tupleDesc) * ---------------- */ void -debugtup(HeapTuple tuple, TupleDesc typeinfo, DestReceiver* self) +debugtup(HeapTuple tuple, TupleDesc typeinfo, DestReceiver * self) { int i; Datum attr; @@ -310,7 +316,7 @@ debugtup(HeapTuple tuple, TupleDesc typeinfo, DestReceiver* self) * ---------------- */ void -printtup_internal(HeapTuple tuple, TupleDesc typeinfo, DestReceiver* self) +printtup_internal(HeapTuple tuple, TupleDesc typeinfo, DestReceiver * self) { StringInfoData buf; int i, @@ -334,7 +340,7 @@ printtup_internal(HeapTuple tuple, TupleDesc typeinfo, DestReceiver* self) k = 1 << 7; for (i = 0; i < tuple->t_data->t_natts; ++i) { - if (! heap_attisnull(tuple, i + 1)) + if (!heap_attisnull(tuple, i + 1)) j |= k; /* set bit if not null */ k >>= 1; if (k == 0) /* end of byte? */ diff --git a/src/backend/access/common/scankey.c b/src/backend/access/common/scankey.c index bd3e047e6a7..7dd9b6a9206 100644 --- a/src/backend/access/common/scankey.c +++ b/src/backend/access/common/scankey.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/common/scankey.c,v 1.13 1999/02/13 23:14:13 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/common/scankey.c,v 1.14 1999/05/25 16:06:41 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -18,7 +18,7 @@ #include <access/skey.h> /* - * ScanKeyEntryIsLegal + * ScanKeyEntryIsLegal * True iff the scan key entry is legal. */ #define ScanKeyEntryIsLegal(entry) \ @@ -28,7 +28,7 @@ ) /* - * ScanKeyEntrySetIllegal + * ScanKeyEntrySetIllegal * Marks a scan key entry as illegal. */ void @@ -43,7 +43,7 @@ ScanKeyEntrySetIllegal(ScanKey entry) } /* - * ScanKeyEntryInitialize + * ScanKeyEntryInitialize * Initializes an scan key entry. * * Note: diff --git a/src/backend/access/common/tupdesc.c b/src/backend/access/common/tupdesc.c index 656b997404d..71e8db45a43 100644 --- a/src/backend/access/common/tupdesc.c +++ b/src/backend/access/common/tupdesc.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/common/tupdesc.c,v 1.48 1999/02/13 23:14:14 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/common/tupdesc.c,v 1.49 1999/05/25 16:06:42 momjian Exp $ * * NOTES * some of the executor utility code such as "ExecTypeFromTL" should be @@ -487,7 +487,7 @@ BuildDescForRelation(List *schema, char *relname) { /* array of XXX is _XXX */ snprintf(typename, NAMEDATALEN, - "_%.*s", NAMEDATALEN - 2, entry->typename->name); + "_%.*s", NAMEDATALEN - 2, entry->typename->name); attdim = length(arry); } else diff --git a/src/backend/access/gist/gist.c b/src/backend/access/gist/gist.c index 1342bc6aec8..06321990a8d 100644 --- a/src/backend/access/gist/gist.c +++ b/src/backend/access/gist/gist.c @@ -344,7 +344,7 @@ gistinsert(Relation r, Datum *datum, char *nulls, ItemPointer ht_ctid, Relation /* * Notes in ExecUtils:ExecOpenIndices() * - RelationSetLockForWrite(r); + * RelationSetLockForWrite(r); */ res = gistdoinsert(r, itup, &giststate); @@ -1106,10 +1106,10 @@ gistdelete(Relation r, ItemPointer tid) Page page; /* - * Notes in ExecUtils:ExecOpenIndices() - * Also note that only vacuum deletes index tuples now... + * Notes in ExecUtils:ExecOpenIndices() Also note that only vacuum + * deletes index tuples now... * - RelationSetLockForWrite(r); + * RelationSetLockForWrite(r); */ blkno = ItemPointerGetBlockNumber(tid); diff --git a/src/backend/access/gist/gistscan.c b/src/backend/access/gist/gistscan.c index 92353d71b2b..d26387d8280 100644 --- a/src/backend/access/gist/gistscan.c +++ b/src/backend/access/gist/gistscan.c @@ -68,7 +68,7 @@ gistbeginscan(Relation r, /* * Let index_beginscan does its work... * - RelationSetLockForRead(r); + * RelationSetLockForRead(r); */ s = RelationGetIndexScan(r, fromEnd, nkeys, key); diff --git a/src/backend/access/hash/hash.c b/src/backend/access/hash/hash.c index 122c9ad3797..65d04658c50 100644 --- a/src/backend/access/hash/hash.c +++ b/src/backend/access/hash/hash.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/hash/hash.c,v 1.25 1999/02/13 23:14:17 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/hash/hash.c,v 1.26 1999/05/25 16:06:54 momjian Exp $ * * NOTES * This file contains only the public interface routines. @@ -485,9 +485,9 @@ hashrestrpos(IndexScanDesc scan) /* bump lock on currentMarkData and copy to currentItemData */ if (ItemPointerIsValid(&(scan->currentMarkData))) { - so->hashso_curbuf =_hash_getbuf(scan->relation, - BufferGetBlockNumber(so->hashso_mrkbuf), - HASH_READ); + so->hashso_curbuf = _hash_getbuf(scan->relation, + BufferGetBlockNumber(so->hashso_mrkbuf), + HASH_READ); scan->currentItemData = scan->currentMarkData; } diff --git a/src/backend/access/hash/hashfunc.c b/src/backend/access/hash/hashfunc.c index c8be6dc60ed..f5605a3f109 100644 --- a/src/backend/access/hash/hashfunc.c +++ b/src/backend/access/hash/hashfunc.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/hash/hashfunc.c,v 1.16 1999/03/14 16:27:59 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/hash/hashfunc.c,v 1.17 1999/05/25 16:06:56 momjian Exp $ * * NOTES * These functions are stored in pg_amproc. For each operator class @@ -34,9 +34,9 @@ hashint4(uint32 key) } uint32 -hashint8(int64 *key) +hashint8(int64 * key) { - return ~((uint32)*key); + return ~((uint32) *key); } /* Hash function from Chris Torek. */ diff --git a/src/backend/access/hash/hashpage.c b/src/backend/access/hash/hashpage.c index 7c81e7ab5c1..bcda5f85e73 100644 --- a/src/backend/access/hash/hashpage.c +++ b/src/backend/access/hash/hashpage.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/hash/hashpage.c,v 1.19 1999/02/13 23:14:20 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/hash/hashpage.c,v 1.20 1999/05/25 16:06:58 momjian Exp $ * * NOTES * Postgres hash pages look like ordinary relation pages. The opaque @@ -321,7 +321,7 @@ _hash_setpagelock(Relation rel, { switch (access) { - case HASH_WRITE: + case HASH_WRITE: LockPage(rel, blkno, ExclusiveLock); break; case HASH_READ: @@ -345,7 +345,7 @@ _hash_unsetpagelock(Relation rel, { switch (access) { - case HASH_WRITE: + case HASH_WRITE: UnlockPage(rel, blkno, ExclusiveLock); break; case HASH_READ: diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c index 63fd52d124f..1ea78ec8633 100644 --- a/src/backend/access/heap/heapam.c +++ b/src/backend/access/heap/heapam.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/heap/heapam.c,v 1.42 1999/03/28 20:31:56 vadim Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/heap/heapam.c,v 1.43 1999/05/25 16:07:04 momjian Exp $ * * * INTERFACE ROUTINES @@ -117,7 +117,7 @@ initscan(HeapScanDesc scan, * relation is empty * ---------------- */ - scan->rs_ntup.t_data = scan->rs_ctup.t_data = + scan->rs_ntup.t_data = scan->rs_ctup.t_data = scan->rs_ptup.t_data = NULL; scan->rs_nbuf = scan->rs_cbuf = scan->rs_pbuf = InvalidBuffer; } @@ -216,15 +216,15 @@ heapgettup(Relation relation, int nkeys, ScanKey key) { - ItemId lpp; - Page dp; - int page; - int pages; - int lines; - OffsetNumber lineoff; - int linesleft; - ItemPointer tid = (tuple->t_data == NULL) ? - (ItemPointer) NULL : &(tuple->t_self); + ItemId lpp; + Page dp; + int page; + int pages; + int lines; + OffsetNumber lineoff; + int linesleft; + ItemPointer tid = (tuple->t_data == NULL) ? + (ItemPointer) NULL : &(tuple->t_self); /* ---------------- * increment access statistics @@ -290,8 +290,8 @@ heapgettup(Relation relation, return; } *buffer = RelationGetBufferWithBuffer(relation, - ItemPointerGetBlockNumber(tid), - *buffer); + ItemPointerGetBlockNumber(tid), + *buffer); if (!BufferIsValid(*buffer)) elog(ERROR, "heapgettup: failed ReadBuffer"); @@ -439,7 +439,8 @@ heapgettup(Relation relation, } else { - ++lpp; /* move forward in this page's ItemId array */ + ++lpp; /* move forward in this page's ItemId + * array */ ++lineoff; } } @@ -816,6 +817,7 @@ heap_getnext(HeapScanDesc scandesc, int backw) } else { /* NONTUP */ + /* * Don't release scan->rs_cbuf at this point, because * heapgettup doesn't increase PrivateRefCount if it is @@ -897,6 +899,7 @@ heap_getnext(HeapScanDesc scandesc, int backw) } else { /* NONTUP */ + /* * Don't release scan->rs_cbuf at this point, because * heapgettup doesn't increase PrivateRefCount if it is @@ -966,11 +969,11 @@ heap_fetch(Relation relation, HeapTuple tuple, Buffer *userbuf) { - ItemId lp; - Buffer buffer; - PageHeader dp; - ItemPointer tid = &(tuple->t_self); - OffsetNumber offnum; + ItemId lp; + Buffer buffer; + PageHeader dp; + ItemPointer tid = &(tuple->t_self); + OffsetNumber offnum; AssertMacro(PointerIsValid(userbuf)); /* see comments above */ @@ -1093,9 +1096,7 @@ heap_insert(Relation relation, HeapTuple tup) RelationPutHeapTupleAtEnd(relation, tup); if (IsSystemRelationName(RelationGetRelationName(relation)->data)) - { RelationInvalidateHeapTuple(relation, tup); - } return tup->t_data->t_oid; } @@ -1106,11 +1107,11 @@ heap_insert(Relation relation, HeapTuple tup) int heap_delete(Relation relation, ItemPointer tid, ItemPointer ctid) { - ItemId lp; - HeapTupleData tp; - PageHeader dp; - Buffer buffer; - int result; + ItemId lp; + HeapTupleData tp; + PageHeader dp; + Buffer buffer; + int result; /* increment access statistics */ IncrHeapAccessStat(local_delete); @@ -1130,10 +1131,10 @@ heap_delete(Relation relation, ItemPointer tid, ItemPointer ctid) tp.t_data = (HeapTupleHeader) PageGetItem((Page) dp, lp); tp.t_len = ItemIdGetLength(lp); tp.t_self = *tid; - + l1: result = HeapTupleSatisfiesUpdate(&tp); - + if (result == HeapTupleInvisible) { LockBuffer(buffer, BUFFER_LOCK_UNLOCK); @@ -1142,7 +1143,7 @@ l1: } else if (result == HeapTupleBeingUpdated) { - TransactionId xwait = tp.t_data->t_xmax; + TransactionId xwait = tp.t_data->t_xmax; /* sleep untill concurrent transaction ends */ LockBuffer(buffer, BUFFER_LOCK_UNLOCK); @@ -1177,8 +1178,8 @@ l1: /* store transaction information of xact deleting the tuple */ TransactionIdStore(GetCurrentTransactionId(), &(tp.t_data->t_xmax)); tp.t_data->t_cmax = GetCurrentCommandId(); - tp.t_data->t_infomask &= ~(HEAP_XMAX_COMMITTED | - HEAP_XMAX_INVALID | HEAP_MARKED_FOR_UPDATE); + tp.t_data->t_infomask &= ~(HEAP_XMAX_COMMITTED | + HEAP_XMAX_INVALID | HEAP_MARKED_FOR_UPDATE); LockBuffer(buffer, BUFFER_LOCK_UNLOCK); @@ -1194,14 +1195,14 @@ l1: * heap_replace - replace a tuple */ int -heap_replace(Relation relation, ItemPointer otid, HeapTuple newtup, - ItemPointer ctid) +heap_replace(Relation relation, ItemPointer otid, HeapTuple newtup, + ItemPointer ctid) { - ItemId lp; - HeapTupleData oldtup; - PageHeader dp; - Buffer buffer; - int result; + ItemId lp; + HeapTupleData oldtup; + PageHeader dp; + Buffer buffer; + int result; /* increment access statistics */ IncrHeapAccessStat(local_replace); @@ -1223,7 +1224,7 @@ heap_replace(Relation relation, ItemPointer otid, HeapTuple newtup, l2: result = HeapTupleSatisfiesUpdate(&oldtup); - + if (result == HeapTupleInvisible) { LockBuffer(buffer, BUFFER_LOCK_UNLOCK); @@ -1232,7 +1233,7 @@ l2: } else if (result == HeapTupleBeingUpdated) { - TransactionId xwait = oldtup.t_data->t_xmax; + TransactionId xwait = oldtup.t_data->t_xmax; /* sleep untill concurrent transaction ends */ LockBuffer(buffer, BUFFER_LOCK_UNLOCK); @@ -1275,19 +1276,20 @@ l2: /* logically delete old item */ TransactionIdStore(GetCurrentTransactionId(), &(oldtup.t_data->t_xmax)); oldtup.t_data->t_cmax = GetCurrentCommandId(); - oldtup.t_data->t_infomask &= ~(HEAP_XMAX_COMMITTED | - HEAP_XMAX_INVALID | HEAP_MARKED_FOR_UPDATE); + oldtup.t_data->t_infomask &= ~(HEAP_XMAX_COMMITTED | + HEAP_XMAX_INVALID | HEAP_MARKED_FOR_UPDATE); /* insert new item */ if ((unsigned) DOUBLEALIGN(newtup->t_len) <= PageGetFreeSpace((Page) dp)) RelationPutHeapTuple(relation, buffer, newtup); else { + /* - * New item won't fit on same page as old item, have to look - * for a new place to put it. Note that we have to unlock - * current buffer context - not good but RelationPutHeapTupleAtEnd - * uses extend lock. + * New item won't fit on same page as old item, have to look for a + * new place to put it. Note that we have to unlock current buffer + * context - not good but RelationPutHeapTupleAtEnd uses extend + * lock. */ LockBuffer(buffer, BUFFER_LOCK_UNLOCK); RelationPutHeapTupleAtEnd(relation, newtup); @@ -1295,8 +1297,8 @@ l2: } /* - * New item in place, now record address of new tuple in - * t_ctid of old one. + * New item in place, now record address of new tuple in t_ctid of old + * one. */ oldtup.t_data->t_ctid = newtup->t_self; @@ -1316,10 +1318,10 @@ l2: int heap_mark4update(Relation relation, HeapTuple tuple, Buffer *buffer) { - ItemPointer tid = &(tuple->t_self); - ItemId lp; - PageHeader dp; - int result; + ItemPointer tid = &(tuple->t_self); + ItemId lp; + PageHeader dp; + int result; /* increment access statistics */ IncrHeapAccessStat(local_mark4update); @@ -1336,10 +1338,10 @@ heap_mark4update(Relation relation, HeapTuple tuple, Buffer *buffer) lp = PageGetItemId(dp, ItemPointerGetOffsetNumber(tid)); tuple->t_data = (HeapTupleHeader) PageGetItem((Page) dp, lp); tuple->t_len = ItemIdGetLength(lp); - + l3: result = HeapTupleSatisfiesUpdate(tuple); - + if (result == HeapTupleInvisible) { LockBuffer(*buffer, BUFFER_LOCK_UNLOCK); @@ -1348,7 +1350,7 @@ l3: } else if (result == HeapTupleBeingUpdated) { - TransactionId xwait = tuple->t_data->t_xmax; + TransactionId xwait = tuple->t_data->t_xmax; /* sleep untill concurrent transaction ends */ LockBuffer(*buffer, BUFFER_LOCK_UNLOCK); diff --git a/src/backend/access/heap/hio.c b/src/backend/access/heap/hio.c index f991b206d44..682c072c199 100644 --- a/src/backend/access/heap/hio.c +++ b/src/backend/access/heap/hio.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Id: hio.c,v 1.19 1999/05/07 01:22:53 vadim Exp $ + * $Id: hio.c,v 1.20 1999/05/25 16:07:07 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -39,11 +39,11 @@ RelationPutHeapTuple(Relation relation, Buffer buffer, HeapTuple tuple) { - Page pageHeader; - OffsetNumber offnum; - unsigned int len; - ItemId itemId; - Item item; + Page pageHeader; + OffsetNumber offnum; + unsigned int len; + ItemId itemId; + Item item; /* ---------------- * increment access statistics @@ -62,13 +62,13 @@ RelationPutHeapTuple(Relation relation, itemId = PageGetItemId((Page) pageHeader, offnum); item = PageGetItem((Page) pageHeader, itemId); - ItemPointerSet(&((HeapTupleHeader) item)->t_ctid, - BufferGetBlockNumber(buffer), offnum); + ItemPointerSet(&((HeapTupleHeader) item)->t_ctid, + BufferGetBlockNumber(buffer), offnum); /* * Let the caller do this! * - WriteBuffer(buffer); + * WriteBuffer(buffer); */ /* return an accurate tuple */ @@ -111,8 +111,8 @@ RelationPutHeapTupleAtEnd(Relation relation, HeapTuple tuple) Item item; /* - * Lock relation for extention. We can use LockPage here as long as - * in all other places we use page-level locking for indices only. + * Lock relation for extention. We can use LockPage here as long as in + * all other places we use page-level locking for indices only. * Alternatevely, we could define pseudo-table as we do for * transactions with XactLockTable. */ @@ -132,6 +132,7 @@ RelationPutHeapTupleAtEnd(Relation relation, HeapTuple tuple) { buffer = ReadBuffer(relation, lastblock); pageHeader = (Page) BufferGetPage(buffer); + /* * There was IF instead of ASSERT here ?! */ diff --git a/src/backend/access/index/genam.c b/src/backend/access/index/genam.c index 5752f2cf443..70b9ae2a4b0 100644 --- a/src/backend/access/index/genam.c +++ b/src/backend/access/index/genam.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/index/genam.c,v 1.16 1999/02/13 23:14:29 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/index/genam.c,v 1.17 1999/05/25 16:07:12 momjian Exp $ * * NOTES * many of the old access method routines have been turned into @@ -270,5 +270,5 @@ IndexScanRestorePosition(IndexScanDesc scan) scan->flags = 0x0; /* XXX should have a symbolic name */ } -#endif +#endif diff --git a/src/backend/access/index/istrat.c b/src/backend/access/index/istrat.c index e0b4e61a15b..61cbe560656 100644 --- a/src/backend/access/index/istrat.c +++ b/src/backend/access/index/istrat.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/index/Attic/istrat.c,v 1.31 1999/02/13 23:14:30 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/index/Attic/istrat.c,v 1.32 1999/05/25 16:07:15 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -57,7 +57,7 @@ static bool StrategyTermIsValid(StrategyTerm term, */ /* - * StrategyMapGetScanKeyEntry + * StrategyMapGetScanKeyEntry * Returns a scan key entry of a index strategy mapping member. * * Note: @@ -75,7 +75,7 @@ StrategyMapGetScanKeyEntry(StrategyMap map, } /* - * IndexStrategyGetStrategyMap + * IndexStrategyGetStrategyMap * Returns an index strategy mapping of an index strategy. * * Note: @@ -97,7 +97,7 @@ IndexStrategyGetStrategyMap(IndexStrategy indexStrategy, } /* - * AttributeNumberGetIndexStrategySize + * AttributeNumberGetIndexStrategySize * Computes the size of an index strategy. */ Size @@ -294,8 +294,8 @@ RelationGetStrategy(Relation relation, Assert(RegProcedureIsValid(procedure)); strategyMap = IndexStrategyGetStrategyMap(RelationGetIndexStrategy(relation), - evaluation->maxStrategy, - attributeNumber); + evaluation->maxStrategy, + attributeNumber); /* get a strategy number for the procedure ignoring flags for now */ for (index = 0; index < evaluation->maxStrategy; index += 1) @@ -526,7 +526,7 @@ OperatorRelationFillScanKeyEntry(Relation operatorRelation, /* - * IndexSupportInitialize + * IndexSupportInitialize * Initializes an index strategy and associated support procedures. */ void diff --git a/src/backend/access/nbtree/nbtcompare.c b/src/backend/access/nbtree/nbtcompare.c index 127f2b03576..796087f812f 100644 --- a/src/backend/access/nbtree/nbtcompare.c +++ b/src/backend/access/nbtree/nbtcompare.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtcompare.c,v 1.22 1999/03/14 05:08:56 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtcompare.c,v 1.23 1999/05/25 16:07:21 momjian Exp $ * * NOTES * These functions are stored in pg_amproc. For each operator class @@ -40,7 +40,7 @@ btint4cmp(int32 a, int32 b) } int32 -btint8cmp(int64 *a, int64 *b) +btint8cmp(int64 * a, int64 * b) { if (*a > *b) return 1; diff --git a/src/backend/access/nbtree/nbtinsert.c b/src/backend/access/nbtree/nbtinsert.c index 265a658363a..3cc67661cd2 100644 --- a/src/backend/access/nbtree/nbtinsert.c +++ b/src/backend/access/nbtree/nbtinsert.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtinsert.c,v 1.39 1999/05/01 16:09:45 vadim Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtinsert.c,v 1.40 1999/05/25 16:07:23 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -99,13 +99,13 @@ l1: /* key on the page before trying to compare it */ if (!PageIsEmpty(page) && offset <= maxoff) { - TupleDesc itupdesc; - BTItem cbti; - HeapTupleData htup; - BTPageOpaque opaque; - Buffer nbuf; - BlockNumber blkno; - bool chtup = true; + TupleDesc itupdesc; + BTItem cbti; + HeapTupleData htup; + BTPageOpaque opaque; + Buffer nbuf; + BlockNumber blkno; + bool chtup = true; itupdesc = RelationGetDescr(rel); nbuf = InvalidBuffer; @@ -122,15 +122,16 @@ l1: */ while (_bt_isequal(itupdesc, page, offset, natts, itup_scankey)) { /* they're equal */ + /* - * Have to check is inserted heap tuple deleted one - * (i.e. just moved to another place by vacuum)! + * Have to check is inserted heap tuple deleted one (i.e. + * just moved to another place by vacuum)! */ if (chtup) { htup.t_self = btitem->bti_itup.t_tid; heap_fetch(heapRel, SnapshotDirty, &htup, &buffer); - if (htup.t_data == NULL) /* YES! */ + if (htup.t_data == NULL) /* YES! */ break; /* Live tuple was inserted */ ReleaseBuffer(buffer); @@ -139,11 +140,11 @@ l1: cbti = (BTItem) PageGetItem(page, PageGetItemId(page, offset)); htup.t_self = cbti->bti_itup.t_tid; heap_fetch(heapRel, SnapshotDirty, &htup, &buffer); - if (htup.t_data != NULL) /* it is a duplicate */ + if (htup.t_data != NULL) /* it is a duplicate */ { - TransactionId xwait = - (TransactionIdIsValid(SnapshotDirty->xmin)) ? - SnapshotDirty->xmin : SnapshotDirty->xmax; + TransactionId xwait = + (TransactionIdIsValid(SnapshotDirty->xmin)) ? + SnapshotDirty->xmin : SnapshotDirty->xmax; /* * If this tuple is being updated by other transaction @@ -156,7 +157,7 @@ l1: _bt_relbuf(rel, nbuf, BT_READ); _bt_relbuf(rel, buf, BT_WRITE); XactLockTableWait(xwait); - goto l1; /* continue from the begin */ + goto l1;/* continue from the begin */ } elog(ERROR, "Cannot insert a duplicate key into a unique index"); } @@ -571,10 +572,10 @@ _bt_insertonpg(Relation rel, * reasoning). */ -l_spl:; +l_spl: ; if (stack == (BTStack) NULL) { - if (!is_root) /* if this page was not root page */ + if (!is_root) /* if this page was not root page */ { elog(DEBUG, "btree: concurrent ROOT page split"); stack = (BTStack) palloc(sizeof(BTStackData)); @@ -1144,8 +1145,8 @@ _bt_newroot(Relation rel, Buffer lbuf, Buffer rbuf) lpage = BufferGetPage(lbuf); rpage = BufferGetPage(rbuf); - ((BTPageOpaque) PageGetSpecialPointer(lpage))->btpo_parent = - ((BTPageOpaque) PageGetSpecialPointer(rpage))->btpo_parent = + ((BTPageOpaque) PageGetSpecialPointer(lpage))->btpo_parent = + ((BTPageOpaque) PageGetSpecialPointer(rpage))->btpo_parent = rootbknum; /* diff --git a/src/backend/access/nbtree/nbtpage.c b/src/backend/access/nbtree/nbtpage.c index daff4e6bdd4..5a936160549 100644 --- a/src/backend/access/nbtree/nbtpage.c +++ b/src/backend/access/nbtree/nbtpage.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtpage.c,v 1.20 1999/04/22 08:19:59 vadim Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtpage.c,v 1.21 1999/05/25 16:07:26 momjian Exp $ * * NOTES * Postgres btree pages look like ordinary relation pages. The opaque @@ -421,7 +421,7 @@ _bt_pageinit(Page page, Size size) MemSet(page, 0, size); PageInit(page, size, sizeof(BTPageOpaqueData)); - ((BTPageOpaque) PageGetSpecialPointer(page))->btpo_parent = + ((BTPageOpaque) PageGetSpecialPointer(page))->btpo_parent = InvalidBlockNumber; } @@ -494,17 +494,16 @@ _bt_getstackbuf(Relation rel, BTStack stack, int access) opaque = (BTPageOpaque) PageGetSpecialPointer(page); maxoff = PageGetMaxOffsetNumber(page); - if (stack->bts_offset == InvalidOffsetNumber || + if (stack->bts_offset == InvalidOffsetNumber || maxoff >= stack->bts_offset) { + /* - * _bt_insertonpg set bts_offset to InvalidOffsetNumber - * in the case of concurrent ROOT page split + * _bt_insertonpg set bts_offset to InvalidOffsetNumber in the + * case of concurrent ROOT page split */ if (stack->bts_offset == InvalidOffsetNumber) - { i = P_RIGHTMOST(opaque) ? P_HIKEY : P_FIRSTKEY; - } else { itemid = PageGetItemId(page, stack->bts_offset); @@ -524,7 +523,7 @@ _bt_getstackbuf(Relation rel, BTStack stack, int access) } /* if the item has just moved right on this page, we're done */ - for ( ; + for (; i <= maxoff; i = OffsetNumberNext(i)) { diff --git a/src/backend/access/nbtree/nbtree.c b/src/backend/access/nbtree/nbtree.c index 2ded78b1a67..b45d189a855 100644 --- a/src/backend/access/nbtree/nbtree.c +++ b/src/backend/access/nbtree/nbtree.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtree.c,v 1.37 1999/03/28 20:31:58 vadim Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtree.c,v 1.38 1999/05/25 16:07:27 momjian Exp $ * * NOTES * This file contains only the public interface routines. @@ -367,7 +367,7 @@ btinsert(Relation rel, Datum *datum, char *nulls, ItemPointer ht_ctid, Relation btitem = _bt_formitem(itup); res = _bt_doinsert(rel, btitem, - IndexIsUnique(RelationGetRelid(rel)), heapRel); + IndexIsUnique(RelationGetRelid(rel)), heapRel); pfree(btitem); pfree(itup); @@ -391,9 +391,10 @@ btgettuple(IndexScanDesc scan, ScanDirection dir) if (ItemPointerIsValid(&(scan->currentItemData))) { + /* - * Restore scan position using heap TID returned - * by previous call to btgettuple(). + * Restore scan position using heap TID returned by previous call + * to btgettuple(). */ _bt_restscan(scan); res = _bt_next(scan, dir); @@ -623,16 +624,15 @@ _bt_restscan(IndexScanDesc scan) BlockNumber blkno; /* - * We use this as flag when first index tuple on page - * is deleted but we do not move left (this would - * slowdown vacuum) - so we set current->ip_posid - * before first index tuple on the current page + * We use this as flag when first index tuple on page is deleted but + * we do not move left (this would slowdown vacuum) - so we set + * current->ip_posid before first index tuple on the current page * (_bt_step will move it right)... */ if (!ItemPointerIsValid(&target)) { - ItemPointerSetOffsetNumber(&(scan->currentItemData), - OffsetNumberPrev(P_RIGHTMOST(opaque) ? P_HIKEY : P_FIRSTKEY)); + ItemPointerSetOffsetNumber(&(scan->currentItemData), + OffsetNumberPrev(P_RIGHTMOST(opaque) ? P_HIKEY : P_FIRSTKEY)); return; } diff --git a/src/backend/access/nbtree/nbtscan.c b/src/backend/access/nbtree/nbtscan.c index a2a6707d195..79e0c879d04 100644 --- a/src/backend/access/nbtree/nbtscan.c +++ b/src/backend/access/nbtree/nbtscan.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/nbtree/Attic/nbtscan.c,v 1.20 1999/03/28 20:31:58 vadim Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/nbtree/Attic/nbtscan.c,v 1.21 1999/05/25 16:07:29 momjian Exp $ * * * NOTES @@ -112,12 +112,12 @@ _bt_adjscans(Relation rel, ItemPointer tid) static void _bt_scandel(IndexScanDesc scan, BlockNumber blkno, OffsetNumber offno) { - ItemPointer current; - Buffer buf; - BTScanOpaque so; - OffsetNumber start; - Page page; - BTPageOpaque opaque; + ItemPointer current; + Buffer buf; + BTScanOpaque so; + OffsetNumber start; + Page page; + BTPageOpaque opaque; so = (BTScanOpaque) scan->opaque; buf = so->btso_curbuf; @@ -140,7 +140,7 @@ _bt_scandel(IndexScanDesc scan, BlockNumber blkno, OffsetNumber offno) { Page pg = BufferGetPage(buf); BTItem btitem = (BTItem) PageGetItem(pg, - PageGetItemId(pg, ItemPointerGetOffsetNumber(current))); + PageGetItemId(pg, ItemPointerGetOffsetNumber(current))); so->curHeapIptr = btitem->bti_itup.t_tid; } @@ -181,7 +181,7 @@ _bt_scandel(IndexScanDesc scan, BlockNumber blkno, OffsetNumber offno) { Page pg = BufferGetPage(buf); BTItem btitem = (BTItem) PageGetItem(pg, - PageGetItemId(pg, ItemPointerGetOffsetNumber(current))); + PageGetItemId(pg, ItemPointerGetOffsetNumber(current))); so->mrkHeapIptr = btitem->bti_itup.t_tid; } diff --git a/src/backend/access/nbtree/nbtsearch.c b/src/backend/access/nbtree/nbtsearch.c index 1ea080abd72..cc3fc7475b4 100644 --- a/src/backend/access/nbtree/nbtsearch.c +++ b/src/backend/access/nbtree/nbtsearch.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtsearch.c,v 1.43 1999/04/13 17:18:28 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtsearch.c,v 1.44 1999/05/25 16:07:31 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -706,7 +706,7 @@ _bt_next(IndexScanDesc scan, ScanDirection dir) so = (BTScanOpaque) scan->opaque; current = &(scan->currentItemData); - Assert (BufferIsValid(so->btso_curbuf)); + Assert(BufferIsValid(so->btso_curbuf)); /* we still have the buffer pinned and locked */ buf = so->btso_curbuf; @@ -733,8 +733,8 @@ _bt_next(IndexScanDesc scan, ScanDirection dir) return res; } - } while (keysok >= so->numberOfFirstKeys || - (keysok == -1 && ScanDirectionIsBackward(dir))); + } while (keysok >= so->numberOfFirstKeys || + (keysok == -1 && ScanDirectionIsBackward(dir))); ItemPointerSetInvalid(current); so->btso_curbuf = InvalidBuffer; @@ -776,8 +776,8 @@ _bt_first(IndexScanDesc scan, ScanDirection dir) BTScanOpaque so; ScanKeyData skdata; Size keysok; - int i; - int nKeyIndex = -1; + int i; + int nKeyIndex = -1; rel = scan->relation; so = (BTScanOpaque) scan->opaque; @@ -795,27 +795,27 @@ _bt_first(IndexScanDesc scan, ScanDirection dir) if (ScanDirectionIsBackward(dir)) { - for (i=0; i<so->numberOfKeys; i++) + for (i = 0; i < so->numberOfKeys; i++) { if (so->keyData[i].sk_attno != 1) break; - strat = _bt_getstrat(rel, so->keyData[i].sk_attno, - so->keyData[i].sk_procedure); + strat = _bt_getstrat(rel, so->keyData[i].sk_attno, + so->keyData[i].sk_procedure); if (strat == BTLessStrategyNumber || - strat == BTLessEqualStrategyNumber|| - strat == BTEqualStrategyNumber) + strat == BTLessEqualStrategyNumber || + strat == BTEqualStrategyNumber) { nKeyIndex = i; break; } } } - else + else { strat = _bt_getstrat(rel, 1, so->keyData[0].sk_procedure); if (strat == BTLessStrategyNumber || - strat == BTLessEqualStrategyNumber) + strat == BTLessEqualStrategyNumber) ; else nKeyIndex = 0; @@ -850,7 +850,7 @@ _bt_first(IndexScanDesc scan, ScanDirection dir) } proc = index_getprocid(rel, 1, BTORDER_PROC); ScanKeyEntryInitialize(&skdata, so->keyData[nKeyIndex].sk_flags, - 1, proc, so->keyData[nKeyIndex].sk_argument); + 1, proc, so->keyData[nKeyIndex].sk_argument); stack = _bt_search(rel, 1, &skdata, &buf); _bt_freestack(stack); @@ -1104,9 +1104,10 @@ _bt_step(IndexScanDesc scan, Buffer *bufP, ScanDirection dir) rel = scan->relation; current = &(scan->currentItemData); + /* - * Don't use ItemPointerGetOffsetNumber or you risk to get - * assertion due to ability of ip_posid to be equal 0. + * Don't use ItemPointerGetOffsetNumber or you risk to get assertion + * due to ability of ip_posid to be equal 0. */ offnum = current->ip_posid; page = BufferGetPage(*bufP); diff --git a/src/backend/access/nbtree/nbtsort.c b/src/backend/access/nbtree/nbtsort.c index c8c494d3f94..d5c2c30bef8 100644 --- a/src/backend/access/nbtree/nbtsort.c +++ b/src/backend/access/nbtree/nbtsort.c @@ -5,7 +5,7 @@ * * * IDENTIFICATION - * $Id: nbtsort.c,v 1.38 1999/05/09 00:53:19 tgl Exp $ + * $Id: nbtsort.c,v 1.39 1999/05/25 16:07:34 momjian Exp $ * * NOTES * @@ -552,16 +552,16 @@ _bt_spoolinit(Relation index, int ntapes, bool isunique) btspool->bts_tape = 0; btspool->isunique = isunique; - btspool->bts_itape =(BTTapeBlock **) palloc(sizeof(BTTapeBlock *) * ntapes); - btspool->bts_otape =(BTTapeBlock **) palloc(sizeof(BTTapeBlock *) * ntapes); + btspool->bts_itape = (BTTapeBlock **) palloc(sizeof(BTTapeBlock *) * ntapes); + btspool->bts_otape = (BTTapeBlock **) palloc(sizeof(BTTapeBlock *) * ntapes); if (btspool->bts_itape == (BTTapeBlock **) NULL || btspool->bts_otape == (BTTapeBlock **) NULL) elog(ERROR, "_bt_spoolinit: out of memory"); for (i = 0; i < ntapes; ++i) { - btspool->bts_itape[i] = _bt_tapecreate(); - btspool->bts_otape[i] = _bt_tapecreate(); + btspool->bts_itape[i] = _bt_tapecreate(); + btspool->bts_otape[i] = _bt_tapecreate(); } _bt_isortcmpinit(index, btspool); diff --git a/src/backend/access/rtree/rtree.c b/src/backend/access/rtree/rtree.c index 57e89424500..f62a4bf648a 100644 --- a/src/backend/access/rtree/rtree.c +++ b/src/backend/access/rtree/rtree.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/rtree/Attic/rtree.c,v 1.31 1999/02/13 23:14:42 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/rtree/Attic/rtree.c,v 1.32 1999/05/25 16:07:38 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -307,7 +307,7 @@ rtinsert(Relation r, Datum *datum, char *nulls, ItemPointer ht_ctid, Relation he /* * Notes in ExecUtils:ExecOpenIndices() * - RelationSetLockForWrite(r); + * RelationSetLockForWrite(r); */ res = rtdoinsert(r, itup, &rtState); @@ -947,10 +947,10 @@ rtdelete(Relation r, ItemPointer tid) Page page; /* - * Notes in ExecUtils:ExecOpenIndices() - * Also note that only vacuum deletes index tuples now... + * Notes in ExecUtils:ExecOpenIndices() Also note that only vacuum + * deletes index tuples now... * - RelationSetLockForWrite(r); + * RelationSetLockForWrite(r); */ blkno = ItemPointerGetBlockNumber(tid); diff --git a/src/backend/access/rtree/rtscan.c b/src/backend/access/rtree/rtscan.c index 596972960bd..b74a341304a 100644 --- a/src/backend/access/rtree/rtscan.c +++ b/src/backend/access/rtree/rtscan.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/rtree/Attic/rtscan.c,v 1.22 1999/02/13 23:14:43 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/rtree/Attic/rtscan.c,v 1.23 1999/05/25 16:07:40 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -69,7 +69,7 @@ rtbeginscan(Relation r, /* * Let index_beginscan does its work... * - RelationSetLockForRead(r); + * RelationSetLockForRead(r); */ s = RelationGetIndexScan(r, fromEnd, nkeys, key); diff --git a/src/backend/access/transam/transam.c b/src/backend/access/transam/transam.c index 35f07e6185a..fe1d57d769c 100644 --- a/src/backend/access/transam/transam.c +++ b/src/backend/access/transam/transam.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/transam/transam.c,v 1.25 1999/03/30 01:37:21 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/transam/transam.c,v 1.26 1999/05/25 16:07:45 momjian Exp $ * * NOTES * This file contains the high level access-method interface to the @@ -221,7 +221,7 @@ TransactionLogUpdate(TransactionId transactionId, /* trans id to update */ /* * update (invalidate) our single item TransactionLogTest cache. * - if (status != XID_COMMIT) + * if (status != XID_COMMIT) * * What's the hell ?! Why != XID_COMMIT ?! */ @@ -374,7 +374,7 @@ TransRecover(Relation logRelation) */ /* - * InitializeTransactionLog + * InitializeTransactionLog * Initializes transaction logging. */ void @@ -484,7 +484,7 @@ InitializeTransactionLog(void) */ /* - * TransactionIdDidCommit + * TransactionIdDidCommit * True iff transaction associated with the identifier did commit. * * Note: @@ -500,7 +500,7 @@ TransactionIdDidCommit(TransactionId transactionId) } /* - * TransactionIdDidAborted + * TransactionIdDidAborted * True iff transaction associated with the identifier did abort. * * Note: @@ -541,7 +541,7 @@ TransactionIdIsInProgress(TransactionId transactionId) */ /* - * TransactionIdCommit + * TransactionIdCommit * Commits the transaction associated with the identifier. * * Note: @@ -557,7 +557,7 @@ TransactionIdCommit(TransactionId transactionId) } /* - * TransactionIdAbort + * TransactionIdAbort * Aborts the transaction associated with the identifier. * * Note: diff --git a/src/backend/access/transam/varsup.c b/src/backend/access/transam/varsup.c index f910ea5f0f1..4bcc55bb92c 100644 --- a/src/backend/access/transam/varsup.c +++ b/src/backend/access/transam/varsup.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/transam/varsup.c,v 1.19 1999/02/13 23:14:48 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/transam/varsup.c,v 1.20 1999/05/25 16:07:48 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -260,7 +260,7 @@ VariableRelationPutNextOid(Oid *oidP) * In the version 2 transaction system, transaction id's are * restricted in several ways. * - * -- Old comments removed + * -- Old comments removed * * Second, since we may someday preform compression of the data * in the log and time relations, we cause the numbering of the diff --git a/src/backend/access/transam/xact.c b/src/backend/access/transam/xact.c index f125baed6db..000abbc7ecb 100644 --- a/src/backend/access/transam/xact.c +++ b/src/backend/access/transam/xact.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/transam/xact.c,v 1.35 1999/05/13 00:34:57 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/transam/xact.c,v 1.36 1999/05/25 16:07:50 momjian Exp $ * * NOTES * Transaction aborts can now occur two ways: @@ -194,8 +194,8 @@ TransactionStateData CurrentTransactionStateData = { TransactionState CurrentTransactionState = &CurrentTransactionStateData; -int DefaultXactIsoLevel = XACT_READ_COMMITTED; -int XactIsoLevel; +int DefaultXactIsoLevel = XACT_READ_COMMITTED; +int XactIsoLevel; /* ---------------- * info returned when the system is disabled @@ -299,6 +299,7 @@ IsTransactionState(void) */ return false; } + #endif /* -------------------------------- @@ -516,7 +517,7 @@ CommandCounterIncrement() AtStart_Cache(); TransactionIdFlushCache(); - + } void @@ -695,9 +696,9 @@ AtCommit_Memory() /* ---------------- * Release memory in the blank portal. - * Since EndPortalAllocMode implicitly works on the current context, - * first make real sure that the blank portal is the selected context. - * (This is probably not necessary, but seems like a good idea...) + * Since EndPortalAllocMode implicitly works on the current context, + * first make real sure that the blank portal is the selected context. + * (This is probably not necessary, but seems like a good idea...) * ---------------- */ portal = GetPortalByName(NULL); @@ -789,9 +790,9 @@ AtAbort_Memory() /* ---------------- * Release memory in the blank portal. - * Since EndPortalAllocMode implicitly works on the current context, - * first make real sure that the blank portal is the selected context. - * (This is ESSENTIAL in case we aborted from someplace where it wasn't.) + * Since EndPortalAllocMode implicitly works on the current context, + * first make real sure that the blank portal is the selected context. + * (This is ESSENTIAL in case we aborted from someplace where it wasn't.) * ---------------- */ portal = GetPortalByName(NULL); @@ -1074,7 +1075,7 @@ StartTransactionCommand() break; /* ---------------- - * As with BEGIN, we should never experience this + * As with BEGIN, we should never experience this * if we do it means the END state was not changed in the * previous CommitTransactionCommand(). If we get it, we * print a warning, commit the transaction, start a new @@ -1509,6 +1510,7 @@ AbortOutOfAnyTransaction() */ if (s->state != TRANS_DEFAULT) AbortTransaction(); + /* * Now reset the high-level state */ diff --git a/src/backend/access/transam/xid.c b/src/backend/access/transam/xid.c index e7b68d48e7f..2b15fec1bf6 100644 --- a/src/backend/access/transam/xid.c +++ b/src/backend/access/transam/xid.c @@ -5,7 +5,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: xid.c,v 1.21 1999/02/13 23:14:49 momjian Exp $ + * $Id: xid.c,v 1.22 1999/05/25 16:07:52 momjian Exp $ * * OLD COMMENTS * XXX WARNING diff --git a/src/backend/bootstrap/bootstrap.c b/src/backend/bootstrap/bootstrap.c index 80f1142949f..6c7e7c16fa1 100644 --- a/src/backend/bootstrap/bootstrap.c +++ b/src/backend/bootstrap/bootstrap.c @@ -7,7 +7,7 @@ * Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/bootstrap/bootstrap.c,v 1.59 1999/05/10 00:44:52 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/bootstrap/bootstrap.c,v 1.60 1999/05/25 16:07:56 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -182,7 +182,7 @@ static char *relname; /* current relation name */ Form_pg_attribute attrtypes[MAXATTR]; /* points to attribute info */ static char *values[MAXATTR]; /* cooresponding attribute values */ int numattr; /* number of attributes for cur. rel */ -extern bool disableFsync; /* do not fsync the database */ +extern bool disableFsync; /* do not fsync the database */ int DebugMode; static GlobalMemory nogc = (GlobalMemory) NULL; /* special no-gc mem @@ -587,7 +587,9 @@ DefineAttr(char *name, char *type, int attnum) printf("<%s %s> ", attrtypes[attnum]->attname.data, type); attrtypes[attnum]->attnum = 1 + attnum; /* fillatt */ attlen = attrtypes[attnum]->attlen = Procid[typeoid].len; - /* Cheat like mad to fill in these items from the length only. + + /* + * Cheat like mad to fill in these items from the length only. * This only has to work for types used in the system catalogs... */ switch (attlen) diff --git a/src/backend/catalog/catalog.c b/src/backend/catalog/catalog.c index 8e0953809c4..5e720714354 100644 --- a/src/backend/catalog/catalog.c +++ b/src/backend/catalog/catalog.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/catalog/catalog.c,v 1.20 1999/02/13 23:14:55 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/catalog/catalog.c,v 1.21 1999/05/25 16:08:01 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -29,8 +29,8 @@ char * relpath(char *relname) { - char *path; - int bufsize = 0; + char *path; + int bufsize = 0; if (IsSharedSystemRelationName(relname)) { @@ -43,7 +43,7 @@ relpath(char *relname) } /* - * IsSystemRelationName + * IsSystemRelationName * True iff name is the name of a system catalog relation. * * We now make a new requirement where system catalog relns must begin @@ -64,7 +64,7 @@ IsSystemRelationName(char *relname) } /* - * IsSharedSystemRelationName + * IsSharedSystemRelationName * True iff name is the name of a shared system catalog relation. */ bool diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c index c82a258a3b2..89e45fb2bfc 100644 --- a/src/backend/catalog/heap.c +++ b/src/backend/catalog/heap.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.84 1999/05/22 04:12:24 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.85 1999/05/25 16:08:03 momjian Exp $ * * * INTERFACE ROUTINES @@ -70,8 +70,8 @@ #endif static void AddNewRelationTuple(Relation pg_class_desc, - Relation new_rel_desc, Oid new_rel_oid, unsigned natts, - char relkind, char *temp_relname); + Relation new_rel_desc, Oid new_rel_oid, unsigned natts, + char relkind, char *temp_relname); static void AddToNoNameRelList(Relation r); static void DeleteAttributeTuples(Relation rel); static void DeleteRelationTuple(Relation rel); @@ -185,7 +185,7 @@ heap_create(char *relname, bool nailme = false; int natts = tupDesc->natts; static unsigned int uniqueId = 0; - + extern GlobalMemory CacheCxt; MemoryContext oldcxt; @@ -240,23 +240,21 @@ heap_create(char *relname, nailme = true; } else - { relid = newoid(); - } if (isnoname) { Assert(!relname); relname = palloc(NAMEDATALEN); snprintf(relname, NAMEDATALEN, "pg_noname.%d.%u", - (int) MyProcPid, uniqueId++); + (int) MyProcPid, uniqueId++); } if (istemp) { /* replace relname of caller */ snprintf(relname, NAMEDATALEN, "pg_temp.%d.%u", - (int) MyProcPid, uniqueId++); + (int) MyProcPid, uniqueId++); } /* ---------------- @@ -272,7 +270,7 @@ heap_create(char *relname, /* * create a new tuple descriptor from the one passed in - */ + */ rel->rd_att = CreateTupleDescCopyConstr(tupDesc); /* ---------------- @@ -321,7 +319,7 @@ heap_create(char *relname, * ---------------- */ - rel->rd_nonameunlinked = TRUE; /* change once table is created */ + rel->rd_nonameunlinked = TRUE; /* change once table is created */ rel->rd_fd = (File) smgrcreate(DEFAULT_SMGR, rel); rel->rd_nonameunlinked = FALSE; @@ -479,8 +477,8 @@ RelnameFindRelid(char *relname) if (!IsBootstrapProcessingMode()) { tuple = SearchSysCacheTuple(RELNAME, - PointerGetDatum(relname), - 0, 0, 0); + PointerGetDatum(relname), + 0, 0, 0); if (HeapTupleIsValid(tuple)) relid = tuple->t_data->t_oid; else @@ -488,10 +486,10 @@ RelnameFindRelid(char *relname) } else { - Relation pg_class_desc; + Relation pg_class_desc; ScanKeyData key; HeapScanDesc pg_class_scan; - + pg_class_desc = heap_openr(RelationRelationName); /* ---------------- @@ -504,7 +502,7 @@ RelnameFindRelid(char *relname) (AttrNumber) Anum_pg_class_relname, (RegProcedure) F_NAMEEQ, (Datum) relname); - + /* ---------------- * begin the scan * ---------------- @@ -514,14 +512,14 @@ RelnameFindRelid(char *relname) SnapshotNow, 1, &key); - + /* ---------------- * get a tuple. if the tuple is NULL then it means we * didn't find an existing relation. * ---------------- */ tuple = heap_getnext(pg_class_scan, 0); - + if (HeapTupleIsValid(tuple)) relid = tuple->t_data->t_oid; else @@ -594,7 +592,7 @@ AddNewAttributeTuples(Oid new_rel_oid, (char *) *dpp); heap_insert(rel, tup); - + if (hasindex) CatalogIndexInsert(idescs, Num_pg_attr_indices, rel, tup); @@ -643,11 +641,11 @@ AddNewAttributeTuples(Oid new_rel_oid, */ static void AddNewRelationTuple(Relation pg_class_desc, - Relation new_rel_desc, - Oid new_rel_oid, - unsigned natts, - char relkind, - char *temp_relname) + Relation new_rel_desc, + Oid new_rel_oid, + unsigned natts, + char relkind, + char *temp_relname) { Form_pg_class new_rel_reltup; HeapTuple tup; @@ -678,12 +676,12 @@ AddNewRelationTuple(Relation pg_class_desc, * the table has been proven to be small by VACUUM or CREATE INDEX. * (NOTE: if user does CREATE TABLE, then CREATE INDEX, then loads * the table, he still loses until he vacuums, because CREATE INDEX - * will set reltuples to zero. Can't win 'em all. Maintaining the + * will set reltuples to zero. Can't win 'em all. Maintaining the * stats on-the-fly would solve the problem, but the overhead of that * would likely cost more than it'd save.) * ---------------- */ - new_rel_reltup->relpages = 10; /* bogus estimates */ + new_rel_reltup->relpages = 10; /* bogus estimates */ new_rel_reltup->reltuples = 1000; new_rel_reltup->relowner = GetUserId(); @@ -716,9 +714,10 @@ AddNewRelationTuple(Relation pg_class_desc, if (temp_relname) create_temp_relation(temp_relname, tup); - + if (!isBootstrap) { + /* * First, open the catalog indices and insert index tuples for the * new relation. @@ -730,7 +729,7 @@ AddNewRelationTuple(Relation pg_class_desc, /* now restore processing mode */ SetProcessingMode(NormalProcessing); } - + pfree(tup); } @@ -788,8 +787,8 @@ heap_create_with_catalog(char *relname, Relation new_rel_desc; Oid new_rel_oid; int natts = tupdesc->natts; - char *temp_relname = NULL; - + char *temp_relname = NULL; + /* ---------------- * sanity checks * ---------------- @@ -804,33 +803,34 @@ heap_create_with_catalog(char *relname, /* temp tables can mask non-temp tables */ if ((!istemp && RelnameFindRelid(relname)) || - (istemp && get_temp_rel_by_name(relname) != NULL)) + (istemp && get_temp_rel_by_name(relname) != NULL)) elog(ERROR, "Relation '%s' already exists", relname); /* invalidate cache so non-temp table is masked by temp */ if (istemp) { - Oid relid = RelnameFindRelid(relname); + Oid relid = RelnameFindRelid(relname); if (relid != InvalidOid) { + /* - * This is heavy-handed, but appears necessary bjm 1999/02/01 - * SystemCacheRelationFlushed(relid) is not enough either. + * This is heavy-handed, but appears necessary bjm 1999/02/01 + * SystemCacheRelationFlushed(relid) is not enough either. */ RelationForgetRelation(relid); ResetSystemCache(); - } + } } - + /* save user relation name because heap_create changes it */ if (istemp) { - temp_relname = pstrdup(relname); /* save original value */ + temp_relname = pstrdup(relname); /* save original value */ relname = palloc(NAMEDATALEN); - strcpy(relname, temp_relname); /* heap_create will change this */ + strcpy(relname, temp_relname); /* heap_create will change this */ } - + /* ---------------- * ok, relation does not already exist so now we * create an uncataloged relation and pull its relation oid @@ -838,7 +838,7 @@ heap_create_with_catalog(char *relname, * * Note: The call to heap_create() does all the "real" work * of creating the disk file for the relation. - * This changes relname for noname and temp tables. + * This changes relname for noname and temp tables. * ---------------- */ new_rel_desc = heap_create(relname, tupdesc, false, istemp); @@ -866,11 +866,11 @@ heap_create_with_catalog(char *relname, pg_class_desc = heap_openr(RelationRelationName); AddNewRelationTuple(pg_class_desc, - new_rel_desc, - new_rel_oid, - natts, - relkind, - temp_relname); + new_rel_desc, + new_rel_oid, + natts, + relkind, + temp_relname); StoreConstraints(new_rel_desc); @@ -1320,7 +1320,7 @@ heap_destroy_with_catalog(char *relname) if (istemp) remove_temp_relation(rid); - + /* ---------------- * delete type tuple. here we want to see the effects * of the deletions we just did, so we use setheapoverride(). @@ -1334,7 +1334,7 @@ heap_destroy_with_catalog(char *relname) * delete relation tuple * ---------------- */ - /* must delete fake tuple in cache */ + /* must delete fake tuple in cache */ DeleteRelationTuple(rel); /* @@ -1516,10 +1516,12 @@ StoreAttrDefault(Relation rel, AttrDefault *attrdef) extern GlobalMemory CacheCxt; start: - /* Surround table name with double quotes to allow mixed-case and + + /* + * Surround table name with double quotes to allow mixed-case and * whitespaces in names. - BGA 1998-11-14 */ - snprintf(str, MAX_PARSE_BUFFER, + snprintf(str, MAX_PARSE_BUFFER, "select %s%s from \"%.*s\"", attrdef->adsrc, cast, NAMEDATALEN, rel->rd_rel->relname.data); setheapoverride(true); @@ -1539,16 +1541,16 @@ start: if (type != atp->atttypid) { if (IS_BINARY_COMPATIBLE(type, atp->atttypid)) - ; /* use without change */ + ; /* use without change */ else if (can_coerce_type(1, &(type), &(atp->atttypid))) - expr = coerce_type(NULL, (Node *)expr, type, atp->atttypid, - atp->atttypmod); + expr = coerce_type(NULL, (Node *) expr, type, atp->atttypid, + atp->atttypmod); else if (IsA(expr, Const)) { if (*cast != 0) elog(ERROR, "DEFAULT clause const type '%s' mismatched with column type '%s'", typeidTypeName(type), typeidTypeName(atp->atttypid)); - snprintf(cast, 2*NAMEDATALEN, ":: %s", typeidTypeName(atp->atttypid)); + snprintf(cast, 2 * NAMEDATALEN, ":: %s", typeidTypeName(atp->atttypid)); goto start; } else @@ -1598,12 +1600,13 @@ StoreRelCheck(Relation rel, ConstrCheck *check) char nulls[4] = {' ', ' ', ' ', ' '}; extern GlobalMemory CacheCxt; - /* Check for table's existance. Surround table name with double-quotes + /* + * Check for table's existance. Surround table name with double-quotes * to allow mixed-case and whitespace names. - thomas 1998-11-12 */ - snprintf(str, MAX_PARSE_BUFFER, - "select 1 from \"%.*s\" where %s", - NAMEDATALEN, rel->rd_rel->relname.data, check->ccsrc); + snprintf(str, MAX_PARSE_BUFFER, + "select 1 from \"%.*s\" where %s", + NAMEDATALEN, rel->rd_rel->relname.data, check->ccsrc); setheapoverride(true); planTree_list = pg_parse_and_plan(str, NULL, 0, &queryTree_list, None, FALSE); diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c index 7fc6cb0464a..93f34ce0749 100644 --- a/src/backend/catalog/index.c +++ b/src/backend/catalog/index.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.74 1999/05/17 00:27:45 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.75 1999/05/25 16:08:06 momjian Exp $ * * * INTERFACE ROUTINES @@ -60,8 +60,8 @@ #define NTUPLES_PER_PAGE(natts) (BLCKSZ/((natts)*AVG_TUPLE_SIZE)) /* non-export function prototypes */ -static Oid GetHeapRelationOid(char *heapRelationName, char *indexRelationName, - bool istemp); +static Oid GetHeapRelationOid(char *heapRelationName, char *indexRelationName, + bool istemp); static TupleDesc BuildFuncTupleDesc(FuncIndexInfo *funcInfo); static TupleDesc ConstructTupleDescriptor(Oid heapoid, Relation heapRelation, List *attributeList, @@ -77,7 +77,7 @@ static void static void UpdateIndexRelation(Oid indexoid, Oid heapoid, FuncIndexInfo *funcInfo, int natts, AttrNumber *attNums, Oid *classOids, Node *predicate, - List *attributeList, bool islossy, bool unique, bool primary); + List *attributeList, bool islossy, bool unique, bool primary); static void DefaultBuild(Relation heapRelation, Relation indexRelation, int numberOfAttributes, AttrNumber *attributeNumber, IndexStrategy indexStrategy, uint16 parameterCount, @@ -126,11 +126,11 @@ GetHeapRelationOid(char *heapRelationName, char *indexRelationName, bool istemp) Oid indoid; Oid heapoid; - + indoid = RelnameFindRelid(indexRelationName); if ((!istemp && OidIsValid(indoid)) || - (istemp && get_temp_rel_by_name(indexRelationName) != NULL)) + (istemp && get_temp_rel_by_name(indexRelationName) != NULL)) elog(ERROR, "Cannot create index: '%s' already exists", indexRelationName); @@ -139,7 +139,7 @@ GetHeapRelationOid(char *heapRelationName, char *indexRelationName, bool istemp) if (!OidIsValid(heapoid)) elog(ERROR, "Cannot create index on '%s': relation does not exist", heapRelationName); - + return heapoid; } @@ -356,7 +356,7 @@ ConstructTupleDescriptor(Oid heapoid, } /* ---------------------------------------------------------------- - * AccessMethodObjectIdGetForm + * AccessMethodObjectIdGetForm * Returns the formated access method tuple given its object identifier. * * XXX ADD INDEXING @@ -482,7 +482,7 @@ UpdateRelationRelation(Relation indexRelation, char *temp_relname) if (temp_relname) create_temp_relation(temp_relname, tuple); - + /* * During normal processing, we need to make sure that the system * catalog indices are correct. Bootstrap (initdb) time doesn't @@ -571,7 +571,7 @@ AppendAttributeTuples(Relation indexRelation, int numatts) value[Anum_pg_attribute_attcacheoff - 1] = Int32GetDatum(-1); init_tuple = heap_addheader(Natts_pg_attribute, - ATTRIBUTE_TUPLE_SIZE, + ATTRIBUTE_TUPLE_SIZE, (char *) (indexRelation->rd_att->attrs[0])); hasind = false; @@ -611,7 +611,7 @@ AppendAttributeTuples(Relation indexRelation, int numatts) */ memmove(GETSTRUCT(cur_tuple), (char *) indexTupDesc->attrs[i], - ATTRIBUTE_TUPLE_SIZE); + ATTRIBUTE_TUPLE_SIZE); value[Anum_pg_attribute_attnum - 1] = Int16GetDatum(i + 1); @@ -657,7 +657,7 @@ UpdateIndexRelation(Oid indexoid, List *attributeList, bool islossy, bool unique, - bool primary) + bool primary) { Form_pg_index indexForm; IndexElem *IndexKey; @@ -686,7 +686,7 @@ UpdateIndexRelation(Oid indexoid, predLen = VARSIZE(predText); itupLen = predLen + sizeof(FormData_pg_index); indexForm = (Form_pg_index) palloc(itupLen); - memset (indexForm, 0, sizeof(FormData_pg_index)); + memset(indexForm, 0, sizeof(FormData_pg_index)); memmove((char *) &indexForm->indpred, (char *) predText, predLen); @@ -939,7 +939,7 @@ index_create(char *heapRelationName, Node *predicate, bool islossy, bool unique, - bool primary) + bool primary) { Relation heapRelation; Relation indexRelation; @@ -948,15 +948,15 @@ index_create(char *heapRelationName, Oid indexoid; PredInfo *predInfo; bool istemp = (get_temp_rel_by_name(heapRelationName) != NULL); - char *temp_relname = NULL; - + char *temp_relname = NULL; + /* ---------------- * check parameters * ---------------- */ if (numatts < 1) elog(ERROR, "must index at least one attribute"); - + /* ---------------- * get heap relation oid and open the heap relation * XXX ADD INDEXING @@ -987,25 +987,27 @@ index_create(char *heapRelationName, /* invalidate cache so possible non-temp index is masked by temp */ if (istemp) { - Oid relid = RelnameFindRelid(indexRelationName); + Oid relid = RelnameFindRelid(indexRelationName); if (relid != InvalidOid) { + /* - * This is heavy-handed, but appears necessary bjm 1999/02/01 - * SystemCacheRelationFlushed(relid) is not enough either. + * This is heavy-handed, but appears necessary bjm 1999/02/01 + * SystemCacheRelationFlushed(relid) is not enough either. */ RelationForgetRelation(relid); ResetSystemCache(); } } - + /* save user relation name because heap_create changes it */ if (istemp) { - temp_relname = pstrdup(indexRelationName); /* save original value */ + temp_relname = pstrdup(indexRelationName); /* save original value */ indexRelationName = palloc(NAMEDATALEN); - strcpy(indexRelationName, temp_relname); /* heap_create will change this */ + strcpy(indexRelationName, temp_relname); /* heap_create will + * change this */ } /* ---------------- @@ -1122,8 +1124,8 @@ index_destroy(Oid indexId) Relation relationRelation; Relation attributeRelation; HeapTuple tuple; - int16 attnum; - + int16 attnum; + Assert(OidIsValid(indexId)); /* Open now to obtain lock by referencing table? bjm */ @@ -1166,7 +1168,7 @@ index_destroy(Oid indexId) /* does something only if it is a temp index */ remove_temp_relation(indexId); - + /* ---------------- * fix INDEX relation * ---------------- diff --git a/src/backend/catalog/indexing.c b/src/backend/catalog/indexing.c index 89230f16c0b..a7a1dda444c 100644 --- a/src/backend/catalog/indexing.c +++ b/src/backend/catalog/indexing.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/catalog/indexing.c,v 1.37 1999/05/10 00:44:55 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/catalog/indexing.c,v 1.38 1999/05/25 16:08:07 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -46,15 +46,15 @@ */ char *Name_pg_attr_indices[Num_pg_attr_indices] = {AttributeNameIndex, - AttributeNumIndex, - AttributeRelidIndex}; + AttributeNumIndex, +AttributeRelidIndex}; char *Name_pg_proc_indices[Num_pg_proc_indices] = {ProcedureNameIndex, - ProcedureOidIndex, - ProcedureSrcIndex}; + ProcedureOidIndex, +ProcedureSrcIndex}; char *Name_pg_type_indices[Num_pg_type_indices] = {TypeNameIndex, - TypeOidIndex}; +TypeOidIndex}; char *Name_pg_class_indices[Num_pg_class_indices] = {ClassNameIndex, - ClassOidIndex}; +ClassOidIndex}; char *Name_pg_attrdef_indices[Num_pg_attrdef_indices] = {AttrDefaultIndex}; char *Name_pg_relcheck_indices[Num_pg_relcheck_indices] = {RelCheckIndex}; @@ -63,9 +63,9 @@ char *Name_pg_trigger_indices[Num_pg_trigger_indices] = {TriggerRelidIndex}; static HeapTuple CatalogIndexFetchTuple(Relation heapRelation, - Relation idesc, - ScanKey skey, - int16 num_keys); + Relation idesc, + ScanKey skey, + int16 num_keys); /* @@ -126,13 +126,13 @@ CatalogIndexInsert(Relation *idescs, index_tup = SearchSysCacheTupleCopy(INDEXRELID, ObjectIdGetDatum(idescs[i]->rd_id), - 0, 0, 0); + 0, 0, 0); Assert(index_tup); index_form = (Form_pg_index) GETSTRUCT(index_tup); if (index_form->indproc != InvalidOid) { - int fatts; + int fatts; /* * Compute the number of attributes we are indexing upon. @@ -152,7 +152,7 @@ CatalogIndexInsert(Relation *idescs, natts = RelationGetDescr(idescs[i])->natts; finfoP = (FuncIndexInfo *) NULL; } - + FormIndexDatum(natts, (AttrNumber *) index_form->indkey, heapTuple, @@ -229,11 +229,11 @@ CatalogIndexFetchTuple(Relation heapRelation, ScanKey skey, int16 num_keys) { - IndexScanDesc sd; + IndexScanDesc sd; RetrieveIndexResult indexRes; - HeapTupleData tuple; - HeapTuple result = NULL; - Buffer buffer; + HeapTupleData tuple; + HeapTuple result = NULL; + Buffer buffer; sd = index_beginscan(idesc, false, num_keys, skey); tuple.t_data = NULL; @@ -462,7 +462,7 @@ ClassNameIndexScan(Relation heapRelation, char *relName) */ if ((tuple = get_temp_rel_by_name(relName)) != NULL) return heap_copytuple(tuple); - + ScanKeyEntryInitialize(&skey[0], (bits16) 0x0, (AttrNumber) 1, diff --git a/src/backend/catalog/pg_operator.c b/src/backend/catalog/pg_operator.c index b3b11f845ad..58c87302d0a 100644 --- a/src/backend/catalog/pg_operator.c +++ b/src/backend/catalog/pg_operator.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/catalog/pg_operator.c,v 1.36 1999/05/10 00:44:56 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/catalog/pg_operator.c,v 1.37 1999/05/25 16:08:09 momjian Exp $ * * NOTES * these routines moved here from commands/define.c and somewhat cleaned up. @@ -36,15 +36,15 @@ #endif static Oid OperatorGetWithOpenRelation(Relation pg_operator_desc, - const char *operatorName, - Oid leftObjectId, - Oid rightObjectId, - bool *defined); + const char *operatorName, + Oid leftObjectId, + Oid rightObjectId, + bool *defined); static Oid OperatorGet(char *operatorName, - char *leftTypeName, - char *rightTypeName, - bool *defined); + char *leftTypeName, + char *rightTypeName, + bool *defined); static Oid OperatorShellMakeWithOpenRelation(Relation pg_operator_desc, char *operatorName, @@ -135,6 +135,7 @@ OperatorGetWithOpenRelation(Relation pg_operator_desc, if (HeapTupleIsValid(tup)) { regproc oprcode = ((Form_pg_operator) GETSTRUCT(tup))->oprcode; + operatorObjectId = tup->t_data->t_oid; *defined = RegProcedureIsValid(oprcode); } @@ -259,7 +260,7 @@ OperatorShellMakeWithOpenRelation(Relation pg_operator_desc, /* ---------------- * initialize *values with the operator name and input data types. - * Note that oprcode is set to InvalidOid, indicating it's a shell. + * Note that oprcode is set to InvalidOid, indicating it's a shell. * ---------------- */ i = 0; @@ -356,9 +357,9 @@ OperatorShellMake(char *operatorName, * ---------------- */ operatorObjectId = OperatorShellMakeWithOpenRelation(pg_operator_desc, - operatorName, - leftObjectId, - rightObjectId); + operatorName, + leftObjectId, + rightObjectId); /* ---------------- * close the operator relation and return the oid. * ---------------- @@ -506,8 +507,9 @@ OperatorDef(char *operatorName, elog(ERROR, "OperatorDef: operator \"%s\" already defined", operatorName); - /* At this point, if operatorObjectId is not InvalidOid then - * we are filling in a previously-created shell. + /* + * At this point, if operatorObjectId is not InvalidOid then we are + * filling in a previously-created shell. */ /* ---------------- @@ -580,7 +582,7 @@ OperatorDef(char *operatorName, values[Anum_pg_operator_oprcode - 1] = ObjectIdGetDatum(tup->t_data->t_oid); values[Anum_pg_operator_oprresult - 1] = ObjectIdGetDatum(((Form_pg_proc) - GETSTRUCT(tup))->prorettype); + GETSTRUCT(tup))->prorettype); /* ---------------- * find restriction @@ -648,7 +650,8 @@ OperatorDef(char *operatorName, values[i++] = ObjectIdGetDatum(leftTypeId); values[i++] = ObjectIdGetDatum(rightTypeId); - ++i; /* Skip "oprresult", it was filled in above */ + ++i; /* Skip "oprresult", it was filled in + * above */ /* * Set up the other operators. If they do not currently exist, create @@ -663,16 +666,16 @@ OperatorDef(char *operatorName, { if (name[j]) { - char *otherLeftTypeName = NULL; - char *otherRightTypeName = NULL; - Oid otherLeftTypeId = InvalidOid; - Oid otherRightTypeId = InvalidOid; - Oid other_oid = InvalidOid; - bool otherDefined = false; + char *otherLeftTypeName = NULL; + char *otherRightTypeName = NULL; + Oid otherLeftTypeId = InvalidOid; + Oid otherRightTypeId = InvalidOid; + Oid other_oid = InvalidOid; + bool otherDefined = false; switch (j) { - case 0: /* commutator has reversed arg types */ + case 0: /* commutator has reversed arg types */ otherLeftTypeName = rightTypeName; otherRightTypeName = leftTypeName; otherLeftTypeId = rightTypeId; @@ -683,7 +686,7 @@ OperatorDef(char *operatorName, &otherDefined); commutatorId = other_oid; break; - case 1: /* negator has same arg types */ + case 1: /* negator has same arg types */ otherLeftTypeName = leftTypeName; otherRightTypeName = rightTypeName; otherLeftTypeId = leftTypeId; @@ -694,7 +697,7 @@ OperatorDef(char *operatorName, &otherDefined); negatorId = other_oid; break; - case 2: /* left sort op takes left-side data type */ + case 2: /* left sort op takes left-side data type */ otherLeftTypeName = leftTypeName; otherRightTypeName = leftTypeName; otherLeftTypeId = leftTypeId; @@ -704,7 +707,8 @@ OperatorDef(char *operatorName, otherRightTypeName, &otherDefined); break; - case 3: /* right sort op takes right-side data type */ + case 3: /* right sort op takes right-side data + * type */ otherLeftTypeName = rightTypeName; otherRightTypeName = rightTypeName; otherLeftTypeId = rightTypeId; @@ -737,8 +741,10 @@ OperatorDef(char *operatorName, } else { - /* self-linkage to this operator; will fix below. - * Note that only self-linkage for commutation makes sense. + + /* + * self-linkage to this operator; will fix below. Note + * that only self-linkage for commutation makes sense. */ if (j != 0) elog(ERROR, @@ -804,15 +810,14 @@ OperatorDef(char *operatorName, /* * If a commutator and/or negator link is provided, update the other - * operator(s) to point at this one, if they don't already have a link. - * This supports an alternate style of operator definition wherein the - * user first defines one operator without giving negator or - * commutator, then defines the other operator of the pair with the - * proper commutator or negator attribute. That style doesn't require - * creation of a shell, and it's the only style that worked right before - * Postgres version 6.5. - * This code also takes care of the situation where the new operator - * is its own commutator. + * operator(s) to point at this one, if they don't already have a + * link. This supports an alternate style of operator definition + * wherein the user first defines one operator without giving negator + * or commutator, then defines the other operator of the pair with the + * proper commutator or negator attribute. That style doesn't require + * creation of a shell, and it's the only style that worked right + * before Postgres version 6.5. This code also takes care of the + * situation where the new operator is its own commutator. */ if (selfCommutator) commutatorId = operatorObjectId; @@ -869,7 +874,8 @@ OperatorUpd(Oid baseId, Oid commId, Oid negId) tup = heap_getnext(pg_operator_scan, 0); - /* if the commutator and negator are the same operator, do one update. + /* + * if the commutator and negator are the same operator, do one update. * XXX this is probably useless code --- I doubt it ever makes sense * for commutator and negator to be the same thing... */ @@ -1008,7 +1014,7 @@ OperatorCreate(char *operatorName, if (!leftTypeName && !rightTypeName) elog(ERROR, "OperatorCreate: at least one of leftarg or rightarg must be defined"); - if (! (leftTypeName && rightTypeName)) + if (!(leftTypeName && rightTypeName)) { /* If it's not a binary op, these things mustn't be set: */ if (commutatorName) diff --git a/src/backend/catalog/pg_proc.c b/src/backend/catalog/pg_proc.c index 7c22ce007cd..3d31741cfe0 100644 --- a/src/backend/catalog/pg_proc.c +++ b/src/backend/catalog/pg_proc.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/catalog/pg_proc.c,v 1.28 1999/05/13 07:28:27 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/catalog/pg_proc.c,v 1.29 1999/05/25 16:08:11 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -226,11 +226,11 @@ ProcedureCreate(char *procedureName, * function name (the 'prosrc' value) is a known builtin function. * * NOTE: in Postgres versions before 6.5, the SQL name of the created - * function could not be different from the internal name, and 'prosrc' - * wasn't used. So there is code out there that does CREATE FUNCTION - * xyz AS '' LANGUAGE 'internal'. To preserve some modicum of - * backwards compatibility, accept an empty 'prosrc' value as meaning - * the supplied SQL function name. + * function could not be different from the internal name, and + * 'prosrc' wasn't used. So there is code out there that does CREATE + * FUNCTION xyz AS '' LANGUAGE 'internal'. To preserve some modicum + * of backwards compatibility, accept an empty 'prosrc' value as + * meaning the supplied SQL function name. */ if (strcmp(languageName, "internal") == 0) @@ -239,7 +239,7 @@ ProcedureCreate(char *procedureName, prosrc = procedureName; if (fmgr_lookupByName(prosrc) == (func_ptr) NULL) elog(ERROR, - "ProcedureCreate: there is no builtin function named \"%s\"", + "ProcedureCreate: there is no builtin function named \"%s\"", prosrc); } diff --git a/src/backend/catalog/pg_type.c b/src/backend/catalog/pg_type.c index 4d108a825ff..54856d4b76d 100644 --- a/src/backend/catalog/pg_type.c +++ b/src/backend/catalog/pg_type.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/catalog/pg_type.c,v 1.36 1999/04/20 03:51:14 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/catalog/pg_type.c,v 1.37 1999/05/25 16:08:12 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -400,8 +400,8 @@ TypeCreate(char *typeName, procname = procs[j]; /* - * First look for a 1-argument func with all argtypes 0. - * This is valid for all four kinds of procedure. + * First look for a 1-argument func with all argtypes 0. This is + * valid for all four kinds of procedure. */ MemSet(argList, 0, 8 * sizeof(Oid)); @@ -413,20 +413,23 @@ TypeCreate(char *typeName, if (!HeapTupleIsValid(tup)) { + /* - * For array types, the input procedures may take 3 args - * (data value, element OID, atttypmod); the pg_proc - * argtype signature is 0,0,INT4OID. The output procedures - * may take 2 args (data value, element OID). + * For array types, the input procedures may take 3 args (data + * value, element OID, atttypmod); the pg_proc argtype + * signature is 0,0,INT4OID. The output procedures may take 2 + * args (data value, element OID). */ if (OidIsValid(elementObjectId)) { - int nargs; + int nargs; + if (j % 2) { /* output proc */ nargs = 2; - } else + } + else { /* input proc */ nargs = 3; diff --git a/src/backend/commands/_deadcode/recipe.c b/src/backend/commands/_deadcode/recipe.c index b3ec01b9158..997c02d85da 100644 --- a/src/backend/commands/_deadcode/recipe.c +++ b/src/backend/commands/_deadcode/recipe.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/_deadcode/Attic/recipe.c,v 1.2 1999/03/16 04:25:46 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/_deadcode/Attic/recipe.c,v 1.3 1999/05/25 16:08:30 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -121,18 +121,18 @@ static QueryTreeList *tg_parseTeeNode(TgRecipe * r, void beginRecipe(RecipeStmt *stmt) { - TgRecipe *r; - int i, - numTees; + TgRecipe *r; + int i, + numTees; QueryTreeList *qList; - char portalName[1024]; + char portalName[1024]; - Plan *plan; - TupleDesc attinfo; - QueryDesc *queryDesc; - Query *parsetree; + Plan *plan; + TupleDesc attinfo; + QueryDesc *queryDesc; + Query *parsetree; - TeeInfo *teeInfo; + TeeInfo *teeInfo; /* * retrieveRecipe() reads the recipe from the database and returns a @@ -808,21 +808,21 @@ tg_parseTeeNode(TgRecipe * r, static QueryTreeList * tg_parseSubQuery(TgRecipe * r, TgNode * n, TeeInfo * teeInfo) { - TgElement *elem; - char *funcName; - Oid typev[8], /* eight arguments maximum */ - relid; - int i, - parameterCount; + TgElement *elem; + char *funcName; + Oid typev[8], /* eight arguments maximum */ + relid; + int i, + parameterCount; QueryTreeList *qList; /* the parse tree of the nodeElement */ QueryTreeList *inputQlist; /* the list of parse trees for the inputs * to this node */ QueryTreeList *q; - TgNode *child; - Relation rel; - unsigned int len; - TupleDesc tupdesc; + TgNode *child; + Relation rel; + unsigned int len; + TupleDesc tupdesc; qList = NULL; diff --git a/src/backend/commands/_deadcode/version.c b/src/backend/commands/_deadcode/version.c index 9cb98cc5b3b..6eddfdccfaf 100644 --- a/src/backend/commands/_deadcode/version.c +++ b/src/backend/commands/_deadcode/version.c @@ -5,17 +5,17 @@ * * Copyright (c) 1994, Regents of the University of California * - * The version stuff has not been tested under postgres95 and probably + * The version stuff has not been tested under postgres95 and probably * doesn't work! - jolly 8/19/95 * * - * $Id: version.c,v 1.18 1999/02/13 23:15:12 momjian Exp $ + * $Id: version.c,v 1.19 1999/05/25 16:08:32 momjian Exp $ * * NOTES * At the point the version is defined, 2 physical relations are created * <vname>_added and <vname>_deleted. * - * In addition, 4 rules are defined which govern the semantics of + * In addition, 4 rules are defined which govern the semantics of * versions w.r.t retrieves, appends, replaces and deletes. * *------------------------------------------------------------------------- diff --git a/src/backend/commands/async.c b/src/backend/commands/async.c index fb1c116bc47..0e3cb83aa93 100644 --- a/src/backend/commands/async.c +++ b/src/backend/commands/async.c @@ -6,7 +6,7 @@ * Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/async.c,v 1.46 1999/04/25 19:27:43 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/async.c,v 1.47 1999/05/25 16:08:15 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -31,17 +31,17 @@ * relname to a list of outstanding NOTIFY requests. Actual processing * happens if and only if we reach transaction commit. At that time (in * routine AtCommit_Notify) we scan pg_listener for matching relnames. - * If the listenerPID in a matching tuple is ours, we just send a notify + * If the listenerPID in a matching tuple is ours, we just send a notify * message to our own front end. If it is not ours, and "notification" * is not already nonzero, we set notification to our own PID and send a * SIGUSR2 signal to the receiving process (indicated by listenerPID). * BTW: if the signal operation fails, we presume that the listener backend - * crashed without removing this tuple, and remove the tuple for it. + * crashed without removing this tuple, and remove the tuple for it. * * 4. Upon receipt of a SIGUSR2 signal, the signal handler can call inbound- * notify processing immediately if this backend is idle (ie, it is * waiting for a frontend command and is not within a transaction block). - * Otherwise the handler may only set a flag, which will cause the + * Otherwise the handler may only set a flag, which will cause the * processing to occur just before we next go idle. * * 5. Inbound-notify processing consists of scanning pg_listener for tuples @@ -53,7 +53,7 @@ * * Note that the system's use of pg_listener is confined to very short * intervals at the end of a transaction that contains NOTIFY statements, - * or during the transaction caused by an inbound SIGUSR2. So the fact that + * or during the transaction caused by an inbound SIGUSR2. So the fact that * pg_listener is a global resource shouldn't cause too much performance * problem. But application authors ought to be discouraged from doing * LISTEN or UNLISTEN near the start of a long transaction --- that would @@ -109,8 +109,8 @@ extern CommandDest whereToSendOutput; /* * State for outbound notifies consists of a list of all relnames NOTIFYed - * in the current transaction. We do not actually perform a NOTIFY until - * and unless the transaction commits. pendingNotifies is NULL if no + * in the current transaction. We do not actually perform a NOTIFY until + * and unless the transaction commits. pendingNotifies is NULL if no * NOTIFYs have been done in the current transaction. */ static Dllist *pendingNotifies = NULL; @@ -125,8 +125,8 @@ static Dllist *pendingNotifies = NULL; * does not grok "volatile", you'd be best advised to compile this file * with all optimization turned off. */ -static volatile int notifyInterruptEnabled = 0; -static volatile int notifyInterruptOccurred = 0; +static volatile int notifyInterruptEnabled = 0; +static volatile int notifyInterruptOccurred = 0; /* True if we've registered an on_shmem_exit cleanup (or at least tried to). */ static int unlistenExitRegistered = 0; @@ -142,7 +142,7 @@ static void ClearPendingNotifies(void); /* *-------------------------------------------------------------- - * Async_Notify + * Async_Notify * * This is executed by the SQL notify command. * @@ -164,28 +164,29 @@ Async_Notify(char *relname) /* * We allocate list memory from the global malloc pool to ensure that - * it will live until we want to use it. This is probably not necessary - * any longer, since we will use it before the end of the transaction. - * DLList only knows how to use malloc() anyway, but we could probably - * palloc() the strings... + * it will live until we want to use it. This is probably not + * necessary any longer, since we will use it before the end of the + * transaction. DLList only knows how to use malloc() anyway, but we + * could probably palloc() the strings... */ if (!pendingNotifies) pendingNotifies = DLNewList(); notifyName = strdup(relname); DLAddHead(pendingNotifies, DLNewElem(notifyName)); + /* * NOTE: we could check to see if pendingNotifies already has an entry - * for relname, and thus avoid making duplicate entries. However, most - * apps probably don't notify the same name multiple times per transaction, - * so we'd likely just be wasting cycles to make such a check. - * AsyncExistsPendingNotify() doesn't really care whether the list - * contains duplicates... + * for relname, and thus avoid making duplicate entries. However, + * most apps probably don't notify the same name multiple times per + * transaction, so we'd likely just be wasting cycles to make such a + * check. AsyncExistsPendingNotify() doesn't really care whether the + * list contains duplicates... */ } /* *-------------------------------------------------------------- - * Async_Listen + * Async_Listen * * This is executed by the SQL listen command. * @@ -274,7 +275,7 @@ Async_Listen(char *relname, int pid) /* * now that we are listening, make sure we will unlisten before dying. */ - if (! unlistenExitRegistered) + if (!unlistenExitRegistered) { if (on_shmem_exit(Async_UnlistenOnExit, (caddr_t) NULL) < 0) elog(NOTICE, "Async_Listen: out of shmem_exit slots"); @@ -284,7 +285,7 @@ Async_Listen(char *relname, int pid) /* *-------------------------------------------------------------- - * Async_Unlisten + * Async_Unlisten * * This is executed by the SQL unlisten command. * @@ -326,14 +327,16 @@ Async_Unlisten(char *relname, int pid) UnlockRelation(lRel, AccessExclusiveLock); heap_close(lRel); } - /* We do not complain about unlistening something not being listened; + + /* + * We do not complain about unlistening something not being listened; * should we? */ } /* *-------------------------------------------------------------- - * Async_UnlistenAll + * Async_UnlistenAll * * Unlisten all relations for this backend. * @@ -379,7 +382,7 @@ Async_UnlistenAll() /* *-------------------------------------------------------------- - * Async_UnlistenOnExit + * Async_UnlistenOnExit * * Clean up the pg_listener table at backend exit. * @@ -398,11 +401,12 @@ Async_UnlistenAll() static void Async_UnlistenOnExit() { + /* - * We need to start/commit a transaction for the unlisten, - * but if there is already an active transaction we had better - * abort that one first. Otherwise we'd end up committing changes - * that probably ought to be discarded. + * We need to start/commit a transaction for the unlisten, but if + * there is already an active transaction we had better abort that one + * first. Otherwise we'd end up committing changes that probably + * ought to be discarded. */ AbortOutOfAnyTransaction(); /* Now we can do the unlisten */ @@ -413,7 +417,7 @@ Async_UnlistenOnExit() /* *-------------------------------------------------------------- - * AtCommit_Notify + * AtCommit_Notify * * This is called at transaction commit. * @@ -450,12 +454,14 @@ AtCommit_Notify() int32 listenerPID; if (!pendingNotifies) - return; /* no NOTIFY statements in this transaction */ + return; /* no NOTIFY statements in this + * transaction */ - /* NOTIFY is disabled if not normal processing mode. - * This test used to be in xact.c, but it seems cleaner to do it here. + /* + * NOTIFY is disabled if not normal processing mode. This test used to + * be in xact.c, but it seems cleaner to do it here. */ - if (! IsNormalProcessingMode()) + if (!IsNormalProcessingMode()) { ClearPendingNotifies(); return; @@ -487,10 +493,13 @@ AtCommit_Notify() if (listenerPID == MyProcPid) { - /* Self-notify: no need to bother with table update. + + /* + * Self-notify: no need to bother with table update. * Indeed, we *must not* clear the notification field in - * this path, or we could lose an outside notify, which'd be - * bad for applications that ignore self-notify messages. + * this path, or we could lose an outside notify, which'd + * be bad for applications that ignore self-notify + * messages. */ TPRINTF(TRACE_NOTIFY, "AtCommit_Notify: notifying self"); NotifyMyFrontEnd(relname, listenerPID); @@ -499,23 +508,27 @@ AtCommit_Notify() { TPRINTF(TRACE_NOTIFY, "AtCommit_Notify: notifying pid %d", listenerPID); + /* - * If someone has already notified this listener, - * we don't bother modifying the table, but we do still send - * a SIGUSR2 signal, just in case that backend missed the - * earlier signal for some reason. It's OK to send the signal - * first, because the other guy can't read pg_listener until - * we unlock it. + * If someone has already notified this listener, we don't + * bother modifying the table, but we do still send a + * SIGUSR2 signal, just in case that backend missed the + * earlier signal for some reason. It's OK to send the + * signal first, because the other guy can't read + * pg_listener until we unlock it. */ #ifdef HAVE_KILL if (kill(listenerPID, SIGUSR2) < 0) { - /* Get rid of pg_listener entry if it refers to a PID + + /* + * Get rid of pg_listener entry if it refers to a PID * that no longer exists. Presumably, that backend * crashed without deleting its pg_listener entries. - * This code used to only delete the entry if errno==ESRCH, - * but as far as I can see we should just do it for any - * failure (certainly at least for EPERM too...) + * This code used to only delete the entry if + * errno==ESRCH, but as far as I can see we should + * just do it for any failure (certainly at least for + * EPERM too...) */ heap_delete(lRel, &lTuple->t_self, NULL); } @@ -536,6 +549,7 @@ AtCommit_Notify() } heap_endscan(sRel); + /* * We do not do RelationUnsetLockForWrite(lRel) here, because the * transaction is about to be committed anyway. @@ -549,7 +563,7 @@ AtCommit_Notify() /* *-------------------------------------------------------------- - * AtAbort_Notify + * AtAbort_Notify * * This is called at transaction abort. * @@ -569,7 +583,7 @@ AtAbort_Notify() /* *-------------------------------------------------------------- - * Async_NotifyHandler + * Async_NotifyHandler * * This is the signal handler for SIGUSR2. * @@ -588,25 +602,30 @@ AtAbort_Notify() void Async_NotifyHandler(SIGNAL_ARGS) { + /* - * Note: this is a SIGNAL HANDLER. You must be very wary what you do here. - * Some helpful soul had this routine sprinkled with TPRINTFs, which would - * likely lead to corruption of stdio buffers if they were ever turned on. + * Note: this is a SIGNAL HANDLER. You must be very wary what you do + * here. Some helpful soul had this routine sprinkled with TPRINTFs, + * which would likely lead to corruption of stdio buffers if they were + * ever turned on. */ if (notifyInterruptEnabled) { - /* I'm not sure whether some flavors of Unix might allow another - * SIGUSR2 occurrence to recursively interrupt this routine. - * To cope with the possibility, we do the same sort of dance that - * EnableNotifyInterrupt must do --- see that routine for comments. + + /* + * I'm not sure whether some flavors of Unix might allow another + * SIGUSR2 occurrence to recursively interrupt this routine. To + * cope with the possibility, we do the same sort of dance that + * EnableNotifyInterrupt must do --- see that routine for + * comments. */ notifyInterruptEnabled = 0; /* disable any recursive signal */ notifyInterruptOccurred = 1; /* do at least one iteration */ for (;;) { notifyInterruptEnabled = 1; - if (! notifyInterruptOccurred) + if (!notifyInterruptOccurred) break; notifyInterruptEnabled = 0; if (notifyInterruptOccurred) @@ -621,14 +640,18 @@ Async_NotifyHandler(SIGNAL_ARGS) } else { - /* In this path it is NOT SAFE to do much of anything, except this: */ + + /* + * In this path it is NOT SAFE to do much of anything, except + * this: + */ notifyInterruptOccurred = 1; } } /* * -------------------------------------------------------------- - * EnableNotifyInterrupt + * EnableNotifyInterrupt * * This is called by the PostgresMain main loop just before waiting * for a frontend command. If we are truly idle (ie, *not* inside @@ -652,26 +675,27 @@ EnableNotifyInterrupt(void) * notifyInterruptOccurred and then set notifyInterruptEnabled, we * could fail to respond promptly to a signal that happens in between * those two steps. (A very small time window, perhaps, but Murphy's - * Law says you can hit it...) Instead, we first set the enable flag, - * then test the occurred flag. If we see an unserviced interrupt - * has occurred, we re-clear the enable flag before going off to do - * the service work. (That prevents re-entrant invocation of - * ProcessIncomingNotify() if another interrupt occurs.) - * If an interrupt comes in between the setting and clearing of - * notifyInterruptEnabled, then it will have done the service - * work and left notifyInterruptOccurred zero, so we have to check - * again after clearing enable. The whole thing has to be in a loop - * in case another interrupt occurs while we're servicing the first. - * Once we get out of the loop, enable is set and we know there is no + * Law says you can hit it...) Instead, we first set the enable flag, + * then test the occurred flag. If we see an unserviced interrupt has + * occurred, we re-clear the enable flag before going off to do the + * service work. (That prevents re-entrant invocation of + * ProcessIncomingNotify() if another interrupt occurs.) If an + * interrupt comes in between the setting and clearing of + * notifyInterruptEnabled, then it will have done the service work and + * left notifyInterruptOccurred zero, so we have to check again after + * clearing enable. The whole thing has to be in a loop in case + * another interrupt occurs while we're servicing the first. Once we + * get out of the loop, enable is set and we know there is no * unserviced interrupt. * * NB: an overenthusiastic optimizing compiler could easily break this - * code. Hopefully, they all understand what "volatile" means these days. + * code. Hopefully, they all understand what "volatile" means these + * days. */ for (;;) { notifyInterruptEnabled = 1; - if (! notifyInterruptOccurred) + if (!notifyInterruptOccurred) break; notifyInterruptEnabled = 0; if (notifyInterruptOccurred) @@ -686,7 +710,7 @@ EnableNotifyInterrupt(void) /* * -------------------------------------------------------------- - * DisableNotifyInterrupt + * DisableNotifyInterrupt * * This is called by the PostgresMain main loop just after receiving * a frontend command. Signal handler execution of inbound notifies @@ -702,7 +726,7 @@ DisableNotifyInterrupt(void) /* * -------------------------------------------------------------- - * ProcessIncomingNotify + * ProcessIncomingNotify * * Deal with arriving NOTIFYs from other backends. * This is called either directly from the SIGUSR2 signal handler, @@ -777,6 +801,7 @@ ProcessIncomingNotify(void) } } heap_endscan(sRel); + /* * We do not do RelationUnsetLockForWrite(lRel) here, because the * transaction is about to be committed anyway. @@ -785,7 +810,10 @@ ProcessIncomingNotify(void) CommitTransactionCommand(); - /* Must flush the notify messages to ensure frontend gets them promptly. */ + /* + * Must flush the notify messages to ensure frontend gets them + * promptly. + */ pq_flush(); PS_SET_STATUS("idle"); @@ -800,20 +828,22 @@ NotifyMyFrontEnd(char *relname, int32 listenerPID) if (whereToSendOutput == Remote) { StringInfoData buf; + pq_beginmessage(&buf); pq_sendbyte(&buf, 'A'); pq_sendint(&buf, listenerPID, sizeof(int32)); pq_sendstring(&buf, relname); pq_endmessage(&buf); - /* NOTE: we do not do pq_flush() here. For a self-notify, it will + + /* + * NOTE: we do not do pq_flush() here. For a self-notify, it will * happen at the end of the transaction, and for incoming notifies - * ProcessIncomingNotify will do it after finding all the notifies. + * ProcessIncomingNotify will do it after finding all the + * notifies. */ } else - { elog(NOTICE, "NOTIFY for %s", relname); - } } /* Does pendingNotifies include the given relname? @@ -847,10 +877,12 @@ ClearPendingNotifies() if (pendingNotifies) { - /* Since the referenced strings are malloc'd, we have to scan the + + /* + * Since the referenced strings are malloc'd, we have to scan the * list and delete them individually. If we used palloc for the - * strings then we could just do DLFreeList to get rid of both - * the list nodes and the list base... + * strings then we could just do DLFreeList to get rid of both the + * list nodes and the list base... */ while ((p = DLRemHead(pendingNotifies)) != NULL) { diff --git a/src/backend/commands/cluster.c b/src/backend/commands/cluster.c index ae6cafa7b7c..29fb0d9a490 100644 --- a/src/backend/commands/cluster.c +++ b/src/backend/commands/cluster.c @@ -14,7 +14,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/cluster.c,v 1.38 1999/02/13 23:15:02 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/cluster.c,v 1.39 1999/05/25 16:08:16 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -236,17 +236,17 @@ copy_heap(Oid OIDOldHeap) static void copy_index(Oid OIDOldIndex, Oid OIDNewHeap) { - Relation OldIndex, - NewHeap; - HeapTuple Old_pg_index_Tuple, - Old_pg_index_relation_Tuple, - pg_proc_Tuple; + Relation OldIndex, + NewHeap; + HeapTuple Old_pg_index_Tuple, + Old_pg_index_relation_Tuple, + pg_proc_Tuple; Form_pg_index Old_pg_index_Form; Form_pg_class Old_pg_index_relation_Form; - Form_pg_proc pg_proc_Form; - char *NewIndexName; - AttrNumber *attnumP; - int natts; + Form_pg_proc pg_proc_Form; + char *NewIndexName; + AttrNumber *attnumP; + int natts; FuncIndexInfo *finfo; NewHeap = heap_open(OIDNewHeap); @@ -259,14 +259,14 @@ copy_index(Oid OIDOldIndex, Oid OIDNewHeap) */ Old_pg_index_Tuple = SearchSysCacheTuple(INDEXRELID, ObjectIdGetDatum(RelationGetRelid(OldIndex)), - 0, 0, 0); + 0, 0, 0); Assert(Old_pg_index_Tuple); Old_pg_index_Form = (Form_pg_index) GETSTRUCT(Old_pg_index_Tuple); Old_pg_index_relation_Tuple = SearchSysCacheTuple(RELOID, ObjectIdGetDatum(RelationGetRelid(OldIndex)), - 0, 0, 0); + 0, 0, 0); Assert(Old_pg_index_relation_Tuple); Old_pg_index_relation_Form = (Form_pg_class) GETSTRUCT(Old_pg_index_relation_Tuple); @@ -296,7 +296,7 @@ copy_index(Oid OIDOldIndex, Oid OIDNewHeap) pg_proc_Tuple = SearchSysCacheTuple(PROOID, ObjectIdGetDatum(Old_pg_index_Form->indproc), - 0, 0, 0); + 0, 0, 0); Assert(pg_proc_Tuple); pg_proc_Form = (Form_pg_proc) GETSTRUCT(pg_proc_Tuple); @@ -319,7 +319,7 @@ copy_index(Oid OIDOldIndex, Oid OIDNewHeap) (uint16) 0, (Datum) NULL, NULL, Old_pg_index_Form->indislossy, Old_pg_index_Form->indisunique, - Old_pg_index_Form->indisprimary); + Old_pg_index_Form->indisprimary); heap_close(OldIndex); heap_close(NewHeap); @@ -329,14 +329,14 @@ copy_index(Oid OIDOldIndex, Oid OIDNewHeap) static void rebuildheap(Oid OIDNewHeap, Oid OIDOldHeap, Oid OIDOldIndex) { - Relation LocalNewHeap, - LocalOldHeap, - LocalOldIndex; - IndexScanDesc ScanDesc; - RetrieveIndexResult ScanResult; - HeapTupleData LocalHeapTuple; - Buffer LocalBuffer; - Oid OIDNewHeapInsert; + Relation LocalNewHeap, + LocalOldHeap, + LocalOldIndex; + IndexScanDesc ScanDesc; + RetrieveIndexResult ScanResult; + HeapTupleData LocalHeapTuple; + Buffer LocalBuffer; + Oid OIDNewHeapInsert; /* * Open the relations I need. Scan through the OldHeap on the OldIndex diff --git a/src/backend/commands/command.c b/src/backend/commands/command.c index 7d8f72d51f9..f4c0f2115a7 100644 --- a/src/backend/commands/command.c +++ b/src/backend/commands/command.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/Attic/command.c,v 1.44 1999/05/10 00:44:56 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/Attic/command.c,v 1.45 1999/05/25 16:08:17 momjian Exp $ * * NOTES * The PortalExecutorHeapMemory crap needs to be eliminated @@ -117,18 +117,18 @@ PerformPortalFetch(char *name, } /* ---------------- - * Create a const node from the given count value + * Create a const node from the given count value * ---------------- */ memset(&limcount, 0, sizeof(limcount)); - limcount.type = T_Const; - limcount.consttype = INT4OID; - limcount.constlen = sizeof(int4); - limcount.constvalue = (Datum)count; - limcount.constisnull = FALSE; + limcount.type = T_Const; + limcount.consttype = INT4OID; + limcount.constlen = sizeof(int4); + limcount.constvalue = (Datum) count; + limcount.constisnull = FALSE; limcount.constbyval = TRUE; limcount.constisset = FALSE; - limcount.constiscast = FALSE; + limcount.constiscast = FALSE; /* ---------------- @@ -193,8 +193,8 @@ PerformPortalFetch(char *name, */ PortalExecutorHeapMemory = (MemoryContext) PortalGetHeapMemory(portal); - ExecutorRun(queryDesc, PortalGetState(portal), feature, - (Node *)NULL, (Node *)&limcount); + ExecutorRun(queryDesc, PortalGetState(portal), feature, + (Node *) NULL, (Node *) &limcount); if (dest == None) /* MOVE */ pfree(queryDesc); @@ -211,7 +211,7 @@ PerformPortalFetch(char *name, * ---------------- */ MemoryContextSwitchTo( - (MemoryContext) PortalGetHeapMemory(GetPortalByName(NULL))); + (MemoryContext) PortalGetHeapMemory(GetPortalByName(NULL))); } /* -------------------------------- @@ -503,7 +503,7 @@ PerformAddAttribute(char *relationName, heap_replace(rel, &reltup->t_self, reltup, NULL); { - HeapTuple temptup; + HeapTuple temptup; if ((temptup = get_temp_rel_by_name(relationName)) != NULL) ((Form_pg_class) GETSTRUCT(temptup))->relnatts = maxatts; @@ -519,7 +519,7 @@ PerformAddAttribute(char *relationName, } void -LockTableCommand(LockStmt *lockstmt) +LockTableCommand(LockStmt * lockstmt) { Relation rel; int aclresult; diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c index 9347c6d67dd..d2b98ec4bc1 100644 --- a/src/backend/commands/copy.c +++ b/src/backend/commands/copy.c @@ -6,7 +6,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/copy.c,v 1.76 1999/05/10 00:44:58 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/copy.c,v 1.77 1999/05/25 16:08:19 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -70,111 +70,138 @@ static int CountTuples(Relation relation); static int lineno; -/* +/* * Internal communications functions */ inline void CopySendData(void *databuf, int datasize, FILE *fp); inline void CopySendString(char *str, FILE *fp); inline void CopySendChar(char c, FILE *fp); inline void CopyGetData(void *databuf, int datasize, FILE *fp); -inline int CopyGetChar(FILE *fp); -inline int CopyGetEof(FILE *fp); -inline int CopyPeekChar(FILE *fp); +inline int CopyGetChar(FILE *fp); +inline int CopyGetEof(FILE *fp); +inline int CopyPeekChar(FILE *fp); inline void CopyDonePeek(FILE *fp, int c, int pickup); /* * CopySendData sends output data either to the file - * specified by fp or, if fp is NULL, using the standard - * backend->frontend functions + * specified by fp or, if fp is NULL, using the standard + * backend->frontend functions * * CopySendString does the same for null-terminated strings * CopySendChar does the same for single characters * * NB: no data conversion is applied by these functions */ -inline void CopySendData(void *databuf, int datasize, FILE *fp) { - if (!fp) - pq_putbytes((char*) databuf, datasize); - else - fwrite(databuf, datasize, 1, fp); +inline void +CopySendData(void *databuf, int datasize, FILE *fp) +{ + if (!fp) + pq_putbytes((char *) databuf, datasize); + else + fwrite(databuf, datasize, 1, fp); } - -inline void CopySendString(char *str, FILE *fp) { - CopySendData(str,strlen(str),fp); + +inline void +CopySendString(char *str, FILE *fp) +{ + CopySendData(str, strlen(str), fp); } -inline void CopySendChar(char c, FILE *fp) { - CopySendData(&c,1,fp); +inline void +CopySendChar(char c, FILE *fp) +{ + CopySendData(&c, 1, fp); } /* * CopyGetData reads output data either from the file - * specified by fp or, if fp is NULL, using the standard - * backend->frontend functions + * specified by fp or, if fp is NULL, using the standard + * backend->frontend functions * * CopyGetChar does the same for single characters * CopyGetEof checks if it's EOF on the input * * NB: no data conversion is applied by these functions */ -inline void CopyGetData(void *databuf, int datasize, FILE *fp) { - if (!fp) - pq_getbytes((char*) databuf, datasize); - else - fread(databuf, datasize, 1, fp); +inline void +CopyGetData(void *databuf, int datasize, FILE *fp) +{ + if (!fp) + pq_getbytes((char *) databuf, datasize); + else + fread(databuf, datasize, 1, fp); } -inline int CopyGetChar(FILE *fp) { - if (!fp) - { - unsigned char ch; - if (pq_getbytes((char*) &ch, 1)) - return EOF; - return ch; - } - else - return getc(fp); +inline int +CopyGetChar(FILE *fp) +{ + if (!fp) + { + unsigned char ch; + + if (pq_getbytes((char *) &ch, 1)) + return EOF; + return ch; + } + else + return getc(fp); } -inline int CopyGetEof(FILE *fp) { - if (!fp) - return 0; /* Never return EOF when talking to frontend ? */ - else - return feof(fp); +inline int +CopyGetEof(FILE *fp) +{ + if (!fp) + return 0; /* Never return EOF when talking to + * frontend ? */ + else + return feof(fp); } /* * CopyPeekChar reads a byte in "peekable" mode. * after each call to CopyPeekChar, a call to CopyDonePeek _must_ * follow. - * CopyDonePeek will either take the peeked char off the steam + * CopyDonePeek will either take the peeked char off the steam * (if pickup is != 0) or leave it on the stream (if pickup == 0) */ -inline int CopyPeekChar(FILE *fp) { - if (!fp) - return pq_peekbyte(); - else - return getc(fp); +inline int +CopyPeekChar(FILE *fp) +{ + if (!fp) + return pq_peekbyte(); + else + return getc(fp); } -inline void CopyDonePeek(FILE *fp, int c, int pickup) { - if (!fp) { - if (pickup) { - /* We want to pick it up - just receive again into dummy buffer */ - char c; - pq_getbytes(&c, 1); - } - /* If we didn't want to pick it up, just leave it where it sits */ - } - else { - if (!pickup) { - /* We don't want to pick it up - so put it back in there */ - ungetc(c,fp); - } - /* If we wanted to pick it up, it's already there */ - } +inline void +CopyDonePeek(FILE *fp, int c, int pickup) +{ + if (!fp) + { + if (pickup) + { + + /* + * We want to pick it up - just receive again into dummy + * buffer + */ + char c; + + pq_getbytes(&c, 1); + } + /* If we didn't want to pick it up, just leave it where it sits */ + } + else + { + if (!pickup) + { + /* We don't want to pick it up - so put it back in there */ + ungetc(c, fp); + } + /* If we wanted to pick it up, it's already there */ + } } - + /* @@ -317,7 +344,7 @@ DoCopy(char *relname, bool binary, bool oids, bool from, bool pipe, else if (!from) { if (!binary) - CopySendData("\\.\n",3,fp); + CopySendData("\\.\n", 3, fp); if (IsUnderPostmaster) pq_endcopyout(false); } @@ -395,8 +422,8 @@ CopyTo(Relation rel, bool binary, bool oids, FILE *fp, char *delim) if (oids && !binary) { - CopySendString(oidout(tuple->t_data->t_oid),fp); - CopySendChar(delim[0],fp); + CopySendString(oidout(tuple->t_data->t_oid), fp); + CopySendChar(delim[0], fp); } for (i = 0; i < attr_count; i++) @@ -466,8 +493,8 @@ CopyTo(Relation rel, bool binary, bool oids, FILE *fp, char *delim) } } } - CopySendData((char *) tuple->t_data + tuple->t_data->t_hoff, - length, fp); + CopySendData((char *) tuple->t_data + tuple->t_data->t_hoff, + length, fp); } } @@ -521,7 +548,7 @@ CopyFrom(Relation rel, bool binary, bool oids, FILE *fp, char *delim) Node **indexPred = NULL; TupleDesc rtupdesc; ExprContext *econtext = NULL; - EState *estate = makeNode(EState); /* for ExecConstraints() */ + EState *estate = makeNode(EState); /* for ExecConstraints() */ #ifndef OMIT_PARTIAL_INDEX TupleTable tupleTable; @@ -566,11 +593,11 @@ CopyFrom(Relation rel, bool binary, bool oids, FILE *fp, char *delim) itupdescArr[i] = RelationGetDescr(index_rels[i]); pgIndexTup = SearchSysCacheTuple(INDEXRELID, ObjectIdGetDatum(RelationGetRelid(index_rels[i])), - 0, 0, 0); + 0, 0, 0); Assert(pgIndexTup); pgIndexP[i] = (Form_pg_index) GETSTRUCT(pgIndexTup); for (attnumP = &(pgIndexP[i]->indkey[0]), natts = 0; - natts < INDEX_MAX_KEYS && *attnumP != InvalidAttrNumber; + natts < INDEX_MAX_KEYS && *attnumP != InvalidAttrNumber; attnumP++, natts++); if (pgIndexP[i]->indproc != InvalidOid) { @@ -777,7 +804,7 @@ CopyFrom(Relation rel, bool binary, bool oids, FILE *fp, char *delim) } else if (nulls[i] != 'n') { - ptr = (char *)att_align(ptr, attr[i]->attlen, attr[i]->attalign); + ptr = (char *) att_align(ptr, attr[i]->attlen, attr[i]->attalign); values[i] = (Datum) ptr; ptr = att_addlength(ptr, attr[i]->attlen, ptr); } @@ -888,7 +915,7 @@ CopyFrom(Relation rel, bool binary, bool oids, FILE *fp, char *delim) pfree(index_nulls); pfree(idatum); pfree(byval); - + if (!binary) { pfree(in_functions); @@ -903,7 +930,7 @@ CopyFrom(Relation rel, bool binary, bool oids, FILE *fp, char *delim) { if (index_rels[i] == NULL) continue; - if ((index_rels[i])->rd_rel->relam != BTREE_AM_OID && + if ((index_rels[i])->rd_rel->relam != BTREE_AM_OID && (index_rels[i])->rd_rel->relam != HASH_AM_OID) UnlockRelation(index_rels[i], AccessExclusiveLock); index_close(index_rels[i]); @@ -1022,12 +1049,12 @@ GetIndexRelations(Oid main_relation_oid, { index_relation_oid = (Oid) DatumGetInt32(heap_getattr(tuple, 2, - tupDesc, &isnull)); + tupDesc, &isnull)); if (index_relation_oid == main_relation_oid) { scan->index_rel_oid = (Oid) DatumGetInt32(heap_getattr(tuple, - Anum_pg_index_indexrelid, - tupDesc, &isnull)); + Anum_pg_index_indexrelid, + tupDesc, &isnull)); (*n_indices)++; scan->next = (RelationList *) palloc(sizeof(RelationList)); scan = scan->next; @@ -1047,7 +1074,7 @@ GetIndexRelations(Oid main_relation_oid, { (*index_rels)[i] = index_open(scan->index_rel_oid); /* comments in execUtils.c */ - if ((*index_rels)[i] != NULL && + if ((*index_rels)[i] != NULL && ((*index_rels)[i])->rd_rel->relam != BTREE_AM_OID && ((*index_rels)[i])->rd_rel->relam != HASH_AM_OID) LockRelation((*index_rels)[i], AccessExclusiveLock); @@ -1176,26 +1203,29 @@ CopyReadAttribute(FILE *fp, bool *isnull, char *delim) if (ISOCTAL(c)) { val = (val << 3) + VALUE(c); - CopyDonePeek(fp, c, 1); /* Pick up the character! */ + CopyDonePeek(fp, c, 1); /* Pick up the + * character! */ c = CopyPeekChar(fp); - if (ISOCTAL(c)) { - CopyDonePeek(fp,c,1); /* pick up! */ + if (ISOCTAL(c)) + { + CopyDonePeek(fp, c, 1); /* pick up! */ val = (val << 3) + VALUE(c); } else { - if (CopyGetEof(fp)) { - CopyDonePeek(fp,c,1); /* pick up */ + if (CopyGetEof(fp)) + { + CopyDonePeek(fp, c, 1); /* pick up */ return NULL; } - CopyDonePeek(fp,c,0); /* Return to stream! */ + CopyDonePeek(fp, c, 0); /* Return to stream! */ } } else { if (CopyGetEof(fp)) return NULL; - CopyDonePeek(fp,c,0); /* Return to stream! */ + CopyDonePeek(fp, c, 0); /* Return to stream! */ } c = val & 0377; } diff --git a/src/backend/commands/creatinh.c b/src/backend/commands/creatinh.c index 0d4c3fc8b87..e9c5fdcd894 100644 --- a/src/backend/commands/creatinh.c +++ b/src/backend/commands/creatinh.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/Attic/creatinh.c,v 1.40 1999/02/13 23:15:05 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/Attic/creatinh.c,v 1.41 1999/05/25 16:08:20 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -39,7 +39,7 @@ static List *MergeAttributes(List *schema, List *supers, List **supconstr); static void StoreCatalogInheritance(Oid relationId, List *supers); /* ---------------------------------------------------------------- - * DefineRelation + * DefineRelation * Creates a new relation. * ---------------------------------------------------------------- */ @@ -90,10 +90,10 @@ DefineRelation(CreateStmt *stmt, char relkind) if (constraints != NIL) { - List *entry; - int nconstr = length(constraints), - ncheck = 0, - i; + List *entry; + int nconstr = length(constraints), + ncheck = 0, + i; ConstrCheck *check = (ConstrCheck *) palloc(nconstr * sizeof(ConstrCheck)); foreach(entry, constraints) @@ -107,9 +107,9 @@ DefineRelation(CreateStmt *stmt, char relkind) for (i = 0; i < ncheck; i++) { if (strcmp(check[i].ccname, cdef->name) == 0) - elog(ERROR, - "DefineRelation: name (%s) of CHECK constraint duplicated", - cdef->name); + elog(ERROR, + "DefineRelation: name (%s) of CHECK constraint duplicated", + cdef->name); } check[ncheck].ccname = cdef->name; } @@ -145,7 +145,7 @@ DefineRelation(CreateStmt *stmt, char relkind) } /* - * RemoveRelation + * RemoveRelation * Deletes a new relation. * * Exceptions: @@ -164,7 +164,7 @@ RemoveRelation(char *name) /* - * MergeAttributes + * MergeAttributes * Returns new schema given initial schema and supers. * * @@ -276,8 +276,8 @@ MergeAttributes(List *schema, List *supers, List **supconstr) */ attributeName = (attribute->attname).data; tuple = SearchSysCacheTuple(TYPOID, - ObjectIdGetDatum(attribute->atttypid), - 0, 0, 0); + ObjectIdGetDatum(attribute->atttypid), + 0, 0, 0); Assert(HeapTupleIsValid(tuple)); attributeType = (((Form_pg_type) GETSTRUCT(tuple))->typname).data; @@ -365,7 +365,7 @@ MergeAttributes(List *schema, List *supers, List **supconstr) } /* - * StoreCatalogInheritance + * StoreCatalogInheritance * Updates the system catalogs with proper inheritance information. */ static void @@ -411,9 +411,9 @@ StoreCatalogInheritance(Oid relationId, List *supers) */ idList = lappendi(idList, tuple->t_data->t_oid); - datum[0] = ObjectIdGetDatum(relationId); /* inhrel */ - datum[1] = ObjectIdGetDatum(tuple->t_data->t_oid); /* inhparent */ - datum[2] = Int16GetDatum(seqNumber); /* inhseqno */ + datum[0] = ObjectIdGetDatum(relationId); /* inhrel */ + datum[1] = ObjectIdGetDatum(tuple->t_data->t_oid); /* inhparent */ + datum[2] = Int16GetDatum(seqNumber); /* inhseqno */ nullarr[0] = ' '; nullarr[1] = ' '; @@ -467,8 +467,8 @@ StoreCatalogInheritance(Oid relationId, List *supers) break; lnext(current) = lconsi(((Form_pg_inherits) - GETSTRUCT(tuple))->inhparent, - NIL); + GETSTRUCT(tuple))->inhparent, + NIL); current = lnext(current); } diff --git a/src/backend/commands/dbcommands.c b/src/backend/commands/dbcommands.c index 943d7acb432..06f0a8115a5 100644 --- a/src/backend/commands/dbcommands.c +++ b/src/backend/commands/dbcommands.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/dbcommands.c,v 1.34 1999/05/10 00:44:59 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/dbcommands.c,v 1.35 1999/05/25 16:08:21 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -47,8 +47,8 @@ createdb(char *dbname, char *dbpath, int encoding, CommandDest dest) Oid db_id; int4 user_id; char buf[512]; - char *lp, - loc[512]; + char *lp, + loc[512]; /* * If this call returns, the database does not exist and we're allowed @@ -80,13 +80,13 @@ createdb(char *dbname, char *dbpath, int encoding, CommandDest dest) elog(ERROR, "Unable to create database directory '%s'", lp); snprintf(buf, 512, "%s %s%cbase%ctemplate1%c* %s", - COPY_CMD, DataDir, SEP_CHAR, SEP_CHAR, SEP_CHAR, lp); + COPY_CMD, DataDir, SEP_CHAR, SEP_CHAR, SEP_CHAR, lp); system(buf); - snprintf(buf, 512, - "insert into pg_database (datname, datdba, encoding, datpath)" - " values ('%s', '%d', '%d', '%s');", dbname, user_id, encoding, - loc); + snprintf(buf, 512, + "insert into pg_database (datname, datdba, encoding, datpath)" + " values ('%s', '%d', '%d', '%s');", dbname, user_id, encoding, + loc); pg_exec_query_dest(buf, dest, false); } @@ -96,9 +96,9 @@ destroydb(char *dbname, CommandDest dest) { int4 user_id; Oid db_id; - char *path, - dbpath[MAXPGPATH + 1], - buf[512]; + char *path, + dbpath[MAXPGPATH + 1], + buf[512]; /* * If this call returns, the database exists and we're allowed to @@ -122,9 +122,9 @@ destroydb(char *dbname, CommandDest dest) * remove the pg_database tuple FIRST, this may fail due to * permissions problems */ - snprintf(buf, 512, - "delete from pg_database where pg_database.oid = \'%u\'::oid", db_id); - pg_exec_query_dest(buf ,dest, false); + snprintf(buf, 512, + "delete from pg_database where pg_database.oid = \'%u\'::oid", db_id); + pg_exec_query_dest(buf, dest, false); /* drop pages for this database that are in the shared buffer cache */ DropBuffers(db_id); @@ -294,13 +294,13 @@ static void stop_vacuum(char *dbpath, char *dbname) { char filename[256]; - FILE *fp; + FILE *fp; int pid; if (strchr(dbpath, SEP_CHAR) != 0) { - snprintf(filename, 256, "%s%cbase%c%s%c%s.vacuum", - DataDir, SEP_CHAR, SEP_CHAR, dbname, SEP_CHAR, dbname); + snprintf(filename, 256, "%s%cbase%c%s%c%s.vacuum", + DataDir, SEP_CHAR, SEP_CHAR, dbname, SEP_CHAR, dbname); } else snprintf(filename, 256, "%s%c%s.vacuum", dbpath, SEP_CHAR, dbname); diff --git a/src/backend/commands/define.c b/src/backend/commands/define.c index 04bd1e89638..34d322524c7 100644 --- a/src/backend/commands/define.c +++ b/src/backend/commands/define.c @@ -9,7 +9,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/define.c,v 1.28 1999/04/09 22:35:41 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/define.c,v 1.29 1999/05/25 16:08:22 momjian Exp $ * * DESCRIPTION * The "DefineFoo" routines take the parse tree and pick out the @@ -203,7 +203,7 @@ interpret_AS_clause(const char *languageName, const char *as, /* - * CreateFunction + * CreateFunction * Execute a CREATE FUNCTION utility statement. * */ @@ -574,7 +574,7 @@ DefineAggregate(char *aggName, List *parameters) } /* - * DefineType + * DefineType * Registers a new type. * */ diff --git a/src/backend/commands/explain.c b/src/backend/commands/explain.c index 6a04417964b..66fcd8647b0 100644 --- a/src/backend/commands/explain.c +++ b/src/backend/commands/explain.c @@ -4,7 +4,7 @@ * * Copyright (c) 1994-5, Regents of the University of California * - * $Id: explain.c,v 1.36 1999/05/09 23:31:45 tgl Exp $ + * $Id: explain.c,v 1.37 1999/05/25 16:08:23 momjian Exp $ * */ #include <stdio.h> @@ -34,7 +34,7 @@ typedef struct ExplainState } ExplainState; static char *Explain_PlanToString(Plan *plan, ExplainState *es); -static void printLongNotice(const char * header, const char * message); +static void printLongNotice(const char *header, const char *message); static void ExplainOneQuery(Query *query, bool verbose, CommandDest dest); @@ -46,8 +46,8 @@ static void ExplainOneQuery(Query *query, bool verbose, CommandDest dest); void ExplainQuery(Query *query, bool verbose, CommandDest dest) { - List *rewritten; - List *l; + List *rewritten; + List *l; /* rewriter and planner may not work in aborted state? */ if (IsAbortedTransactionBlockState()) @@ -145,10 +145,10 @@ ExplainOneQuery(Query *query, bool verbose, CommandDest dest) static void explain_outNode(StringInfo str, Plan *plan, int indent, ExplainState *es) { - List *l; + List *l; Relation relation; - char *pname; - int i; + char *pname; + int i; if (plan == NULL) { @@ -208,15 +208,13 @@ explain_outNode(StringInfo str, Plan *plan, int indent, ExplainState *es) case T_IndexScan: appendStringInfo(str, " using "); i = 0; - foreach (l, ((IndexScan *) plan)->indxid) + foreach(l, ((IndexScan *) plan)->indxid) { relation = RelationIdCacheGetRelation((int) lfirst(l)); if (++i > 1) - { appendStringInfo(str, ", "); - } - appendStringInfo(str, - stringStringInfo((RelationGetRelationName(relation))->data)); + appendStringInfo(str, + stringStringInfo((RelationGetRelationName(relation))->data)); } case T_SeqScan: if (((Scan *) plan)->scanrelid > 0) @@ -227,7 +225,7 @@ explain_outNode(StringInfo str, Plan *plan, int indent, ExplainState *es) if (strcmp(rte->refname, rte->relname) != 0) { appendStringInfo(str, "%s ", - stringStringInfo(rte->relname)); + stringStringInfo(rte->relname)); } appendStringInfo(str, stringStringInfo(rte->refname)); } @@ -238,7 +236,7 @@ explain_outNode(StringInfo str, Plan *plan, int indent, ExplainState *es) if (es->printCost) { appendStringInfo(str, " (cost=%.2f rows=%d width=%d)", - plan->cost, plan->plan_size, plan->plan_width); + plan->cost, plan->plan_size, plan->plan_width); } appendStringInfo(str, "\n"); @@ -248,18 +246,14 @@ explain_outNode(StringInfo str, Plan *plan, int indent, ExplainState *es) List *saved_rtable = es->rtable; List *lst; - for (i = 0; i < indent; i++) - { + for (i = 0; i < indent; i++) appendStringInfo(str, " "); - } appendStringInfo(str, " InitPlan\n"); foreach(lst, plan->initPlan) { es->rtable = ((SubPlan *) lfirst(lst))->rtable; for (i = 0; i < indent; i++) - { appendStringInfo(str, " "); - } appendStringInfo(str, " -> "); explain_outNode(str, ((SubPlan *) lfirst(lst))->plan, indent + 2, es); } @@ -270,9 +264,7 @@ explain_outNode(StringInfo str, Plan *plan, int indent, ExplainState *es) if (outerPlan(plan)) { for (i = 0; i < indent; i++) - { appendStringInfo(str, " "); - } appendStringInfo(str, " -> "); explain_outNode(str, outerPlan(plan), indent + 3, es); } @@ -281,9 +273,7 @@ explain_outNode(StringInfo str, Plan *plan, int indent, ExplainState *es) if (innerPlan(plan)) { for (i = 0; i < indent; i++) - { appendStringInfo(str, " "); - } appendStringInfo(str, " -> "); explain_outNode(str, innerPlan(plan), indent + 3, es); } @@ -295,17 +285,13 @@ explain_outNode(StringInfo str, Plan *plan, int indent, ExplainState *es) List *lst; for (i = 0; i < indent; i++) - { appendStringInfo(str, " "); - } appendStringInfo(str, " SubPlan\n"); foreach(lst, plan->subPlan) { es->rtable = ((SubPlan *) lfirst(lst))->rtable; for (i = 0; i < indent; i++) - { appendStringInfo(str, " "); - } appendStringInfo(str, " -> "); explain_outNode(str, ((SubPlan *) lfirst(lst))->plan, indent + 4, es); } @@ -336,9 +322,7 @@ explain_outNode(StringInfo str, Plan *plan, int indent, ExplainState *es) es->rtable = nth(whichplan, appendplan->unionrtables); for (i = 0; i < indent; i++) - { appendStringInfo(str, " "); - } appendStringInfo(str, " -> "); explain_outNode(str, subnode, indent + 4, es); @@ -353,7 +337,7 @@ explain_outNode(StringInfo str, Plan *plan, int indent, ExplainState *es) static char * Explain_PlanToString(Plan *plan, ExplainState *es) { - StringInfoData str; + StringInfoData str; /* see stringinfo.h for an explanation of this maneuver */ initStringInfo(&str); @@ -367,9 +351,9 @@ Explain_PlanToString(Plan *plan, ExplainState *es) * This is a crock ... there shouldn't be an upper limit to what you can elog(). */ static void -printLongNotice(const char * header, const char * message) +printLongNotice(const char *header, const char *message) { - int len = strlen(message); + int len = strlen(message); elog(NOTICE, "%.20s%.*s", header, ELOG_MAXLEN - 64, message); len -= ELOG_MAXLEN - 64; diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 5907205bd87..e7f047477ca 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/indexcmds.c,v 1.3 1999/05/10 00:44:59 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/indexcmds.c,v 1.4 1999/05/25 16:08:24 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -53,7 +53,7 @@ static void NormIndexAttrs(List *attList, AttrNumber *attNumP, static char *GetDefaultOpClass(Oid atttypid); /* - * DefineIndex + * DefineIndex * Creates a new index. * * 'attributeList' is a list of IndexElem specifying either a functional @@ -164,7 +164,7 @@ DefineIndex(char *heapRelationName, if (nargs > INDEX_MAX_KEYS) { elog(ERROR, - "Too many args to function, limit of %d", INDEX_MAX_KEYS); + "Too many args to function, limit of %d", INDEX_MAX_KEYS); } FIsetnArgs(&fInfo, nargs); @@ -207,7 +207,7 @@ DefineIndex(char *heapRelationName, /* - * ExtendIndex + * ExtendIndex * Extends a partial index. * * Exceptions: @@ -304,7 +304,7 @@ ExtendIndex(char *indexRelationName, Expr *predicate, List *rangetable) predInfo->oldPred = oldPred; attributeNumberA = (AttrNumber *) palloc(numberOfAttributes * - sizeof attributeNumberA[0]); + sizeof attributeNumberA[0]); classObjectId = (Oid *) palloc(numberOfAttributes * sizeof classObjectId[0]); @@ -501,7 +501,7 @@ NormIndexAttrs(List *attList, /* list of IndexElem's */ /* we just set the type name because that is all we need */ attribute->typename = makeNode(TypeName); attribute->typename->name = nameout(&((Form_pg_type) GETSTRUCT(tuple))->typname); - + /* we all need the typmod for the char and varchar types. */ attribute->typename->typmod = attform->atttypmod; } @@ -547,7 +547,7 @@ GetDefaultOpClass(Oid atttypid) } /* - * RemoveIndex + * RemoveIndex * Deletes an index. * * Exceptions: diff --git a/src/backend/commands/remove.c b/src/backend/commands/remove.c index 5334bd347d2..7ae4c2c176d 100644 --- a/src/backend/commands/remove.c +++ b/src/backend/commands/remove.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/Attic/remove.c,v 1.32 1999/02/13 23:15:08 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/Attic/remove.c,v 1.33 1999/05/25 16:08:25 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -36,7 +36,7 @@ #endif /* - * RemoveOperator + * RemoveOperator * Deletes an operator. * * Exceptions: @@ -288,7 +288,7 @@ RemoveType(char *typeName) /* type name to be removed */ } /* - * RemoveFunction + * RemoveFunction * Deletes a function. * * Exceptions: diff --git a/src/backend/commands/rename.c b/src/backend/commands/rename.c index 457facdd8fc..061534054a9 100644 --- a/src/backend/commands/rename.c +++ b/src/backend/commands/rename.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/Attic/rename.c,v 1.24 1999/05/17 18:24:48 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/Attic/rename.c,v 1.25 1999/05/25 16:08:26 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -142,7 +142,7 @@ renameatt(char *relname, } } - + if ((relid = RelnameFindRelid(relname)) == InvalidOid) elog(ERROR, "renameatt: relation \"%s\" nonexistent", relname); @@ -201,7 +201,7 @@ renameatt(char *relname, void renamerel(char *oldrelname, char *newrelname) { - int i; + int i; Relation relrelation; /* for RELATION relation */ HeapTuple oldreltup; char oldpath[MAXPGPATH], @@ -237,7 +237,7 @@ renamerel(char *oldrelname, char *newrelname) { sprintf(toldpath, "%s.%d", oldpath, i); sprintf(tnewpath, "%s.%d", newpath, i); - if(rename(toldpath, tnewpath) < 0) + if (rename(toldpath, tnewpath) < 0) break; } diff --git a/src/backend/commands/sequence.c b/src/backend/commands/sequence.c index d76eb07481d..a6f18e01d3d 100644 --- a/src/backend/commands/sequence.c +++ b/src/backend/commands/sequence.c @@ -66,7 +66,7 @@ static void init_params(CreateSeqStmt *seq, Form_pg_sequence new); static int get_param(DefElem *def); /* - * DefineSequence + * DefineSequence * Creates a new sequence relation */ void @@ -218,8 +218,8 @@ nextval(struct varlena * seqin) return elm->last; } - seq = read_info("nextval", elm, &buf); /* lock page' buffer and read - * tuple */ + seq = read_info("nextval", elm, &buf); /* lock page' buffer and + * read tuple */ next = result = seq->last_value; incby = seq->increment_by; @@ -327,8 +327,8 @@ setval(struct varlena * seqin, int4 next) /* open and AccessShareLock sequence */ elm = init_sequence("setval", seqname); - seq = read_info("setval", elm, &buf); /* lock page' buffer and read - * tuple */ + seq = read_info("setval", elm, &buf); /* lock page' buffer and + * read tuple */ if (seq->cache_value != 1) { @@ -361,11 +361,11 @@ setval(struct varlena * seqin, int4 next) static Form_pg_sequence read_info(char *caller, SeqTable elm, Buffer *buf) { - PageHeader page; - ItemId lp; - HeapTupleData tuple; + PageHeader page; + ItemId lp; + HeapTupleData tuple; sequence_magic *sm; - Form_pg_sequence seq; + Form_pg_sequence seq; if (RelationGetNumberOfBlocks(elm->rel) != 1) elog(ERROR, "%s.%s: invalid number of blocks in sequence", @@ -464,7 +464,7 @@ init_sequence(char *caller, char *name) /* - * CloseSequences + * CloseSequences * is calling by xact mgr at commit/abort. */ void diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c index 09b7fdcbc3d..cc3d27599c1 100644 --- a/src/backend/commands/trigger.c +++ b/src/backend/commands/trigger.c @@ -362,9 +362,9 @@ RelationBuildTriggers(Relation relation) Form_pg_trigger pg_trigger; Relation irel; ScanKeyData skey; - HeapTupleData tuple; - IndexScanDesc sd; - RetrieveIndexResult indexRes; + HeapTupleData tuple; + IndexScanDesc sd; + RetrieveIndexResult indexRes; Buffer buffer; struct varlena *val; bool isnull; @@ -659,14 +659,14 @@ ExecARInsertTriggers(Relation rel, HeapTuple trigtuple) bool ExecBRDeleteTriggers(EState *estate, ItemPointer tupleid) { - Relation rel = estate->es_result_relation_info->ri_RelationDesc; - TriggerData *SaveTriggerData; - int ntrigs = rel->trigdesc->n_before_row[TRIGGER_EVENT_DELETE]; - Trigger **trigger = rel->trigdesc->tg_before_row[TRIGGER_EVENT_DELETE]; - HeapTuple trigtuple; - HeapTuple newtuple = NULL; + Relation rel = estate->es_result_relation_info->ri_RelationDesc; + TriggerData *SaveTriggerData; + int ntrigs = rel->trigdesc->n_before_row[TRIGGER_EVENT_DELETE]; + Trigger **trigger = rel->trigdesc->tg_before_row[TRIGGER_EVENT_DELETE]; + HeapTuple trigtuple; + HeapTuple newtuple = NULL; TupleTableSlot *newSlot; - int i; + int i; trigtuple = GetTupleForTrigger(estate, tupleid, &newSlot); if (trigtuple == NULL) @@ -697,7 +697,7 @@ ExecBRDeleteTriggers(EState *estate, ItemPointer tupleid) void ExecARDeleteTriggers(EState *estate, ItemPointer tupleid) { - Relation rel = estate->es_result_relation_info->ri_RelationDesc; + Relation rel = estate->es_result_relation_info->ri_RelationDesc; TriggerData *SaveTriggerData; int ntrigs = rel->trigdesc->n_after_row[TRIGGER_EVENT_DELETE]; Trigger **trigger = rel->trigdesc->tg_after_row[TRIGGER_EVENT_DELETE]; @@ -727,23 +727,23 @@ ExecARDeleteTriggers(EState *estate, ItemPointer tupleid) HeapTuple ExecBRUpdateTriggers(EState *estate, ItemPointer tupleid, HeapTuple newtuple) { - Relation rel = estate->es_result_relation_info->ri_RelationDesc; - TriggerData *SaveTriggerData; - int ntrigs = rel->trigdesc->n_before_row[TRIGGER_EVENT_UPDATE]; - Trigger **trigger = rel->trigdesc->tg_before_row[TRIGGER_EVENT_UPDATE]; - HeapTuple trigtuple; - HeapTuple oldtuple; - HeapTuple intuple = newtuple; + Relation rel = estate->es_result_relation_info->ri_RelationDesc; + TriggerData *SaveTriggerData; + int ntrigs = rel->trigdesc->n_before_row[TRIGGER_EVENT_UPDATE]; + Trigger **trigger = rel->trigdesc->tg_before_row[TRIGGER_EVENT_UPDATE]; + HeapTuple trigtuple; + HeapTuple oldtuple; + HeapTuple intuple = newtuple; TupleTableSlot *newSlot; - int i; + int i; trigtuple = GetTupleForTrigger(estate, tupleid, &newSlot); if (trigtuple == NULL) return NULL; /* - * In READ COMMITTED isolevel it's possible that newtuple - * was changed due to concurrent update. + * In READ COMMITTED isolevel it's possible that newtuple was changed + * due to concurrent update. */ if (newSlot != NULL) intuple = newtuple = ExecRemoveJunk(estate->es_junkFilter, newSlot); @@ -772,7 +772,7 @@ ExecBRUpdateTriggers(EState *estate, ItemPointer tupleid, HeapTuple newtuple) void ExecARUpdateTriggers(EState *estate, ItemPointer tupleid, HeapTuple newtuple) { - Relation rel = estate->es_result_relation_info->ri_RelationDesc; + Relation rel = estate->es_result_relation_info->ri_RelationDesc; TriggerData *SaveTriggerData; int ntrigs = rel->trigdesc->n_after_row[TRIGGER_EVENT_UPDATE]; Trigger **trigger = rel->trigdesc->tg_after_row[TRIGGER_EVENT_UPDATE]; @@ -799,22 +799,22 @@ ExecARUpdateTriggers(EState *estate, ItemPointer tupleid, HeapTuple newtuple) return; } -extern TupleTableSlot *EvalPlanQual(EState *estate, Index rti, ItemPointer tid); +extern TupleTableSlot *EvalPlanQual(EState *estate, Index rti, ItemPointer tid); static HeapTuple GetTupleForTrigger(EState *estate, ItemPointer tid, TupleTableSlot **newSlot) { - Relation relation = estate->es_result_relation_info->ri_RelationDesc; - HeapTupleData tuple; - HeapTuple result; - Buffer buffer; + Relation relation = estate->es_result_relation_info->ri_RelationDesc; + HeapTupleData tuple; + HeapTuple result; + Buffer buffer; if (newSlot != NULL) { - int test; + int test; /* - * mark tuple for update + * mark tuple for update */ *newSlot = NULL; tuple.t_self = *tid; @@ -824,7 +824,7 @@ ltrmark:; { case HeapTupleSelfUpdated: ReleaseBuffer(buffer); - return(NULL); + return (NULL); case HeapTupleMayBeUpdated: break; @@ -835,9 +835,9 @@ ltrmark:; elog(ERROR, "Can't serialize access due to concurrent update"); else if (!(ItemPointerEquals(&(tuple.t_self), tid))) { - TupleTableSlot *epqslot = EvalPlanQual(estate, - estate->es_result_relation_info->ri_RangeTableIndex, - &(tuple.t_self)); + TupleTableSlot *epqslot = EvalPlanQual(estate, + estate->es_result_relation_info->ri_RangeTableIndex, + &(tuple.t_self)); if (!(TupIsNull(epqslot))) { @@ -846,23 +846,23 @@ ltrmark:; goto ltrmark; } } - /* - * if tuple was deleted or PlanQual failed - * for updated tuple - we have not process - * this tuple! + + /* + * if tuple was deleted or PlanQual failed for updated + * tuple - we have not process this tuple! */ - return(NULL); + return (NULL); default: ReleaseBuffer(buffer); elog(ERROR, "Unknown status %u from heap_mark4update", test); - return(NULL); + return (NULL); } } else { - PageHeader dp; - ItemId lp; + PageHeader dp; + ItemId lp; buffer = ReadBuffer(relation, ItemPointerGetBlockNumber(tid)); diff --git a/src/backend/commands/user.c b/src/backend/commands/user.c index 2b99c8efa89..57ac35fb1f4 100644 --- a/src/backend/commands/user.c +++ b/src/backend/commands/user.c @@ -5,11 +5,11 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: user.c,v 1.27 1999/04/02 06:16:36 tgl Exp $ + * $Id: user.c,v 1.28 1999/05/25 16:08:27 momjian Exp $ * *------------------------------------------------------------------------- */ -#include <stdio.h> +#include <stdio.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h> @@ -35,7 +35,7 @@ static void CheckPgUserAclNotNull(void); -#define SQL_LENGTH 512 +#define SQL_LENGTH 512 /*--------------------------------------------------------------------- * UpdatePgPwdFile @@ -49,9 +49,9 @@ void UpdatePgPwdFile(char *sql, CommandDest dest) { - char *filename, - *tempname; - int bufsize; + char *filename, + *tempname; + int bufsize; /* * Create a temporary filename to be renamed later. This prevents the @@ -68,9 +68,9 @@ UpdatePgPwdFile(char *sql, CommandDest dest) * SEPCHAR character as the delimiter between fields. Then rename the * file to its final name. */ - snprintf(sql, SQL_LENGTH, - "copy %s to '%s' using delimiters %s", - ShadowRelationName, tempname, CRYPT_PWD_FILE_SEPCHAR); + snprintf(sql, SQL_LENGTH, + "copy %s to '%s' using delimiters %s", + ShadowRelationName, tempname, CRYPT_PWD_FILE_SEPCHAR); pg_exec_query_dest(sql, dest, false); rename(tempname, filename); pfree((void *) tempname); @@ -94,19 +94,19 @@ UpdatePgPwdFile(char *sql, CommandDest dest) void DefineUser(CreateUserStmt *stmt, CommandDest dest) { - char *pg_shadow, - sql[SQL_LENGTH]; - Relation pg_shadow_rel; - TupleDesc pg_shadow_dsc; - HeapScanDesc scan; - HeapTuple tuple; - Datum datum; - bool exists = false, - n, - inblock, - havepassword, - havevaluntil; - int max_id = -1; + char *pg_shadow, + sql[SQL_LENGTH]; + Relation pg_shadow_rel; + TupleDesc pg_shadow_dsc; + HeapScanDesc scan; + HeapTuple tuple; + Datum datum; + bool exists = false, + n, + inblock, + havepassword, + havevaluntil; + int max_id = -1; havepassword = stmt->password && stmt->password[0]; havevaluntil = stmt->validUntil && stmt->validUntil[0]; @@ -161,21 +161,21 @@ DefineUser(CreateUserStmt *stmt, CommandDest dest) UnlockRelation(pg_shadow_rel, AccessExclusiveLock); heap_close(pg_shadow_rel); UserAbortTransactionBlock(); - elog(ERROR, - "defineUser: user \"%s\" has already been created", stmt->user); + elog(ERROR, + "defineUser: user \"%s\" has already been created", stmt->user); return; } /* * Build the insert statement to be executed. * - * XXX Ugly as this code is, it still fails to cope with ' or \ - * in any of the provided strings. + * XXX Ugly as this code is, it still fails to cope with ' or \ in any of + * the provided strings. */ - snprintf(sql, SQL_LENGTH, + snprintf(sql, SQL_LENGTH, "insert into %s (usename,usesysid,usecreatedb,usetrace," "usesuper,usecatupd,passwd,valuntil) " - "values('%s',%d,'%c','t','%c','t',%s%s%s,%s%s%s)", + "values('%s',%d,'%c','t','%c','t',%s%s%s,%s%s%s)", ShadowRelationName, stmt->user, max_id + 1, @@ -216,12 +216,12 @@ extern void AlterUser(AlterUserStmt *stmt, CommandDest dest) { - char *pg_shadow, - sql[SQL_LENGTH]; + char *pg_shadow, + sql[SQL_LENGTH]; Relation pg_shadow_rel; TupleDesc pg_shadow_dsc; HeapTuple tuple; - bool inblock; + bool inblock; if (stmt->password) CheckPgUserAclNotNull(); @@ -272,34 +272,32 @@ AlterUser(AlterUserStmt *stmt, CommandDest dest) snprintf(sql, SQL_LENGTH, "update %s set", ShadowRelationName); if (stmt->password) - { snprintf(sql, SQL_LENGTH, "%s passwd = '%s'", pstrdup(sql), stmt->password); - } if (stmt->createdb) { snprintf(sql, SQL_LENGTH, "%s %susecreatedb='%s'", - pstrdup(sql), stmt->password ? "," : "", - *stmt->createdb ? "t" : "f"); + pstrdup(sql), stmt->password ? "," : "", + *stmt->createdb ? "t" : "f"); } if (stmt->createuser) { snprintf(sql, SQL_LENGTH, "%s %susesuper='%s'", - pstrdup(sql), (stmt->password || stmt->createdb) ? "," : "", - *stmt->createuser ? "t" : "f"); + pstrdup(sql), (stmt->password || stmt->createdb) ? "," : "", + *stmt->createuser ? "t" : "f"); } if (stmt->validUntil) { snprintf(sql, SQL_LENGTH, "%s %svaluntil='%s'", - pstrdup(sql), - (stmt->password || stmt->createdb || stmt->createuser) ? "," : "", - stmt->validUntil); + pstrdup(sql), + (stmt->password || stmt->createdb || stmt->createuser) ? "," : "", + stmt->validUntil); } snprintf(sql, SQL_LENGTH, "%s where usename = '%s'", - pstrdup(sql), stmt->user); + pstrdup(sql), stmt->user); pg_exec_query_dest(sql, dest, false); @@ -393,8 +391,8 @@ RemoveUser(char *user, CommandDest dest) datum = heap_getattr(tuple, Anum_pg_database_datname, pg_dsc, &n); if (memcmp((void *) datum, "template1", 9)) { - dbase = - (char **) repalloc((void *) dbase, sizeof(char *) * (ndbase + 1)); + dbase = + (char **) repalloc((void *) dbase, sizeof(char *) * (ndbase + 1)); dbase[ndbase] = (char *) palloc(NAMEDATALEN + 1); memcpy((void *) dbase[ndbase], (void *) datum, NAMEDATALEN); dbase[ndbase++][NAMEDATALEN] = '\0'; @@ -435,8 +433,8 @@ RemoveUser(char *user, CommandDest dest) /* * Remove the user from the pg_shadow table */ - snprintf(sql, SQL_LENGTH, - "delete from %s where usename = '%s'", ShadowRelationName, user); + snprintf(sql, SQL_LENGTH, + "delete from %s where usename = '%s'", ShadowRelationName, user); pg_exec_query_dest(sql, dest, false); UpdatePgPwdFile(sql, dest); diff --git a/src/backend/commands/vacuum.c b/src/backend/commands/vacuum.c index 82ba86f84e9..8c929678b35 100644 --- a/src/backend/commands/vacuum.c +++ b/src/backend/commands/vacuum.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.103 1999/05/23 09:10:24 vadim Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.104 1999/05/25 16:08:27 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -66,7 +66,7 @@ static Portal vc_portal; static int MESSAGE_LEVEL; /* message level */ -static TransactionId XmaxRecent; +static TransactionId XmaxRecent; #define swapLong(a,b) {long tmp; tmp=a; a=b; b=tmp;} #define swapInt(a,b) {int tmp; tmp=a; a=b; b=tmp;} @@ -101,8 +101,8 @@ static void vc_free(VRelList vrl); static void vc_getindices(Oid relid, int *nindices, Relation **Irel); static void vc_clsindices(int nindices, Relation *Irel); static void vc_mkindesc(Relation onerel, int nindices, Relation *Irel, IndDesc **Idesc); -static void *vc_find_eq(void *bot, int nelem, int size, void *elm, - int (*compar) (const void *, const void *)); +static void *vc_find_eq(void *bot, int nelem, int size, void *elm, + int (*compar) (const void *, const void *)); static int vc_cmp_blk(const void *left, const void *right); static int vc_cmp_offno(const void *left, const void *right); static int vc_cmp_vtlinks(const void *left, const void *right); @@ -222,14 +222,15 @@ vc_shutdown() { /* on entry, we are not in a transaction */ - /* Flush the init file that relcache.c uses to save startup time. - * The next backend startup will rebuild the init file with up-to-date - * information from pg_class. This lets the optimizer see the stats that - * we've collected for certain critical system indexes. See relcache.c - * for more details. + /* + * Flush the init file that relcache.c uses to save startup time. The + * next backend startup will rebuild the init file with up-to-date + * information from pg_class. This lets the optimizer see the stats + * that we've collected for certain critical system indexes. See + * relcache.c for more details. * - * Ignore any failure to unlink the file, since it might not be there - * if no backend has been started since the last vacuum... + * Ignore any failure to unlink the file, since it might not be there if + * no backend has been started since the last vacuum... */ unlink(RELCACHE_INIT_FILENAME); @@ -578,7 +579,7 @@ vc_vacone(Oid relid, bool analyze, List *va_cols) /* update statistics in pg_class */ vc_updstats(vacrelstats->relid, vacrelstats->num_pages, - vacrelstats->num_tuples, vacrelstats->hasindex, vacrelstats); + vacrelstats->num_tuples, vacrelstats->hasindex, vacrelstats); /* next command frees attribute stats */ CommitTransactionCommand(); @@ -601,7 +602,7 @@ vc_scanheap(VRelStats *vacrelstats, Relation onerel, blkno; ItemId itemid; Buffer buf; - HeapTupleData tuple; + HeapTupleData tuple; Page page, tempPage = NULL; OffsetNumber offnum, @@ -712,7 +713,7 @@ vc_scanheap(VRelStats *vacrelstats, Relation onerel, else if (tuple.t_data->t_infomask & HEAP_MOVED_OFF) { if (TransactionIdDidCommit((TransactionId) - tuple.t_data->t_cmin)) + tuple.t_data->t_cmin)) { tuple.t_data->t_infomask |= HEAP_XMIN_INVALID; tupgone = true; @@ -759,7 +760,7 @@ vc_scanheap(VRelStats *vacrelstats, Relation onerel, else { elog(NOTICE, "Rel %s: TID %u/%u: InsertTransactionInProgress %u - can't shrink relation", - relname, blkno, offnum, tuple.t_data->t_xmin); + relname, blkno, offnum, tuple.t_data->t_xmin); do_shrinking = false; } } @@ -799,6 +800,7 @@ vc_scanheap(VRelStats *vacrelstats, Relation onerel, } else if (!TransactionIdIsInProgress(tuple.t_data->t_xmax)) { + /* * Not Aborted, Not Committed, Not in Progress - so it * from crashed process. - vadim 06/02/97 @@ -812,11 +814,12 @@ vc_scanheap(VRelStats *vacrelstats, Relation onerel, relname, blkno, offnum, tuple.t_data->t_xmax); do_shrinking = false; } + /* - * If tuple is recently deleted then - * we must not remove it from relation. + * If tuple is recently deleted then we must not remove it + * from relation. */ - if (tupgone && tuple.t_data->t_xmax >= XmaxRecent && + if (tupgone && tuple.t_data->t_xmax >= XmaxRecent && tuple.t_data->t_infomask & HEAP_XMIN_COMMITTED) { tupgone = false; @@ -826,20 +829,21 @@ vc_scanheap(VRelStats *vacrelstats, Relation onerel, tuple.t_data->t_infomask |= HEAP_XMAX_COMMITTED; pgchanged = true; } + /* * If we do shrinking and this tuple is updated one * then remember it to construct updated tuple * dependencies. */ - if (do_shrinking && !(ItemPointerEquals(&(tuple.t_self), - &(tuple.t_data->t_ctid)))) + if (do_shrinking && !(ItemPointerEquals(&(tuple.t_self), + &(tuple.t_data->t_ctid)))) { if (free_vtlinks == 0) { free_vtlinks = 1000; - vtlinks = (VTupleLink) repalloc(vtlinks, - (free_vtlinks + num_vtlinks) * - sizeof(VTupleLinkData)); + vtlinks = (VTupleLink) repalloc(vtlinks, + (free_vtlinks + num_vtlinks) * + sizeof(VTupleLinkData)); } vtlinks[num_vtlinks].new_tid = tuple.t_data->t_ctid; vtlinks[num_vtlinks].this_tid = tuple.t_self; @@ -962,8 +966,8 @@ vc_scanheap(VRelStats *vacrelstats, Relation onerel, if (usable_free_size > 0 && num_vtlinks > 0) { - qsort((char *) vtlinks, num_vtlinks, sizeof (VTupleLinkData), - vc_cmp_vtlinks); + qsort((char *) vtlinks, num_vtlinks, sizeof(VTupleLinkData), + vc_cmp_vtlinks); vacrelstats->vtlinks = vtlinks; vacrelstats->num_vtlinks = num_vtlinks; } @@ -980,10 +984,10 @@ vc_scanheap(VRelStats *vacrelstats, Relation onerel, Tup %u: Vac %u, Keep/VTL %u/%u, Crash %u, UnUsed %u, MinLen %u, MaxLen %u; \ Re-using: Free/Avail. Space %u/%u; EndEmpty/Avail. Pages %u/%u. \ Elapsed %u/%u sec.", - nblocks, changed_pages, vacuum_pages->vpl_num_pages, empty_pages, - new_pages, num_tuples, tups_vacuumed, - nkeep, vacrelstats->num_vtlinks, ncrash, - nunused, min_tlen, max_tlen, free_size, usable_free_size, + nblocks, changed_pages, vacuum_pages->vpl_num_pages, empty_pages, + new_pages, num_tuples, tups_vacuumed, + nkeep, vacrelstats->num_vtlinks, ncrash, + nunused, min_tlen, max_tlen, free_size, usable_free_size, empty_end_pages, fraged_pages->vpl_num_pages, ru1.ru_stime.tv_sec - ru0.ru_stime.tv_sec, ru1.ru_utime.tv_sec - ru0.ru_utime.tv_sec); @@ -1019,8 +1023,8 @@ vc_rpfheap(VRelStats *vacrelstats, Relation onerel, max_offset; ItemId itemid, newitemid; - HeapTupleData tuple, - newtup; + HeapTupleData tuple, + newtup; TupleDesc tupdesc = NULL; Datum *idatum = NULL; char *inulls = NULL; @@ -1128,7 +1132,8 @@ vc_rpfheap(VRelStats *vacrelstats, Relation onerel, else Assert(!isempty); - chain_tuple_moved = false; /* no one chain-tuple was moved off this page, yet */ + chain_tuple_moved = false; /* no one chain-tuple was moved + * off this page, yet */ vpc->vpd_blkno = blkno; maxoff = PageGetMaxOffsetNumber(page); for (offnum = FirstOffsetNumber; @@ -1146,28 +1151,30 @@ vc_rpfheap(VRelStats *vacrelstats, Relation onerel, if (!(tuple.t_data->t_infomask & HEAP_XMIN_COMMITTED)) { - if ((TransactionId)tuple.t_data->t_cmin != myXID) + if ((TransactionId) tuple.t_data->t_cmin != myXID) elog(ERROR, "Invalid XID in t_cmin"); if (tuple.t_data->t_infomask & HEAP_MOVED_IN) elog(ERROR, "HEAP_MOVED_IN was not expected"); - /* - * If this (chain) tuple is moved by me already then - * I have to check is it in vpc or not - i.e. is it - * moved while cleaning this page or some previous one. + + /* + * If this (chain) tuple is moved by me already then I + * have to check is it in vpc or not - i.e. is it moved + * while cleaning this page or some previous one. */ if (tuple.t_data->t_infomask & HEAP_MOVED_OFF) { if (keep_tuples == 0) continue; - if (chain_tuple_moved) /* some chains was moved while */ - { /* cleaning this page */ + if (chain_tuple_moved) /* some chains was moved + * while */ + { /* cleaning this page */ Assert(vpc->vpd_offsets_free > 0); for (i = 0; i < vpc->vpd_offsets_free; i++) { if (vpc->vpd_offsets[i] == offnum) break; } - if (i >= vpc->vpd_offsets_free) /* not found */ + if (i >= vpc->vpd_offsets_free) /* not found */ { vpc->vpd_offsets[vpc->vpd_offsets_free++] = offnum; keep_tuples--; @@ -1184,29 +1191,29 @@ vc_rpfheap(VRelStats *vacrelstats, Relation onerel, } /* - * If this tuple is in the chain of tuples created in - * updates by "recent" transactions then we have to - * move all chain of tuples to another places. + * If this tuple is in the chain of tuples created in updates + * by "recent" transactions then we have to move all chain of + * tuples to another places. */ - if ((tuple.t_data->t_infomask & HEAP_UPDATED && + if ((tuple.t_data->t_infomask & HEAP_UPDATED && tuple.t_data->t_xmin >= XmaxRecent) || - (!(tuple.t_data->t_infomask & HEAP_XMAX_INVALID) && + (!(tuple.t_data->t_infomask & HEAP_XMAX_INVALID) && !(ItemPointerEquals(&(tuple.t_self), &(tuple.t_data->t_ctid))))) { - Buffer Cbuf = buf; - Page Cpage; - ItemId Citemid; - ItemPointerData Ctid; - HeapTupleData tp = tuple; - Size tlen = tuple_len; - VTupleMove vtmove = (VTupleMove) - palloc(100 * sizeof(VTupleMoveData)); - int num_vtmove = 0; - int free_vtmove = 100; - VPageDescr to_vpd = fraged_pages->vpl_pagedesc[0]; - int to_item = 0; - bool freeCbuf = false; - int ti; + Buffer Cbuf = buf; + Page Cpage; + ItemId Citemid; + ItemPointerData Ctid; + HeapTupleData tp = tuple; + Size tlen = tuple_len; + VTupleMove vtmove = (VTupleMove) + palloc(100 * sizeof(VTupleMoveData)); + int num_vtmove = 0; + int free_vtmove = 100; + VPageDescr to_vpd = fraged_pages->vpl_pagedesc[0]; + int to_item = 0; + bool freeCbuf = false; + int ti; if (vacrelstats->vtlinks == NULL) elog(ERROR, "No one parent tuple was found"); @@ -1215,22 +1222,23 @@ vc_rpfheap(VRelStats *vacrelstats, Relation onerel, WriteBuffer(cur_buffer); cur_buffer = InvalidBuffer; } + /* - * If this tuple is in the begin/middle of the chain - * then we have to move to the end of chain. + * If this tuple is in the begin/middle of the chain then + * we have to move to the end of chain. */ - while (!(tp.t_data->t_infomask & HEAP_XMAX_INVALID) && - !(ItemPointerEquals(&(tp.t_self), &(tp.t_data->t_ctid)))) + while (!(tp.t_data->t_infomask & HEAP_XMAX_INVALID) && + !(ItemPointerEquals(&(tp.t_self), &(tp.t_data->t_ctid)))) { Ctid = tp.t_data->t_ctid; if (freeCbuf) ReleaseBuffer(Cbuf); freeCbuf = true; - Cbuf = ReadBuffer(onerel, - ItemPointerGetBlockNumber(&Ctid)); + Cbuf = ReadBuffer(onerel, + ItemPointerGetBlockNumber(&Ctid)); Cpage = BufferGetPage(Cbuf); - Citemid = PageGetItemId(Cpage, - ItemPointerGetOffsetNumber(&Ctid)); + Citemid = PageGetItemId(Cpage, + ItemPointerGetOffsetNumber(&Ctid)); if (!ItemIdIsUsed(Citemid)) elog(ERROR, "Child itemid marked as unused"); tp.t_data = (HeapTupleHeader) PageGetItem(Cpage, Citemid); @@ -1238,16 +1246,16 @@ vc_rpfheap(VRelStats *vacrelstats, Relation onerel, tlen = tp.t_len = ItemIdGetLength(Citemid); } /* first, can chain be moved ? */ - for ( ; ; ) + for (;;) { if (!vc_enough_space(to_vpd, tlen)) { if (to_vpd != last_fraged_page && - !vc_enough_space(to_vpd, vacrelstats->min_tlen)) + !vc_enough_space(to_vpd, vacrelstats->min_tlen)) { Assert(num_fraged_pages > to_item + 1); memmove(fraged_pages->vpl_pagedesc + to_item, - fraged_pages->vpl_pagedesc + to_item + 1, + fraged_pages->vpl_pagedesc + to_item + 1, sizeof(VPageDescr *) * (num_fraged_pages - to_item - 1)); num_fraged_pages--; Assert(last_fraged_page == fraged_pages->vpl_pagedesc[num_fraged_pages - 1]); @@ -1257,7 +1265,8 @@ vc_rpfheap(VRelStats *vacrelstats, Relation onerel, if (vc_enough_space(fraged_pages->vpl_pagedesc[i], tlen)) break; } - if (i == num_fraged_pages) /* can't move item anywhere */ + if (i == num_fraged_pages) /* can't move item + * anywhere */ { for (i = 0; i < num_vtmove; i++) { @@ -1277,9 +1286,9 @@ vc_rpfheap(VRelStats *vacrelstats, Relation onerel, if (free_vtmove == 0) { free_vtmove = 1000; - vtmove = (VTupleMove) repalloc(vtmove, - (free_vtmove + num_vtmove) * - sizeof(VTupleMoveData)); + vtmove = (VTupleMove) repalloc(vtmove, + (free_vtmove + num_vtmove) * + sizeof(VTupleMoveData)); } vtmove[num_vtmove].tid = tp.t_self; vtmove[num_vtmove].vpd = to_vpd; @@ -1289,56 +1298,59 @@ vc_rpfheap(VRelStats *vacrelstats, Relation onerel, vtmove[num_vtmove].cleanVpd = false; free_vtmove--; num_vtmove++; + /* * All done ? */ - if (!(tp.t_data->t_infomask & HEAP_UPDATED) || - tp.t_data->t_xmin < XmaxRecent) + if (!(tp.t_data->t_infomask & HEAP_UPDATED) || + tp.t_data->t_xmin < XmaxRecent) break; + /* * Well, try to find tuple with old row version */ - for ( ; ; ) + for (;;) { - Buffer Pbuf; - Page Ppage; - ItemId Pitemid; - HeapTupleData Ptp; - VTupleLinkData vtld, - *vtlp; + Buffer Pbuf; + Page Ppage; + ItemId Pitemid; + HeapTupleData Ptp; + VTupleLinkData vtld, + *vtlp; vtld.new_tid = tp.t_self; - vtlp = (VTupleLink) - vc_find_eq((void *) (vacrelstats->vtlinks), - vacrelstats->num_vtlinks, - sizeof(VTupleLinkData), - (void *) &vtld, - vc_cmp_vtlinks); + vtlp = (VTupleLink) + vc_find_eq((void *) (vacrelstats->vtlinks), + vacrelstats->num_vtlinks, + sizeof(VTupleLinkData), + (void *) &vtld, + vc_cmp_vtlinks); if (vtlp == NULL) elog(ERROR, "Parent tuple was not found"); tp.t_self = vtlp->this_tid; - Pbuf = ReadBuffer(onerel, + Pbuf = ReadBuffer(onerel, ItemPointerGetBlockNumber(&(tp.t_self))); Ppage = BufferGetPage(Pbuf); - Pitemid = PageGetItemId(Ppage, - ItemPointerGetOffsetNumber(&(tp.t_self))); + Pitemid = PageGetItemId(Ppage, + ItemPointerGetOffsetNumber(&(tp.t_self))); if (!ItemIdIsUsed(Pitemid)) elog(ERROR, "Parent itemid marked as unused"); Ptp.t_data = (HeapTupleHeader) PageGetItem(Ppage, Pitemid); Assert(Ptp.t_data->t_xmax == tp.t_data->t_xmin); + /* - * If this tuple is updated version of row and - * it was created by the same transaction then - * no one is interested in this tuple - - * mark it as removed. + * If this tuple is updated version of row and it + * was created by the same transaction then no one + * is interested in this tuple - mark it as + * removed. */ - if (Ptp.t_data->t_infomask & HEAP_UPDATED && + if (Ptp.t_data->t_infomask & HEAP_UPDATED && Ptp.t_data->t_xmin == Ptp.t_data->t_xmax) { - TransactionIdStore(myXID, - (TransactionId*) &(Ptp.t_data->t_cmin)); - Ptp.t_data->t_infomask &= - ~(HEAP_XMIN_COMMITTED|HEAP_XMIN_INVALID|HEAP_MOVED_IN); + TransactionIdStore(myXID, + (TransactionId *) &(Ptp.t_data->t_cmin)); + Ptp.t_data->t_infomask &= + ~(HEAP_XMIN_COMMITTED | HEAP_XMIN_INVALID | HEAP_MOVED_IN); Ptp.t_data->t_infomask |= HEAP_MOVED_OFF; WriteBuffer(Pbuf); continue; @@ -1354,7 +1366,7 @@ vc_rpfheap(VRelStats *vacrelstats, Relation onerel, } if (freeCbuf) ReleaseBuffer(Cbuf); - if (num_vtmove == 0) /* chain can't be moved */ + if (num_vtmove == 0) /* chain can't be moved */ { pfree(vtmove); break; @@ -1364,19 +1376,20 @@ vc_rpfheap(VRelStats *vacrelstats, Relation onerel, { /* Get tuple from chain */ tuple.t_self = vtmove[ti].tid; - Cbuf = ReadBuffer(onerel, - ItemPointerGetBlockNumber(&(tuple.t_self))); + Cbuf = ReadBuffer(onerel, + ItemPointerGetBlockNumber(&(tuple.t_self))); Cpage = BufferGetPage(Cbuf); - Citemid = PageGetItemId(Cpage, + Citemid = PageGetItemId(Cpage, ItemPointerGetOffsetNumber(&(tuple.t_self))); tuple.t_data = (HeapTupleHeader) PageGetItem(Cpage, Citemid); tuple_len = tuple.t_len = ItemIdGetLength(Citemid); /* Get page to move in */ cur_buffer = ReadBuffer(onerel, vtmove[ti].vpd->vpd_blkno); + /* - * We should LockBuffer(cur_buffer) but don't, at the - * moment. If you'll do LockBuffer then UNLOCK it - * before index_insert: unique btree-s call heap_fetch + * We should LockBuffer(cur_buffer) but don't, at the + * moment. If you'll do LockBuffer then UNLOCK it + * before index_insert: unique btree-s call heap_fetch * to get t_infomask of inserted heap tuple !!! */ ToPage = BufferGetPage(cur_buffer); @@ -1385,22 +1398,23 @@ vc_rpfheap(VRelStats *vacrelstats, Relation onerel, vc_vacpage(ToPage, vtmove[ti].vpd); heap_copytuple_with_tuple(&tuple, &newtup); RelationInvalidateHeapTuple(onerel, &tuple); - TransactionIdStore(myXID, (TransactionId*) &(newtup.t_data->t_cmin)); - newtup.t_data->t_infomask &= - ~(HEAP_XMIN_COMMITTED|HEAP_XMIN_INVALID|HEAP_MOVED_OFF); + TransactionIdStore(myXID, (TransactionId *) &(newtup.t_data->t_cmin)); + newtup.t_data->t_infomask &= + ~(HEAP_XMIN_COMMITTED | HEAP_XMIN_INVALID | HEAP_MOVED_OFF); newtup.t_data->t_infomask |= HEAP_MOVED_IN; newoff = PageAddItem(ToPage, (Item) newtup.t_data, tuple_len, - InvalidOffsetNumber, LP_USED); + InvalidOffsetNumber, LP_USED); if (newoff == InvalidOffsetNumber) { elog(ERROR, "\ moving chain: failed to add item with len = %u to page %u", - tuple_len, vtmove[ti].vpd->vpd_blkno); + tuple_len, vtmove[ti].vpd->vpd_blkno); } newitemid = PageGetItemId(ToPage, newoff); pfree(newtup.t_data); newtup.t_data = (HeapTupleHeader) PageGetItem(ToPage, newitemid); ItemPointerSet(&(newtup.t_self), vtmove[ti].vpd->vpd_blkno, newoff); + /* * Set t_ctid pointing to itself for last tuple in * chain and to next tuple in chain otherwise. @@ -1411,19 +1425,20 @@ moving chain: failed to add item with len = %u to page %u", newtup.t_data->t_ctid = Ctid; Ctid = newtup.t_self; - TransactionIdStore(myXID, (TransactionId*) &(tuple.t_data->t_cmin)); - tuple.t_data->t_infomask &= - ~(HEAP_XMIN_COMMITTED|HEAP_XMIN_INVALID|HEAP_MOVED_IN); + TransactionIdStore(myXID, (TransactionId *) &(tuple.t_data->t_cmin)); + tuple.t_data->t_infomask &= + ~(HEAP_XMIN_COMMITTED | HEAP_XMIN_INVALID | HEAP_MOVED_IN); tuple.t_data->t_infomask |= HEAP_MOVED_OFF; num_moved++; + /* * Remember that we moved tuple from the current page * (corresponding index tuple will be cleaned). */ if (Cbuf == buf) - vpc->vpd_offsets[vpc->vpd_offsets_free++] = - ItemPointerGetOffsetNumber(&(tuple.t_self)); + vpc->vpd_offsets[vpc->vpd_offsets_free++] = + ItemPointerGetOffsetNumber(&(tuple.t_self)); else keep_tuples++; @@ -1432,12 +1447,12 @@ moving chain: failed to add item with len = %u to page %u", for (i = 0, idcur = Idesc; i < nindices; i++, idcur++) { FormIndexDatum(idcur->natts, - (AttrNumber *) &(idcur->tform->indkey[0]), - &newtup, - tupdesc, - idatum, - inulls, - idcur->finfoP); + (AttrNumber *) &(idcur->tform->indkey[0]), + &newtup, + tupdesc, + idatum, + inulls, + idcur->finfoP); iresult = index_insert(Irel[i], idatum, inulls, @@ -1507,13 +1522,13 @@ moving chain: failed to add item with len = %u to page %u", RelationInvalidateHeapTuple(onerel, &tuple); - /* - * Mark new tuple as moved_in by vacuum and - * store vacuum XID in t_cmin !!! + /* + * Mark new tuple as moved_in by vacuum and store vacuum XID + * in t_cmin !!! */ - TransactionIdStore(myXID, (TransactionId*) &(newtup.t_data->t_cmin)); - newtup.t_data->t_infomask &= - ~(HEAP_XMIN_COMMITTED|HEAP_XMIN_INVALID|HEAP_MOVED_OFF); + TransactionIdStore(myXID, (TransactionId *) &(newtup.t_data->t_cmin)); + newtup.t_data->t_infomask &= + ~(HEAP_XMIN_COMMITTED | HEAP_XMIN_INVALID | HEAP_MOVED_OFF); newtup.t_data->t_infomask |= HEAP_MOVED_IN; /* add tuple to the page */ @@ -1532,13 +1547,13 @@ failed to add item with len = %u to page %u (free space %u, nusd %u, noff %u)", ItemPointerSet(&(newtup.t_data->t_ctid), cur_page->vpd_blkno, newoff); newtup.t_self = newtup.t_data->t_ctid; - /* - * Mark old tuple as moved_off by vacuum and - * store vacuum XID in t_cmin !!! + /* + * Mark old tuple as moved_off by vacuum and store vacuum XID + * in t_cmin !!! */ - TransactionIdStore(myXID, (TransactionId*) &(tuple.t_data->t_cmin)); - tuple.t_data->t_infomask &= - ~(HEAP_XMIN_COMMITTED|HEAP_XMIN_INVALID|HEAP_MOVED_IN); + TransactionIdStore(myXID, (TransactionId *) &(tuple.t_data->t_cmin)); + tuple.t_data->t_infomask &= + ~(HEAP_XMIN_COMMITTED | HEAP_XMIN_INVALID | HEAP_MOVED_IN); tuple.t_data->t_infomask |= HEAP_MOVED_OFF; cur_page->vpd_offsets_used++; @@ -1572,11 +1587,11 @@ failed to add item with len = %u to page %u (free space %u, nusd %u, noff %u)", if (offnum < maxoff && keep_tuples > 0) { - OffsetNumber off; + OffsetNumber off; for (off = OffsetNumberNext(offnum); - off <= maxoff; - off = OffsetNumberNext(off)) + off <= maxoff; + off = OffsetNumberNext(off)) { itemid = PageGetItemId(page, off); if (!ItemIdIsUsed(itemid)) @@ -1584,21 +1599,22 @@ failed to add item with len = %u to page %u (free space %u, nusd %u, noff %u)", tuple.t_data = (HeapTupleHeader) PageGetItem(page, itemid); if (tuple.t_data->t_infomask & HEAP_XMIN_COMMITTED) continue; - if ((TransactionId)tuple.t_data->t_cmin != myXID) + if ((TransactionId) tuple.t_data->t_cmin != myXID) elog(ERROR, "Invalid XID in t_cmin (4)"); if (tuple.t_data->t_infomask & HEAP_MOVED_IN) elog(ERROR, "HEAP_MOVED_IN was not expected (2)"); if (tuple.t_data->t_infomask & HEAP_MOVED_OFF) { - if (chain_tuple_moved) /* some chains was moved while */ - { /* cleaning this page */ + if (chain_tuple_moved) /* some chains was moved + * while */ + { /* cleaning this page */ Assert(vpc->vpd_offsets_free > 0); for (i = 0; i < vpc->vpd_offsets_free; i++) { if (vpc->vpd_offsets[i] == off) break; } - if (i >= vpc->vpd_offsets_free) /* not found */ + if (i >= vpc->vpd_offsets_free) /* not found */ { vpc->vpd_offsets[vpc->vpd_offsets_free++] = off; Assert(keep_tuples > 0); @@ -1619,8 +1635,8 @@ failed to add item with len = %u to page %u (free space %u, nusd %u, noff %u)", { if (chain_tuple_moved) /* else - they are ordered */ { - qsort((char *) (vpc->vpd_offsets), vpc->vpd_offsets_free, - sizeof(OffsetNumber), vc_cmp_offno); + qsort((char *) (vpc->vpd_offsets), vpc->vpd_offsets_free, + sizeof(OffsetNumber), vc_cmp_offno); } vc_reappage(&Nvpl, vpc); WriteBuffer(buf); @@ -1645,6 +1661,7 @@ failed to add item with len = %u to page %u (free space %u, nusd %u, noff %u)", if (num_moved > 0) { + /* * We have to commit our tuple' movings before we'll truncate * relation, but we shouldn't lose our locks. And so - quick hack: @@ -1657,8 +1674,8 @@ failed to add item with len = %u to page %u (free space %u, nusd %u, noff %u)", } /* - * Clean uncleaned reapped pages from vacuum_pages list list and set xmin - * committed for inserted tuples + * Clean uncleaned reapped pages from vacuum_pages list list and set + * xmin committed for inserted tuples */ checked_moved = 0; for (i = 0, vpp = vacuum_pages->vpl_pagedesc; i < vacuumed_pages; i++, vpp++) @@ -1671,7 +1688,8 @@ failed to add item with len = %u to page %u (free space %u, nusd %u, noff %u)", if (!PageIsEmpty(page)) vc_vacpage(page, *vpp); } - else /* this page was used */ + else +/* this page was used */ { num_tuples = 0; max_offset = PageGetMaxOffsetNumber(page); @@ -1685,7 +1703,7 @@ failed to add item with len = %u to page %u (free space %u, nusd %u, noff %u)", tuple.t_data = (HeapTupleHeader) PageGetItem(page, itemid); if (!(tuple.t_data->t_infomask & HEAP_XMIN_COMMITTED)) { - if ((TransactionId)tuple.t_data->t_cmin != myXID) + if ((TransactionId) tuple.t_data->t_cmin != myXID) elog(ERROR, "Invalid XID in t_cmin (2)"); if (tuple.t_data->t_infomask & HEAP_MOVED_IN) { @@ -1734,8 +1752,8 @@ Elapsed %u/%u sec.", } Assert(keep_tuples >= 0); for (i = 0; i < nindices; i++) - vc_vaconeind(&Nvpl, Irel[i], - vacrelstats->num_tuples, keep_tuples); + vc_vaconeind(&Nvpl, Irel[i], + vacrelstats->num_tuples, keep_tuples); } /* @@ -1757,7 +1775,7 @@ Elapsed %u/%u sec.", if (!(tuple.t_data->t_infomask & HEAP_XMIN_COMMITTED)) { - if ((TransactionId)tuple.t_data->t_cmin != myXID) + if ((TransactionId) tuple.t_data->t_cmin != myXID) elog(ERROR, "Invalid XID in t_cmin (3)"); if (tuple.t_data->t_infomask & HEAP_MOVED_OFF) { @@ -1998,7 +2016,7 @@ vc_vaconeind(VPageList vpl, Relation indrel, int num_tuples, int keep_tuples) getrusage(RUSAGE_SELF, &ru1); elog(MESSAGE_LEVEL, "Index %s: Pages %u; Tuples %u: Deleted %u. Elapsed %u/%u sec.", - indrel->rd_rel->relname.data, num_pages, + indrel->rd_rel->relname.data, num_pages, num_index_tuples - keep_tuples, tups_vacuumed, ru1.ru_stime.tv_sec - ru0.ru_stime.tv_sec, ru1.ru_utime.tv_sec - ru0.ru_utime.tv_sec); @@ -2208,25 +2226,25 @@ vc_bucketcpy(Form_pg_attribute attr, Datum value, Datum *bucket, int16 *bucket_l static void vc_updstats(Oid relid, int num_pages, int num_tuples, bool hasindex, VRelStats *vacrelstats) { - Relation rd, - ad, - sd; - HeapScanDesc scan; - HeapTupleData rtup; - HeapTuple ctup, - atup, - stup; - Form_pg_class pgcform; - ScanKeyData askey; - Form_pg_attribute attp; - Buffer buffer; + Relation rd, + ad, + sd; + HeapScanDesc scan; + HeapTupleData rtup; + HeapTuple ctup, + atup, + stup; + Form_pg_class pgcform; + ScanKeyData askey; + Form_pg_attribute attp; + Buffer buffer; /* * update number of tuples and number of pages in pg_class */ ctup = SearchSysCacheTupleCopy(RELOID, - ObjectIdGetDatum(relid), - 0, 0, 0); + ObjectIdGetDatum(relid), + 0, 0, 0); if (!HeapTupleIsValid(ctup)) elog(ERROR, "pg_class entry for relid %u vanished during vacuuming", relid); @@ -2237,7 +2255,7 @@ vc_updstats(Oid relid, int num_pages, int num_tuples, bool hasindex, VRelStats * rtup.t_self = ctup->t_self; heap_fetch(rd, SnapshotNow, &rtup, &buffer); pfree(ctup); - + /* overwrite the existing statistics in the tuple */ vc_setpagelock(rd, ItemPointerGetBlockNumber(&(rtup.t_self))); pgcform = (Form_pg_class) GETSTRUCT(&rtup); @@ -2317,8 +2335,7 @@ vc_updstats(Oid relid, int num_pages, int num_tuples, bool hasindex, VRelStats * attp->attdisbursion = selratio; /* - * Invalidate the cache for the tuple - * and write the buffer + * Invalidate the cache for the tuple and write the buffer */ RelationInvalidateHeapTuple(ad, atup); WriteNoReleaseBuffer(abuffer); @@ -2375,8 +2392,7 @@ vc_updstats(Oid relid, int num_pages, int num_tuples, bool hasindex, VRelStats * } /* - * Invalidate the cached pg_class tuple and - * write the buffer + * Invalidate the cached pg_class tuple and write the buffer */ RelationInvalidateHeapTuple(rd, &rtup); @@ -2504,8 +2520,8 @@ vc_free(VRelList vrl) } static void * -vc_find_eq(void *bot, int nelem, int size, void *elm, - int (*compar) (const void *, const void *)) +vc_find_eq(void *bot, int nelem, int size, void *elm, + int (*compar) (const void *, const void *)) { int res; int last = nelem - 1; @@ -2527,16 +2543,16 @@ vc_find_eq(void *bot, int nelem, int size, void *elm, } if (last_move == true) { - res = compar(elm, (void *)((char *)bot + last * size)); + res = compar(elm, (void *) ((char *) bot + last * size)); if (res > 0) return NULL; if (res == 0) - return (void *)((char *)bot + last * size); + return (void *) ((char *) bot + last * size); last_move = false; } - res = compar(elm, (void *)((char *)bot + celm * size)); + res = compar(elm, (void *) ((char *) bot + celm * size)); if (res == 0) - return (void *)((char *)bot + celm * size); + return (void *) ((char *) bot + celm * size); if (res < 0) { if (celm == 0) @@ -2551,7 +2567,7 @@ vc_find_eq(void *bot, int nelem, int size, void *elm, return NULL; last = last - celm - 1; - bot = (void *)((char *)bot + (celm + 1) * size); + bot = (void *) ((char *) bot + (celm + 1) * size); celm = (last + 1) / 2; first_move = true; } @@ -2591,25 +2607,25 @@ static int vc_cmp_vtlinks(const void *left, const void *right) { - if (((VTupleLink)left)->new_tid.ip_blkid.bi_hi < - ((VTupleLink)right)->new_tid.ip_blkid.bi_hi) + if (((VTupleLink) left)->new_tid.ip_blkid.bi_hi < + ((VTupleLink) right)->new_tid.ip_blkid.bi_hi) return -1; - if (((VTupleLink)left)->new_tid.ip_blkid.bi_hi > - ((VTupleLink)right)->new_tid.ip_blkid.bi_hi) + if (((VTupleLink) left)->new_tid.ip_blkid.bi_hi > + ((VTupleLink) right)->new_tid.ip_blkid.bi_hi) return 1; /* bi_hi-es are equal */ - if (((VTupleLink)left)->new_tid.ip_blkid.bi_lo < - ((VTupleLink)right)->new_tid.ip_blkid.bi_lo) + if (((VTupleLink) left)->new_tid.ip_blkid.bi_lo < + ((VTupleLink) right)->new_tid.ip_blkid.bi_lo) return -1; - if (((VTupleLink)left)->new_tid.ip_blkid.bi_lo > - ((VTupleLink)right)->new_tid.ip_blkid.bi_lo) + if (((VTupleLink) left)->new_tid.ip_blkid.bi_lo > + ((VTupleLink) right)->new_tid.ip_blkid.bi_lo) return 1; /* bi_lo-es are equal */ - if (((VTupleLink)left)->new_tid.ip_posid < - ((VTupleLink)right)->new_tid.ip_posid) + if (((VTupleLink) left)->new_tid.ip_posid < + ((VTupleLink) right)->new_tid.ip_posid) return -1; - if (((VTupleLink)left)->new_tid.ip_posid > - ((VTupleLink)right)->new_tid.ip_posid) + if (((VTupleLink) left)->new_tid.ip_posid > + ((VTupleLink) right)->new_tid.ip_posid) return 1; return 0; diff --git a/src/backend/commands/variable.c b/src/backend/commands/variable.c index 66f75c5f062..f1462423071 100644 --- a/src/backend/commands/variable.c +++ b/src/backend/commands/variable.c @@ -2,7 +2,7 @@ * Routines for handling of 'SET var TO', * 'SHOW var' and 'RESET var' statements. * - * $Id: variable.c,v 1.19 1999/02/18 06:00:44 momjian Exp $ + * $Id: variable.c,v 1.20 1999/05/25 16:08:28 momjian Exp $ * */ @@ -45,10 +45,12 @@ static bool parse_ksqo(const char *); static bool show_XactIsoLevel(void); static bool reset_XactIsoLevel(void); static bool parse_XactIsoLevel(const char *); + #ifdef QUERY_LIMIT static bool show_query_limit(void); static bool reset_query_limit(void); static bool parse_query_limit(const char *); + #endif extern Cost _cpu_page_wight_; @@ -545,41 +547,41 @@ reset_timezone() static bool parse_query_limit(const char *value) { - int32 limit; - - if (value == NULL) { - reset_query_limit(); - return(TRUE); - } - /* why is pg_atoi's arg not declared "const char *" ? */ - limit = pg_atoi((char *) value, sizeof(int32), '\0'); - if (limit <= -1) { - elog(ERROR, "Bad value for # of query limit (%s)", value); - } - ExecutorLimit(limit); - return(TRUE); + int32 limit; + + if (value == NULL) + { + reset_query_limit(); + return (TRUE); + } + /* why is pg_atoi's arg not declared "const char *" ? */ + limit = pg_atoi((char *) value, sizeof(int32), '\0'); + if (limit <= -1) + elog(ERROR, "Bad value for # of query limit (%s)", value); + ExecutorLimit(limit); + return (TRUE); } static bool show_query_limit(void) { - int limit; - - limit = ExecutorGetLimit(); - if (limit == ALL_TUPLES) { - elog(NOTICE, "No query limit is set"); - } else { - elog(NOTICE, "query limit is %d",limit); - } - return(TRUE); + int limit; + + limit = ExecutorGetLimit(); + if (limit == ALL_TUPLES) + elog(NOTICE, "No query limit is set"); + else + elog(NOTICE, "query limit is %d", limit); + return (TRUE); } static bool reset_query_limit(void) { - ExecutorLimit(ALL_TUPLES); - return(TRUE); + ExecutorLimit(ALL_TUPLES); + return (TRUE); } + #endif /*-----------------------------------------------------------------------*/ @@ -685,10 +687,10 @@ ResetPGVariable(const char *name) /*----------------------------------------------------------------------- -KSQO code will one day be unnecessary when the optimizer makes use of +KSQO code will one day be unnecessary when the optimizer makes use of indexes when multiple ORs are specified in the where clause. See optimizer/prep/prepkeyset.c for more on this. - daveh@insightdist.com 6/16/98 + daveh@insightdist.com 6/16/98 -----------------------------------------------------------------------*/ static bool parse_ksqo(const char *value) @@ -732,7 +734,7 @@ reset_ksqo() static bool parse_XactIsoLevel(const char *value) { - + if (value == NULL) { reset_XactIsoLevel(); @@ -770,7 +772,7 @@ show_XactIsoLevel() static bool reset_XactIsoLevel() { - + if (SerializableSnapshot != NULL) { elog(ERROR, "SET TRANSACTION ISOLATION LEVEL must be called before any query"); diff --git a/src/backend/commands/view.c b/src/backend/commands/view.c index 06de282f199..1cea214613b 100644 --- a/src/backend/commands/view.c +++ b/src/backend/commands/view.c @@ -5,11 +5,11 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: view.c,v 1.32 1999/02/13 23:15:12 momjian Exp $ + * $Id: view.c,v 1.33 1999/05/25 16:08:28 momjian Exp $ * *------------------------------------------------------------------------- */ -#include <stdio.h> +#include <stdio.h> #include <string.h> #include <postgres.h> @@ -230,9 +230,9 @@ UpdateRangeTableOfViewParse(char *viewName, Query *viewParse) * table... CURRENT first, then NEW.... */ rt_entry1 = addRangeTableEntry(NULL, (char *) viewName, "*CURRENT*", - FALSE, FALSE); + FALSE, FALSE); rt_entry2 = addRangeTableEntry(NULL, (char *) viewName, "*NEW*", - FALSE, FALSE); + FALSE, FALSE); new_rt = lcons(rt_entry2, old_rt); new_rt = lcons(rt_entry1, new_rt); diff --git a/src/backend/executor/_deadcode/nodeTee.c b/src/backend/executor/_deadcode/nodeTee.c index b06c700c462..645a11cd11e 100644 --- a/src/backend/executor/_deadcode/nodeTee.c +++ b/src/backend/executor/_deadcode/nodeTee.c @@ -6,15 +6,15 @@ * Copyright (c) 1994, Regents of the University of California * * DESCRIPTION - * This code provides support for a tee node, which allows - * multiple parent in a megaplan. + * This code provides support for a tee node, which allows + * multiple parent in a megaplan. * * INTERFACE ROUTINES * ExecTee * ExecInitTee * ExecEndTee * - * $Id: nodeTee.c,v 1.1 1999/03/23 16:50:49 momjian Exp $ + * $Id: nodeTee.c,v 1.2 1999/05/25 16:08:50 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -46,12 +46,12 @@ bool ExecInitTee(Tee *node, EState *currentEstate, Plan *parent) { - TeeState *teeState; - Plan *outerPlan; - int len; + TeeState *teeState; + Plan *outerPlan; + int len; Relation bufferRel; TupleDesc tupType; - EState *estate; + EState *estate; /* * it is possible that the Tee has already been initialized since it @@ -167,7 +167,7 @@ ExecInitTee(Tee *node, EState *currentEstate, Plan *parent) else bufferRel = heap_open( heap_create_with_catalog(teeState->tee_bufferRelname, - tupType, RELKIND_RELATION, false)); + tupType, RELKIND_RELATION, false)); } else { @@ -176,7 +176,7 @@ ExecInitTee(Tee *node, EState *currentEstate, Plan *parent) newoid()); bufferRel = heap_open( heap_create_with_catalog(teeState->tee_bufferRelname, - tupType, RELKIND_RELATION, false)); + tupType, RELKIND_RELATION, false)); } teeState->tee_bufferRel = bufferRel; @@ -339,6 +339,7 @@ ExecTee(Tee *node, Plan *parent) slot = ExecProcNode(childNode, (Plan *) node); if (!TupIsNull(slot)) { + /* * heap_insert changes something... */ diff --git a/src/backend/executor/execAmi.c b/src/backend/executor/execAmi.c index 7b8bde8e1ba..d4c60687a11 100644 --- a/src/backend/executor/execAmi.c +++ b/src/backend/executor/execAmi.c @@ -5,7 +5,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: execAmi.c,v 1.34 1999/05/10 00:45:05 momjian Exp $ + * $Id: execAmi.c,v 1.35 1999/05/25 16:08:34 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -24,7 +24,7 @@ * ExecCreatR function to create temporary relations * */ -#include <stdio.h> +#include <stdio.h> #include "postgres.h" diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c index 3565613bba9..cab1b066246 100644 --- a/src/backend/executor/execMain.c +++ b/src/backend/executor/execMain.c @@ -26,7 +26,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.83 1999/05/10 00:45:06 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.84 1999/05/25 16:08:36 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -61,26 +61,26 @@ void ExecCheckPerms(CmdType operation, int resultRelation, List *rangeTable, /* decls for local routines only used within this module */ static TupleDesc InitPlan(CmdType operation, - Query *parseTree, - Plan *plan, - EState *estate); + Query *parseTree, + Plan *plan, + EState *estate); static void EndPlan(Plan *plan, - EState *estate); + EState *estate); static TupleTableSlot *ExecutePlan(EState *estate, Plan *plan, - CmdType operation, - int offsetTuples, - int numberTuples, - ScanDirection direction, - DestReceiver *destfunc); + CmdType operation, + int offsetTuples, + int numberTuples, + ScanDirection direction, + DestReceiver * destfunc); static void ExecRetrieve(TupleTableSlot *slot, - DestReceiver *destfunc, - EState *estate); + DestReceiver * destfunc, + EState *estate); static void ExecAppend(TupleTableSlot *slot, ItemPointer tupleid, - EState *estate); + EState *estate); static void ExecDelete(TupleTableSlot *slot, ItemPointer tupleid, - EState *estate); + EState *estate); static void ExecReplace(TupleTableSlot *slot, ItemPointer tupleid, - EState *estate); + EState *estate); TupleTableSlot *EvalPlanQual(EState *estate, Index rti, ItemPointer tid); static TupleTableSlot *EvalPlanQualNext(EState *estate); @@ -141,14 +141,14 @@ ExecutorStart(QueryDesc *queryDesc, EState *estate) estate->es_snapshot = NULL; else { - estate->es_snapshot = (Snapshot)palloc(sizeof(SnapshotData)); + estate->es_snapshot = (Snapshot) palloc(sizeof(SnapshotData)); memcpy(estate->es_snapshot, QuerySnapshot, sizeof(SnapshotData)); if (estate->es_snapshot->xcnt > 0) { estate->es_snapshot->xip = (TransactionId *) - palloc(estate->es_snapshot->xcnt * sizeof(TransactionId)); + palloc(estate->es_snapshot->xcnt * sizeof(TransactionId)); memcpy(estate->es_snapshot->xip, QuerySnapshot->xip, - estate->es_snapshot->xcnt * sizeof(TransactionId)); + estate->es_snapshot->xcnt * sizeof(TransactionId)); } } @@ -193,25 +193,25 @@ ExecutorStart(QueryDesc *queryDesc, EState *estate) * ---------------------------------------------------------------- */ TupleTableSlot * -ExecutorRun(QueryDesc *queryDesc, EState *estate, int feature, - Node *limoffset, Node *limcount) +ExecutorRun(QueryDesc *queryDesc, EState *estate, int feature, + Node *limoffset, Node *limcount) { - CmdType operation; - Plan *plan; + CmdType operation; + Plan *plan; TupleTableSlot *result; - CommandDest dest; - DestReceiver *destfunc; - int offset = 0; - int count = 0; + CommandDest dest; + DestReceiver *destfunc; + int offset = 0; + int count = 0; /* - * sanity checks + * sanity checks */ Assert(queryDesc != NULL); /* - * extract information from the query descriptor - * and the query feature. + * extract information from the query descriptor and the query + * feature. */ operation = queryDesc->operation; plan = queryDesc->plantree; @@ -221,34 +221,34 @@ ExecutorRun(QueryDesc *queryDesc, EState *estate, int feature, estate->es_lastoid = InvalidOid; /* - * FIXME: the dest setup function ought to be handed the tuple desc - * for the tuples to be output, but I'm not quite sure how to get that - * info at this point. For now, passing NULL is OK because no existing - * dest setup function actually uses the pointer. + * FIXME: the dest setup function ought to be handed the tuple desc + * for the tuples to be output, but I'm not quite sure how to get that + * info at this point. For now, passing NULL is OK because no + * existing dest setup function actually uses the pointer. */ (*destfunc->setup) (destfunc, (TupleDesc) NULL); - /* - * if given get the offset of the LIMIT clause - */ - if (limoffset != NULL) - { - Const *coffset; - Param *poffset; - ParamListInfo paramLI; - int i; - + /* + * if given get the offset of the LIMIT clause + */ + if (limoffset != NULL) + { + Const *coffset; + Param *poffset; + ParamListInfo paramLI; + int i; + switch (nodeTag(limoffset)) { case T_Const: - coffset = (Const *)limoffset; - offset = (int)(coffset->constvalue); + coffset = (Const *) limoffset; + offset = (int) (coffset->constvalue); break; - + case T_Param: - poffset = (Param *)limoffset; + poffset = (Param *) limoffset; paramLI = estate->es_param_list_info; - + if (paramLI == NULL) elog(ERROR, "parameter for limit offset not in executor state"); for (i = 0; paramLI[i].kind != PARAM_INVALID; i++) @@ -260,60 +260,60 @@ ExecutorRun(QueryDesc *queryDesc, EState *estate, int feature, elog(ERROR, "parameter for limit offset not in executor state"); if (paramLI[i].isnull) elog(ERROR, "limit offset cannot be NULL value"); - offset = (int)(paramLI[i].value); - + offset = (int) (paramLI[i].value); + break; - + default: elog(ERROR, "unexpected node type %d as limit offset", nodeTag(limoffset)); } - + if (offset < 0) elog(ERROR, "limit offset cannot be negative"); } - + /* - * if given get the count of the LIMIT clause + * if given get the count of the LIMIT clause */ if (limcount != NULL) { - Const *ccount; - Param *pcount; - ParamListInfo paramLI; - int i; - - switch (nodeTag(limcount)) - { - case T_Const: - ccount = (Const *)limcount; - count = (int)(ccount->constvalue); - break; - - case T_Param: - pcount = (Param *)limcount; - paramLI = estate->es_param_list_info; - - if (paramLI == NULL) - elog(ERROR, "parameter for limit count not in executor state"); - for (i = 0; paramLI[i].kind != PARAM_INVALID; i++) - { - if (paramLI[i].kind == PARAM_NUM && paramLI[i].id == pcount->paramid) - break; - } - if (paramLI[i].kind == PARAM_INVALID) - elog(ERROR, "parameter for limit count not in executor state"); - if (paramLI[i].isnull) - elog(ERROR, "limit count cannot be NULL value"); - count = (int)(paramLI[i].value); - - break; - - default: - elog(ERROR, "unexpected node type %d as limit count", nodeTag(limcount)); - } - - if (count < 0) - elog(ERROR, "limit count cannot be negative"); + Const *ccount; + Param *pcount; + ParamListInfo paramLI; + int i; + + switch (nodeTag(limcount)) + { + case T_Const: + ccount = (Const *) limcount; + count = (int) (ccount->constvalue); + break; + + case T_Param: + pcount = (Param *) limcount; + paramLI = estate->es_param_list_info; + + if (paramLI == NULL) + elog(ERROR, "parameter for limit count not in executor state"); + for (i = 0; paramLI[i].kind != PARAM_INVALID; i++) + { + if (paramLI[i].kind == PARAM_NUM && paramLI[i].id == pcount->paramid) + break; + } + if (paramLI[i].kind == PARAM_INVALID) + elog(ERROR, "parameter for limit count not in executor state"); + if (paramLI[i].isnull) + elog(ERROR, "limit count cannot be NULL value"); + count = (int) (paramLI[i].value); + + break; + + default: + elog(ERROR, "unexpected node type %d as limit count", nodeTag(limcount)); + } + + if (count < 0) + elog(ERROR, "limit count cannot be negative"); } switch (feature) @@ -339,7 +339,7 @@ ExecutorRun(QueryDesc *queryDesc, EState *estate, int feature, break; /* - * retrieve next n "backward" tuples + * retrieve next n "backward" tuples */ case EXEC_BACK: result = ExecutePlan(estate, @@ -352,8 +352,8 @@ ExecutorRun(QueryDesc *queryDesc, EState *estate, int feature, break; /* - * return one tuple but don't "retrieve" it. - * (this is used by the rule manager..) -cim 9/14/89 + * return one tuple but don't "retrieve" it. (this is used by + * the rule manager..) -cim 9/14/89 */ case EXEC_RETONE: result = ExecutePlan(estate, @@ -395,20 +395,25 @@ ExecutorEnd(QueryDesc *queryDesc, EState *estate) EndPlan(queryDesc->plantree, estate); /* XXX - clean up some more from ExecutorStart() - er1p */ - if (NULL == estate->es_snapshot) { - /* nothing to free */ - } else { - if (estate->es_snapshot->xcnt > 0) { - pfree(estate->es_snapshot->xip); - } - pfree(estate->es_snapshot); + if (NULL == estate->es_snapshot) + { + /* nothing to free */ + } + else + { + if (estate->es_snapshot->xcnt > 0) + pfree(estate->es_snapshot->xip); + pfree(estate->es_snapshot); } - if (NULL == estate->es_param_exec_vals) { - /* nothing to free */ - } else { - pfree(estate->es_param_exec_vals); - estate->es_param_exec_vals = NULL; + if (NULL == estate->es_param_exec_vals) + { + /* nothing to free */ + } + else + { + pfree(estate->es_param_exec_vals); + estate->es_param_exec_vals = NULL; } /* restore saved refcounts. */ @@ -509,15 +514,15 @@ ExecCheckPerms(CmdType operation, { foreach(lp, parseTree->rowMark) { - RowMark *rm = lfirst(lp); + RowMark *rm = lfirst(lp); if (!(rm->info & ROW_ACL_FOR_UPDATE)) continue; - relid = ((RangeTblEntry *)nth(rm->rti - 1, rangeTable))->relid; + relid = ((RangeTblEntry *) nth(rm->rti - 1, rangeTable))->relid; htup = SearchSysCacheTuple(RELOID, - ObjectIdGetDatum(relid), - 0, 0, 0); + ObjectIdGetDatum(relid), + 0, 0, 0); if (!HeapTupleIsValid(htup)) elog(ERROR, "ExecCheckPerms: bogus RT relid: %u", relid); StrNCpy(rname.data, @@ -543,15 +548,15 @@ typedef struct execRowMark Relation relation; Index rti; char resname[32]; -} execRowMark; +} execRowMark; typedef struct evalPlanQual { - Plan *plan; - Index rti; - EState estate; - struct evalPlanQual *free; -} evalPlanQual; + Plan *plan; + Index rti; + EState estate; + struct evalPlanQual *free; +} evalPlanQual; /* ---------------------------------------------------------------- * InitPlan @@ -563,15 +568,15 @@ typedef struct evalPlanQual static TupleDesc InitPlan(CmdType operation, Query *parseTree, Plan *plan, EState *estate) { - List *rangeTable; - int resultRelation; - Relation intoRelationDesc; - TupleDesc tupType; - List *targetList; - int len; + List *rangeTable; + int resultRelation; + Relation intoRelationDesc; + TupleDesc tupType; + List *targetList; + int len; /* - * get information from query descriptor + * get information from query descriptor */ rangeTable = parseTree->rtable; resultRelation = parseTree->resultRelation; @@ -581,27 +586,27 @@ InitPlan(CmdType operation, Query *parseTree, Plan *plan, EState *estate) #endif /* - * initialize the node's execution state + * initialize the node's execution state */ estate->es_range_table = rangeTable; /* - * initialize the BaseId counter so node base_id's - * are assigned correctly. Someday baseid's will have to - * be stored someplace other than estate because they - * should be unique per query planned. + * initialize the BaseId counter so node base_id's are assigned + * correctly. Someday baseid's will have to be stored someplace other + * than estate because they should be unique per query planned. */ estate->es_BaseId = 1; /* - * initialize result relation stuff + * initialize result relation stuff */ - + if (resultRelation != 0 && operation != CMD_SELECT) { + /* - * if we have a result relation, open it and - * initialize the result relation info stuff. + * if we have a result relation, open it and initialize the result + * relation info stuff. */ RelationInfo *resultRelationInfo; Index resultRelationIndex; @@ -628,8 +633,8 @@ InitPlan(CmdType operation, Query *parseTree, Plan *plan, EState *estate) resultRelationInfo->ri_IndexRelationInfo = NULL; /* - * open indices on result relation and save descriptors - * in the result relation information.. + * open indices on result relation and save descriptors in the + * result relation information.. */ if (operation != CMD_DELETE) ExecOpenIndices(resultRelationOid, resultRelationInfo); @@ -638,8 +643,9 @@ InitPlan(CmdType operation, Query *parseTree, Plan *plan, EState *estate) } else { + /* - * if no result relation, then set state appropriately + * if no result relation, then set state appropriately */ estate->es_result_relation_info = NULL; } @@ -650,21 +656,21 @@ InitPlan(CmdType operation, Query *parseTree, Plan *plan, EState *estate) estate->es_rowMark = NULL; if (parseTree->rowMark != NULL) { - Relation relation; - Oid relid; - RowMark *rm; - List *l; - execRowMark *erm; + Relation relation; + Oid relid; + RowMark *rm; + List *l; + execRowMark *erm; foreach(l, parseTree->rowMark) { rm = lfirst(l); - relid = ((RangeTblEntry *)nth(rm->rti - 1, rangeTable))->relid; + relid = ((RangeTblEntry *) nth(rm->rti - 1, rangeTable))->relid; relation = heap_open(relid); LockRelation(relation, RowShareLock); if (!(rm->info & ROW_MARK_FOR_UPDATE)) continue; - erm = (execRowMark*) palloc(sizeof(execRowMark)); + erm = (execRowMark *) palloc(sizeof(execRowMark)); erm->relation = relation; erm->rti = rm->rti; sprintf(erm->resname, "ctid%u", rm->rti); @@ -673,7 +679,7 @@ InitPlan(CmdType operation, Query *parseTree, Plan *plan, EState *estate) } /* - * initialize the executor "tuple" table. + * initialize the executor "tuple" table. */ { int nSlots = ExecCountSlotsNode(plan); @@ -683,31 +689,29 @@ InitPlan(CmdType operation, Query *parseTree, Plan *plan, EState *estate) } /* - * initialize the private state information for - * all the nodes in the query tree. This opens - * files, allocates storage and leaves us ready - * to start processing tuples.. + * initialize the private state information for all the nodes in the + * query tree. This opens files, allocates storage and leaves us + * ready to start processing tuples.. */ ExecInitNode(plan, estate, NULL); /* - * get the tuple descriptor describing the type - * of tuples to return.. (this is especially important - * if we are creating a relation with "retrieve into") + * get the tuple descriptor describing the type of tuples to return.. + * (this is especially important if we are creating a relation with + * "retrieve into") */ tupType = ExecGetTupType(plan); /* tuple descriptor */ targetList = plan->targetlist; len = ExecTargetListLength(targetList); /* number of attributes */ /* - * now that we have the target list, initialize the junk filter - * if this is a REPLACE or a DELETE query. - * We also init the junk filter if this is an append query - * (there might be some rule lock info there...) - * NOTE: in the future we might want to initialize the junk - * filter for all queries. - * SELECT added by daveh@insightdist.com 5/20/98 to allow - * ORDER/GROUP BY have an identifier missing from the target. + * now that we have the target list, initialize the junk filter if + * this is a REPLACE or a DELETE query. We also init the junk filter + * if this is an append query (there might be some rule lock info + * there...) NOTE: in the future we might want to initialize the junk + * filter for all queries. SELECT added by daveh@insightdist.com + * 5/20/98 to allow ORDER/GROUP BY have an identifier missing from the + * target. */ { bool junk_filter_needed = false; @@ -743,7 +747,7 @@ InitPlan(CmdType operation, Query *parseTree, Plan *plan, EState *estate) } /* - * initialize the "into" relation + * initialize the "into" relation */ intoRelationDesc = (Relation) NULL; @@ -761,8 +765,9 @@ InitPlan(CmdType operation, Query *parseTree, Plan *plan, EState *estate) */ if (parseTree->into != NULL) { + /* - * create the "into" relation + * create the "into" relation */ intoName = parseTree->into; @@ -772,14 +777,14 @@ InitPlan(CmdType operation, Query *parseTree, Plan *plan, EState *estate) tupdesc = CreateTupleDescCopy(tupType); intoRelationId = heap_create_with_catalog(intoName, - tupdesc, RELKIND_RELATION,parseTree->isTemp); + tupdesc, RELKIND_RELATION, parseTree->isTemp); FreeTupleDesc(tupdesc); /* - * XXX rather than having to call setheapoverride(true) - * and then back to false, we should change the - * arguments to heap_open() instead.. + * XXX rather than having to call setheapoverride(true) + * and then back to false, we should change the arguments + * to heap_open() instead.. */ setheapoverride(true); @@ -813,18 +818,18 @@ EndPlan(Plan *plan, EState *estate) Relation intoRelationDesc; /* - * get information from state + * get information from state */ resultRelationInfo = estate->es_result_relation_info; intoRelationDesc = estate->es_into_relation_descriptor; /* - * shut down the query + * shut down the query */ ExecEndNode(plan, plan); /* - * destroy the executor "tuple" table. + * destroy the executor "tuple" table. */ { TupleTable tupleTable = (TupleTable) estate->es_tupleTable; @@ -834,7 +839,7 @@ EndPlan(Plan *plan, EState *estate) } /* - * close the result relations if necessary + * close the result relations if necessary */ if (resultRelationInfo != NULL) { @@ -844,13 +849,13 @@ EndPlan(Plan *plan, EState *estate) heap_close(resultRelationDesc); /* - * close indices on the result relation + * close indices on the result relation */ ExecCloseIndices(resultRelationInfo); } /* - * close the "into" relation if necessary + * close the "into" relation if necessary */ if (intoRelationDesc != NULL) heap_close(intoRelationDesc); @@ -879,7 +884,7 @@ ExecutePlan(EState *estate, int offsetTuples, int numberTuples, ScanDirection direction, - DestReceiver* destfunc) + DestReceiver * destfunc) { JunkFilter *junkfilter; TupleTableSlot *slot; @@ -889,29 +894,30 @@ ExecutePlan(EState *estate, TupleTableSlot *result; /* - * initialize local variables + * initialize local variables */ slot = NULL; current_tuple_count = 0; result = NULL; - /* - * Set the direction. + /* + * Set the direction. */ estate->es_direction = direction; /* - * Loop until we've processed the proper number - * of tuples from the plan.. + * Loop until we've processed the proper number of tuples from the + * plan.. */ for (;;) { + /* - * Execute the plan and obtain a tuple + * Execute the plan and obtain a tuple */ /* at the top level, the parent of a plan (2nd arg) is itself */ -lnext:; +lnext: ; if (estate->es_useEvalPlan) { slot = EvalPlanQualNext(estate); @@ -922,9 +928,8 @@ lnext:; slot = ExecProcNode(plan, plan); /* - * if the tuple is null, then we assume - * there is nothing more to process so - * we just return null... + * if the tuple is null, then we assume there is nothing more to + * process so we just return null... */ if (TupIsNull(slot)) { @@ -933,11 +938,9 @@ lnext:; } /* - * For now we completely execute the plan and skip - * result tuples if requested by LIMIT offset. - * Finally we should try to do it in deeper levels - * if possible (during index scan) - * - Jan + * For now we completely execute the plan and skip result tuples + * if requested by LIMIT offset. Finally we should try to do it in + * deeper levels if possible (during index scan) - Jan */ if (offsetTuples > 0) { @@ -946,13 +949,12 @@ lnext:; } /* - * if we have a junk filter, then project a new - * tuple with the junk removed. + * if we have a junk filter, then project a new tuple with the + * junk removed. * - * Store this new "clean" tuple in the place of the - * original tuple. + * Store this new "clean" tuple in the place of the original tuple. * - * Also, extract all the junk information we need. + * Also, extract all the junk information we need. */ if ((junkfilter = estate->es_junkFilter) != (JunkFilter *) NULL) { @@ -982,15 +984,15 @@ lnext:; } else if (estate->es_rowMark != NULL) { - List *l; - execRowMark *erm; - Buffer buffer; - HeapTupleData tuple; + List *l; + execRowMark *erm; + Buffer buffer; + HeapTupleData tuple; TupleTableSlot *newSlot; - int test; + int test; -lmark:; - foreach (l, estate->es_rowMark) + lmark: ; + foreach(l, estate->es_rowMark) { erm = lfirst(l); if (!ExecGetJunkAttribute(junkfilter, @@ -1016,12 +1018,12 @@ lmark:; if (XactIsoLevel == XACT_SERIALIZABLE) { elog(ERROR, "Can't serialize access due to concurrent update"); - return(NULL); + return (NULL); } - else if (!(ItemPointerEquals(&(tuple.t_self), - (ItemPointer)DatumGetPointer(datum)))) + else if (!(ItemPointerEquals(&(tuple.t_self), + (ItemPointer) DatumGetPointer(datum)))) { - newSlot = EvalPlanQual(estate, erm->rti, &(tuple.t_self)); + newSlot = EvalPlanQual(estate, erm->rti, &(tuple.t_self)); if (!(TupIsNull(newSlot))) { slot = newSlot; @@ -1029,16 +1031,17 @@ lmark:; goto lmark; } } - /* - * if tuple was deleted or PlanQual failed - * for updated tuple - we have not return - * this tuple! + + /* + * if tuple was deleted or PlanQual failed for + * updated tuple - we have not return this + * tuple! */ goto lnext; default: elog(ERROR, "Unknown status %u from heap_mark4update", test); - return(NULL); + return (NULL); } } } @@ -1057,17 +1060,17 @@ lmark:; } /* if (junkfilter... */ /* - * now that we have a tuple, do the appropriate thing - * with it.. either return it to the user, add - * it to a relation someplace, delete it from a - * relation, or modify some of it's attributes. + * now that we have a tuple, do the appropriate thing with it.. + * either return it to the user, add it to a relation someplace, + * delete it from a relation, or modify some of it's attributes. */ switch (operation) { case CMD_SELECT: ExecRetrieve(slot, /* slot containing tuple */ - destfunc, /* destination's tuple-receiver obj */ + destfunc, /* destination's tuple-receiver + * obj */ estate); /* */ result = slot; break; @@ -1092,10 +1095,10 @@ lmark:; result = NULL; break; } + /* - * check our tuple count.. if we've returned the - * proper number then return, else loop again and - * process more tuples.. + * check our tuple count.. if we've returned the proper number + * then return, else loop again and process more tuples.. */ current_tuple_count += 1; if (numberTuples == current_tuple_count) @@ -1103,8 +1106,8 @@ lmark:; } /* - * here, result is either a slot containing a tuple in the case - * of a RETRIEVE or NULL otherwise. + * here, result is either a slot containing a tuple in the case of a + * RETRIEVE or NULL otherwise. */ return result; } @@ -1121,20 +1124,20 @@ lmark:; */ static void ExecRetrieve(TupleTableSlot *slot, - DestReceiver *destfunc, + DestReceiver * destfunc, EState *estate) { HeapTuple tuple; TupleDesc attrtype; /* - * get the heap tuple out of the tuple table slot + * get the heap tuple out of the tuple table slot */ tuple = slot->val; attrtype = slot->ttc_tupleDescriptor; /* - * insert the tuple into the "into relation" + * insert the tuple into the "into relation" */ if (estate->es_into_relation_descriptor != NULL) { @@ -1143,7 +1146,7 @@ ExecRetrieve(TupleTableSlot *slot, } /* - * send the tuple to the front end (or the screen) + * send the tuple to the front end (or the screen) */ (*destfunc->receiveTuple) (tuple, attrtype, destfunc); IncrRetrieved(); @@ -1171,19 +1174,18 @@ ExecAppend(TupleTableSlot *slot, Oid newId; /* - * get the heap tuple out of the tuple table slot + * get the heap tuple out of the tuple table slot */ tuple = slot->val; /* - * get information on the result relation + * get information on the result relation */ resultRelationInfo = estate->es_result_relation_info; resultRelationDesc = resultRelationInfo->ri_RelationDesc; /* - * have to add code to preform unique checking here. - * cim -12/1/89 + * have to add code to preform unique checking here. cim -12/1/89 */ /* BEFORE ROW INSERT Triggers */ @@ -1210,23 +1212,21 @@ ExecAppend(TupleTableSlot *slot, */ if (resultRelationDesc->rd_att->constr) - { ExecConstraints("ExecAppend", resultRelationDesc, tuple, estate); - } /* - * insert the tuple + * insert the tuple */ newId = heap_insert(resultRelationDesc, /* relation desc */ tuple); /* heap tuple */ IncrAppended(); /* - * process indices + * process indices * - * Note: heap_insert adds a new tuple to a relation. As a side - * effect, the tupleid of the new tuple is placed in the new - * tuple's t_ctid field. + * Note: heap_insert adds a new tuple to a relation. As a side effect, + * the tupleid of the new tuple is placed in the new tuple's t_ctid + * field. */ numIndices = resultRelationInfo->ri_NumIndices; if (numIndices > 0) @@ -1252,13 +1252,13 @@ ExecDelete(TupleTableSlot *slot, ItemPointer tupleid, EState *estate) { - RelationInfo *resultRelationInfo; - Relation resultRelationDesc; - ItemPointerData ctid; - int result; + RelationInfo *resultRelationInfo; + Relation resultRelationDesc; + ItemPointerData ctid; + int result; /* - * get the result relation information + * get the result relation information */ resultRelationInfo = estate->es_result_relation_info; resultRelationDesc = resultRelationInfo->ri_RelationDesc; @@ -1276,7 +1276,7 @@ ExecDelete(TupleTableSlot *slot, } /* - * delete the tuple + * delete the tuple */ ldelete:; result = heap_delete(resultRelationDesc, tupleid, &ctid); @@ -1293,8 +1293,8 @@ ldelete:; elog(ERROR, "Can't serialize access due to concurrent update"); else if (!(ItemPointerEquals(tupleid, &ctid))) { - TupleTableSlot *epqslot = EvalPlanQual(estate, - resultRelationInfo->ri_RangeTableIndex, &ctid); + TupleTableSlot *epqslot = EvalPlanQual(estate, + resultRelationInfo->ri_RangeTableIndex, &ctid); if (!TupIsNull(epqslot)) { @@ -1313,14 +1313,12 @@ ldelete:; (estate->es_processed)++; /* - * Note: Normally one would think that we have to - * delete index tuples associated with the - * heap tuple now.. + * Note: Normally one would think that we have to delete index tuples + * associated with the heap tuple now.. * - * ... but in POSTGRES, we have no need to do this - * because the vacuum daemon automatically - * opens an index scan and deletes index tuples - * when it finds deleted heap tuples. -cim 9/27/89 + * ... but in POSTGRES, we have no need to do this because the vacuum + * daemon automatically opens an index scan and deletes index tuples + * when it finds deleted heap tuples. -cim 9/27/89 */ /* AFTER ROW DELETE Triggers */ @@ -1346,15 +1344,15 @@ ExecReplace(TupleTableSlot *slot, ItemPointer tupleid, EState *estate) { - HeapTuple tuple; - RelationInfo *resultRelationInfo; - Relation resultRelationDesc; - ItemPointerData ctid; - int result; - int numIndices; + HeapTuple tuple; + RelationInfo *resultRelationInfo; + Relation resultRelationDesc; + ItemPointerData ctid; + int result; + int numIndices; /* - * abort the operation if not running transactions + * abort the operation if not running transactions */ if (IsBootstrapProcessingMode()) { @@ -1363,21 +1361,20 @@ ExecReplace(TupleTableSlot *slot, } /* - * get the heap tuple out of the tuple table slot + * get the heap tuple out of the tuple table slot */ tuple = slot->val; /* - * get the result relation information + * get the result relation information */ resultRelationInfo = estate->es_result_relation_info; resultRelationDesc = resultRelationInfo->ri_RelationDesc; /* - * have to add code to preform unique checking here. - * in the event of unique tuples, this becomes a deletion - * of the original tuple affected by the replace. - * cim -12/1/89 + * have to add code to preform unique checking here. in the event of + * unique tuples, this becomes a deletion of the original tuple + * affected by the replace. cim -12/1/89 */ /* BEFORE ROW UPDATE Triggers */ @@ -1404,12 +1401,10 @@ ExecReplace(TupleTableSlot *slot, */ if (resultRelationDesc->rd_att->constr) - { ExecConstraints("ExecReplace", resultRelationDesc, tuple, estate); - } /* - * replace the heap tuple + * replace the heap tuple */ lreplace:; result = heap_replace(resultRelationDesc, tupleid, tuple, &ctid); @@ -1426,8 +1421,8 @@ lreplace:; elog(ERROR, "Can't serialize access due to concurrent update"); else if (!(ItemPointerEquals(tupleid, &ctid))) { - TupleTableSlot *epqslot = EvalPlanQual(estate, - resultRelationInfo->ri_RangeTableIndex, &ctid); + TupleTableSlot *epqslot = EvalPlanQual(estate, + resultRelationInfo->ri_RangeTableIndex, &ctid); if (!TupIsNull(epqslot)) { @@ -1448,23 +1443,21 @@ lreplace:; (estate->es_processed)++; /* - * Note: instead of having to update the old index tuples - * associated with the heap tuple, all we do is form - * and insert new index tuples.. This is because - * replaces are actually deletes and inserts and - * index tuple deletion is done automagically by - * the vaccuum deamon.. All we do is insert new - * index tuples. -cim 9/27/89 + * Note: instead of having to update the old index tuples associated + * with the heap tuple, all we do is form and insert new index + * tuples.. This is because replaces are actually deletes and inserts + * and index tuple deletion is done automagically by the vaccuum + * deamon.. All we do is insert new index tuples. -cim 9/27/89 */ /* - * process indices + * process indices * - * heap_replace updates a tuple in the base relation by invalidating - * it and then appending a new tuple to the relation. As a side - * effect, the tupleid of the new tuple is placed in the new - * tuple's t_ctid field. So we now insert index tuples using - * the new tupleid stored there. + * heap_replace updates a tuple in the base relation by invalidating it + * and then appending a new tuple to the relation. As a side effect, + * the tupleid of the new tuple is placed in the new tuple's t_ctid + * field. So we now insert index tuples using the new tupleid stored + * there. */ numIndices = resultRelationInfo->ri_NumIndices; @@ -1584,7 +1577,7 @@ ExecRelCheck(Relation rel, HeapTuple tuple, EState *estate) if (estate->es_result_relation_constraints == NULL) { estate->es_result_relation_constraints = - (List **)palloc(ncheck * sizeof(List *)); + (List **) palloc(ncheck * sizeof(List *)); for (i = 0; i < ncheck; i++) { @@ -1642,41 +1635,41 @@ ExecConstraints(char *caller, Relation rel, HeapTuple tuple, EState *estate) return; } -TupleTableSlot* +TupleTableSlot * EvalPlanQual(EState *estate, Index rti, ItemPointer tid) { - evalPlanQual *epq = (evalPlanQual*) estate->es_evalPlanQual; - evalPlanQual *oldepq; - EState *epqstate = NULL; - Relation relation; - Buffer buffer; - HeapTupleData tuple; - bool endNode = true; + evalPlanQual *epq = (evalPlanQual *) estate->es_evalPlanQual; + evalPlanQual *oldepq; + EState *epqstate = NULL; + Relation relation; + Buffer buffer; + HeapTupleData tuple; + bool endNode = true; Assert(rti != 0); if (epq != NULL && epq->rti == 0) { - Assert(!(estate->es_useEvalPlan) && - epq->estate.es_evalPlanQual == NULL); + Assert(!(estate->es_useEvalPlan) && + epq->estate.es_evalPlanQual == NULL); epq->rti = rti; endNode = false; } /* * If this is request for another RTE - Ra, - then we have to check - * wasn't PlanQual requested for Ra already and if so then Ra' row - * was updated again and we have to re-start old execution for Ra - * and forget all what we done after Ra was suspended. Cool? -:)) + * wasn't PlanQual requested for Ra already and if so then Ra' row was + * updated again and we have to re-start old execution for Ra and + * forget all what we done after Ra was suspended. Cool? -:)) */ - if (epq != NULL && epq->rti != rti && + if (epq != NULL && epq->rti != rti && epq->estate.es_evTuple[rti - 1] != NULL) { do { /* pop previous PlanQual from the stack */ epqstate = &(epq->estate); - oldepq = (evalPlanQual*) epqstate->es_evalPlanQual; + oldepq = (evalPlanQual *) epqstate->es_evalPlanQual; Assert(oldepq->rti != 0); /* stop execution */ ExecEndNode(epq->plan, epq->plan); @@ -1689,54 +1682,50 @@ EvalPlanQual(EState *estate, Index rti, ItemPointer tid) estate->es_evalPlanQual = (Pointer) epq; } - /* + /* * If we are requested for another RTE then we have to suspend * execution of current PlanQual and start execution for new one. */ if (epq == NULL || epq->rti != rti) { /* try to reuse plan used previously */ - evalPlanQual *newepq = (epq != NULL) ? epq->free : NULL; + evalPlanQual *newepq = (epq != NULL) ? epq->free : NULL; if (newepq == NULL) /* first call or freePQ stack is empty */ { - newepq = (evalPlanQual*) palloc(sizeof(evalPlanQual)); + newepq = (evalPlanQual *) palloc(sizeof(evalPlanQual)); /* Init EState */ epqstate = &(newepq->estate); memset(epqstate, 0, sizeof(EState)); - epqstate->type = T_EState; + epqstate->type = T_EState; epqstate->es_direction = ForwardScanDirection; epqstate->es_snapshot = estate->es_snapshot; epqstate->es_range_table = estate->es_range_table; epqstate->es_param_list_info = estate->es_param_list_info; if (estate->es_origPlan->nParamExec > 0) epqstate->es_param_exec_vals = (ParamExecData *) - palloc(estate->es_origPlan->nParamExec * - sizeof(ParamExecData)); - epqstate->es_tupleTable = + palloc(estate->es_origPlan->nParamExec * + sizeof(ParamExecData)); + epqstate->es_tupleTable = ExecCreateTupleTable(estate->es_tupleTable->size); epqstate->es_refcount = estate->es_refcount; /* ... rest */ newepq->plan = copyObject(estate->es_origPlan); newepq->free = NULL; - epqstate->es_evTupleNull = (bool*) + epqstate->es_evTupleNull = (bool *) palloc(length(estate->es_range_table) * sizeof(bool)); if (epq == NULL) /* first call */ { - epqstate->es_evTuple = (HeapTuple*) + epqstate->es_evTuple = (HeapTuple *) palloc(length(estate->es_range_table) * sizeof(HeapTuple)); - memset(epqstate->es_evTuple, 0, - length(estate->es_range_table) * sizeof(HeapTuple)); + memset(epqstate->es_evTuple, 0, + length(estate->es_range_table) * sizeof(HeapTuple)); } else - { epqstate->es_evTuple = epq->estate.es_evTuple; - } } else - { epqstate = &(newepq->estate); - } /* push current PQ to the stack */ epqstate->es_evalPlanQual = (Pointer) epq; epq = newepq; @@ -1748,9 +1737,8 @@ EvalPlanQual(EState *estate, Index rti, ItemPointer tid) epqstate = &(epq->estate); /* - * Ok - we're requested for the same RTE (-:)). - * I'm not sure about ability to use ExecReScan instead of - * ExecInitNode, so... + * Ok - we're requested for the same RTE (-:)). I'm not sure about + * ability to use ExecReScan instead of ExecInitNode, so... */ if (endNode) ExecEndNode(epq->plan, epq->plan); @@ -1763,22 +1751,22 @@ EvalPlanQual(EState *estate, Index rti, ItemPointer tid) } /* ** fetch tid tuple ** */ - if (estate->es_result_relation_info != NULL && + if (estate->es_result_relation_info != NULL && estate->es_result_relation_info->ri_RangeTableIndex == rti) relation = estate->es_result_relation_info->ri_RelationDesc; else { - List *l; + List *l; - foreach (l, estate->es_rowMark) + foreach(l, estate->es_rowMark) { - if (((execRowMark*) lfirst(l))->rti == rti) + if (((execRowMark *) lfirst(l))->rti == rti) break; } - relation = ((execRowMark*) lfirst(l))->relation; + relation = ((execRowMark *) lfirst(l))->relation; } tuple.t_self = *tid; - for ( ; ; ) + for (;;) { heap_fetch(relation, SnapshotDirty, &tuple, &buffer); if (tuple.t_data != NULL) @@ -1787,9 +1775,10 @@ EvalPlanQual(EState *estate, Index rti, ItemPointer tid) if (TransactionIdIsValid(SnapshotDirty->xmin)) elog(ERROR, "EvalPlanQual: t_xmin is uncommitted ?!"); + /* - * If tuple is being updated by other transaction then - * we have to wait for its commit/abort. + * If tuple is being updated by other transaction then we have + * to wait for its commit/abort. */ if (TransactionIdIsValid(xwait)) { @@ -1797,6 +1786,7 @@ EvalPlanQual(EState *estate, Index rti, ItemPointer tid) XactLockTableWait(xwait); continue; } + /* * Nice! We got tuple - now copy it. */ @@ -1806,22 +1796,24 @@ EvalPlanQual(EState *estate, Index rti, ItemPointer tid) ReleaseBuffer(buffer); break; } + /* * Ops! Invalid tuple. Have to check is it updated or deleted. - * Note that it's possible to get invalid SnapshotDirty->tid - * if tuple updated by this transaction. Have we to check this ? + * Note that it's possible to get invalid SnapshotDirty->tid if + * tuple updated by this transaction. Have we to check this ? */ - if (ItemPointerIsValid(&(SnapshotDirty->tid)) && + if (ItemPointerIsValid(&(SnapshotDirty->tid)) && !(ItemPointerEquals(&(tuple.t_self), &(SnapshotDirty->tid)))) { tuple.t_self = SnapshotDirty->tid; /* updated ... */ continue; } + /* - * Deleted or updated by this transaction. Do not - * (re-)start execution of this PQ. Continue previous PQ. + * Deleted or updated by this transaction. Do not (re-)start + * execution of this PQ. Continue previous PQ. */ - oldepq = (evalPlanQual*) epqstate->es_evalPlanQual; + oldepq = (evalPlanQual *) epqstate->es_evalPlanQual; if (oldepq != NULL) { Assert(oldepq->rti != 0); @@ -1832,36 +1824,37 @@ EvalPlanQual(EState *estate, Index rti, ItemPointer tid) estate->es_evalPlanQual = (Pointer) epq; } else - { /* this is the first (oldest) PQ - epq->rti = 0; * - mark as free and - estate->es_useEvalPlan = false; * continue Query execution - return (NULL); */ + { /* this is the first (oldest) PQ epq->rti + * = 0; * - mark as + * free and estate->es_useEvalPlan = + * false; * continue Query execution + * return (NULL); */ } } if (estate->es_origPlan->nParamExec > 0) - memset(epqstate->es_param_exec_vals, 0, - estate->es_origPlan->nParamExec * sizeof(ParamExecData)); - memset(epqstate->es_evTupleNull, false, - length(estate->es_range_table) * sizeof(bool)); + memset(epqstate->es_param_exec_vals, 0, + estate->es_origPlan->nParamExec * sizeof(ParamExecData)); + memset(epqstate->es_evTupleNull, false, + length(estate->es_range_table) * sizeof(bool)); ExecInitNode(epq->plan, epqstate, NULL); /* - * For UPDATE/DELETE we have to return tid of actual row - * we're executing PQ for. + * For UPDATE/DELETE we have to return tid of actual row we're + * executing PQ for. */ *tid = tuple.t_self; return (EvalPlanQualNext(estate)); } -static TupleTableSlot* +static TupleTableSlot * EvalPlanQualNext(EState *estate) { - evalPlanQual *epq = (evalPlanQual*) estate->es_evalPlanQual; - EState *epqstate = &(epq->estate); - evalPlanQual *oldepq; - TupleTableSlot *slot; + evalPlanQual *epq = (evalPlanQual *) estate->es_evalPlanQual; + EState *epqstate = &(epq->estate); + evalPlanQual *oldepq; + TupleTableSlot *slot; Assert(epq->rti != 0); @@ -1877,11 +1870,12 @@ lpqnext:; pfree(epqstate->es_evTuple[epq->rti - 1]); epqstate->es_evTuple[epq->rti - 1] = NULL; /* pop old PQ from the stack */ - oldepq = (evalPlanQual*) epqstate->es_evalPlanQual; - if (oldepq == (evalPlanQual*) NULL) - { /* this is the first (oldest) */ - epq->rti = 0; /* PQ - mark as free and */ - estate->es_useEvalPlan = false; /* continue Query execution */ + oldepq = (evalPlanQual *) epqstate->es_evalPlanQual; + if (oldepq == (evalPlanQual *) NULL) + { /* this is the first (oldest) */ + epq->rti = 0; /* PQ - mark as free and */ + estate->es_useEvalPlan = false; /* continue Query + * execution */ return (NULL); } Assert(oldepq->rti != 0); diff --git a/src/backend/executor/execQual.c b/src/backend/executor/execQual.c index a021209cb1c..d5a793e9728 100644 --- a/src/backend/executor/execQual.c +++ b/src/backend/executor/execQual.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/executor/execQual.c,v 1.50 1999/03/20 02:07:31 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/executor/execQual.c,v 1.51 1999/05/25 16:08:37 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -66,7 +66,7 @@ bool execConstByVal; int execConstLen; /* static functions decls */ -static Datum ExecEvalAggref(Aggref *aggref, ExprContext *econtext, bool *isNull); +static Datum ExecEvalAggref(Aggref * aggref, ExprContext *econtext, bool *isNull); static Datum ExecEvalArrayRef(ArrayRef *arrayRef, ExprContext *econtext, bool *isNull, bool *isDone); static Datum ExecEvalAnd(Expr *andExpr, ExprContext *econtext, bool *isNull); @@ -190,7 +190,7 @@ ExecEvalArrayRef(ArrayRef *arrayRef, * ---------------------------------------------------------------- */ static Datum -ExecEvalAggref(Aggref *aggref, ExprContext *econtext, bool *isNull) +ExecEvalAggref(Aggref * aggref, ExprContext *econtext, bool *isNull) { *isNull = econtext->ecxt_nulls[aggref->aggno]; return econtext->ecxt_values[aggref->aggno]; @@ -232,7 +232,7 @@ ExecEvalVar(Var *variable, ExprContext *econtext, bool *isNull) int16 len; /* - * get the slot we want + * get the slot we want */ switch (variable->varno) { @@ -251,7 +251,7 @@ ExecEvalVar(Var *variable, ExprContext *econtext, bool *isNull) } /* - * extract tuple information from the slot + * extract tuple information from the slot */ heapTuple = slot->val; tuple_type = slot->ttc_tupleDescriptor; @@ -270,7 +270,7 @@ ExecEvalVar(Var *variable, ExprContext *econtext, bool *isNull) * the entire tuple, we give back a whole slot so that callers know * what the tuple looks like. */ - if (attnum == InvalidAttrNumber) + if (attnum == InvalidAttrNumber) { TupleTableSlot *tempSlot; TupleDesc td; @@ -299,26 +299,25 @@ ExecEvalVar(Var *variable, ExprContext *econtext, bool *isNull) isNull); /* return: is attribute null? */ /* - * return null if att is null + * return null if att is null */ if (*isNull) return (Datum) NULL; /* - * get length and type information.. - * ??? what should we do about variable length attributes - * - variable length attributes have their length stored - * in the first 4 bytes of the memory pointed to by the - * returned value.. If we can determine that the type - * is a variable length type, we can do the right thing. - * -cim 9/15/89 + * get length and type information.. ??? what should we do about + * variable length attributes - variable length attributes have their + * length stored in the first 4 bytes of the memory pointed to by the + * returned value.. If we can determine that the type is a variable + * length type, we can do the right thing. -cim 9/15/89 */ if (attnum < 0) { + /* - * If this is a pseudo-att, we get the type and fake the length. - * There ought to be a routine to return the real lengths, so - * we'll mark this one ... XXX -mao + * If this is a pseudo-att, we get the type and fake the length. + * There ought to be a routine to return the real lengths, so + * we'll mark this one ... XXX -mao */ len = heap_sysattrlen(attnum); /* XXX see -mao above */ byval = heap_sysattrbyval(attnum); /* XXX see -mao above */ @@ -609,11 +608,11 @@ ExecEvalFuncArgs(FunctionCachePtr fcache, i = 0; foreach(arg, argList) { + /* - * evaluate the expression, in general functions cannot take - * sets as arguments but we make an exception in the case of - * nested dot expressions. We have to watch out for this case - * here. + * evaluate the expression, in general functions cannot take sets + * as arguments but we make an exception in the case of nested dot + * expressions. We have to watch out for this case here. */ argV[i] = (Datum) ExecEvalExpr((Node *) lfirst(arg), @@ -671,10 +670,10 @@ ExecMakeFunctionResult(Node *node, } /* - * arguments is a list of expressions to evaluate - * before passing to the function manager. - * We collect the results of evaluating the expressions - * into a datum array (argV) and pass this array to arrayFmgr() + * arguments is a list of expressions to evaluate before passing to + * the function manager. We collect the results of evaluating the + * expressions into a datum array (argV) and pass this array to + * arrayFmgr() */ if (fcache->nargs != 0) { @@ -743,8 +742,8 @@ ExecMakeFunctionResult(Node *node, } /* - * now return the value gotten by calling the function manager, - * passing the function the evaluated parameter values. + * now return the value gotten by calling the function manager, + * passing the function the evaluated parameter values. */ if (fcache->language == SQLlanguageId) { @@ -843,12 +842,12 @@ ExecEvalOper(Expr *opClause, ExprContext *econtext, bool *isNull) bool isDone; /* - * an opclause is a list (op args). (I think) + * an opclause is a list (op args). (I think) * - * we extract the oid of the function associated with - * the op and then pass the work onto ExecMakeFunctionResult - * which evaluates the arguments and returns the result of - * calling the function on the evaluated arguments. + * we extract the oid of the function associated with the op and then + * pass the work onto ExecMakeFunctionResult which evaluates the + * arguments and returns the result of calling the function on the + * evaluated arguments. */ op = (Oper *) opClause->oper; argList = opClause->args; @@ -865,8 +864,8 @@ ExecEvalOper(Expr *opClause, ExprContext *econtext, bool *isNull) } /* - * call ExecMakeFunctionResult() with a dummy isDone that we ignore. - * We don't have operator whose arguments are sets. + * call ExecMakeFunctionResult() with a dummy isDone that we ignore. + * We don't have operator whose arguments are sets. */ return ExecMakeFunctionResult((Node *) op, argList, econtext, isNull, &isDone); } @@ -887,14 +886,14 @@ ExecEvalFunc(Expr *funcClause, FunctionCachePtr fcache; /* - * an funcclause is a list (func args). (I think) + * an funcclause is a list (func args). (I think) * - * we extract the oid of the function associated with - * the func node and then pass the work onto ExecMakeFunctionResult - * which evaluates the arguments and returns the result of - * calling the function on the evaluated arguments. + * we extract the oid of the function associated with the func node and + * then pass the work onto ExecMakeFunctionResult which evaluates the + * arguments and returns the result of calling the function on the + * evaluated arguments. * - * this is nearly identical to the ExecEvalOper code. + * this is nearly identical to the ExecEvalOper code. */ func = (Func *) funcClause->oper; argList = funcClause->args; @@ -939,21 +938,21 @@ ExecEvalNot(Expr *notclause, ExprContext *econtext, bool *isNull) clause = lfirst(notclause->args); /* - * We don't iterate over sets in the quals, so pass in an isDone - * flag, but ignore it. + * We don't iterate over sets in the quals, so pass in an isDone flag, + * but ignore it. */ expr_value = ExecEvalExpr(clause, econtext, isNull, &isDone); /* - * if the expression evaluates to null, then we just - * cascade the null back to whoever called us. + * if the expression evaluates to null, then we just cascade the null + * back to whoever called us. */ if (*isNull) return expr_value; /* - * evaluation of 'not' is simple.. expr is false, then - * return 'true' and vice versa. + * evaluation of 'not' is simple.. expr is false, then return 'true' + * and vice versa. */ if (DatumGetInt32(expr_value) == 0) return (Datum) true; @@ -978,22 +977,19 @@ ExecEvalOr(Expr *orExpr, ExprContext *econtext, bool *isNull) clauses = orExpr->args; /* - * we use three valued logic functions here... - * we evaluate each of the clauses in turn, - * as soon as one is true we return that - * value. If none is true and none of the - * clauses evaluate to NULL we return - * the value of the last clause evaluated (which - * should be false) with *isNull set to false else - * if none is true and at least one clause evaluated - * to NULL we set *isNull flag to true - + * we use three valued logic functions here... we evaluate each of the + * clauses in turn, as soon as one is true we return that value. If + * none is true and none of the clauses evaluate to NULL we return + * the value of the last clause evaluated (which should be false) with + * *isNull set to false else if none is true and at least one clause + * evaluated to NULL we set *isNull flag to true - */ foreach(clause, clauses) { /* - * We don't iterate over sets in the quals, so pass in an isDone - * flag, but ignore it. + * We don't iterate over sets in the quals, so pass in an isDone + * flag, but ignore it. */ const_value = ExecEvalExpr((Node *) lfirst(clause), econtext, @@ -1001,34 +997,32 @@ ExecEvalOr(Expr *orExpr, ExprContext *econtext, bool *isNull) &isDone); /* - * if the expression evaluates to null, then we - * remember it in the local IsNull flag, if none of the - * clauses are true then we need to set *isNull - * to true again. + * if the expression evaluates to null, then we remember it in the + * local IsNull flag, if none of the clauses are true then we need + * to set *isNull to true again. */ if (*isNull) { IsNull = *isNull; /* - * Many functions don't (or can't!) check if an argument is NULL - * or NOT_NULL and may return TRUE (1) with *isNull TRUE - * (an_int4_column <> 1: int4ne returns TRUE for NULLs). - * Not having time to fix the function manager I want to fix OR: - * if we had 'x <> 1 OR x isnull' then when x is NULL - * TRUE was returned by the 'x <> 1' clause ... - * but ExecQualClause says that the qualification should *fail* - * if isnull is TRUE for any value returned by ExecEvalExpr. - * So, force this rule here: - * if isnull is TRUE then the clause failed. - * Note: nullvalue() & nonnullvalue() always sets isnull to FALSE for NULLs. - * - vadim 09/22/97 + * Many functions don't (or can't!) check if an argument is + * NULL or NOT_NULL and may return TRUE (1) with *isNull TRUE + * (an_int4_column <> 1: int4ne returns TRUE for NULLs). Not + * having time to fix the function manager I want to fix OR: + * if we had 'x <> 1 OR x isnull' then when x is NULL TRUE was + * returned by the 'x <> 1' clause ... but ExecQualClause says + * that the qualification should *fail* if isnull is TRUE for + * any value returned by ExecEvalExpr. So, force this rule + * here: if isnull is TRUE then the clause failed. Note: + * nullvalue() & nonnullvalue() always sets isnull to FALSE + * for NULLs. - vadim 09/22/97 */ const_value = 0; } /* - * if we have a true result, then we return it. + * if we have a true result, then we return it. */ if (DatumGetInt32(const_value) != 0) return const_value; @@ -1057,18 +1051,16 @@ ExecEvalAnd(Expr *andExpr, ExprContext *econtext, bool *isNull) clauses = andExpr->args; /* - * we evaluate each of the clauses in turn, - * as soon as one is false we return that - * value. If none are false or NULL then we return - * the value of the last clause evaluated, which - * should be true. + * we evaluate each of the clauses in turn, as soon as one is false we + * return that value. If none are false or NULL then we return the + * value of the last clause evaluated, which should be true. */ foreach(clause, clauses) { /* - * We don't iterate over sets in the quals, so pass in an isDone - * flag, but ignore it. + * We don't iterate over sets in the quals, so pass in an isDone + * flag, but ignore it. */ const_value = ExecEvalExpr((Node *) lfirst(clause), econtext, @@ -1076,17 +1068,16 @@ ExecEvalAnd(Expr *andExpr, ExprContext *econtext, bool *isNull) &isDone); /* - * if the expression evaluates to null, then we - * remember it in IsNull, if none of the clauses after - * this evaluates to false we will have to set *isNull - * to true again. + * if the expression evaluates to null, then we remember it in + * IsNull, if none of the clauses after this evaluates to false we + * will have to set *isNull to true again. */ if (*isNull) IsNull = *isNull; /* - * if we have a false result, then we return it, since the - * conjunction must be false. + * if we have a false result, then we return it, since the + * conjunction must be false. */ if (DatumGetInt32(const_value) == 0) return const_value; @@ -1106,7 +1097,7 @@ ExecEvalAnd(Expr *andExpr, ExprContext *econtext, bool *isNull) * ---------------------------------------------------------------- */ static Datum -ExecEvalCase(CaseExpr *caseExpr, ExprContext *econtext, bool *isNull) +ExecEvalCase(CaseExpr * caseExpr, ExprContext *econtext, bool *isNull) { List *clauses; List *clause; @@ -1117,17 +1108,16 @@ ExecEvalCase(CaseExpr *caseExpr, ExprContext *econtext, bool *isNull) clauses = caseExpr->args; /* - * we evaluate each of the WHEN clauses in turn, - * as soon as one is true we return the corresponding - * result. If none are true then we return the value - * of the default clause, or NULL. + * we evaluate each of the WHEN clauses in turn, as soon as one is + * true we return the corresponding result. If none are true then we + * return the value of the default clause, or NULL. */ foreach(clause, clauses) { /* - * We don't iterate over sets in the quals, so pass in an isDone - * flag, but ignore it. + * We don't iterate over sets in the quals, so pass in an isDone + * flag, but ignore it. */ wclause = lfirst(clause); @@ -1137,8 +1127,8 @@ ExecEvalCase(CaseExpr *caseExpr, ExprContext *econtext, bool *isNull) &isDone); /* - * if we have a true test, then we return the result, - * since the case statement is satisfied. + * if we have a true test, then we return the result, since the + * case statement is satisfied. */ if (DatumGetInt32(const_value) != 0) { @@ -1159,9 +1149,7 @@ ExecEvalCase(CaseExpr *caseExpr, ExprContext *econtext, bool *isNull) &isDone); } else - { *isNull = true; - } return const_value; } @@ -1204,8 +1192,8 @@ ExecEvalExpr(Node *expression, *isDone = true; /* - * here we dispatch the work to the appropriate type - * of function given the type of our expression. + * here we dispatch the work to the appropriate type of function given + * the type of our expression. */ if (expression == NULL) { @@ -1287,7 +1275,7 @@ ExecEvalExpr(Node *expression, } return retDatum; -} /* ExecEvalExpr() */ +} /* ExecEvalExpr() */ /* ---------------------------------------------------------------- @@ -1325,16 +1313,15 @@ ExecQualClause(Node *clause, ExprContext *econtext) ExecEvalExpr(clause, econtext, &isNull, &isDone); /* - * this is interesting behaviour here. When a clause evaluates - * to null, then we consider this as passing the qualification. - * it seems kind of like, if the qual is NULL, then there's no - * qual.. + * this is interesting behaviour here. When a clause evaluates to + * null, then we consider this as passing the qualification. it seems + * kind of like, if the qual is NULL, then there's no qual.. */ if (isNull) return true; /* - * remember, we return true when the qualification fails.. + * remember, we return true when the qualification fails.. */ if (DatumGetInt32(expr_value) == 0) return true; @@ -1356,7 +1343,7 @@ ExecQual(List *qual, ExprContext *econtext) bool result; /* - * debugging stuff + * debugging stuff */ EV_printf("ExecQual: qual is "); EV_nodeDisplay(qual); @@ -1365,18 +1352,18 @@ ExecQual(List *qual, ExprContext *econtext) IncrProcessed(); /* - * return true immediately if no qual + * return true immediately if no qual */ if (qual == NIL) return true; /* - * a "qual" is a list of clauses. To evaluate the - * qual, we evaluate each of the clauses in the list. + * a "qual" is a list of clauses. To evaluate the qual, we evaluate + * each of the clauses in the list. * - * ExecQualClause returns true when we know the qualification - * *failed* so we just pass each clause in qual to it until - * we know the qual failed or there are no more clauses. + * ExecQualClause returns true when we know the qualification *failed* so + * we just pass each clause in qual to it until we know the qual + * failed or there are no more clauses. */ result = false; @@ -1388,9 +1375,9 @@ ExecQual(List *qual, ExprContext *econtext) } /* - * if result is true, then it means a clause failed so we - * return false. if result is false then it means no clause - * failed so we return true. + * if result is true, then it means a clause failed so we return + * false. if result is false then it means no clause failed so we + * return true. */ if (result == true) return false; @@ -1447,48 +1434,46 @@ ExecTargetList(List *targetlist, bool isNull; /* - * debugging stuff + * debugging stuff */ EV_printf("ExecTargetList: tl is "); EV_nodeDisplay(targetlist); EV_printf("\n"); /* - * Return a dummy tuple if the targetlist is empty. - * the dummy tuple is necessary to differentiate - * between passing and failing the qualification. + * Return a dummy tuple if the targetlist is empty. the dummy tuple is + * necessary to differentiate between passing and failing the + * qualification. */ if (targetlist == NIL) { + /* - * I now think that the only time this makes - * any sense is when we run a delete query. Then - * we need to return something other than nil - * so we know to delete the tuple associated - * with the saved tupleid.. see what ExecutePlan - * does with the returned tuple.. -cim 9/21/89 + * I now think that the only time this makes any sense is when we + * run a delete query. Then we need to return something other + * than nil so we know to delete the tuple associated with the + * saved tupleid.. see what ExecutePlan does with the returned + * tuple.. -cim 9/21/89 * - * It could also happen in queries like: - * retrieve (foo.all) where bar.a = 3 + * It could also happen in queries like: retrieve (foo.all) where + * bar.a = 3 * - * is this a new phenomenon? it might cause bogus behavior - * if we try to free this tuple later!! I put a hook in - * ExecProject to watch out for this case -mer 24 Aug 1992 + * is this a new phenomenon? it might cause bogus behavior if we try + * to free this tuple later!! I put a hook in ExecProject to watch + * out for this case -mer 24 Aug 1992 * - * We must return dummy tuple!!! Try - * select t1.x from t1, t2 where t1.y = 1 and t2.y = 1 - * - t2 scan target list will be empty and so no one tuple - * will be returned! But Mer was right - dummy tuple - * must be palloced... - vadim 03/01/1999 + * We must return dummy tuple!!! Try select t1.x from t1, t2 where + * t1.y = 1 and t2.y = 1 - t2 scan target list will be empty and + * so no one tuple will be returned! But Mer was right - dummy + * tuple must be palloced... - vadim 03/01/1999 */ *isDone = true; return (HeapTuple) palloc(1); } /* - * allocate an array of char's to hold the "null" information - * only if we have a really large targetlist. otherwise we use - * the stack. + * allocate an array of char's to hold the "null" information only if + * we have a really large targetlist. otherwise we use the stack. */ if (nodomains > 64) { @@ -1502,20 +1487,21 @@ ExecTargetList(List *targetlist, } /* - * evaluate all the expressions in the target list + * evaluate all the expressions in the target list */ EV_printf("ExecTargetList: setting target list values\n"); *isDone = true; foreach(tl, targetlist) { + /* - * remember, a target list is a list of lists: + * remember, a target list is a list of lists: * - * ((<resdom | fjoin> expr) (<resdom | fjoin> expr) ...) + * ((<resdom | fjoin> expr) (<resdom | fjoin> expr) ...) * - * tl is a pointer to successive cdr's of the targetlist - * tle is a pointer to the target list entry in tl + * tl is a pointer to successive cdr's of the targetlist tle is a + * pointer to the target list entry in tl */ tle = lfirst(tl); @@ -1572,7 +1558,7 @@ ExecTargetList(List *targetlist, curNode < nNodes; curNode++, fjTlist = lnext(fjTlist)) { -#ifdef NOT_USED /* what is this?? */ +#ifdef NOT_USED /* what is this?? */ Node *outernode = lfirst(fjTlist); fjRes = (Resdom *) outernode->iterexpr; @@ -1590,19 +1576,19 @@ ExecTargetList(List *targetlist, } /* - * form the new result tuple (in the "normal" context) + * form the new result tuple (in the "normal" context) */ newTuple = (HeapTuple) heap_formtuple(targettype, values, null_head); /* - * free the nulls array if we allocated one.. + * free the nulls array if we allocated one.. */ if (nodomains > 64) { pfree(null_head); pfree(fjIsNull); } - + return newTuple; } @@ -1631,13 +1617,13 @@ ExecProject(ProjectionInfo *projInfo, bool *isDone) HeapTuple newTuple; /* - * sanity checks + * sanity checks */ if (projInfo == NULL) return (TupleTableSlot *) NULL; /* - * get the projection info we want + * get the projection info we want */ slot = projInfo->pi_slot; targetlist = projInfo->pi_targetlist; @@ -1648,7 +1634,7 @@ ExecProject(ProjectionInfo *projInfo, bool *isDone) econtext = projInfo->pi_exprContext; /* - * form a new (result) tuple + * form a new (result) tuple */ newTuple = ExecTargetList(targetlist, len, @@ -1658,11 +1644,10 @@ ExecProject(ProjectionInfo *projInfo, bool *isDone) isDone); /* - * store the tuple in the projection slot and return the slot. + * store the tuple in the projection slot and return the slot. * - * If there's no projection target list we don't want to pfree - * the bogus tuple that ExecTargetList passes back to us. - * -mer 24 Aug 1992 + * If there's no projection target list we don't want to pfree the bogus + * tuple that ExecTargetList passes back to us. -mer 24 Aug 1992 */ return (TupleTableSlot *) ExecStoreTuple(newTuple,/* tuple to store */ @@ -1670,4 +1655,3 @@ ExecProject(ProjectionInfo *projInfo, bool *isDone) InvalidBuffer, /* tuple has no buffer */ true); } - diff --git a/src/backend/executor/execTuples.c b/src/backend/executor/execTuples.c index 148b6b11c17..1ffe928b57b 100644 --- a/src/backend/executor/execTuples.c +++ b/src/backend/executor/execTuples.c @@ -14,7 +14,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/executor/execTuples.c,v 1.24 1999/03/23 16:50:48 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/executor/execTuples.c,v 1.25 1999/05/25 16:08:39 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -467,6 +467,7 @@ ExecSetSlotPolicy(TupleTableSlot *slot, /* slot to change */ return old_shouldFree; } + #endif /* -------------------------------- @@ -650,6 +651,7 @@ ExecInitMarkedTupleSlot(EState *estate, MergeJoinState *mergestate) INIT_SLOT_ALLOC; mergestate->mj_MarkedTupleSlot = (TupleTableSlot *) slot; } + #endif /* ---------------- diff --git a/src/backend/executor/execUtils.c b/src/backend/executor/execUtils.c index b6906e0a3db..2bd3d03bc67 100644 --- a/src/backend/executor/execUtils.c +++ b/src/backend/executor/execUtils.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/executor/execUtils.c,v 1.44 1999/03/20 01:13:22 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/executor/execUtils.c,v 1.45 1999/05/25 16:08:39 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -402,7 +402,7 @@ ExecFreeExprContext(CommonState *commonstate) void ExecFreeTypeInfo(CommonState *commonstate) { - TupleDesc tupDesc; + TupleDesc tupDesc; tupDesc = commonstate->cs_ResultTupleSlot->ttc_tupleDescriptor; if (tupDesc == NULL) @@ -498,12 +498,12 @@ ExecAssignScanTypeFromOuterPlan(Plan *node, CommonScanState *csstate) * Routines dealing with the structure 'attribute' which conatains * the type information about attributes in a tuple: * - * ExecMakeTypeInfo(noType) + * ExecMakeTypeInfo(noType) * returns pointer to array of 'noType' structure 'attribute'. - * ExecSetTypeInfo(index, typeInfo, attNum, attLen) + * ExecSetTypeInfo(index, typeInfo, attNum, attLen) * sets the element indexed by 'index' in typeInfo with * the values: attNum, attLen. - * ExecFreeTypeInfo(typeInfo) + * ExecFreeTypeInfo(typeInfo) * frees the structure 'typeInfo'. * ---------------------------------------------------------------- */ @@ -677,7 +677,7 @@ ExecGetIndexKeyInfo(Form_pg_index indexTuple, */ numKeys = 0; for (i = 0; i < INDEX_MAX_KEYS && - indexTuple->indkey[i] != InvalidAttrNumber; i++) + indexTuple->indkey[i] != InvalidAttrNumber; i++) numKeys++; /* ---------------- @@ -711,7 +711,7 @@ ExecGetIndexKeyInfo(Form_pg_index indexTuple, */ CXT1_printf("ExecGetIndexKeyInfo: context is %d\n", CurrentMemoryContext); - attKeys = (AttrNumber *)palloc(numKeys * sizeof(AttrNumber)); + attKeys = (AttrNumber *) palloc(numKeys * sizeof(AttrNumber)); for (i = 0; i < numKeys; i++) attKeys[i] = indexTuple->indkey[i]; @@ -917,19 +917,20 @@ ExecOpenIndices(Oid resultRelationOid, if (indexDesc != NULL) { relationDescs[i++] = indexDesc; + /* - * Hack for not btree and hash indices: they use relation level - * exclusive locking on updation (i.e. - they are not ready - * for MVCC) and so we have to exclusively lock indices here - * to prevent deadlocks if we will scan them - index_beginscan - * places AccessShareLock, indices update methods don't use - * locks at all. We release this lock in ExecCloseIndices. - * Note, that hashes use page level locking - i.e. are not - * deadlock-free, - let's them be on their way -:)) - * vadim 03-12-1998 + * Hack for not btree and hash indices: they use relation + * level exclusive locking on updation (i.e. - they are + * not ready for MVCC) and so we have to exclusively lock + * indices here to prevent deadlocks if we will scan them + * - index_beginscan places AccessShareLock, indices + * update methods don't use locks at all. We release this + * lock in ExecCloseIndices. Note, that hashes use page + * level locking - i.e. are not deadlock-free, - let's + * them be on their way -:)) vadim 03-12-1998 */ - if (indexDesc->rd_rel->relam != BTREE_AM_OID && - indexDesc->rd_rel->relam != HASH_AM_OID) + if (indexDesc->rd_rel->relam != BTREE_AM_OID && + indexDesc->rd_rel->relam != HASH_AM_OID) LockRelation(indexDesc, AccessExclusiveLock); } } @@ -1014,15 +1015,17 @@ ExecCloseIndices(RelationInfo *resultRelationInfo) { if (relationDescs[i] == NULL) continue; + /* * Notes in ExecOpenIndices. */ - if (relationDescs[i]->rd_rel->relam != BTREE_AM_OID && - relationDescs[i]->rd_rel->relam != HASH_AM_OID) + if (relationDescs[i]->rd_rel->relam != BTREE_AM_OID && + relationDescs[i]->rd_rel->relam != HASH_AM_OID) UnlockRelation(relationDescs[i], AccessExclusiveLock); index_close(relationDescs[i]); } + /* * XXX should free indexInfo array here too. */ @@ -1210,7 +1213,7 @@ ExecInsertIndexTuples(TupleTableSlot *slot, result = index_insert(relationDescs[i], /* index relation */ datum, /* array of heaptuple Datums */ nulls, /* info on nulls */ - &(heapTuple->t_self), /* tid of heap tuple */ + &(heapTuple->t_self), /* tid of heap tuple */ heapRelation); /* ---------------- diff --git a/src/backend/executor/functions.c b/src/backend/executor/functions.c index f9b729b8386..c32c14a5963 100644 --- a/src/backend/executor/functions.c +++ b/src/backend/executor/functions.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/executor/functions.c,v 1.25 1999/05/13 07:28:29 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/executor/functions.c,v 1.26 1999/05/25 16:08:39 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -107,9 +107,9 @@ init_execution_state(FunctionCachePtr fcache, preves = (execution_state *) NULL; planTree_list = pg_parse_and_plan(fcache->src, fcache->argOidVect, - nargs, &queryTree_list, None, FALSE); + nargs, &queryTree_list, None, FALSE); - foreach (qtl_item, queryTree_list) + foreach(qtl_item, queryTree_list) { Query *queryTree = lfirst(qtl_item); Plan *planTree = lfirst(planTree_list); @@ -199,7 +199,7 @@ postquel_getnext(execution_state *es) feature = (LAST_POSTQUEL_COMMAND(es)) ? EXEC_RETONE : EXEC_RUN; - return ExecutorRun(es->qd, es->estate, feature, (Node *)NULL, (Node *)NULL); + return ExecutorRun(es->qd, es->estate, feature, (Node *) NULL, (Node *) NULL); } static void diff --git a/src/backend/executor/nodeAgg.c b/src/backend/executor/nodeAgg.c index a3f4f12570e..f1e0433c39d 100644 --- a/src/backend/executor/nodeAgg.c +++ b/src/backend/executor/nodeAgg.c @@ -45,7 +45,7 @@ typedef struct AggFuncInfo FmgrInfo finalfn; } AggFuncInfo; -static Datum aggGetAttr(TupleTableSlot *tuple, Aggref *aggref, bool *isNull); +static Datum aggGetAttr(TupleTableSlot *tuple, Aggref * aggref, bool *isNull); /* --------------------------------------- @@ -121,7 +121,8 @@ ExecAgg(Agg *node) */ /* - * We loop retrieving groups until we find one matching node->plan.qual + * We loop retrieving groups until we find one matching + * node->plan.qual */ do { @@ -133,7 +134,7 @@ ExecAgg(Agg *node) econtext = aggstate->csstate.cstate.cs_ExprContext; nagg = length(node->aggs); - + value1 = node->aggstate->csstate.cstate.cs_ExprContext->ecxt_values; nulls = node->aggstate->csstate.cstate.cs_ExprContext->ecxt_nulls; @@ -163,7 +164,7 @@ ExecAgg(Agg *node) finalfn_oid; aggref->aggno = ++aggno; - + /* --------------------- * find transfer functions of all the aggregates and initialize * their initial values @@ -172,7 +173,7 @@ ExecAgg(Agg *node) aggname = aggref->aggname; aggTuple = SearchSysCacheTuple(AGGNAME, PointerGetDatum(aggname), - ObjectIdGetDatum(aggref->basetype), + ObjectIdGetDatum(aggref->basetype), 0, 0); if (!HeapTupleIsValid(aggTuple)) elog(ERROR, "ExecAgg: cache lookup failed for aggregate \"%s\"(%s)", @@ -195,9 +196,9 @@ ExecAgg(Agg *node) fmgr_info(xfn2_oid, &aggFuncInfo[aggno].xfn2); aggFuncInfo[aggno].xfn2_oid = xfn2_oid; value2[aggno] = (Datum) AggNameGetInitVal((char *) aggname, - aggp->aggbasetype, - 2, - &isNull2); + aggp->aggbasetype, + 2, + &isNull2); /* ------------------------------------------ * If there is a second transition function, its initial * value must exist -- as it does not depend on data values, @@ -213,9 +214,9 @@ ExecAgg(Agg *node) fmgr_info(xfn1_oid, &aggFuncInfo[aggno].xfn1); aggFuncInfo[aggno].xfn1_oid = xfn1_oid; value1[aggno] = (Datum) AggNameGetInitVal((char *) aggname, - aggp->aggbasetype, - 1, - &isNull1); + aggp->aggbasetype, + 1, + &isNull1); /* ------------------------------------------ * If the initial value for the first transition function @@ -245,6 +246,7 @@ ExecAgg(Agg *node) outerslot = ExecProcNode(outerPlan, (Plan *) node); if (TupIsNull(outerslot)) { + /* * when the outerplan doesn't return a single tuple, * create a dummy heaptuple anyway because we still need @@ -299,27 +301,29 @@ ExecAgg(Agg *node) { if (noInitValue[aggno]) { + /* - * value1 has not been initialized. - * This is the first non-NULL input value. - * We use it as the initial value for value1. + * value1 has not been initialized. This is the + * first non-NULL input value. We use it as the + * initial value for value1. * - * But we can't just use it straight, we have to - * make a copy of it since the tuple from which it - * came will be freed on the next iteration of the + * But we can't just use it straight, we have to make + * a copy of it since the tuple from which it came + * will be freed on the next iteration of the * scan. This requires finding out how to copy * the Datum. We assume the datum is of the agg's - * basetype, or at least binary compatible with it. + * basetype, or at least binary compatible with + * it. */ - Type aggBaseType = typeidType(aggref->basetype); - int attlen = typeLen(aggBaseType); - bool byVal = typeByVal(aggBaseType); + Type aggBaseType = typeidType(aggref->basetype); + int attlen = typeLen(aggBaseType); + bool byVal = typeByVal(aggBaseType); if (byVal) value1[aggno] = newVal; else { - if (attlen == -1) /* variable length */ + if (attlen == -1) /* variable length */ attlen = VARSIZE((struct varlena *) newVal); value1[aggno] = (Datum) palloc(attlen); memcpy((char *) (value1[aggno]), (char *) newVal, @@ -330,13 +334,14 @@ ExecAgg(Agg *node) } else { + /* * apply the transition functions. */ args[0] = value1[aggno]; args[1] = newVal; - value1[aggno] = (Datum) fmgr_c(&aggfns->xfn1, - (FmgrValues *) args, &isNull1); + value1[aggno] = (Datum) fmgr_c(&aggfns->xfn1, + (FmgrValues *) args, &isNull1); Assert(!isNull1); } } @@ -344,8 +349,8 @@ ExecAgg(Agg *node) if (aggfns->xfn2.fn_addr != NULL) { args[0] = value2[aggno]; - value2[aggno] = (Datum) fmgr_c(&aggfns->xfn2, - (FmgrValues *) args, &isNull2); + value2[aggno] = (Datum) fmgr_c(&aggfns->xfn2, + (FmgrValues *) args, &isNull2); Assert(!isNull2); } } @@ -395,7 +400,7 @@ ExecAgg(Agg *node) else elog(NOTICE, "ExecAgg: no valid transition functions??"); value1[aggno] = (Datum) fmgr_c(&aggfns->finalfn, - (FmgrValues *) args, &(nulls[aggno])); + (FmgrValues *) args, &(nulls[aggno])); } else if (aggfns->xfn1.fn_addr != NULL) { @@ -441,10 +446,11 @@ ExecAgg(Agg *node) * As long as the retrieved group does not match the * qualifications it is ignored and the next group is fetched */ - if(node->plan.qual != NULL) - qual_result = ExecQual(fix_opids(node->plan.qual), econtext); - else qual_result = false; - + if (node->plan.qual != NULL) + qual_result = ExecQual(fix_opids(node->plan.qual), econtext); + else + qual_result = false; + if (oneTuple) pfree(oneTuple); } @@ -466,7 +472,7 @@ ExecInitAgg(Agg *node, EState *estate, Plan *parent) AggState *aggstate; Plan *outerPlan; ExprContext *econtext; - + /* * assign the node's execution state */ @@ -478,7 +484,7 @@ ExecInitAgg(Agg *node, EState *estate, Plan *parent) aggstate = makeNode(AggState); node->aggstate = aggstate; aggstate->agg_done = FALSE; - + /* * assign node's base id and create expression context */ @@ -494,7 +500,7 @@ ExecInitAgg(Agg *node, EState *estate, Plan *parent) ExecInitResultTupleSlot(estate, &aggstate->csstate.cstate); econtext = aggstate->csstate.cstate.cs_ExprContext; - econtext->ecxt_values = (Datum *) palloc(sizeof(Datum) * length(node->aggs)); + econtext->ecxt_values = (Datum *) palloc(sizeof(Datum) * length(node->aggs)); MemSet(econtext->ecxt_values, 0, sizeof(Datum) * length(node->aggs)); econtext->ecxt_nulls = (char *) palloc(sizeof(char) * length(node->aggs)); MemSet(econtext->ecxt_nulls, 0, sizeof(char) * length(node->aggs)); @@ -538,8 +544,8 @@ int ExecCountSlotsAgg(Agg *node) { return ExecCountSlotsNode(outerPlan(node)) + - ExecCountSlotsNode(innerPlan(node)) + - AGG_NSLOTS; + ExecCountSlotsNode(innerPlan(node)) + + AGG_NSLOTS; } /* ------------------------ @@ -576,7 +582,7 @@ ExecEndAgg(Agg *node) */ static Datum aggGetAttr(TupleTableSlot *slot, - Aggref *aggref, + Aggref * aggref, bool *isNull) { Datum result; @@ -622,10 +628,11 @@ aggGetAttr(TupleTableSlot *slot, return (Datum) tempSlot; } - result = heap_getattr(heapTuple, /* tuple containing attribute */ - attnum, /* attribute number of desired attribute */ - tuple_type,/* tuple descriptor of tuple */ - isNull); /* return: is attribute null? */ + result = heap_getattr(heapTuple, /* tuple containing attribute */ + attnum, /* attribute number of desired + * attribute */ + tuple_type, /* tuple descriptor of tuple */ + isNull); /* return: is attribute null? */ /* ---------------- * return null if att is null diff --git a/src/backend/executor/nodeAppend.c b/src/backend/executor/nodeAppend.c index 8a096ef0f86..c46b467caaa 100644 --- a/src/backend/executor/nodeAppend.c +++ b/src/backend/executor/nodeAppend.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/executor/nodeAppend.c,v 1.18 1999/02/21 03:48:40 scrappy Exp $ + * $Header: /cvsroot/pgsql/src/backend/executor/nodeAppend.c,v 1.19 1999/05/25 16:08:40 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -151,7 +151,7 @@ exec_append_initialize_next(Append *node) if (appendstate->as_junkFilter_list) { estate->es_junkFilter = (JunkFilter *) nth(whichplan, - appendstate->as_junkFilter_list); + appendstate->as_junkFilter_list); } if (appendstate->as_result_relation_info_list) { diff --git a/src/backend/executor/nodeGroup.c b/src/backend/executor/nodeGroup.c index c850906d8ae..55659a90254 100644 --- a/src/backend/executor/nodeGroup.c +++ b/src/backend/executor/nodeGroup.c @@ -13,7 +13,7 @@ * columns. (ie. tuples from the same group are consecutive) * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/executor/nodeGroup.c,v 1.25 1999/02/13 23:15:21 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/executor/nodeGroup.c,v 1.26 1999/05/25 16:08:41 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -193,8 +193,8 @@ ExecGroupOneTuple(Group *node) grpstate->grp_done = TRUE; return NULL; } - grpstate->grp_firstTuple = firsttuple = - heap_copytuple(outerslot->val); + grpstate->grp_firstTuple = firsttuple = + heap_copytuple(outerslot->val); } /* diff --git a/src/backend/executor/nodeHash.c b/src/backend/executor/nodeHash.c index 4589da32bc1..3a76ef8c5d5 100644 --- a/src/backend/executor/nodeHash.c +++ b/src/backend/executor/nodeHash.c @@ -6,7 +6,7 @@ * Copyright (c) 1994, Regents of the University of California * * - * $Id: nodeHash.c,v 1.35 1999/05/18 21:33:06 tgl Exp $ + * $Id: nodeHash.c,v 1.36 1999/05/25 16:08:41 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -19,7 +19,7 @@ */ #include <sys/types.h> -#include <stdio.h> +#include <stdio.h> #include <math.h> #include <string.h> @@ -80,7 +80,8 @@ ExecHash(Hash *node) */ for (i = 0; i < nbatch; i++) { - File tfile = OpenTemporaryFile(); + File tfile = OpenTemporaryFile(); + Assert(tfile >= 0); hashtable->innerBatchFile[i] = BufFileCreate(tfile); } @@ -247,30 +248,33 @@ ExecHashTableCreate(Hash *node) int i; Portal myPortal; char myPortalName[64]; - MemoryContext oldcxt; + MemoryContext oldcxt; /* ---------------- * Get information about the size of the relation to be hashed * (it's the "outer" subtree of this node, but the inner relation of * the hashjoin). - * Caution: this is only the planner's estimates, and so - * can't be trusted too far. Apply a healthy fudge factor. + * Caution: this is only the planner's estimates, and so + * can't be trusted too far. Apply a healthy fudge factor. * ---------------- */ outerNode = outerPlan(node); ntuples = outerNode->plan_size; if (ntuples <= 0) /* force a plausible size if no info */ ntuples = 1000; - /* estimate tupsize based on footprint of tuple in hashtable... - * but what about palloc overhead? + + /* + * estimate tupsize based on footprint of tuple in hashtable... but + * what about palloc overhead? */ tupsize = MAXALIGN(outerNode->plan_width) + MAXALIGN(sizeof(HashJoinTupleData)); - inner_rel_bytes = (double) ntuples * tupsize * FUDGE_FAC; + inner_rel_bytes = (double) ntuples *tupsize * FUDGE_FAC; /* * Target hashtable size is SortMem kilobytes, but not less than - * sqrt(estimated inner rel size), so as to avoid horrible performance. + * sqrt(estimated inner rel size), so as to avoid horrible + * performance. */ hash_table_bytes = sqrt(inner_rel_bytes); if (hash_table_bytes < (SortMem * 1024L)) @@ -278,17 +282,19 @@ ExecHashTableCreate(Hash *node) /* * Count the number of hash buckets we want for the whole relation, - * for an average bucket load of NTUP_PER_BUCKET (per virtual bucket!). + * for an average bucket load of NTUP_PER_BUCKET (per virtual + * bucket!). */ totalbuckets = (int) ceil((double) ntuples * FUDGE_FAC / NTUP_PER_BUCKET); /* * Count the number of buckets we think will actually fit in the - * target memory size, at a loading of NTUP_PER_BUCKET (physical buckets). - * NOTE: FUDGE_FAC here determines the fraction of the hashtable space - * reserved to allow for nonuniform distribution of hash values. - * Perhaps this should be a different number from the other uses of - * FUDGE_FAC, but since we have no real good way to pick either one... + * target memory size, at a loading of NTUP_PER_BUCKET (physical + * buckets). NOTE: FUDGE_FAC here determines the fraction of the + * hashtable space reserved to allow for nonuniform distribution of + * hash values. Perhaps this should be a different number from the + * other uses of FUDGE_FAC, but since we have no real good way to pick + * either one... */ bucketsize = NTUP_PER_BUCKET * tupsize; nbuckets = (int) (hash_table_bytes / (bucketsize * FUDGE_FAC)); @@ -297,21 +303,25 @@ ExecHashTableCreate(Hash *node) if (totalbuckets <= nbuckets) { - /* We have enough space, so no batching. In theory we could - * even reduce nbuckets, but since that could lead to poor - * behavior if estimated ntuples is much less than reality, - * it seems better to make more buckets instead of fewer. + + /* + * We have enough space, so no batching. In theory we could even + * reduce nbuckets, but since that could lead to poor behavior if + * estimated ntuples is much less than reality, it seems better to + * make more buckets instead of fewer. */ totalbuckets = nbuckets; nbatch = 0; } else { - /* Need to batch; compute how many batches we want to use. - * Note that nbatch doesn't have to have anything to do with - * the ratio totalbuckets/nbuckets; in fact, it is the number - * of groups we will use for the part of the data that doesn't - * fall into the first nbuckets hash buckets. + + /* + * Need to batch; compute how many batches we want to use. Note + * that nbatch doesn't have to have anything to do with the ratio + * totalbuckets/nbuckets; in fact, it is the number of groups we + * will use for the part of the data that doesn't fall into the + * first nbuckets hash buckets. */ nbatch = (int) ceil((inner_rel_bytes - hash_table_bytes) / hash_table_bytes); @@ -319,16 +329,17 @@ ExecHashTableCreate(Hash *node) nbatch = 1; } - /* Now, totalbuckets is the number of (virtual) hashbuckets for the + /* + * Now, totalbuckets is the number of (virtual) hashbuckets for the * whole relation, and nbuckets is the number of physical hashbuckets - * we will use in the first pass. Data falling into the first nbuckets - * virtual hashbuckets gets handled in the first pass; everything else - * gets divided into nbatch batches to be processed in additional - * passes. + * we will use in the first pass. Data falling into the first + * nbuckets virtual hashbuckets gets handled in the first pass; + * everything else gets divided into nbatch batches to be processed in + * additional passes. */ #ifdef HJDEBUG - printf("nbatch = %d, totalbuckets = %d, nbuckets = %d\n", - nbatch, totalbuckets, nbuckets); + printf("nbatch = %d, totalbuckets = %d, nbuckets = %d\n", + nbatch, totalbuckets, nbuckets); #endif /* ---------------- @@ -353,14 +364,16 @@ ExecHashTableCreate(Hash *node) * ---------------- */ i = 0; - do { + do + { i++; sprintf(myPortalName, "<hashtable %d>", i); myPortal = GetPortalByName(myPortalName); } while (PortalIsValid(myPortal)); myPortal = CreatePortal(myPortalName); Assert(PortalIsValid(myPortal)); - hashtable->myPortal = (void*) myPortal; /* kluge for circular includes */ + hashtable->myPortal = (void *) myPortal; /* kluge for circular + * includes */ hashtable->hashCxt = (MemoryContext) PortalGetVariableMemory(myPortal); hashtable->batchCxt = (MemoryContext) PortalGetHeapMemory(myPortal); @@ -392,8 +405,9 @@ ExecHashTableCreate(Hash *node) /* The files will not be opened until later... */ } - /* Prepare portal for the first-scan space allocations; - * allocate the hashbucket array therein, and set each bucket "empty". + /* + * Prepare portal for the first-scan space allocations; allocate the + * hashbucket array therein, and set each bucket "empty". */ MemoryContextSwitchTo(hashtable->batchCxt); StartPortalAllocMode(DefaultAllocMode, 0); @@ -405,9 +419,7 @@ ExecHashTableCreate(Hash *node) elog(ERROR, "Insufficient memory for hash table."); for (i = 0; i < nbuckets; i++) - { hashtable->buckets[i] = NULL; - } MemoryContextSwitchTo(oldcxt); @@ -436,7 +448,7 @@ ExecHashTableDestroy(HashJoinTable hashtable) /* Destroy the portal to release all working memory */ /* cast here is a kluge for circular includes... */ - PortalDestroy((Portal*) & hashtable->myPortal); + PortalDestroy((Portal *) &hashtable->myPortal); /* And drop the control block */ pfree(hashtable); @@ -468,15 +480,15 @@ ExecHashTableInsert(HashJoinTable hashtable, * put the tuple in hash table * --------------- */ - HashJoinTuple hashTuple; - int hashTupleSize; + HashJoinTuple hashTuple; + int hashTupleSize; hashTupleSize = MAXALIGN(sizeof(*hashTuple)) + heapTuple->t_len; hashTuple = (HashJoinTuple) MemoryContextAlloc(hashtable->batchCxt, hashTupleSize); if (hashTuple == NULL) elog(ERROR, "Insufficient memory for hash table."); - memcpy((char *) & hashTuple->htup, + memcpy((char *) &hashTuple->htup, (char *) heapTuple, sizeof(hashTuple->htup)); hashTuple->htup.t_data = (HeapTupleHeader) @@ -493,8 +505,9 @@ ExecHashTableInsert(HashJoinTable hashtable, * put the tuple into a tmp file for other batches * ----------------- */ - int batchno = (hashtable->nbatch * (bucketno - hashtable->nbuckets)) / - (hashtable->totalbuckets - hashtable->nbuckets); + int batchno = (hashtable->nbatch * (bucketno - hashtable->nbuckets)) / + (hashtable->totalbuckets - hashtable->nbuckets); + hashtable->innerBatchSize[batchno]++; ExecHashJoinSaveTuple(heapTuple, hashtable->innerBatchFile[batchno]); @@ -563,26 +576,23 @@ ExecScanHashBucket(HashJoinState *hjstate, List *hjclauses, ExprContext *econtext) { - HashJoinTable hashtable = hjstate->hj_HashTable; - HashJoinTuple hashTuple = hjstate->hj_CurTuple; + HashJoinTable hashtable = hjstate->hj_HashTable; + HashJoinTuple hashTuple = hjstate->hj_CurTuple; - /* hj_CurTuple is NULL to start scanning a new bucket, or the address + /* + * hj_CurTuple is NULL to start scanning a new bucket, or the address * of the last tuple returned from the current bucket. */ if (hashTuple == NULL) - { hashTuple = hashtable->buckets[hjstate->hj_CurBucketNo]; - } else - { hashTuple = hashTuple->next; - } while (hashTuple != NULL) { - HeapTuple heapTuple = & hashTuple->htup; + HeapTuple heapTuple = &hashTuple->htup; TupleTableSlot *inntuple; - bool qualResult; + bool qualResult; /* insert hashtable's tuple into exec slot so ExecQual sees it */ inntuple = ExecStoreTuple(heapTuple, /* tuple to store */ @@ -618,28 +628,34 @@ ExecScanHashBucket(HashJoinState *hjstate, static int hashFunc(Datum key, int len, bool byVal) { - unsigned int h = 0; - unsigned char *k; + unsigned int h = 0; + unsigned char *k; + + if (byVal) + { - if (byVal) { /* - * If it's a by-value data type, use the 'len' least significant bytes - * of the Datum value. This should do the right thing on either - * bigendian or littleendian hardware --- see the Datum access - * macros in c.h. + * If it's a by-value data type, use the 'len' least significant + * bytes of the Datum value. This should do the right thing on + * either bigendian or littleendian hardware --- see the Datum + * access macros in c.h. */ - while (len-- > 0) { + while (len-- > 0) + { h = (h * PRIME1) ^ (key & 0xFF); key >>= 8; } - } else { + } + else + { + /* * If this is a variable length type, then 'k' points to a "struct * varlena" and len == -1. NOTE: VARSIZE returns the "real" data * length plus the sizeof the "vl_len" attribute of varlena (the * length information). 'k' points to the beginning of the varlena - * struct, so we have to use "VARDATA" to find the beginning of the - * "real" data. + * struct, so we have to use "VARDATA" to find the beginning of + * the "real" data. */ if (len == -1) { @@ -647,9 +663,7 @@ hashFunc(Datum key, int len, bool byVal) k = (unsigned char *) VARDATA(key); } else - { k = (unsigned char *) key; - } while (len-- > 0) h = (h * PRIME1) ^ (*k++); } @@ -669,7 +683,7 @@ hashFunc(Datum key, int len, bool byVal) void ExecHashTableReset(HashJoinTable hashtable, long ntuples) { - MemoryContext oldcxt; + MemoryContext oldcxt; int nbuckets = hashtable->nbuckets; int i; @@ -682,13 +696,14 @@ ExecHashTableReset(HashJoinTable hashtable, long ntuples) StartPortalAllocMode(DefaultAllocMode, 0); /* - * We still use the same number of physical buckets as in the first pass. - * (It could be different; but we already decided how many buckets would - * be appropriate for the allowed memory, so stick with that number.) - * We MUST set totalbuckets to equal nbuckets, because from now on - * no tuples will go out to temp files; there are no more virtual buckets, - * only real buckets. (This implies that tuples will go into different - * bucket numbers than they did on the first pass, but that's OK.) + * We still use the same number of physical buckets as in the first + * pass. (It could be different; but we already decided how many + * buckets would be appropriate for the allowed memory, so stick with + * that number.) We MUST set totalbuckets to equal nbuckets, because + * from now on no tuples will go out to temp files; there are no more + * virtual buckets, only real buckets. (This implies that tuples will + * go into different bucket numbers than they did on the first pass, + * but that's OK.) */ hashtable->totalbuckets = nbuckets; @@ -700,9 +715,7 @@ ExecHashTableReset(HashJoinTable hashtable, long ntuples) elog(ERROR, "Insufficient memory for hash table."); for (i = 0; i < nbuckets; i++) - { hashtable->buckets[i] = NULL; - } MemoryContextSwitchTo(oldcxt); } @@ -710,6 +723,7 @@ ExecHashTableReset(HashJoinTable hashtable, long ntuples) void ExecReScanHash(Hash *node, ExprContext *exprCtxt, Plan *parent) { + /* * if chgParam of subnode is not null then plan will be re-scanned by * first ExecProcNode. diff --git a/src/backend/executor/nodeHashjoin.c b/src/backend/executor/nodeHashjoin.c index b3808fab367..49f84294021 100644 --- a/src/backend/executor/nodeHashjoin.c +++ b/src/backend/executor/nodeHashjoin.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/executor/nodeHashjoin.c,v 1.20 1999/05/18 21:33:06 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/executor/nodeHashjoin.c,v 1.21 1999/05/25 16:08:42 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -23,10 +23,10 @@ #include "optimizer/clauses.h" /* for get_leftop */ static TupleTableSlot *ExecHashJoinOuterGetTuple(Plan *node, Plan *parent, - HashJoinState *hjstate); + HashJoinState *hjstate); static TupleTableSlot *ExecHashJoinGetSavedTuple(HashJoinState *hjstate, - BufFile *file, - TupleTableSlot *tupleSlot); + BufFile * file, + TupleTableSlot *tupleSlot); static int ExecHashJoinGetBatch(int bucketno, HashJoinTable hashtable); static int ExecHashJoinNewBatch(HashJoinState *hjstate); @@ -132,7 +132,8 @@ ExecHashJoin(HashJoin *node) */ for (i = 0; i < hashtable->nbatch; i++) { - File tfile = OpenTemporaryFile(); + File tfile = OpenTemporaryFile(); + Assert(tfile >= 0); hashtable->outerBatchFile[i] = BufFileCreate(tfile); } @@ -149,6 +150,7 @@ ExecHashJoin(HashJoin *node) for (;;) { + /* * if the current outer tuple is nil, get a new one */ @@ -159,6 +161,7 @@ ExecHashJoin(HashJoin *node) hjstate); if (TupIsNull(outerTupleSlot)) { + /* * when the last batch runs out, clean up and exit */ @@ -168,8 +171,8 @@ ExecHashJoin(HashJoin *node) } /* - * now we have an outer tuple, find the corresponding bucket for - * this tuple from the hash table + * now we have an outer tuple, find the corresponding bucket + * for this tuple from the hash table */ econtext->ecxt_outertuple = outerTupleSlot; hjstate->hj_CurBucketNo = ExecHashGetBucket(hashtable, econtext, @@ -184,20 +187,23 @@ ExecHashJoin(HashJoin *node) */ if (hashtable->curbatch == 0) { - int batch = ExecHashJoinGetBatch(hjstate->hj_CurBucketNo, - hashtable); + int batch = ExecHashJoinGetBatch(hjstate->hj_CurBucketNo, + hashtable); + if (batch > 0) { + /* * Need to postpone this outer tuple to a later batch. * Save it in the corresponding outer-batch file. */ - int batchno = batch - 1; + int batchno = batch - 1; + hashtable->outerBatchSize[batchno]++; ExecHashJoinSaveTuple(outerTupleSlot->val, - hashtable->outerBatchFile[batchno]); + hashtable->outerBatchFile[batchno]); ExecClearTuple(outerTupleSlot); - continue; /* loop around for a new outer tuple */ + continue; /* loop around for a new outer tuple */ } } } @@ -212,6 +218,7 @@ ExecHashJoin(HashJoin *node) econtext); if (curtuple == NULL) break; /* out of matches */ + /* * we've got a match, but still need to test qpqual */ @@ -427,32 +434,33 @@ ExecEndHashJoin(HashJoin *node) static TupleTableSlot * ExecHashJoinOuterGetTuple(Plan *node, Plan *parent, HashJoinState *hjstate) { - HashJoinTable hashtable = hjstate->hj_HashTable; - int curbatch = hashtable->curbatch; + HashJoinTable hashtable = hjstate->hj_HashTable; + int curbatch = hashtable->curbatch; TupleTableSlot *slot; if (curbatch == 0) { /* if it is the first pass */ slot = ExecProcNode(node, parent); - if (! TupIsNull(slot)) + if (!TupIsNull(slot)) return slot; + /* - * We have just reached the end of the first pass. - * Try to switch to a saved batch. + * We have just reached the end of the first pass. Try to switch + * to a saved batch. */ curbatch = ExecHashJoinNewBatch(hjstate); } /* - * Try to read from a temp file. - * Loop allows us to advance to new batch as needed. + * Try to read from a temp file. Loop allows us to advance to new + * batch as needed. */ while (curbatch <= hashtable->nbatch) { slot = ExecHashJoinGetSavedTuple(hjstate, - hashtable->outerBatchFile[curbatch-1], + hashtable->outerBatchFile[curbatch - 1], hjstate->hj_OuterTupleSlot); - if (! TupIsNull(slot)) + if (!TupIsNull(slot)) return slot; curbatch = ExecHashJoinNewBatch(hjstate); } @@ -470,12 +478,12 @@ ExecHashJoinOuterGetTuple(Plan *node, Plan *parent, HashJoinState *hjstate) static TupleTableSlot * ExecHashJoinGetSavedTuple(HashJoinState *hjstate, - BufFile *file, + BufFile * file, TupleTableSlot *tupleSlot) { - HeapTupleData htup; - size_t nread; - HeapTuple heapTuple; + HeapTupleData htup; + size_t nread; + HeapTuple heapTuple; nread = BufFileRead(file, (void *) &htup, sizeof(HeapTupleData)); if (nread == 0) @@ -484,8 +492,8 @@ ExecHashJoinGetSavedTuple(HashJoinState *hjstate, elog(ERROR, "Read from hashjoin temp file failed"); heapTuple = palloc(HEAPTUPLESIZE + htup.t_len); memcpy((char *) heapTuple, (char *) &htup, sizeof(HeapTupleData)); - heapTuple->t_data = (HeapTupleHeader) - ((char *) heapTuple + HEAPTUPLESIZE); + heapTuple->t_data = (HeapTupleHeader) + ((char *) heapTuple + HEAPTUPLESIZE); nread = BufFileRead(file, (void *) heapTuple->t_data, htup.t_len); if (nread != (size_t) htup.t_len) elog(ERROR, "Read from hashjoin temp file failed"); @@ -506,16 +514,17 @@ ExecHashJoinNewBatch(HashJoinState *hjstate) int newbatch = hashtable->curbatch + 1; long *innerBatchSize = hashtable->innerBatchSize; long *outerBatchSize = hashtable->outerBatchSize; - BufFile *innerFile; + BufFile *innerFile; TupleTableSlot *slot; ExprContext *econtext; Var *innerhashkey; if (newbatch > 1) { + /* - * We no longer need the previous outer batch file; - * close it right away to free disk space. + * We no longer need the previous outer batch file; close it right + * away to free disk space. */ BufFileClose(hashtable->outerBatchFile[newbatch - 2]); hashtable->outerBatchFile[newbatch - 2] = NULL; @@ -541,8 +550,8 @@ ExecHashJoinNewBatch(HashJoinState *hjstate) return newbatch; /* no more batches */ /* - * Rewind inner and outer batch files for this batch, - * so that we can start reading them. + * Rewind inner and outer batch files for this batch, so that we can + * start reading them. */ if (BufFileSeek(hashtable->outerBatchFile[newbatch - 1], 0L, SEEK_SET) != 0L) @@ -571,7 +580,8 @@ ExecHashJoinNewBatch(HashJoinState *hjstate) } /* - * after we build the hash table, the inner batch file is no longer needed + * after we build the hash table, the inner batch file is no longer + * needed */ BufFileClose(innerFile); hashtable->innerBatchFile[newbatch - 1] = NULL; @@ -615,9 +625,9 @@ ExecHashJoinGetBatch(int bucketno, HashJoinTable hashtable) void ExecHashJoinSaveTuple(HeapTuple heapTuple, - BufFile *file) + BufFile * file) { - size_t written; + size_t written; written = BufFileWrite(file, (void *) heapTuple, sizeof(HeapTupleData)); if (written != sizeof(HeapTupleData)) diff --git a/src/backend/executor/nodeIndexscan.c b/src/backend/executor/nodeIndexscan.c index a55d9cc6e1c..461bc1b8a5e 100644 --- a/src/backend/executor/nodeIndexscan.c +++ b/src/backend/executor/nodeIndexscan.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/executor/nodeIndexscan.c,v 1.35 1999/05/10 00:45:06 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/executor/nodeIndexscan.c,v 1.36 1999/05/25 16:08:43 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -91,13 +91,14 @@ IndexNext(IndexScan *node) IndexScanDesc scandesc; Relation heapRelation; RetrieveIndexResult result; - HeapTuple tuple; + HeapTuple tuple; TupleTableSlot *slot; Buffer buffer = InvalidBuffer; int numIndices; - bool bBackward; - int indexNumber; + bool bBackward; + int indexNumber; + /* ---------------- * extract necessary information from index scan node * ---------------- @@ -114,14 +115,14 @@ IndexNext(IndexScan *node) /* * Check if we are evaluating PlanQual for tuple of this relation. - * Additional checking is not good, but no other way for now. - * We could introduce new nodes for this case and handle - * IndexScan --> NewNode switching in Init/ReScan plan... + * Additional checking is not good, but no other way for now. We could + * introduce new nodes for this case and handle IndexScan --> NewNode + * switching in Init/ReScan plan... */ - if (estate->es_evTuple != NULL && + if (estate->es_evTuple != NULL && estate->es_evTuple[node->scan.scanrelid - 1] != NULL) { - int iptr; + int iptr; slot->ttc_buffer = InvalidBuffer; slot->ttc_shouldFree = false; @@ -138,7 +139,7 @@ IndexNext(IndexScan *node) scanstate->cstate.cs_ExprContext)) break; } - if (iptr == numIndices) /* would not be returned by indices */ + if (iptr == numIndices) /* would not be returned by indices */ slot->val = NULL; /* Flag for the next call that no more tuples */ estate->es_evTupleNull[node->scan.scanrelid - 1] = true; @@ -153,26 +154,26 @@ IndexNext(IndexScan *node) * appropriate heap tuple.. else return NULL. * ---------------- */ - bBackward = ScanDirectionIsBackward(direction); - if (bBackward) - { - indexNumber = numIndices - indexstate->iss_IndexPtr - 1; - if (indexNumber < 0) - { - indexNumber = 0; - indexstate->iss_IndexPtr = numIndices - 1; - } - } - else - { - if ((indexNumber = indexstate->iss_IndexPtr) < 0) - { - indexNumber = 0; - indexstate->iss_IndexPtr = 0; - } - } - while (indexNumber < numIndices) - { + bBackward = ScanDirectionIsBackward(direction); + if (bBackward) + { + indexNumber = numIndices - indexstate->iss_IndexPtr - 1; + if (indexNumber < 0) + { + indexNumber = 0; + indexstate->iss_IndexPtr = numIndices - 1; + } + } + else + { + if ((indexNumber = indexstate->iss_IndexPtr) < 0) + { + indexNumber = 0; + indexstate->iss_IndexPtr = 0; + } + } + while (indexNumber < numIndices) + { scandesc = scanDescs[indexstate->iss_IndexPtr]; while ((result = index_getnext(scandesc, direction)) != NULL) { @@ -224,14 +225,14 @@ IndexNext(IndexScan *node) if (BufferIsValid(buffer)) ReleaseBuffer(buffer); } - if (indexNumber < numIndices) - { - indexNumber++; - if (bBackward) - indexstate->iss_IndexPtr--; - else - indexstate->iss_IndexPtr++; - } + if (indexNumber < numIndices) + { + indexNumber++; + if (bBackward) + indexstate->iss_IndexPtr--; + else + indexstate->iss_IndexPtr++; + } } /* ---------------- * if we get here it means the index scan failed so we @@ -323,7 +324,7 @@ ExecIndexReScan(IndexScan *node, ExprContext *exprCtxt, Plan *parent) indexstate->iss_IndexPtr = -1; /* If this is re-scanning of PlanQual ... */ - if (estate->es_evTuple != NULL && + if (estate->es_evTuple != NULL && estate->es_evTuple[node->scan.scanrelid - 1] != NULL) { estate->es_evTupleNull[node->scan.scanrelid - 1] = false; @@ -703,7 +704,7 @@ ExecInitIndexScan(IndexScan *node, EState *estate, Plan *parent) run_keys = (n_keys <= 0) ? NULL : (int *) palloc(n_keys * sizeof(int)); - CXT1_printf("ExecInitIndexScan: context is %d\n",CurrentMemoryContext); + CXT1_printf("ExecInitIndexScan: context is %d\n", CurrentMemoryContext); /* ---------------- * for each opclause in the given qual, diff --git a/src/backend/executor/nodeMaterial.c b/src/backend/executor/nodeMaterial.c index 326475102d2..b8cd808dc0c 100644 --- a/src/backend/executor/nodeMaterial.c +++ b/src/backend/executor/nodeMaterial.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/executor/nodeMaterial.c,v 1.21 1999/02/13 23:15:24 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/executor/nodeMaterial.c,v 1.22 1999/05/25 16:08:44 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -116,7 +116,7 @@ ExecMaterial(Material *node) if (TupIsNull(slot)) break; - + /* * heap_insert changes something... */ @@ -124,12 +124,12 @@ ExecMaterial(Material *node) heapTuple = heap_copytuple(slot->val); else heapTuple = slot->val; - + heap_insert(tempRelation, heapTuple); if (slot->ttc_buffer != InvalidBuffer) pfree(heapTuple); - + ExecClearTuple(slot); } currentRelation = tempRelation; @@ -360,8 +360,8 @@ ExecMaterialReScan(Material *node, ExprContext *exprCtxt, Plan *parent) return; matstate->csstate.css_currentScanDesc = ExecReScanR(matstate->csstate.css_currentRelation, - matstate->csstate.css_currentScanDesc, - node->plan.state->es_direction, 0, NULL); + matstate->csstate.css_currentScanDesc, + node->plan.state->es_direction, 0, NULL); } diff --git a/src/backend/executor/nodeMergejoin.c b/src/backend/executor/nodeMergejoin.c index 9b0df288259..4d0c3dae92f 100644 --- a/src/backend/executor/nodeMergejoin.c +++ b/src/backend/executor/nodeMergejoin.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/executor/nodeMergejoin.c,v 1.26 1999/05/10 00:45:07 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/executor/nodeMergejoin.c,v 1.27 1999/05/25 16:08:45 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -103,7 +103,7 @@ static bool MergeCompare(List *eqQual, List *compareQual, ExprContext *econtext) * ---------------------------------------------------------------- */ static List * -MJFormSkipQual(List *qualList, char * replaceopname) +MJFormSkipQual(List *qualList, char *replaceopname) { List *qualCopy; List *qualcdr; @@ -148,14 +148,14 @@ MJFormSkipQual(List *qualList, char * replaceopname) * ---------------- */ optup = get_operator_tuple(op->opno); - if (!HeapTupleIsValid(optup)) /* shouldn't happen */ + if (!HeapTupleIsValid(optup)) /* shouldn't happen */ elog(ERROR, "MJFormSkipQual: operator %u not found", op->opno); opform = (Form_pg_operator) GETSTRUCT(optup); oprleft = opform->oprleft; oprright = opform->oprright; /* ---------------- - * Now look up the matching "<" or ">" operator. If there isn't one, + * Now look up the matching "<" or ">" operator. If there isn't one, * whoever marked the "=" operator mergejoinable was a loser. * ---------------- */ @@ -166,7 +166,7 @@ MJFormSkipQual(List *qualList, char * replaceopname) CharGetDatum('b')); if (!HeapTupleIsValid(optup)) elog(ERROR, - "MJFormSkipQual: mergejoin operator %u has no matching %s op", + "MJFormSkipQual: mergejoin operator %u has no matching %s op", op->opno, replaceopname); opform = (Form_pg_operator) GETSTRUCT(optup); diff --git a/src/backend/executor/nodeResult.c b/src/backend/executor/nodeResult.c index 8b0d9e7ec96..7c8166c6f21 100644 --- a/src/backend/executor/nodeResult.c +++ b/src/backend/executor/nodeResult.c @@ -27,7 +27,7 @@ * SeqScan (emp.all) * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/executor/nodeResult.c,v 1.10 1999/03/20 01:13:22 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/executor/nodeResult.c,v 1.11 1999/05/25 16:08:46 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -263,8 +263,8 @@ ExecEndResult(Result *node) * is freed at end-transaction time. -cim 6/2/91 * ---------------- */ - ExecFreeExprContext(&resstate->cstate); /* XXX - new for us - er1p */ - ExecFreeTypeInfo(&resstate->cstate); /* XXX - new for us - er1p */ + ExecFreeExprContext(&resstate->cstate); /* XXX - new for us - er1p */ + ExecFreeTypeInfo(&resstate->cstate); /* XXX - new for us - er1p */ ExecFreeProjectionInfo(&resstate->cstate); /* ---------------- @@ -278,7 +278,8 @@ ExecEndResult(Result *node) * ---------------- */ ExecClearTuple(resstate->cstate.cs_ResultTupleSlot); - pfree(resstate); node->resstate = NULL; /* XXX - new for us - er1p */ + pfree(resstate); + node->resstate = NULL; /* XXX - new for us - er1p */ } void diff --git a/src/backend/executor/nodeSeqscan.c b/src/backend/executor/nodeSeqscan.c index 70a6761a833..04a14934137 100644 --- a/src/backend/executor/nodeSeqscan.c +++ b/src/backend/executor/nodeSeqscan.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/executor/nodeSeqscan.c,v 1.17 1999/02/13 23:15:26 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/executor/nodeSeqscan.c,v 1.18 1999/05/25 16:08:46 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -68,11 +68,11 @@ SeqNext(SeqScan *node) /* * Check if we are evaluating PlanQual for tuple of this relation. - * Additional checking is not good, but no other way for now. - * We could introduce new nodes for this case and handle - * SeqScan --> NewNode switching in Init/ReScan plan... + * Additional checking is not good, but no other way for now. We could + * introduce new nodes for this case and handle SeqScan --> NewNode + * switching in Init/ReScan plan... */ - if (estate->es_evTuple != NULL && + if (estate->es_evTuple != NULL && estate->es_evTuple[node->scanrelid - 1] != NULL) { slot->ttc_buffer = InvalidBuffer; @@ -83,10 +83,11 @@ SeqNext(SeqScan *node) return (slot); } slot->val = estate->es_evTuple[node->scanrelid - 1]; + /* - * Note that unlike IndexScan, SeqScan never use keys - * in heap_beginscan (and this is very bad) - so, here - * we have not check are keys ok or not. + * Note that unlike IndexScan, SeqScan never use keys in + * heap_beginscan (and this is very bad) - so, here we have not + * check are keys ok or not. */ /* Flag for the next call that no more tuples */ estate->es_evTupleNull[node->scanrelid - 1] = true; @@ -401,10 +402,11 @@ ExecSeqReScan(SeqScan *node, ExprContext *exprCtxt, Plan *parent) outerPlan = outerPlan((Plan *) node); ExecReScan(outerPlan, exprCtxt, parent); } - else /* otherwise, we are scanning a relation */ + else +/* otherwise, we are scanning a relation */ { /* If this is re-scanning of PlanQual ... */ - if (estate->es_evTuple != NULL && + if (estate->es_evTuple != NULL && estate->es_evTuple[node->scanrelid - 1] != NULL) { estate->es_evTupleNull[node->scanrelid - 1] = false; diff --git a/src/backend/executor/nodeSubplan.c b/src/backend/executor/nodeSubplan.c index 2eebbf1f1e2..ef65a7afb51 100644 --- a/src/backend/executor/nodeSubplan.c +++ b/src/backend/executor/nodeSubplan.c @@ -58,15 +58,16 @@ ExecSubPlan(SubPlan *node, List *pvar, ExprContext *econtext) ExecReScan(plan, (ExprContext *) NULL, plan); /* - * For all sublink types except EXPR_SUBLINK, the result type is boolean, - * and we have a fairly clear idea of how to combine multiple subitems - * and deal with NULL values or an empty subplan result. + * For all sublink types except EXPR_SUBLINK, the result type is + * boolean, and we have a fairly clear idea of how to combine multiple + * subitems and deal with NULL values or an empty subplan result. * * For EXPR_SUBLINK, the result type is whatever the combining operator * returns. We have no way to deal with more than one column in the - * subplan result --- hopefully the parser forbids that. More seriously, - * it's unclear what to do with NULL values or an empty subplan result. - * For now, we error out, but should something else happen? + * subplan result --- hopefully the parser forbids that. More + * seriously, it's unclear what to do with NULL values or an empty + * subplan result. For now, we error out, but should something else + * happen? */ for (slot = ExecProcNode(plan, plan); @@ -105,14 +106,14 @@ ExecSubPlan(SubPlan *node, List *pvar, ExprContext *econtext) } if (subLinkType != EXPR_SUBLINK) { - if ((! (bool) result && !(sublink->useor)) || + if ((!(bool) result && !(sublink->useor)) || ((bool) result && sublink->useor)) break; } i++; } - if (subLinkType == ALL_SUBLINK && ! (bool) result) + if (subLinkType == ALL_SUBLINK && !(bool) result) break; if (subLinkType == ANY_SUBLINK && (bool) result) break; @@ -120,7 +121,7 @@ ExecSubPlan(SubPlan *node, List *pvar, ExprContext *econtext) if (!found) { - /* deal with empty subplan result. Note default result is 'false' */ + /* deal with empty subplan result. Note default result is 'false' */ if (subLinkType == ALL_SUBLINK) result = (Datum) true; else if (subLinkType == EXPR_SUBLINK) diff --git a/src/backend/executor/spi.c b/src/backend/executor/spi.c index f6e5b8c585e..f807412018e 100644 --- a/src/backend/executor/spi.c +++ b/src/backend/executor/spi.c @@ -3,7 +3,7 @@ * spi.c * Server Programming Interface * - * $Id: spi.c,v 1.37 1999/05/13 07:28:30 tgl Exp $ + * $Id: spi.c,v 1.38 1999/05/25 16:08:48 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -19,9 +19,9 @@ static _SPI_connection *_SPI_current = NULL; static int _SPI_connected = -1; static int _SPI_curid = -1; -DLLIMPORT uint32 SPI_processed = 0; +DLLIMPORT uint32 SPI_processed = 0; DLLIMPORT SPITupleTable *SPI_tuptable; -DLLIMPORT int SPI_result; +DLLIMPORT int SPI_result; static int _SPI_execute(char *src, int tcount, _SPI_plan *plan); static int _SPI_pquery(QueryDesc *queryDesc, EState *state, int tcount); @@ -49,8 +49,8 @@ extern void ShowUsage(void); int SPI_connect() { - char pname[64]; - PortalVariableMemory pvmem; + char pname[64]; + PortalVariableMemory pvmem; /* * It's possible on startup and after commit/abort. In future we'll @@ -345,8 +345,8 @@ SPI_modifytuple(Relation rel, HeapTuple tuple, int natts, int *attnum, mtuple = heap_formtuple(rel->rd_att, v, n); infomask = mtuple->t_data->t_infomask; memmove(&(mtuple->t_data->t_oid), &(tuple->t_data->t_oid), - ((char *) &(tuple->t_data->t_hoff) - - (char *) &(tuple->t_data->t_oid))); + ((char *) &(tuple->t_data->t_hoff) - + (char *) &(tuple->t_data->t_oid))); mtuple->t_data->t_infomask = infomask; mtuple->t_data->t_natts = numberOfAttributes; } @@ -411,8 +411,8 @@ SPI_getvalue(HeapTuple tuple, TupleDesc tupdesc, int fnumber) val = heap_getattr(tuple, fnumber, tupdesc, &isnull); if (isnull) return NULL; - if (! getTypeOutAndElem((Oid) tupdesc->attrs[fnumber - 1]->atttypid, - &foutoid, &typelem)) + if (!getTypeOutAndElem((Oid) tupdesc->attrs[fnumber - 1]->atttypid, + &foutoid, &typelem)) { SPI_result = SPI_ERROR_NOOUTFUNC; return NULL; @@ -549,13 +549,13 @@ SPI_pfree(void *pointer) /* =================== private functions =================== */ /* - * spi_printtup + * spi_printtup * store tuple retrieved by Executor into SPITupleTable * of current SPI procedure * */ void -spi_printtup(HeapTuple tuple, TupleDesc tupdesc, DestReceiver* self) +spi_printtup(HeapTuple tuple, TupleDesc tupdesc, DestReceiver * self) { SPITupleTable *tuptable; MemoryContext oldcxt; @@ -633,12 +633,13 @@ _SPI_execute(char *src, int tcount, _SPI_plan *plan) _SPI_current->qtlist = queryTree_list; - foreach (queryTree_list_item, queryTree_list) + foreach(queryTree_list_item, queryTree_list) { queryTree = (Query *) lfirst(queryTree_list_item); planTree = lfirst(planTree_list); planTree_list = lnext(planTree_list); - islastquery = (planTree_list == NIL); /* assume lists are same len */ + islastquery = (planTree_list == NIL); /* assume lists are same + * len */ if (queryTree->commandType == CMD_UTILITY) { @@ -658,7 +659,7 @@ _SPI_execute(char *src, int tcount, _SPI_plan *plan) if (plan == NULL) { ProcessUtility(queryTree->utilityStmt, None); - if (! islastquery) + if (!islastquery) CommandCounterIncrement(); else return res; @@ -717,17 +718,18 @@ _SPI_execute_plan(_SPI_plan *plan, Datum *Values, char *Nulls, int tcount) _SPI_current->tuptable = NULL; _SPI_current->qtlist = NULL; - foreach (queryTree_list_item, queryTree_list) + foreach(queryTree_list_item, queryTree_list) { queryTree = (Query *) lfirst(queryTree_list_item); planTree = lfirst(planTree_list); planTree_list = lnext(planTree_list); - islastquery = (planTree_list == NIL); /* assume lists are same len */ + islastquery = (planTree_list == NIL); /* assume lists are same + * len */ if (queryTree->commandType == CMD_UTILITY) { ProcessUtility(queryTree->utilityStmt, None); - if (! islastquery) + if (!islastquery) CommandCounterIncrement(); else return SPI_OK_UTILITY; @@ -777,7 +779,7 @@ _SPI_pquery(QueryDesc *queryDesc, EState *state, int tcount) char *intoName = NULL; int res; Const tcount_const; - Node *count = NULL; + Node *count = NULL; switch (operation) { @@ -833,18 +835,18 @@ _SPI_pquery(QueryDesc *queryDesc, EState *state, int tcount) * ---------------- */ memset(&tcount_const, 0, sizeof(tcount_const)); - tcount_const.type = T_Const; - tcount_const.consttype = INT4OID; - tcount_const.constlen = sizeof(int4); - tcount_const.constvalue = (Datum)tcount; - tcount_const.constisnull = FALSE; - tcount_const.constbyval = TRUE; - tcount_const.constisset = FALSE; - tcount_const.constiscast = FALSE; - - count = (Node *)&tcount_const; - } - + tcount_const.type = T_Const; + tcount_const.consttype = INT4OID; + tcount_const.constlen = sizeof(int4); + tcount_const.constvalue = (Datum) tcount; + tcount_const.constisnull = FALSE; + tcount_const.constbyval = TRUE; + tcount_const.constisset = FALSE; + tcount_const.constiscast = FALSE; + + count = (Node *) &tcount_const; + } + if (state == NULL) /* plan preparation */ return res; #ifdef SPI_EXECUTOR_STATS @@ -922,7 +924,7 @@ _SPI_procmem() } /* - * _SPI_begin_call + * _SPI_begin_call * */ static int diff --git a/src/backend/lib/fstack.c b/src/backend/lib/fstack.c index 7b05dbd8fd8..1f2beafa922 100644 --- a/src/backend/lib/fstack.c +++ b/src/backend/lib/fstack.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/lib/Attic/fstack.c,v 1.10 1999/02/13 23:15:34 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/lib/Attic/fstack.c,v 1.11 1999/05/25 16:08:52 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -20,20 +20,20 @@ */ /* - * FixedItemIsValid + * FixedItemIsValid * True iff item is valid. */ #define FixedItemIsValid(item) PointerIsValid(item) /* - * FixedStackGetItemBase + * FixedStackGetItemBase * Returns base of enclosing structure. */ #define FixedStackGetItemBase(stack, item) \ ((Pointer)((char *)(item) - (stack)->offset)) /* - * FixedStackGetItem + * FixedStackGetItem * Returns item of given pointer to enclosing structure. */ #define FixedStackGetItem(stack, pointer) \ @@ -84,7 +84,7 @@ FixedStackPush(FixedStack stack, Pointer pointer) #ifdef USE_ASSERT_CHECKING /* - * FixedStackContains + * FixedStackContains * True iff ordered stack contains given element. * * Note: diff --git a/src/backend/lib/stringinfo.c b/src/backend/lib/stringinfo.c index 3ded7799749..12d0f8625c2 100644 --- a/src/backend/lib/stringinfo.c +++ b/src/backend/lib/stringinfo.c @@ -8,7 +8,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: stringinfo.c,v 1.15 1999/04/25 03:19:25 tgl Exp $ + * $Id: stringinfo.c,v 1.16 1999/05/25 16:08:53 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -67,17 +67,18 @@ initStringInfo(StringInfo str) static void enlargeStringInfo(StringInfo str, int needed) { - int newlen; - char *newdata; + int newlen; + char *newdata; needed += str->len + 1; /* total space required now */ if (needed <= str->maxlen) return; /* got enough space already */ /* - * We don't want to allocate just a little more space with each append; - * for efficiency, double the buffer size each time it overflows. - * Actually, we might need to more than double it if 'needed' is big... + * We don't want to allocate just a little more space with each + * append; for efficiency, double the buffer size each time it + * overflows. Actually, we might need to more than double it if + * 'needed' is big... */ newlen = 2 * str->maxlen; while (needed > newlen) @@ -86,7 +87,7 @@ enlargeStringInfo(StringInfo str, int needed) newdata = palloc(newlen); if (newdata == NULL) elog(ERROR, - "enlargeStringInfo: Out of memory (%d bytes requested)", newlen); + "enlargeStringInfo: Out of memory (%d bytes requested)", newlen); /* OK, transfer data into new buffer, and release old buffer */ memcpy(newdata, str->data, str->len + 1); @@ -107,11 +108,11 @@ enlargeStringInfo(StringInfo str, int needed) * generated in a single call (not on the total string length). */ void -appendStringInfo(StringInfo str, const char *fmt, ...) +appendStringInfo(StringInfo str, const char *fmt,...) { - va_list args; - char buffer[1024]; - int buflen; + va_list args; + char buffer[1024]; + int buflen; Assert(str != NULL); @@ -164,7 +165,8 @@ appendBinaryStringInfo(StringInfo str, const char *data, int datalen) memcpy(str->data + str->len, data, datalen); str->len += datalen; - /* Keep a trailing null in place, even though it's probably useless + /* + * Keep a trailing null in place, even though it's probably useless * for binary data... */ str->data[str->len] = '\0'; diff --git a/src/backend/libpq/auth.c b/src/backend/libpq/auth.c index 6941934369c..c5bfc69748a 100644 --- a/src/backend/libpq/auth.c +++ b/src/backend/libpq/auth.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/libpq/auth.c,v 1.35 1999/04/16 04:59:03 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/libpq/auth.c,v 1.36 1999/05/25 16:08:55 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -75,13 +75,13 @@ static int map_old_to_new(Port *port, UserAuth old, int status); static int pg_krb4_recvauth(Port *port) { - long krbopts = 0; /* one-way authentication */ - KTEXT_ST clttkt; - char instance[INST_SZ+1], - version[KRB_SENDAUTH_VLEN+1]; - AUTH_DAT auth_data; - Key_schedule key_sched; - int status; + long krbopts = 0; /* one-way authentication */ + KTEXT_ST clttkt; + char instance[INST_SZ + 1], + version[KRB_SENDAUTH_VLEN + 1]; + AUTH_DAT auth_data; + Key_schedule key_sched; + int status; strcpy(instance, "*"); /* don't care, but arg gets expanded * anyway */ @@ -99,7 +99,7 @@ pg_krb4_recvauth(Port *port) if (status != KSUCCESS) { snprintf(PQerrormsg, ERROR_MSG_LENGTH, - "pg_krb4_recvauth: kerberos error: %s\n", krb_err_txt[status]); + "pg_krb4_recvauth: kerberos error: %s\n", krb_err_txt[status]); fputs(PQerrormsg, stderr); pqdebug("%s", PQerrormsg); return STATUS_ERROR; @@ -107,7 +107,7 @@ pg_krb4_recvauth(Port *port) if (strncmp(version, PG_KRB4_VERSION, KRB_SENDAUTH_VLEN)) { snprintf(PQerrormsg, ERROR_MSG_LENGTH, - "pg_krb4_recvauth: protocol version != \"%s\"\n", PG_KRB4_VERSION); + "pg_krb4_recvauth: protocol version != \"%s\"\n", PG_KRB4_VERSION); fputs(PQerrormsg, stderr); pqdebug("%s", PQerrormsg); return STATUS_ERROR; @@ -115,8 +115,8 @@ pg_krb4_recvauth(Port *port) if (strncmp(port->user, auth_data.pname, SM_USER)) { snprintf(PQerrormsg, ERROR_MSG_LENGTH, - "pg_krb4_recvauth: name \"%s\" != \"%s\"\n", - port->user, auth_data.pname); + "pg_krb4_recvauth: name \"%s\" != \"%s\"\n", + port->user, auth_data.pname); fputs(PQerrormsg, stderr); pqdebug("%s", PQerrormsg); return STATUS_ERROR; @@ -129,7 +129,7 @@ static int pg_krb4_recvauth(Port *port) { snprintf(PQerrormsg, ERROR_MSG_LENGTH, - "pg_krb4_recvauth: Kerberos not implemented on this server.\n"); + "pg_krb4_recvauth: Kerberos not implemented on this server.\n"); fputs(PQerrormsg, stderr); pqdebug("%s", PQerrormsg); @@ -223,7 +223,7 @@ pg_krb5_recvauth(Port *port) if (code = krb5_parse_name(servbuf, &server)) { snprintf(PQerrormsg, ERROR_MSG_LENGTH, - "pg_krb5_recvauth: Kerberos error %d in krb5_parse_name\n", code); + "pg_krb5_recvauth: Kerberos error %d in krb5_parse_name\n", code); com_err("pg_krb5_recvauth", code, "in krb5_parse_name"); return STATUS_ERROR; } @@ -256,7 +256,7 @@ pg_krb5_recvauth(Port *port) (krb5_authenticator **) NULL)) { snprintf(PQerrormsg, ERROR_MSG_LENGTH, - "pg_krb5_recvauth: Kerberos error %d in krb5_recvauth\n", code); + "pg_krb5_recvauth: Kerberos error %d in krb5_recvauth\n", code); com_err("pg_krb5_recvauth", code, "in krb5_recvauth"); krb5_free_principal(server); return STATUS_ERROR; @@ -271,7 +271,7 @@ pg_krb5_recvauth(Port *port) if ((code = krb5_unparse_name(client, &kusername))) { snprintf(PQerrormsg, ERROR_MSG_LENGTH, - "pg_krb5_recvauth: Kerberos error %d in krb5_unparse_name\n", code); + "pg_krb5_recvauth: Kerberos error %d in krb5_unparse_name\n", code); com_err("pg_krb5_recvauth", code, "in krb5_unparse_name"); krb5_free_principal(client); return STATUS_ERROR; @@ -280,7 +280,7 @@ pg_krb5_recvauth(Port *port) if (!kusername) { snprintf(PQerrormsg, ERROR_MSG_LENGTH, - "pg_krb5_recvauth: could not decode username\n"); + "pg_krb5_recvauth: could not decode username\n"); fputs(PQerrormsg, stderr); pqdebug("%s", PQerrormsg); return STATUS_ERROR; @@ -289,7 +289,7 @@ pg_krb5_recvauth(Port *port) if (strncmp(username, kusername, SM_USER)) { snprintf(PQerrormsg, ERROR_MSG_LENGTH, - "pg_krb5_recvauth: name \"%s\" != \"%s\"\n", port->user, kusername); + "pg_krb5_recvauth: name \"%s\" != \"%s\"\n", port->user, kusername); fputs(PQerrormsg, stderr); pqdebug("%s", PQerrormsg); pfree(kusername); @@ -304,7 +304,7 @@ static int pg_krb5_recvauth(Port *port) { snprintf(PQerrormsg, ERROR_MSG_LENGTH, - "pg_krb5_recvauth: Kerberos not implemented on this server.\n"); + "pg_krb5_recvauth: Kerberos not implemented on this server.\n"); fputs(PQerrormsg, stderr); pqdebug("%s", PQerrormsg); @@ -359,7 +359,7 @@ pg_passwordv0_recvauth(void *arg, PacketLen len, void *pkt) if (user == NULL || password == NULL) { snprintf(PQerrormsg, ERROR_MSG_LENGTH, - "pg_password_recvauth: badly formed password packet.\n"); + "pg_password_recvauth: badly formed password packet.\n"); fputs(PQerrormsg, stderr); pqdebug("%s", PQerrormsg); @@ -405,7 +405,7 @@ pg_passwordv0_recvauth(void *arg, PacketLen len, void *pkt) void auth_failed(Port *port) { - char buffer[512]; + char buffer[512]; const char *authmethod = "Unknown auth method:"; switch (port->auth_method) @@ -449,9 +449,9 @@ be_recvauth(Port *port) /* * Get the authentication method to use for this frontend/database - * combination. Note: a failure return indicates a problem with - * the hba config file, not with the request. hba.c should have - * dropped an error message into the postmaster logfile if it failed. + * combination. Note: a failure return indicates a problem with the + * hba config file, not with the request. hba.c should have dropped + * an error message into the postmaster logfile if it failed. */ if (hba_getauthmethod(&port->raddr, port->user, port->database, @@ -470,27 +470,28 @@ be_recvauth(Port *port) { /* Handle new style authentication. */ - AuthRequest areq = AUTH_REQ_OK; - PacketDoneProc auth_handler = NULL; + AuthRequest areq = AUTH_REQ_OK; + PacketDoneProc auth_handler = NULL; switch (port->auth_method) { case uaReject: + /* - * This could have come from an explicit "reject" entry - * in pg_hba.conf, but more likely it means there was no - * matching entry. Take pity on the poor user and issue - * a helpful error message. NOTE: this is not a security - * breach, because all the info reported here is known - * at the frontend and must be assumed known to bad guys. + * This could have come from an explicit "reject" entry in + * pg_hba.conf, but more likely it means there was no + * matching entry. Take pity on the poor user and issue a + * helpful error message. NOTE: this is not a security + * breach, because all the info reported here is known at + * the frontend and must be assumed known to bad guys. * We're merely helping out the less clueful good guys. * NOTE 2: libpq-be.h defines the maximum error message * length as 99 characters. It probably wouldn't hurt - * anything to increase it, but there might be some - * client out there that will fail. So, be terse. + * anything to increase it, but there might be some client + * out there that will fail. So, be terse. */ { - char buffer[512]; + char buffer[512]; const char *hostinfo = "localhost"; if (port->raddr.sa.sa_family == AF_INET) diff --git a/src/backend/libpq/be-dumpdata.c b/src/backend/libpq/be-dumpdata.c index 8c9dcae52d2..ed70ab734a0 100644 --- a/src/backend/libpq/be-dumpdata.c +++ b/src/backend/libpq/be-dumpdata.c @@ -6,7 +6,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: be-dumpdata.c,v 1.23 1999/05/10 00:45:08 momjian Exp $ + * $Id: be-dumpdata.c,v 1.24 1999/05/25 16:08:57 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -130,8 +130,8 @@ static u_int be_portalcnt = 0; PortalEntry * be_newportal(void) { - PortalEntry *entry; - char buf[PortalNameLength]; + PortalEntry *entry; + char buf[PortalNameLength]; /* ---------------- * generate a new name @@ -208,7 +208,7 @@ be_typeinit(PortalEntry *entry, * ---------------- */ void -be_printtup(HeapTuple tuple, TupleDesc typeinfo, DestReceiver* self) +be_printtup(HeapTuple tuple, TupleDesc typeinfo, DestReceiver * self) { int i; Datum attr; diff --git a/src/backend/libpq/be-fsstubs.c b/src/backend/libpq/be-fsstubs.c index 8a063cf1eaf..bef974d8a5d 100644 --- a/src/backend/libpq/be-fsstubs.c +++ b/src/backend/libpq/be-fsstubs.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/libpq/be-fsstubs.c,v 1.32 1999/05/10 00:45:09 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/libpq/be-fsstubs.c,v 1.33 1999/05/25 16:08:57 momjian Exp $ * * NOTES * This should be moved to a more appropriate place. It is here @@ -131,8 +131,8 @@ lo_close(int fd) int lo_read(int fd, char *buf, int len) { - MemoryContext currentContext; - int status; + MemoryContext currentContext; + int status; if (fd < 0 || fd >= MAX_LOBJ_FDS) { @@ -144,19 +144,19 @@ lo_read(int fd, char *buf, int len) elog(ERROR, "lo_read: invalid large obj descriptor (%d)", fd); return -3; } - currentContext = MemoryContextSwitchTo((MemoryContext) fscxt); + currentContext = MemoryContextSwitchTo((MemoryContext) fscxt); status = inv_read(cookies[fd], buf, len); MemoryContextSwitchTo(currentContext); - return(status); + return (status); } int lo_write(int fd, char *buf, int len) { - MemoryContext currentContext; - int status; + MemoryContext currentContext; + int status; if (fd < 0 || fd >= MAX_LOBJ_FDS) { @@ -168,12 +168,12 @@ lo_write(int fd, char *buf, int len) elog(ERROR, "lo_write: invalid large obj descriptor (%d)", fd); return -3; } - currentContext = MemoryContextSwitchTo((MemoryContext) fscxt); + currentContext = MemoryContextSwitchTo((MemoryContext) fscxt); status = inv_write(cookies[fd], buf, len); MemoryContextSwitchTo(currentContext); - return(status); + return (status); } @@ -374,9 +374,7 @@ lo_export(Oid lobjId, text *filename) */ lobj = inv_open(lobjId, INV_READ); if (lobj == NULL) - { elog(ERROR, "lo_export: can't open inv object %u", lobjId); - } /* * open the file to be written to diff --git a/src/backend/libpq/crypt.c b/src/backend/libpq/crypt.c index ac8b3733876..afd289d1f57 100644 --- a/src/backend/libpq/crypt.c +++ b/src/backend/libpq/crypt.c @@ -1,7 +1,7 @@ /*------------------------------------------------------------------------- * * crypt.c - * Look into pg_shadow and check the encrypted password with + * Look into pg_shadow and check the encrypted password with * the one passed in from the frontend. * * Modification History @@ -9,7 +9,7 @@ * Dec 17, 1997 - Todd A. Brandys * Orignal Version Completed. * - * $Id: crypt.c,v 1.16 1999/05/09 00:54:30 tgl Exp $ + * $Id: crypt.c,v 1.17 1999/05/25 16:08:58 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -38,8 +38,8 @@ char * crypt_getpwdfilename() { - static char *pfnam = NULL; - int bufsize; + static char *pfnam = NULL; + int bufsize; bufsize = strlen(DataDir) + strlen(CRYPT_PWD_FILE) + 2; pfnam = (char *) palloc(bufsize); @@ -54,9 +54,9 @@ char * crypt_getpwdreloadfilename() { - static char *rpfnam = NULL; - char *pwdfilename; - int bufsize; + static char *rpfnam = NULL; + char *pwdfilename; + int bufsize; pwdfilename = crypt_getpwdfilename(); bufsize = strlen(pwdfilename) + strlen(CRYPT_PWD_RELOAD_SUFX) + 1; @@ -147,9 +147,7 @@ crypt_loadpwdfile() { /* free the old data only if this is a * reload */ while (pwd_cache_count--) - { pfree((void *) pwd_cache[pwd_cache_count]); - } pfree((void *) pwd_cache); pwd_cache = NULL; pwd_cache_count = 0; @@ -226,9 +224,9 @@ int crypt_getloginfo(const char *user, char **passwd, char **valuntil) { - char *pwd, - *valdate; - void *fakeout; + char *pwd, + *valdate; + void *fakeout; *passwd = NULL; *valuntil = NULL; @@ -236,8 +234,8 @@ crypt_getloginfo(const char *user, char **passwd, char **valuntil) if (pwd_cache) { - char **pwd_entry; - char user_search[NAMEDATALEN + 2]; + char **pwd_entry; + char user_search[NAMEDATALEN + 2]; snprintf(user_search, NAMEDATALEN + 2, "%s\t", user); fakeout = (void *) &user_search; @@ -261,28 +259,22 @@ int crypt_verify(Port *port, const char *user, const char *pgpass) { - char *passwd, - *valuntil, - *crypt_pwd; - int retval = STATUS_ERROR; - AbsoluteTime vuntil, - current; + char *passwd, + *valuntil, + *crypt_pwd; + int retval = STATUS_ERROR; + AbsoluteTime vuntil, + current; if (crypt_getloginfo(user, &passwd, &valuntil) == STATUS_ERROR) - { return STATUS_ERROR; - } if (passwd == NULL || *passwd == '\0') { if (passwd) - { pfree((void *) passwd); - } if (valuntil) - { pfree((void *) valuntil); - } return STATUS_ERROR; } @@ -291,38 +283,29 @@ crypt_verify(Port *port, const char *user, const char *pgpass) * authentication method being used for this connection. */ - crypt_pwd = - (port->auth_method == uaCrypt ? crypt(passwd, port->salt) : passwd); + crypt_pwd = + (port->auth_method == uaCrypt ? crypt(passwd, port->salt) : passwd); if (!strcmp(pgpass, crypt_pwd)) { + /* * check here to be sure we are not past valuntil */ if (!valuntil || strcmp(valuntil, "\\N") == 0) - { vuntil = INVALID_ABSTIME; - } else - { vuntil = nabstimein(valuntil); - } current = GetCurrentAbsoluteTime(); if (vuntil != INVALID_ABSTIME && vuntil < current) - { retval = STATUS_ERROR; - } else - { retval = STATUS_OK; - } } pfree((void *) passwd); if (valuntil) - { pfree((void *) valuntil); - } return retval; } diff --git a/src/backend/libpq/hba.c b/src/backend/libpq/hba.c index 85bbcb890e6..dd64971c99d 100644 --- a/src/backend/libpq/hba.c +++ b/src/backend/libpq/hba.c @@ -5,7 +5,7 @@ * wherein you authenticate a user by seeing what IP address the system * says he comes from and possibly using ident). * - * $Id: hba.c,v 1.42 1999/05/10 15:17:16 momjian Exp $ + * $Id: hba.c,v 1.43 1999/05/25 16:08:59 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -286,7 +286,7 @@ process_hba_record(FILE *file, SockAddr *raddr, const char *user, syntax: snprintf(PQerrormsg, ERROR_MSG_LENGTH, - "process_hba_record: invalid syntax in pg_hba.conf file\n"); + "process_hba_record: invalid syntax in pg_hba.conf file\n"); fputs(PQerrormsg, stderr); pqdebug("%s", PQerrormsg); @@ -305,14 +305,15 @@ process_open_config_file(FILE *file, SockAddr *raddr, const char *user, This function does the same thing as find_hba_entry, only with the config file already open on stream descriptor "file". ----------------------------------------------------------------------------*/ - bool found_entry = false; /* found an applicable entry? */ - bool error = false; /* found an erroneous entry? */ - bool eof = false; /* end of hba file */ + bool found_entry = false; /* found an applicable entry? */ + bool error = false; /* found an erroneous entry? */ + bool eof = false; /* end of hba file */ while (!eof && !found_entry && !error) { /* Process a line from the config file */ - int c = getc(file); + int c = getc(file); + if (c == EOF) eof = true; else @@ -347,7 +348,7 @@ find_hba_entry(SockAddr *raddr, const char *user, const char *database, * Read the config file and find an entry that allows connection from * host "raddr", user "user", to database "database". If found, * return *hba_ok_p = true and *userauth_p and *auth_arg representing - * the contents of that entry. If there is no matching entry, we + * the contents of that entry. If there is no matching entry, we * set *hba_ok_p = true, *userauth_p = uaReject. * * If the config file is unreadable or contains invalid syntax, we @@ -355,15 +356,15 @@ find_hba_entry(SockAddr *raddr, const char *user, const char *database, * and return without changing *hba_ok_p. * * If we find a file by the old name of the config file (pg_hba), we issue - * an error message because it probably needs to be converted. He didn't + * an error message because it probably needs to be converted. He didn't * follow directions and just installed his old hba file in the new database * system. */ - int fd, + int fd, bufsize; - FILE *file; /* The config file we have to read */ - char *old_conf_file; + FILE *file; /* The config file we have to read */ + char *old_conf_file; /* The name of old config file that better not exist. */ @@ -387,14 +388,15 @@ find_hba_entry(SockAddr *raddr, const char *user, const char *database, "A file exists by the name used for host-based authentication " "in prior releases of Postgres (%s). The name and format of " "the configuration file have changed, so this file should be " - "converted.\n", - old_conf_file); + "converted.\n", + old_conf_file); fputs(PQerrormsg, stderr); pqdebug("%s", PQerrormsg); } else { - char *conf_file; /* The name of the config file we have to read */ + char *conf_file; /* The name of the config file we have to + * read */ /* put together the full pathname to the config file */ bufsize = (strlen(DataDir) + strlen(CONF_FILE) + 2) * sizeof(char); @@ -407,17 +409,17 @@ find_hba_entry(SockAddr *raddr, const char *user, const char *database, /* The open of the config file failed. */ snprintf(PQerrormsg, ERROR_MSG_LENGTH, - "find_hba_entry: Host-based authentication config file " - "does not exist or permissions are not setup correctly! " - "Unable to open file \"%s\".\n", - conf_file); + "find_hba_entry: Host-based authentication config file " + "does not exist or permissions are not setup correctly! " + "Unable to open file \"%s\".\n", + conf_file); fputs(PQerrormsg, stderr); pqdebug("%s", PQerrormsg); } else { - process_open_config_file(file, raddr, user, database, hba_ok_p, - userauth_p, auth_arg); + process_open_config_file(file, raddr, user, database, hba_ok_p, + userauth_p, auth_arg); FreeFile(file); } pfree(conf_file); @@ -531,16 +533,18 @@ ident(const struct in_addr remote_ip_addr, const struct in_addr local_ip_addr, ----------------------------------------------------------------------------*/ - int sock_fd, /* File descriptor for socket on which we talk to Ident */ - rc; /* Return code from a locally called function */ + int sock_fd, /* File descriptor for socket on which we + * talk to Ident */ + rc; /* Return code from a locally called + * function */ sock_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_IP); if (sock_fd == -1) { - snprintf(PQerrormsg, ERROR_MSG_LENGTH, - "Failed to create socket on which to talk to Ident server. " - "socket() returned errno = %s (%d)\n", - strerror(errno), errno); + snprintf(PQerrormsg, ERROR_MSG_LENGTH, + "Failed to create socket on which to talk to Ident server. " + "socket() returned errno = %s (%d)\n", + strerror(errno), errno); fputs(PQerrormsg, stderr); pqdebug("%s", PQerrormsg); } @@ -559,66 +563,66 @@ ident(const struct in_addr remote_ip_addr, const struct in_addr local_ip_addr, /* * Bind to the address which the client originally contacted, - * otherwise the ident server won't be able to match up the - * right connection. This is necessary if the PostgreSQL - * server is running on an IP alias. + * otherwise the ident server won't be able to match up the right + * connection. This is necessary if the PostgreSQL server is + * running on an IP alias. */ memset(&la, 0, sizeof(la)); la.sin_family = AF_INET; la.sin_addr = local_ip_addr; - rc = bind(sock_fd, (struct sockaddr *) &la, sizeof(la)); + rc = bind(sock_fd, (struct sockaddr *) & la, sizeof(la)); if (rc == 0) { rc = connect(sock_fd, - (struct sockaddr *) & ident_server, sizeof(ident_server)); + (struct sockaddr *) & ident_server, sizeof(ident_server)); } if (rc != 0) { snprintf(PQerrormsg, ERROR_MSG_LENGTH, - "Unable to connect to Ident server on the host which is " - "trying to connect to Postgres " - "(IP address %s, Port %d). " - "errno = %s (%d)\n", - inet_ntoa(remote_ip_addr), IDENT_PORT, strerror(errno), errno); + "Unable to connect to Ident server on the host which is " + "trying to connect to Postgres " + "(IP address %s, Port %d). " + "errno = %s (%d)\n", + inet_ntoa(remote_ip_addr), IDENT_PORT, strerror(errno), errno); fputs(PQerrormsg, stderr); pqdebug("%s", PQerrormsg); *ident_failed = true; } else { - char ident_query[80]; + char ident_query[80]; /* The query we send to the Ident server */ snprintf(ident_query, 80, "%d,%d\n", - ntohs(remote_port), ntohs(local_port)); + ntohs(remote_port), ntohs(local_port)); rc = send(sock_fd, ident_query, strlen(ident_query), 0); if (rc < 0) { snprintf(PQerrormsg, ERROR_MSG_LENGTH, - "Unable to send query to Ident server on the host which is " + "Unable to send query to Ident server on the host which is " "trying to connect to Postgres (Host %s, Port %d)," - "even though we successfully connected to it. " - "errno = %s (%d)\n", - inet_ntoa(remote_ip_addr), IDENT_PORT, strerror(errno), errno); + "even though we successfully connected to it. " + "errno = %s (%d)\n", + inet_ntoa(remote_ip_addr), IDENT_PORT, strerror(errno), errno); fputs(PQerrormsg, stderr); pqdebug("%s", PQerrormsg); *ident_failed = true; } else { - char ident_response[80 + IDENT_USERNAME_MAX]; + char ident_response[80 + IDENT_USERNAME_MAX]; rc = recv(sock_fd, ident_response, sizeof(ident_response) - 1, 0); if (rc < 0) { snprintf(PQerrormsg, ERROR_MSG_LENGTH, - "Unable to receive response from Ident server " - "on the host which is " - "trying to connect to Postgres (Host %s, Port %d)," - "even though we successfully sent our query to it. " - "errno = %s (%d)\n", - inet_ntoa(remote_ip_addr), IDENT_PORT, - strerror(errno), errno); + "Unable to receive response from Ident server " + "on the host which is " + "trying to connect to Postgres (Host %s, Port %d)," + "even though we successfully sent our query to it. " + "errno = %s (%d)\n", + inet_ntoa(remote_ip_addr), IDENT_PORT, + strerror(errno), errno); fputs(PQerrormsg, stderr); pqdebug("%s", PQerrormsg); *ident_failed = true; @@ -676,8 +680,8 @@ parse_map_record(FILE *file, return; } } - snprintf(PQerrormsg, ERROR_MSG_LENGTH, - "Incomplete line in pg_ident: %s", file_map); + snprintf(PQerrormsg, ERROR_MSG_LENGTH, + "Incomplete line in pg_ident: %s", file_map); fputs(PQerrormsg, stderr); pqdebug("%s", PQerrormsg); } @@ -760,29 +764,26 @@ verify_against_usermap(const char *pguser, { *checks_out_p = false; snprintf(PQerrormsg, ERROR_MSG_LENGTH, - "verify_against_usermap: hba configuration file does not " - "have the usermap field filled in in the entry that pertains " - "to this connection. That field is essential for Ident-based " - "authentication.\n"); + "verify_against_usermap: hba configuration file does not " + "have the usermap field filled in in the entry that pertains " + "to this connection. That field is essential for Ident-based " + "authentication.\n"); fputs(PQerrormsg, stderr); pqdebug("%s", PQerrormsg); } else if (strcmp(usermap_name, "sameuser") == 0) { if (strcmp(ident_username, pguser) == 0) - { *checks_out_p = true; - } else - { *checks_out_p = false; - } } else { - FILE *file; /* The map file we have to read */ - char *map_file; /* The name of the map file we have to read */ - int bufsize; + FILE *file; /* The map file we have to read */ + char *map_file; /* The name of the map file we have to + * read */ + int bufsize; /* put together the full pathname to the map file */ bufsize = (strlen(DataDir) + strlen(USERMAP_FILE) + 2) * sizeof(char); @@ -801,11 +802,11 @@ verify_against_usermap(const char *pguser, *checks_out_p = false; snprintf(PQerrormsg, ERROR_MSG_LENGTH, - "verify_against_usermap: usermap file for Ident-based " - "authentication " - "does not exist or permissions are not setup correctly! " - "Unable to open file \"%s\".\n", - map_file); + "verify_against_usermap: usermap file for Ident-based " + "authentication " + "does not exist or permissions are not setup correctly! " + "Unable to open file \"%s\".\n", + map_file); fputs(PQerrormsg, stderr); pqdebug("%s", PQerrormsg); } @@ -945,21 +946,21 @@ InRange(char *buf, int host) void GetCharSetByHost(char *TableName, int host, const char *DataDir) { - FILE *file; - char buf[MAX_TOKEN], + FILE *file; + char buf[MAX_TOKEN], BaseCharset[MAX_TOKEN], OrigCharset[MAX_TOKEN], DestCharset[MAX_TOKEN], HostCharset[MAX_TOKEN], c, eof = false, - *map_file; - int key = 0, + *map_file; + int key = 0, ChIndex = 0, i, bufsize; - struct CharsetItem *ChArray[MAX_CHARSETS]; + struct CharsetItem *ChArray[MAX_CHARSETS]; *TableName = '\0'; bufsize = (strlen(DataDir) + strlen(CHARSET_FILE) + 2) * sizeof(char); @@ -971,9 +972,7 @@ GetCharSetByHost(char *TableName, int host, const char *DataDir) file = AllocateFile(map_file, "rb"); #endif if (file == NULL) - { return; - } while (!eof) { c = getc(file); @@ -1033,8 +1032,8 @@ GetCharSetByHost(char *TableName, int host, const char *DataDir) next_token(file, buf, sizeof(buf)); if (buf[0] != '\0') { - ChArray[ChIndex] = - (struct CharsetItem *) palloc(sizeof(struct CharsetItem)); + ChArray[ChIndex] = + (struct CharsetItem *) palloc(sizeof(struct CharsetItem)); strcpy(ChArray[ChIndex]->Orig, OrigCharset); strcpy(ChArray[ChIndex]->Dest, DestCharset); strcpy(ChArray[ChIndex]->Table, buf); diff --git a/src/backend/libpq/password.c b/src/backend/libpq/password.c index 968ba055e67..98c05d30749 100644 --- a/src/backend/libpq/password.c +++ b/src/backend/libpq/password.c @@ -1,7 +1,7 @@ -/* +/* * Copyright (c) 1994, Regents of the University of California * - * $Id: password.c,v 1.20 1999/01/17 06:18:26 momjian Exp $ + * $Id: password.c,v 1.21 1999/05/25 16:09:00 momjian Exp $ * */ @@ -35,8 +35,8 @@ verify_password(char *auth_arg, char *user, char *password) if (!pw_file) { snprintf(PQerrormsg, ERROR_MSG_LENGTH, - "verify_password: couldn't open password file '%s'\n", - pw_file_fullname); + "verify_password: couldn't open password file '%s'\n", + pw_file_fullname); fputs(PQerrormsg, stderr); pqdebug("%s", PQerrormsg); @@ -80,8 +80,8 @@ verify_password(char *auth_arg, char *user, char *password) } snprintf(PQerrormsg, ERROR_MSG_LENGTH, - "verify_password: password mismatch for '%s'.\n", - user); + "verify_password: password mismatch for '%s'.\n", + user); fputs(PQerrormsg, stderr); pqdebug("%s", PQerrormsg); @@ -92,8 +92,8 @@ verify_password(char *auth_arg, char *user, char *password) } snprintf(PQerrormsg, ERROR_MSG_LENGTH, - "verify_password: user '%s' not found in password file.\n", - user); + "verify_password: user '%s' not found in password file.\n", + user); fputs(PQerrormsg, stderr); pqdebug("%s", PQerrormsg); diff --git a/src/backend/libpq/portal.c b/src/backend/libpq/portal.c index 05970a5cc38..6f7dca5cb5e 100644 --- a/src/backend/libpq/portal.c +++ b/src/backend/libpq/portal.c @@ -5,7 +5,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: portal.c,v 1.21 1999/04/25 03:19:20 tgl Exp $ + * $Id: portal.c,v 1.22 1999/05/25 16:09:01 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -50,7 +50,7 @@ * see utils/mmgr/portalmem.c for why. -cim 2/22/91 * */ -#include <stdio.h> +#include <stdio.h> #include <string.h> #include <postgres.h> @@ -71,7 +71,7 @@ in_range(char *msg, int value, int min, int max) if (value < min || value >= max) { snprintf(PQerrormsg, ERROR_MSG_LENGTH, - "FATAL: %s, %d is not in range [%d,%d)\n", msg, value, min, max); + "FATAL: %s, %d is not in range [%d,%d)\n", msg, value, min, max); pqdebug("%s", PQerrormsg); fputs(PQerrormsg, stderr); return 0; diff --git a/src/backend/libpq/portalbuf.c b/src/backend/libpq/portalbuf.c index 002dbf5483d..038a0a46141 100644 --- a/src/backend/libpq/portalbuf.c +++ b/src/backend/libpq/portalbuf.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/libpq/Attic/portalbuf.c,v 1.13 1999/02/13 23:15:46 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/libpq/Attic/portalbuf.c,v 1.14 1999/05/25 16:09:02 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -63,7 +63,7 @@ size_t portals_array_size = 0; /* GlobalMemory portals_mmcxt = (GlobalMemory) NULL; */ /* ------------------------------- - * portals_realloc + * portals_realloc * grow the size of the portals array by size * * also ensures that elements are initially NULL diff --git a/src/backend/libpq/pqcomm.c b/src/backend/libpq/pqcomm.c index 7f830d9c564..e8489dce418 100644 --- a/src/backend/libpq/pqcomm.c +++ b/src/backend/libpq/pqcomm.c @@ -28,7 +28,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: pqcomm.c,v 1.71 1999/05/21 01:25:06 tgl Exp $ + * $Id: pqcomm.c,v 1.72 1999/05/25 16:09:02 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -53,7 +53,7 @@ * * message-level I/O (and COPY OUT cruft): * pq_putmessage - send a normal message (suppressed in COPY OUT mode) - * pq_startcopyout - inform libpq that a COPY OUT transfer is beginning + * pq_startcopyout - inform libpq that a COPY OUT transfer is beginning * pq_endcopyout - end a COPY OUT transfer * *------------------------ @@ -90,7 +90,7 @@ #define SOMAXCONN 5 /* from Linux listen(2) man page */ #endif /* SOMAXCONN */ -extern FILE * debug_port; /* in util.c */ +extern FILE *debug_port; /* in util.c */ /* * Buffers for low-level I/O @@ -99,11 +99,13 @@ extern FILE * debug_port; /* in util.c */ #define PQ_BUFFER_SIZE 8192 static unsigned char PqSendBuffer[PQ_BUFFER_SIZE]; -static int PqSendPointer; /* Next index to store a byte in PqSendBuffer */ +static int PqSendPointer; /* Next index to store a byte in + * PqSendBuffer */ static unsigned char PqRecvBuffer[PQ_BUFFER_SIZE]; -static int PqRecvPointer; /* Next index to read a byte from PqRecvBuffer */ -static int PqRecvLength; /* End of data available in PqRecvBuffer */ +static int PqRecvPointer; /* Next index to read a byte from + * PqRecvBuffer */ +static int PqRecvLength; /* End of data available in PqRecvBuffer */ /* * Message status @@ -121,7 +123,7 @@ pq_init(void) PqSendPointer = PqRecvPointer = PqRecvLength = 0; DoingCopyOut = false; if (getenv("LIBPQ_DEBUG")) - debug_port = stderr; + debug_port = stderr; } /* -------------------------------- @@ -187,8 +189,10 @@ StreamServerPort(char *hostName, short portName, int *fdP) family; size_t len; int one = 1; + #ifdef HAVE_FCNTL_SETLK int lock_fd; + #endif family = ((hostName != NULL) ? AF_INET : AF_UNIX); @@ -204,19 +208,20 @@ StreamServerPort(char *hostName, short portName, int *fdP) } #ifdef ONLY_REUSE_INET_SOCKETS - if (family == AF_INET) { + if (family == AF_INET) + { #endif - if ((setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char *) &one, - sizeof(one))) == -1) - { - snprintf(PQerrormsg, ERROR_MSG_LENGTH, - "FATAL: StreamServerPort: setsockopt(SO_REUSEADDR) failed: %s\n", - strerror(errno)); - fputs(PQerrormsg, stderr); - pqdebug("%s", PQerrormsg); - return STATUS_ERROR; - } + if ((setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char *) &one, + sizeof(one))) == -1) + { + snprintf(PQerrormsg, ERROR_MSG_LENGTH, + "FATAL: StreamServerPort: setsockopt(SO_REUSEADDR) failed: %s\n", + strerror(errno)); + fputs(PQerrormsg, stderr); + pqdebug("%s", PQerrormsg); + return STATUS_ERROR; + } #ifdef ONLY_REUSE_INET_SOCKETS } @@ -240,9 +245,10 @@ StreamServerPort(char *hostName, short portName, int *fdP) if ((lock_fd = open(sock_path, O_WRONLY | O_NONBLOCK | O_BINARY, 0666)) >= 0) #endif { - struct flock lck; - - lck.l_whence = SEEK_SET; lck.l_start = lck.l_len = 0; + struct flock lck; + + lck.l_whence = SEEK_SET; + lck.l_start = lck.l_len = 0; lck.l_type = F_WRLCK; if (fcntl(lock_fd, F_SETLK, &lck) == 0) { @@ -253,7 +259,7 @@ StreamServerPort(char *hostName, short portName, int *fdP) TPRINTF(TRACE_VERBOSE, "flock failed for %s", sock_path); close(lock_fd); } -#endif /* HAVE_FCNTL_SETLK */ +#endif /* HAVE_FCNTL_SETLK */ } else { @@ -277,9 +283,7 @@ StreamServerPort(char *hostName, short portName, int *fdP) sock_path); } else - { strcat(PQerrormsg, "\tIf not, wait a few seconds and retry.\n"); - } fputs(PQerrormsg, stderr); pqdebug("%s", PQerrormsg); return STATUS_ERROR; @@ -300,14 +304,15 @@ StreamServerPort(char *hostName, short portName, int *fdP) if ((lock_fd = open(sock_path, O_WRONLY | O_NONBLOCK | O_BINARY, 0666)) >= 0) #endif { - struct flock lck; - - lck.l_whence = SEEK_SET; lck.l_start = lck.l_len = 0; + struct flock lck; + + lck.l_whence = SEEK_SET; + lck.l_start = lck.l_len = 0; lck.l_type = F_WRLCK; if (fcntl(lock_fd, F_SETLK, &lck) != 0) TPRINTF(TRACE_VERBOSE, "flock error for %s", sock_path); } -#endif /* HAVE_FCNTL_SETLK */ +#endif /* HAVE_FCNTL_SETLK */ } listen(fd, SOMAXCONN); @@ -339,7 +344,7 @@ StreamServerPort(char *hostName, short portName, int *fdP) int StreamConnection(int server_fd, Port *port) { - SOCKET_SIZE_TYPE addrlen; + SOCKET_SIZE_TYPE addrlen; /* accept connection (and fill in the client (remote) address) */ addrlen = sizeof(port->raddr); @@ -419,8 +424,8 @@ pq_recvbuf(void) if (PqRecvLength > PqRecvPointer) { /* still some unread data, left-justify it in the buffer */ - memmove(PqRecvBuffer, PqRecvBuffer+PqRecvPointer, - PqRecvLength-PqRecvPointer); + memmove(PqRecvBuffer, PqRecvBuffer + PqRecvPointer, + PqRecvLength - PqRecvPointer); PqRecvLength -= PqRecvPointer; PqRecvPointer = 0; } @@ -431,16 +436,19 @@ pq_recvbuf(void) /* Can fill buffer from PqRecvLength and upwards */ for (;;) { - int r = recv(MyProcPort->sock, PqRecvBuffer + PqRecvLength, - PQ_BUFFER_SIZE - PqRecvLength, 0); + int r = recv(MyProcPort->sock, PqRecvBuffer + PqRecvLength, + PQ_BUFFER_SIZE - PqRecvLength, 0); + if (r < 0) { if (errno == EINTR) continue; /* Ok if interrupted */ - /* We would like to use elog() here, but dare not because elog - * tries to write to the client, which will cause problems - * if we have a hard communications failure ... - * So just write the message to the postmaster log. + + /* + * We would like to use elog() here, but dare not because elog + * tries to write to the client, which will cause problems if + * we have a hard communications failure ... So just write the + * message to the postmaster log. */ fprintf(stderr, "pq_recvbuf: recv() failed: %s\n", strerror(errno)); @@ -499,7 +507,7 @@ pq_peekbyte(void) int pq_getbytes(char *s, size_t len) { - size_t amount; + size_t amount; while (len > 0) { @@ -539,8 +547,8 @@ pq_getstring(char *s, size_t len) int c; /* - * Keep on reading until we get the terminating '\0', - * discarding any bytes we don't have room for. + * Keep on reading until we get the terminating '\0', discarding any + * bytes we don't have room for. */ while ((c = pq_getbyte()) != EOF && c != '\0') @@ -570,7 +578,7 @@ pq_getstring(char *s, size_t len) int pq_putbytes(const char *s, size_t len) { - size_t amount; + size_t amount; while (len > 0) { @@ -602,19 +610,24 @@ pq_flush(void) while (bufptr < bufend) { - int r = send(MyProcPort->sock, bufptr, bufend - bufptr, 0); + int r = send(MyProcPort->sock, bufptr, bufend - bufptr, 0); + if (r <= 0) { if (errno == EINTR) continue; /* Ok if we were interrupted */ - /* We would like to use elog() here, but cannot because elog + + /* + * We would like to use elog() here, but cannot because elog * tries to write to the client, which would cause a recursive * flush attempt! So just write it out to the postmaster log. */ fprintf(stderr, "pq_flush: send() failed: %s\n", strerror(errno)); - /* We drop the buffered data anyway so that processing - * can continue, even though we'll probably quit soon. + + /* + * We drop the buffered data anyway so that processing can + * continue, even though we'll probably quit soon. */ PqSendPointer = 0; return EOF; @@ -661,7 +674,7 @@ pq_putmessage(char msgtype, const char *s, size_t len) } /* -------------------------------- - * pq_startcopyout - inform libpq that a COPY OUT transfer is beginning + * pq_startcopyout - inform libpq that a COPY OUT transfer is beginning * -------------------------------- */ void @@ -682,7 +695,7 @@ pq_startcopyout(void) void pq_endcopyout(bool errorAbort) { - if (! DoingCopyOut) + if (!DoingCopyOut) return; if (errorAbort) pq_putbytes("\n\n\\.\n", 5); diff --git a/src/backend/libpq/pqformat.c b/src/backend/libpq/pqformat.c index 45b4259d8b9..529b3115bdd 100644 --- a/src/backend/libpq/pqformat.c +++ b/src/backend/libpq/pqformat.c @@ -15,14 +15,14 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: pqformat.c,v 1.3 1999/04/25 21:50:56 tgl Exp $ + * $Id: pqformat.c,v 1.4 1999/05/25 16:09:02 momjian Exp $ * *------------------------------------------------------------------------- */ /* * INTERFACE ROUTINES * Message assembly and output: - * pq_beginmessage - initialize StringInfo buffer + * pq_beginmessage - initialize StringInfo buffer * pq_sendbyte - append a raw byte to a StringInfo buffer * pq_sendint - append a binary integer to a StringInfo buffer * pq_sendbytes - append raw data to a StringInfo buffer @@ -126,6 +126,7 @@ pq_sendcountedtext(StringInfo buf, const char *str, int slen) { #ifdef MULTIBYTE const char *p; + p = (const char *) pg_server_to_client((unsigned char *) str, slen); if (p != str) /* actual conversion has been done? */ { @@ -147,9 +148,11 @@ pq_sendcountedtext(StringInfo buf, const char *str, int slen) void pq_sendstring(StringInfo buf, const char *str) { - int slen = strlen(str); + int slen = strlen(str); + #ifdef MULTIBYTE const char *p; + p = (const char *) pg_server_to_client((unsigned char *) str, slen); if (p != str) /* actual conversion has been done? */ { @@ -157,7 +160,7 @@ pq_sendstring(StringInfo buf, const char *str) slen = strlen(str); } #endif - appendBinaryStringInfo(buf, str, slen+1); + appendBinaryStringInfo(buf, str, slen + 1); } /* -------------------------------- @@ -167,9 +170,9 @@ pq_sendstring(StringInfo buf, const char *str) void pq_sendint(StringInfo buf, int i, int b) { - unsigned char n8; - uint16 n16; - uint32 n32; + unsigned char n8; + uint16 n16; + uint32 n32; switch (b) { @@ -225,9 +228,11 @@ pq_endmessage(StringInfo buf) int pq_puttextmessage(char msgtype, const char *str) { - int slen = strlen(str); + int slen = strlen(str); + #ifdef MULTIBYTE const char *p; + p = (const char *) pg_server_to_client((unsigned char *) str, slen); if (p != str) /* actual conversion has been done? */ { @@ -235,7 +240,7 @@ pq_puttextmessage(char msgtype, const char *str) slen = strlen(str); } #endif - return pq_putmessage(msgtype, str, slen+1); + return pq_putmessage(msgtype, str, slen + 1); } /* -------------------------------- @@ -247,10 +252,10 @@ pq_puttextmessage(char msgtype, const char *str) int pq_getint(int *result, int b) { - int status; - unsigned char n8; - uint16 n16; - uint32 n32; + int status; + unsigned char n8; + uint16 n16; + uint32 n32; switch (b) { @@ -269,8 +274,10 @@ pq_getint(int *result, int b) ntoh_l(n32) : ntohl(n32)); break; default: - /* if we elog(ERROR) here, we will lose sync with the frontend, - * so just complain to postmaster log instead... + + /* + * if we elog(ERROR) here, we will lose sync with the + * frontend, so just complain to postmaster log instead... */ fprintf(stderr, "pq_getint: unsupported size %d\n", b); status = EOF; @@ -293,23 +300,26 @@ int pq_getstr(char *s, int maxlen) { int c; + #ifdef MULTIBYTE char *p; + #endif c = pq_getstring(s, maxlen); #ifdef MULTIBYTE - p = (char*) pg_client_to_server((unsigned char *) s, strlen(s)); + p = (char *) pg_client_to_server((unsigned char *) s, strlen(s)); if (p != s) /* actual conversion has been done? */ { - int newlen = strlen(p); + int newlen = strlen(p); + if (newlen < maxlen) strcpy(s, p); else { strncpy(s, p, maxlen); - s[maxlen-1] = '\0'; + s[maxlen - 1] = '\0'; } } #endif diff --git a/src/backend/libpq/util.c b/src/backend/libpq/util.c index ce35c2571c9..50c2846815d 100644 --- a/src/backend/libpq/util.c +++ b/src/backend/libpq/util.c @@ -5,7 +5,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: util.c,v 1.8 1999/02/13 23:15:49 momjian Exp $ + * $Id: util.c,v 1.9 1999/05/25 16:09:03 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -17,7 +17,7 @@ * PQuntrace - turn off pqdebug() tracing */ -#include <stdio.h> +#include <stdio.h> #include <string.h> #include <postgres.h> diff --git a/src/backend/nodes/copyfuncs.c b/src/backend/nodes/copyfuncs.c index 87919b4dbab..723e70b1e0c 100644 --- a/src/backend/nodes/copyfuncs.c +++ b/src/backend/nodes/copyfuncs.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.80 1999/05/18 21:34:27 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.81 1999/05/25 16:09:04 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -92,7 +92,7 @@ CopyPlanFields(Plan *from, Plan *newnode) newnode->chgParam = listCopy(from->chgParam); Node_Copy(from, newnode, initPlan); if (from->subPlan != NULL) - newnode->subPlan = SS_pull_subplan((Node*) newnode->qual); + newnode->subPlan = SS_pull_subplan((Node *) newnode->qual); else newnode->subPlan = NULL; newnode->nParamExec = from->nParamExec; @@ -138,10 +138,12 @@ _copyResult(Result *from) */ Node_Copy(from, newnode, resconstantqual); - /* We must add subplans in resconstantqual to the new plan's subPlan list + /* + * We must add subplans in resconstantqual to the new plan's subPlan + * list */ newnode->plan.subPlan = nconc(newnode->plan.subPlan, - SS_pull_subplan(newnode->resconstantqual)); + SS_pull_subplan(newnode->resconstantqual)); return newnode; } @@ -369,7 +371,7 @@ _copyHashJoin(HashJoin *from) * ---------------- */ static void -CopyNonameFields(Noname *from, Noname *newnode) +CopyNonameFields(Noname * from, Noname * newnode) { newnode->nonameid = from->nonameid; newnode->keycount = from->keycount; @@ -382,7 +384,7 @@ CopyNonameFields(Noname *from, Noname *newnode) * ---------------- */ static Noname * -_copyNoname(Noname *from) +_copyNoname(Noname * from) { Noname *newnode = makeNode(Noname); @@ -466,9 +468,10 @@ _copyAgg(Agg *from) CopyPlanFields((Plan *) from, (Plan *) newnode); - /* Cannot copy agg list; it must be rebuilt to point to subnodes of + /* + * Cannot copy agg list; it must be rebuilt to point to subnodes of * new node. - */ + */ set_agg_tlist_references(newnode); return newnode; @@ -859,7 +862,7 @@ _copyFunc(Func *from) * ---------------- */ static Aggref * -_copyAggref(Aggref *from) +_copyAggref(Aggref * from) { Aggref *newnode = makeNode(Aggref); @@ -904,7 +907,7 @@ _copySubLink(SubLink *from) * ---------------- */ static CaseExpr * -_copyCaseExpr(CaseExpr *from) +_copyCaseExpr(CaseExpr * from) { CaseExpr *newnode = makeNode(CaseExpr); @@ -926,7 +929,7 @@ _copyCaseExpr(CaseExpr *from) * ---------------- */ static CaseWhen * -_copyCaseWhen(CaseWhen *from) +_copyCaseWhen(CaseWhen * from) { CaseWhen *newnode = makeNode(CaseWhen); @@ -1170,7 +1173,7 @@ _copyIndexPath(IndexPath *from) * ---------------- */ static void -CopyNestPathFields(NestPath *from, NestPath *newnode) +CopyNestPathFields(NestPath * from, NestPath * newnode) { Node_Copy(from, newnode, pathinfo); Node_Copy(from, newnode, outerjoinpath); @@ -1182,7 +1185,7 @@ CopyNestPathFields(NestPath *from, NestPath *newnode) * ---------------- */ static NestPath * -_copyNestPath(NestPath *from) +_copyNestPath(NestPath * from) { NestPath *newnode = makeNode(NestPath); @@ -1316,7 +1319,7 @@ _copyMergeOrder(MergeOrder *from) * ---------------- */ static RestrictInfo * -_copyRestrictInfo(RestrictInfo *from) +_copyRestrictInfo(RestrictInfo * from) { RestrictInfo *newnode = makeNode(RestrictInfo); @@ -1371,9 +1374,9 @@ _copyJoinMethod(JoinMethod *from) * ---------------- */ static HashInfo * -_copyHashInfo(HashInfo *from) +_copyHashInfo(HashInfo * from) { - HashInfo *newnode = makeNode(HashInfo); + HashInfo *newnode = makeNode(HashInfo); /* ---------------- * copy remainder of node @@ -1390,9 +1393,9 @@ _copyHashInfo(HashInfo *from) * ---------------- */ static MergeInfo * -_copyMergeInfo(MergeInfo *from) +_copyMergeInfo(MergeInfo * from) { - MergeInfo *newnode = makeNode(MergeInfo); + MergeInfo *newnode = makeNode(MergeInfo); /* ---------------- * copy remainder of node @@ -1409,7 +1412,7 @@ _copyMergeInfo(MergeInfo *from) * ---------------- */ static JoinInfo * -_copyJoinInfo(JoinInfo *from) +_copyJoinInfo(JoinInfo * from) { JoinInfo *newnode = makeNode(JoinInfo); @@ -1493,9 +1496,9 @@ _copyRangeTblEntry(RangeTblEntry *from) } static RowMark * -_copyRowMark(RowMark *from) +_copyRowMark(RowMark * from) { - RowMark *newnode = makeNode(RowMark); + RowMark *newnode = makeNode(RowMark); newnode->rti = from->rti; newnode->info = from->info; diff --git a/src/backend/nodes/equalfuncs.c b/src/backend/nodes/equalfuncs.c index 45e752f5028..7f86933496e 100644 --- a/src/backend/nodes/equalfuncs.c +++ b/src/backend/nodes/equalfuncs.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/nodes/equalfuncs.c,v 1.36 1999/05/12 15:01:33 wieck Exp $ + * $Header: /cvsroot/pgsql/src/backend/nodes/equalfuncs.c,v 1.37 1999/05/25 16:09:06 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -283,7 +283,7 @@ _equalFunc(Func *a, Func *b) * RestrictInfo is a subclass of Node. */ static bool -_equalRestrictInfo(RestrictInfo *a, RestrictInfo *b) +_equalRestrictInfo(RestrictInfo * a, RestrictInfo * b) { Assert(IsA(a, RestrictInfo)); Assert(IsA(b, RestrictInfo)); @@ -307,7 +307,7 @@ _equalRestrictInfo(RestrictInfo *a, RestrictInfo *b) * RelOptInfo is a subclass of Node. */ static bool -_equalRelOptInfo(RelOptInfo *a, RelOptInfo *b) +_equalRelOptInfo(RelOptInfo * a, RelOptInfo * b) { Assert(IsA(a, RelOptInfo)); Assert(IsA(b, RelOptInfo)); @@ -392,7 +392,7 @@ _equalIndexPath(IndexPath *a, IndexPath *b) } static bool -_equalNestPath(NestPath *a, NestPath *b) +_equalNestPath(NestPath * a, NestPath * b) { Assert(IsA_JoinPath(a)); Assert(IsA_JoinPath(b)); @@ -477,7 +477,7 @@ _equalMergeOrder(MergeOrder *a, MergeOrder *b) } static bool -_equalHashInfo(HashInfo *a, HashInfo *b) +_equalHashInfo(HashInfo * a, HashInfo * b) { Assert(IsA(a, HashInfo)); Assert(IsA(b, HashInfo)); @@ -524,7 +524,7 @@ _equalSubPlan(SubPlan *a, SubPlan *b) } static bool -_equalJoinInfo(JoinInfo *a, JoinInfo *b) +_equalJoinInfo(JoinInfo * a, JoinInfo * b) { Assert(IsA(a, JoinInfo)); Assert(IsA(b, JoinInfo)); @@ -574,10 +574,13 @@ _equalQuery(Query *a, Query *b) return false; if (a->resultRelation != b->resultRelation) return false; - if (a->into && b->into) { + if (a->into && b->into) + { if (strcmp(a->into, b->into) != 0) return false; - } else { + } + else + { if (a->into != b->into) return false; } @@ -593,10 +596,13 @@ _equalQuery(Query *a, Query *b) return false; if (a->hasSubLinks != b->hasSubLinks) return false; - if (a->uniqueFlag && b->uniqueFlag) { + if (a->uniqueFlag && b->uniqueFlag) + { if (strcmp(a->uniqueFlag, b->uniqueFlag) != 0) return false; - } else { + } + else + { if (a->uniqueFlag != b->uniqueFlag) return false; } @@ -623,10 +629,10 @@ _equalQuery(Query *a, Query *b) if (!equal(a->limitCount, b->limitCount)) return false; - /* We do not check the internal-to-the-planner fields - * base_rel_list and join_rel_list. They might not be - * set yet, and in any case they should be derivable - * from the other fields. + /* + * We do not check the internal-to-the-planner fields base_rel_list + * and join_rel_list. They might not be set yet, and in any case they + * should be derivable from the other fields. */ return true; } @@ -634,17 +640,23 @@ _equalQuery(Query *a, Query *b) static bool _equalRangeTblEntry(RangeTblEntry *a, RangeTblEntry *b) { - if (a->relname && b->relname) { + if (a->relname && b->relname) + { if (strcmp(a->relname, b->relname) != 0) return false; - } else { + } + else + { if (a->relname != b->relname) return false; } - if (a->refname && b->refname) { + if (a->refname && b->refname) + { if (strcmp(a->refname, b->refname) != 0) return false; - } else { + } + else + { if (a->refname != b->refname) return false; } diff --git a/src/backend/nodes/freefuncs.c b/src/backend/nodes/freefuncs.c index 3c95dcbe225..71bf12bcde6 100644 --- a/src/backend/nodes/freefuncs.c +++ b/src/backend/nodes/freefuncs.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/nodes/Attic/freefuncs.c,v 1.16 1999/05/12 15:01:33 wieck Exp $ + * $Header: /cvsroot/pgsql/src/backend/nodes/Attic/freefuncs.c,v 1.17 1999/05/25 16:09:06 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -297,12 +297,12 @@ _freeHashJoin(HashJoin *node) /* ---------------- * FreeNonameFields * - * This function frees the fields of the Noname node. It is used by + * This function frees the fields of the Noname node. It is used by * all the free functions for classes which inherit node Noname. * ---------------- */ static void -FreeNonameFields(Noname *node) +FreeNonameFields(Noname * node) { return; } @@ -313,7 +313,7 @@ FreeNonameFields(Noname *node) * ---------------- */ static void -_freeNoname(Noname *node) +_freeNoname(Noname * node) { /* ---------------- * free node superclass fields @@ -562,7 +562,7 @@ _freeConst(Const *node) * ---------------- */ if (!node->constbyval) - pfree((void *)node->constvalue); + pfree((void *) node->constvalue); pfree(node); } @@ -609,7 +609,7 @@ _freeFunc(Func *node) * ---------------- */ static void -_freeAggref(Aggref *node) +_freeAggref(Aggref * node) { /* ---------------- * free remainder of node @@ -644,7 +644,7 @@ _freeSubLink(SubLink *node) * ---------------- */ static void -_freeCaseExpr(CaseExpr *node) +_freeCaseExpr(CaseExpr * node) { /* ---------------- * free remainder of node @@ -662,7 +662,7 @@ _freeCaseExpr(CaseExpr *node) * ---------------- */ static void -_freeCaseWhen(CaseWhen *node) +_freeCaseWhen(CaseWhen * node) { /* ---------------- * free remainder of node @@ -709,7 +709,7 @@ _freeArrayRef(ArrayRef *node) * ---------------- */ static void -_freeRelOptInfo(RelOptInfo *node) +_freeRelOptInfo(RelOptInfo * node) { /* ---------------- * free remainder of node @@ -757,8 +757,8 @@ FreePathFields(Path *node) else freeObject(node->pathorder->ord.merge); - pfree(node->pathorder); /* is it an object, but we don't have - separate free for it */ + pfree(node->pathorder); /* is it an object, but we don't have + * separate free for it */ freeObject(node->pathkeys); @@ -812,7 +812,7 @@ _freeIndexPath(IndexPath *node) * ---------------- */ static void -FreeNestPathFields(NestPath *node) +FreeNestPathFields(NestPath * node) { freeObject(node->pathinfo); freeObject(node->outerjoinpath); @@ -824,7 +824,7 @@ FreeNestPathFields(NestPath *node) * ---------------- */ static void -_freeNestPath(NestPath *node) +_freeNestPath(NestPath * node) { /* ---------------- * free the node superclass fields @@ -933,7 +933,7 @@ _freeMergeOrder(MergeOrder *node) * ---------------- */ static void -_freeRestrictInfo(RestrictInfo *node) +_freeRestrictInfo(RestrictInfo * node) { /* ---------------- * free remainder of node @@ -950,7 +950,7 @@ _freeRestrictInfo(RestrictInfo *node) /* ---------------- * FreeJoinMethodFields * - * This function frees the fields of the JoinMethod node. It is used by + * This function frees the fields of the JoinMethod node. It is used by * all the free functions for classes which inherit node JoinMethod. * ---------------- */ @@ -979,7 +979,7 @@ _freeJoinMethod(JoinMethod *node) * ---------------- */ static void -_freeHashInfo(HashInfo *node) +_freeHashInfo(HashInfo * node) { /* ---------------- * free remainder of node @@ -995,7 +995,7 @@ _freeHashInfo(HashInfo *node) * ---------------- */ static void -_freeMergeInfo(MergeInfo *node) +_freeMergeInfo(MergeInfo * node) { /* ---------------- * free remainder of node @@ -1012,7 +1012,7 @@ _freeMergeInfo(MergeInfo *node) * ---------------- */ static void -_freeJoinInfo(JoinInfo *node) +_freeJoinInfo(JoinInfo * node) { /* ---------------- * free remainder of node @@ -1066,7 +1066,7 @@ _freeRangeTblEntry(RangeTblEntry *node) } static void -_freeRowMark(RowMark *node) +_freeRowMark(RowMark * node) { pfree(node); } @@ -1142,7 +1142,7 @@ _freeValue(Value *node) { switch (node->type) { - case T_String: + case T_String: pfree(node->val.str); break; default: @@ -1165,6 +1165,7 @@ freeObject(void *node) switch (nodeTag(node)) { + /* * PLAN NODES */ diff --git a/src/backend/nodes/list.c b/src/backend/nodes/list.c index e148e66669d..48c15f1802c 100644 --- a/src/backend/nodes/list.c +++ b/src/backend/nodes/list.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/nodes/list.c,v 1.20 1999/02/22 17:29:57 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/nodes/list.c,v 1.21 1999/05/25 16:09:08 momjian Exp $ * * NOTES * XXX a few of the following functions are duplicated to handle @@ -96,7 +96,7 @@ lconsi(int datum, List *list) * lappend * * Add obj to the end of list, or make a new list if 'list' is NIL - * + * * MORE EXPENSIVE THAN lcons */ List * @@ -161,6 +161,7 @@ nreverse(List *list) lnext(list) = lnext(rlist); return list; } + #endif /* @@ -307,6 +308,7 @@ append(List *l1, List *l2) lnext(p) = newlist2; return newlist; } + #endif #ifdef NOT_USED @@ -331,6 +333,7 @@ intAppend(List *l1, List *l2) lnext(p) = newlist2; return newlist; } + #endif /* @@ -435,7 +438,7 @@ member(void *l1, List *l2) foreach(i, l2) if (equal((Node *) l1, (Node *) lfirst(i))) - return true; + return true; return false; } diff --git a/src/backend/nodes/outfuncs.c b/src/backend/nodes/outfuncs.c index f3dec72128b..43fa22e0451 100644 --- a/src/backend/nodes/outfuncs.c +++ b/src/backend/nodes/outfuncs.c @@ -5,7 +5,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: outfuncs.c,v 1.84 1999/05/19 16:46:11 momjian Exp $ + * $Id: outfuncs.c,v 1.85 1999/05/25 16:09:09 momjian Exp $ * * NOTES * Every (plan) node in POSTGRES has an associated "out" routine which @@ -54,24 +54,22 @@ static void _outNode(StringInfo str, void *obj); static void _outIntList(StringInfo str, List *list) { - List *l; + List *l; appendStringInfo(str, "("); foreach(l, list) - { appendStringInfo(str, " %d ", lfirsti(l)); - } appendStringInfo(str, ")"); } static void _outCreateStmt(StringInfo str, CreateStmt *node) { - appendStringInfo(str, " CREATE :relname %s ", - stringStringInfo(node->relname)); + appendStringInfo(str, " CREATE :relname %s ", + stringStringInfo(node->relname)); appendStringInfo(str, " :istemp %s ", - node->istemp ? "true" : "false"); + node->istemp ? "true" : "false"); appendStringInfo(str, " :columns "); _outNode(str, node->tableElts); @@ -86,11 +84,11 @@ _outCreateStmt(StringInfo str, CreateStmt *node) static void _outIndexStmt(StringInfo str, IndexStmt *node) { - appendStringInfo(str, - " INDEX :idxname %s :relname %s :accessMethod %s :indexParams ", - stringStringInfo(node->idxname), - stringStringInfo(node->relname), - stringStringInfo(node->accessMethod)); + appendStringInfo(str, + " INDEX :idxname %s :relname %s :accessMethod %s :indexParams ", + stringStringInfo(node->idxname), + stringStringInfo(node->relname), + stringStringInfo(node->accessMethod)); _outNode(str, node->indexParams); appendStringInfo(str, " :withClause "); @@ -103,8 +101,8 @@ _outIndexStmt(StringInfo str, IndexStmt *node) _outNode(str, node->rangetable); appendStringInfo(str, " :lossy %s :unique %s ", - node->lossy ? "true" : "false", - node->unique ? "true" : "false"); + node->lossy ? "true" : "false", + node->unique ? "true" : "false"); } static void @@ -125,24 +123,24 @@ static void _outColumnDef(StringInfo str, ColumnDef *node) { appendStringInfo(str, " COLUMNDEF :colname %s :typename ", - stringStringInfo(node->colname)); + stringStringInfo(node->colname)); _outNode(str, node->typename); appendStringInfo(str, " :is_not_null %s :defval %s :constraints ", - node->is_not_null ? "true" : "false", - stringStringInfo(node->defval)); + node->is_not_null ? "true" : "false", + stringStringInfo(node->defval)); _outNode(str, node->constraints); } static void _outTypeName(StringInfo str, TypeName *node) { - appendStringInfo(str, - " TYPENAME :name %s :timezone %s :setof %s typmod %d :arrayBounds ", - stringStringInfo(node->name), - node->timezone ? "true" : "false", - node->setof ? "true" : "false", - node->typmod); + appendStringInfo(str, + " TYPENAME :name %s :timezone %s :setof %s typmod %d :arrayBounds ", + stringStringInfo(node->name), + node->timezone ? "true" : "false", + node->setof ? "true" : "false", + node->typmod); appendStringInfo(str, " :arrayBounds "); _outNode(str, node->arrayBounds); @@ -152,7 +150,7 @@ static void _outIndexElem(StringInfo str, IndexElem *node) { appendStringInfo(str, " INDEXELEM :name %s :args ", - stringStringInfo(node->name)); + stringStringInfo(node->name)); _outNode(str, node->args); appendStringInfo(str, " :class %s :typename ", stringStringInfo(node->class)); @@ -171,20 +169,20 @@ _outQuery(StringInfo str, Query *node) { case T_CreateStmt: appendStringInfo(str, " :create %s ", - stringStringInfo(((CreateStmt *) (node->utilityStmt))->relname)); + stringStringInfo(((CreateStmt *) (node->utilityStmt))->relname)); _outNode(str, node->utilityStmt); break; case T_IndexStmt: appendStringInfo(str, " :index %s on %s ", - stringStringInfo(((IndexStmt *) (node->utilityStmt))->idxname), - stringStringInfo(((IndexStmt *) (node->utilityStmt))->relname)); + stringStringInfo(((IndexStmt *) (node->utilityStmt))->idxname), + stringStringInfo(((IndexStmt *) (node->utilityStmt))->relname)); _outNode(str, node->utilityStmt); break; case T_NotifyStmt: appendStringInfo(str, " :utility %s ", - stringStringInfo(((NotifyStmt *) (node->utilityStmt))->relname)); + stringStringInfo(((NotifyStmt *) (node->utilityStmt))->relname)); break; default: @@ -192,21 +190,19 @@ _outQuery(StringInfo str, Query *node) } } else - { appendStringInfo(str, " :utility <>"); - } - appendStringInfo(str, - " :resultRelation %u :into %s :isPortal %s :isBinary %s :isTemp %s :unionall %s ", - node->resultRelation, - stringStringInfo(node->into), - node->isPortal ? "true" : "false", - node->isBinary ? "true" : "false", - node->isTemp ? "true" : "false", - node->unionall ? "true" : "false"); - - appendStringInfo(str, " :unique %s :sortClause ", - stringStringInfo(node->uniqueFlag)); + appendStringInfo(str, + " :resultRelation %u :into %s :isPortal %s :isBinary %s :isTemp %s :unionall %s ", + node->resultRelation, + stringStringInfo(node->into), + node->isPortal ? "true" : "false", + node->isBinary ? "true" : "false", + node->isTemp ? "true" : "false", + node->unionall ? "true" : "false"); + + appendStringInfo(str, " :unique %s :sortClause ", + stringStringInfo(node->uniqueFlag)); _outNode(str, node->sortClause); appendStringInfo(str, " :rtable "); @@ -225,8 +221,8 @@ _outQuery(StringInfo str, Query *node) _outNode(str, node->havingQual); appendStringInfo(str, " :hasAggs %s :hasSubLinks %s :unionClause ", - node->hasAggs ? "true" : "false", - node->hasSubLinks ? "true" : "false"); + node->hasAggs ? "true" : "false", + node->hasSubLinks ? "true" : "false"); _outNode(str, node->unionClause); appendStringInfo(str, " :intersectClause "); @@ -255,9 +251,9 @@ _outSortClause(StringInfo str, SortClause *node) static void _outGroupClause(StringInfo str, GroupClause *node) { - appendStringInfo(str, " GROUPCLAUSE :grpOpoid %u :tleGroupref %d", - node->grpOpoid, - node->tleGroupref); + appendStringInfo(str, " GROUPCLAUSE :grpOpoid %u :tleGroupref %d", + node->grpOpoid, + node->tleGroupref); } /* @@ -266,12 +262,12 @@ _outGroupClause(StringInfo str, GroupClause *node) static void _outPlanInfo(StringInfo str, Plan *node) { - appendStringInfo(str, - ":cost %g :size %d :width %d :state %s :qptargetlist ", - node->cost, - node->plan_size, - node->plan_width, - node->state ? "not-NULL" : "<>"); + appendStringInfo(str, + ":cost %g :size %d :width %d :state %s :qptargetlist ", + node->cost, + node->plan_size, + node->plan_width, + node->state ? "not-NULL" : "<>"); _outNode(str, node->targetlist); appendStringInfo(str, " :qpqual "); @@ -331,9 +327,9 @@ _outAppend(StringInfo str, Append *node) appendStringInfo(str, " :unionrtables "); _outNode(str, node->unionrtables); - appendStringInfo(str, - " :inheritrelid %u :inheritrtable ", - node->inheritrelid); + appendStringInfo(str, + " :inheritrelid %u :inheritrtable ", + node->inheritrelid); _outNode(str, node->inheritrtable); } @@ -384,13 +380,13 @@ _outHashJoin(StringInfo str, HashJoin *node) appendStringInfo(str, " :hashclauses "); _outNode(str, node->hashclauses); - appendStringInfo(str, - " :hashjoinop %u ", - node->hashjoinop); + appendStringInfo(str, + " :hashjoinop %u ", + node->hashjoinop); - appendStringInfo(str, - " :hashdone %d ", - node->hashdone); + appendStringInfo(str, + " :hashdone %d ", + node->hashdone); } static void @@ -460,14 +456,14 @@ _outIndexScan(StringInfo str, IndexScan *node) * Noname is a subclass of Plan */ static void -_outNoname(StringInfo str, Noname *node) +_outNoname(StringInfo str, Noname * node) { appendStringInfo(str, " NONAME "); _outPlanInfo(str, (Plan *) node); - appendStringInfo(str, " :nonameid %u :keycount %d ", - node->nonameid, - node->keycount); + appendStringInfo(str, " :nonameid %u :keycount %d ", + node->nonameid, + node->keycount); } /* @@ -480,8 +476,8 @@ _outSort(StringInfo str, Sort *node) _outPlanInfo(str, (Plan *) node); appendStringInfo(str, " :nonameid %u :keycount %d ", - node->nonameid, - node->keycount); + node->nonameid, + node->keycount); } static void @@ -503,8 +499,8 @@ _outGroup(StringInfo str, Group *node) /* the actual Group fields */ appendStringInfo(str, " :numCols %d :tuplePerGroup %s ", - node->numCols, - node->tuplePerGroup ? "true" : "false"); + node->numCols, + node->tuplePerGroup ? "true" : "false"); } /* @@ -517,8 +513,8 @@ _outUnique(StringInfo str, Unique *node) _outPlanInfo(str, (Plan *) node); appendStringInfo(str, " :nonameid %u :keycount %d ", - node->nonameid, - node->keycount); + node->nonameid, + node->keycount); } @@ -548,18 +544,18 @@ static void _outResdom(StringInfo str, Resdom *node) { appendStringInfo(str, " RESDOM :resno %d :restype %u :restypmod %d", - node->resno, - node->restype, - node->restypmod); + node->resno, + node->restype, + node->restypmod); appendStringInfo(str, " :resname \"%s\" :reskey %d :reskeyop %u", - stringStringInfo(node->resname), - node->reskey, - node->reskeyop); + stringStringInfo(node->resname), + node->reskey, + node->reskeyop); appendStringInfo(str, " :resgroupref %d :resjunk %s ", - node->resgroupref, - node->resjunk ? "true" : "false"); + node->resgroupref, + node->resjunk ? "true" : "false"); } static void @@ -568,14 +564,14 @@ _outFjoin(StringInfo str, Fjoin *node) int i; appendStringInfo(str, " FJOIN :initialized %s :nNodes %d ", - node->fj_initialized ? "true" : "false", - node->fj_nNodes); + node->fj_initialized ? "true" : "false", + node->fj_nNodes); appendStringInfo(str, " :innerNode "); _outNode(str, node->fj_innerNode); - appendStringInfo(str, " :results @ 0x%x :alwaysdone", - (int) node->fj_results); + appendStringInfo(str, " :results @ 0x%x :alwaysdone", + (int) node->fj_results); for (i = 0; i < node->fj_nNodes; i++) appendStringInfo(str, (node->fj_alwaysDone[i]) ? "true" : "false"); @@ -590,7 +586,7 @@ _outExpr(StringInfo str, Expr *node) char *opstr = NULL; appendStringInfo(str, " EXPR :typeOid %u ", - node->typeOid); + node->typeOid); switch (node->opType) { @@ -626,17 +622,17 @@ _outExpr(StringInfo str, Expr *node) static void _outVar(StringInfo str, Var *node) { - appendStringInfo(str, - " VAR :varno %d :varattno %d :vartype %u :vartypmod %d ", - node->varno, - node->varattno, - node->vartype, - node->vartypmod); + appendStringInfo(str, + " VAR :varno %d :varattno %d :vartype %u :vartypmod %d ", + node->varno, + node->varattno, + node->vartype, + node->vartypmod); - appendStringInfo(str, " :varlevelsup %u :varnoold %d :varoattno %d" , - node->varlevelsup, - node->varnoold, - node->varoattno); + appendStringInfo(str, " :varlevelsup %u :varnoold %d :varoattno %d", + node->varlevelsup, + node->varnoold, + node->varoattno); } /* @@ -645,37 +641,37 @@ _outVar(StringInfo str, Var *node) static void _outConst(StringInfo str, Const *node) { - appendStringInfo(str, - " CONST :consttype %u :constlen %d :constisnull %s :constvalue ", - node->consttype, - node->constlen, - node->constisnull ? "true" : "false"); + appendStringInfo(str, + " CONST :consttype %u :constlen %d :constisnull %s :constvalue ", + node->consttype, + node->constlen, + node->constisnull ? "true" : "false"); if (node->constisnull) appendStringInfo(str, "<>"); else _outDatum(str, node->constvalue, node->consttype); - appendStringInfo(str, " :constbyval %s ", - node->constbyval ? "true" : "false"); + appendStringInfo(str, " :constbyval %s ", + node->constbyval ? "true" : "false"); } /* * Aggref */ static void -_outAggref(StringInfo str, Aggref *node) +_outAggref(StringInfo str, Aggref * node) { - appendStringInfo(str, - " AGGREG :aggname %s :basetype %u :aggtype %u :target ", - stringStringInfo(node->aggname), - node->basetype, - node->aggtype); + appendStringInfo(str, + " AGGREG :aggname %s :basetype %u :aggtype %u :target ", + stringStringInfo(node->aggname), + node->basetype, + node->aggtype); _outNode(str, node->target); appendStringInfo(str, ":aggno %d :usenulls %s", - node->aggno, - node->usenulls ? "true" : "false"); + node->aggno, + node->usenulls ? "true" : "false"); } /* @@ -684,10 +680,10 @@ _outAggref(StringInfo str, Aggref *node) static void _outSubLink(StringInfo str, SubLink *node) { - appendStringInfo(str, - " SUBLINK :subLinkType %d :useor %s :lefthand ", - node->subLinkType, - node->useor ? "true" : "false"); + appendStringInfo(str, + " SUBLINK :subLinkType %d :useor %s :lefthand ", + node->subLinkType, + node->useor ? "true" : "false"); _outNode(str, node->lefthand); appendStringInfo(str, " :oper "); @@ -705,22 +701,18 @@ _outArray(StringInfo str, Array *node) { int i; - appendStringInfo(str, - " ARRAY :arrayelemtype %u :arrayelemlength %d :arrayelembyval %c ", - node->arrayelemtype, - node->arrayelemlength, - node->arrayelembyval ? 't' : 'f'); + appendStringInfo(str, + " ARRAY :arrayelemtype %u :arrayelemlength %d :arrayelembyval %c ", + node->arrayelemtype, + node->arrayelemlength, + node->arrayelembyval ? 't' : 'f'); appendStringInfo(str, " :arrayndim %d :arraylow ", node->arrayndim); for (i = 0; i < node->arrayndim; i++) - { appendStringInfo(str, " %d ", node->arraylow.indx[i]); - } appendStringInfo(str, " :arrayhigh "); for (i = 0; i < node->arrayndim; i++) - { appendStringInfo(str, " %d ", node->arrayhigh.indx[i]); - } appendStringInfo(str, " :arraylen %d ", node->arraylen); } @@ -730,14 +722,14 @@ _outArray(StringInfo str, Array *node) static void _outArrayRef(StringInfo str, ArrayRef *node) { - appendStringInfo(str, - " ARRAYREF :refelemtype %u :refattrlength $d :refelemlength %d ", - node->refelemtype, - node->refattrlength, - node->refelemlength); + appendStringInfo(str, + " ARRAYREF :refelemtype %u :refattrlength $d :refelemlength %d ", + node->refelemtype, + node->refattrlength, + node->refelemlength); - appendStringInfo(str, " :refelembyval %c :refupperindex ", - node->refelembyval ? 't' : 'f'); + appendStringInfo(str, " :refelembyval %c :refupperindex ", + node->refelembyval ? 't' : 'f'); _outNode(str, node->refupperindexpr); appendStringInfo(str, " :reflowerindex "); @@ -756,15 +748,15 @@ _outArrayRef(StringInfo str, ArrayRef *node) static void _outFunc(StringInfo str, Func *node) { - appendStringInfo(str, - " FUNC :funcid %u :functype %u :funcisindex %s :funcsize %d ", - node->funcid, - node->functype, - node->funcisindex ? "true" : "false", - node->funcsize); + appendStringInfo(str, + " FUNC :funcid %u :functype %u :funcisindex %s :funcsize %d ", + node->funcid, + node->functype, + node->funcisindex ? "true" : "false", + node->funcsize); appendStringInfo(str, " :func_fcache @ 0x%x :func_tlist ", - (int) node->func_fcache); + (int) node->func_fcache); _outNode(str, node->func_tlist); appendStringInfo(str, " :func_planlist "); @@ -777,11 +769,11 @@ _outFunc(StringInfo str, Func *node) static void _outOper(StringInfo str, Oper *node) { - appendStringInfo(str, - " OPER :opno %u :opid %u :opresulttype %u ", - node->opno, - node->opid, - node->opresulttype); + appendStringInfo(str, + " OPER :opno %u :opid %u :opresulttype %u ", + node->opno, + node->opid, + node->opresulttype); } /* @@ -790,12 +782,12 @@ _outOper(StringInfo str, Oper *node) static void _outParam(StringInfo str, Param *node) { - appendStringInfo(str, - " PARAM :paramkind %d :paramid %d :paramname %s :paramtype %u ", - node->paramkind, - node->paramid, - stringStringInfo(node->paramname), - node->paramtype); + appendStringInfo(str, + " PARAM :paramkind %d :paramid %d :paramname %s :paramtype %u ", + node->paramkind, + node->paramid, + stringStringInfo(node->paramname), + node->paramtype); appendStringInfo(str, " :param_tlist "); _outNode(str, node->param_tlist); @@ -811,31 +803,31 @@ _outParam(StringInfo str, Param *node) static void _outEState(StringInfo str, EState *node) { - appendStringInfo(str, - " ESTATE :direction %d :range_table ", - node->es_direction); + appendStringInfo(str, + " ESTATE :direction %d :range_table ", + node->es_direction); _outNode(str, node->es_range_table); appendStringInfo(str, " :result_relation_info @ 0x%x ", - (int) (node->es_result_relation_info)); + (int) (node->es_result_relation_info)); } /* * Stuff from relation.h */ static void -_outRelOptInfo(StringInfo str, RelOptInfo *node) +_outRelOptInfo(StringInfo str, RelOptInfo * node) { appendStringInfo(str, " RELOPTINFO :relids "); _outIntList(str, node->relids); - appendStringInfo(str, - " :indexed %s :pages %u :tuples %u :size %u :width %u :targetlist ", - node->indexed ? "true" : "false", - node->pages, - node->tuples, - node->size, - node->width); + appendStringInfo(str, + " :indexed %s :pages %u :tuples %u :size %u :width %u :targetlist ", + node->indexed ? "true" : "false", + node->pages, + node->tuples, + node->size, + node->width); _outNode(str, node->targetlist); appendStringInfo(str, " :pathlist "); @@ -847,10 +839,10 @@ _outRelOptInfo(StringInfo str, RelOptInfo *node) * This can be changed later, if necessary. */ - appendStringInfo(str, - " :cheapestpath @ 0x%x :pruneable %s :restrictinfo ", - (int) node->cheapestpath, - node->pruneable ? "true" : "false"); + appendStringInfo(str, + " :cheapestpath @ 0x%x :pruneable %s :restrictinfo ", + (int) node->cheapestpath, + node->pruneable ? "true" : "false"); _outNode(str, node->restrictinfo); appendStringInfo(str, " :joininfo "); @@ -876,18 +868,18 @@ _outTargetEntry(StringInfo str, TargetEntry *node) static void _outRangeTblEntry(StringInfo str, RangeTblEntry *node) { - appendStringInfo(str, - " RTE :relname %s :refname %s :relid %u :inh %s :inFromCl %s :skipAcl %s", - stringStringInfo(node->relname), - stringStringInfo(node->refname), - node->relid, - node->inh ? "true" : "false", - node->inFromCl ? "true" : "false", - node->skipAcl ? "true" : "false"); + appendStringInfo(str, + " RTE :relname %s :refname %s :relid %u :inh %s :inFromCl %s :skipAcl %s", + stringStringInfo(node->relname), + stringStringInfo(node->refname), + node->relid, + node->inh ? "true" : "false", + node->inFromCl ? "true" : "false", + node->skipAcl ? "true" : "false"); } static void -_outRowMark(StringInfo str, RowMark *node) +_outRowMark(StringInfo str, RowMark * node) { appendStringInfo(str, " ROWMARK :rti %u :info %u", node->rti, node->info); } @@ -899,17 +891,17 @@ static void _outPathOrder(StringInfo str, PathOrder *node) { appendStringInfo(str, " PATHORDER :ordtype %d ", - node->ordtype); + node->ordtype); if (node->ordtype == SORTOP_ORDER) { - int i; - + int i; + appendStringInfo(str, " :sortop "); if (node->ord.sortop == NULL) appendStringInfo(str, "<>"); else { - for (i=0; node->ord.sortop[i] != 0; i++) + for (i = 0; node->ord.sortop[i] != 0; i++) appendStringInfo(str, " %d ", node->ord.sortop[i]); appendStringInfo(str, " %d ", 0); } @@ -917,7 +909,7 @@ _outPathOrder(StringInfo str, PathOrder *node) else { appendStringInfo(str, " :merge "); - _outNode(str,node->ord.merge); + _outNode(str, node->ord.merge); } } @@ -928,8 +920,8 @@ static void _outPath(StringInfo str, Path *node) { appendStringInfo(str, " PATH :pathtype %d :cost %f :pathkeys ", - node->pathtype, - node->path_cost); + node->pathtype, + node->path_cost); _outNode(str, node->pathkeys); appendStringInfo(str, " :pathorder "); @@ -942,10 +934,10 @@ _outPath(StringInfo str, Path *node) static void _outIndexPath(StringInfo str, IndexPath *node) { - appendStringInfo(str, - " INDEXPATH :pathtype %d :cost %f :pathkeys ", - node->path.pathtype, - node->path.path_cost); + appendStringInfo(str, + " INDEXPATH :pathtype %d :cost %f :pathkeys ", + node->path.pathtype, + node->path.path_cost); _outNode(str, node->path.pathkeys); appendStringInfo(str, " :pathorder "); @@ -962,17 +954,17 @@ _outIndexPath(StringInfo str, IndexPath *node) * NestPath is a subclass of Path */ static void -_outNestPath(StringInfo str, NestPath *node) +_outNestPath(StringInfo str, NestPath * node) { - appendStringInfo(str, - " NESTPATH :pathtype %d :cost %f :pathkeys ", - node->path.pathtype, - node->path.path_cost); + appendStringInfo(str, + " NESTPATH :pathtype %d :cost %f :pathkeys ", + node->path.pathtype, + node->path.path_cost); _outNode(str, node->path.pathkeys); appendStringInfo(str, " :pathorder "); _outNode(str, node->path.pathorder); - + appendStringInfo(str, " :pathinfo "); _outNode(str, node->pathinfo); @@ -981,11 +973,11 @@ _outNestPath(StringInfo str, NestPath *node) * For now, i'll just print the addresses. */ - appendStringInfo(str, - " :outerjoinpath @ 0x%x :innerjoinpath @ 0x%x :outjoincost %f :joinid ", - (int) node->outerjoinpath, - (int) node->innerjoinpath, - node->path.outerjoincost); + appendStringInfo(str, + " :outerjoinpath @ 0x%x :innerjoinpath @ 0x%x :outjoincost %f :joinid ", + (int) node->outerjoinpath, + (int) node->innerjoinpath, + node->path.outerjoincost); _outIntList(str, node->path.joinid); } @@ -995,15 +987,15 @@ _outNestPath(StringInfo str, NestPath *node) static void _outMergePath(StringInfo str, MergePath *node) { - appendStringInfo(str, - " MERGEPATH :pathtype %d :cost %f :pathkeys ", - node->jpath.path.pathtype, - node->jpath.path.path_cost); + appendStringInfo(str, + " MERGEPATH :pathtype %d :cost %f :pathkeys ", + node->jpath.path.pathtype, + node->jpath.path.path_cost); _outNode(str, node->jpath.path.pathkeys); appendStringInfo(str, " :pathorder "); _outNode(str, node->jpath.path.pathorder); - + appendStringInfo(str, " :pathinfo "); _outNode(str, node->jpath.pathinfo); @@ -1012,11 +1004,11 @@ _outMergePath(StringInfo str, MergePath *node) * For now, i'll just print the addresses. */ - appendStringInfo(str, - " :outerjoinpath @ 0x%x :innerjoinpath @ 0x%x :outerjoincost %f :joinid ", - (int) node->jpath.outerjoinpath, - (int) node->jpath.innerjoinpath, - (int) node->jpath.path.outerjoincost); + appendStringInfo(str, + " :outerjoinpath @ 0x%x :innerjoinpath @ 0x%x :outerjoincost %f :joinid ", + (int) node->jpath.outerjoinpath, + (int) node->jpath.innerjoinpath, + (int) node->jpath.path.outerjoincost); _outIntList(str, node->jpath.path.joinid); appendStringInfo(str, " :path_mergeclauses "); @@ -1035,10 +1027,10 @@ _outMergePath(StringInfo str, MergePath *node) static void _outHashPath(StringInfo str, HashPath *node) { - appendStringInfo(str, - " HASHPATH :pathtype %d :cost %f :pathkeys ", - node->jpath.path.pathtype, - node->jpath.path.path_cost); + appendStringInfo(str, + " HASHPATH :pathtype %d :cost %f :pathkeys ", + node->jpath.path.pathtype, + node->jpath.path.path_cost); _outNode(str, node->jpath.path.pathkeys); appendStringInfo(str, " :pathorder "); @@ -1052,11 +1044,11 @@ _outHashPath(StringInfo str, HashPath *node) * For now, i'll just print the addresses. */ - appendStringInfo(str, - " :outerjoinpath @ 0x%x :innerjoinpath @ 0x%x :outerjoincost %f :joinid ", - (int) node->jpath.outerjoinpath, - (int) node->jpath.innerjoinpath, - node->jpath.path.outerjoincost); + appendStringInfo(str, + " :outerjoinpath @ 0x%x :innerjoinpath @ 0x%x :outerjoincost %f :joinid ", + (int) node->jpath.outerjoinpath, + (int) node->jpath.innerjoinpath, + node->jpath.path.outerjoincost); _outIntList(str, node->jpath.path.joinid); appendStringInfo(str, " :path_hashclauses "); @@ -1075,10 +1067,10 @@ _outHashPath(StringInfo str, HashPath *node) static void _outOrderKey(StringInfo str, OrderKey *node) { - appendStringInfo(str, - " ORDERKEY :attribute_number %d :array_index %d ", - node->attribute_number, - node->array_index); + appendStringInfo(str, + " ORDERKEY :attribute_number %d :array_index %d ", + node->attribute_number, + node->array_index); } /* @@ -1101,31 +1093,31 @@ _outJoinKey(StringInfo str, JoinKey *node) static void _outMergeOrder(StringInfo str, MergeOrder *node) { - appendStringInfo(str, - " MERGEORDER :join_operator %u :left_operator %u :right_operator %u ", - node->join_operator, - node->left_operator, - node->right_operator); + appendStringInfo(str, + " MERGEORDER :join_operator %u :left_operator %u :right_operator %u ", + node->join_operator, + node->left_operator, + node->right_operator); - appendStringInfo(str, - " :left_type %u :right_type %u ", - node->left_type, - node->right_type); + appendStringInfo(str, + " :left_type %u :right_type %u ", + node->left_type, + node->right_type); } /* * RestrictInfo is a subclass of Node. */ static void -_outRestrictInfo(StringInfo str, RestrictInfo *node) +_outRestrictInfo(StringInfo str, RestrictInfo * node) { appendStringInfo(str, " RESTRICTINFO :clause "); _outNode(str, node->clause); - appendStringInfo(str, - " :selectivity %f :notclause %s :indexids ", - node->selectivity, - node->notclause ? "true" : "false"); + appendStringInfo(str, + " :selectivity %f :notclause %s :indexids ", + node->selectivity, + node->notclause ? "true" : "false"); _outNode(str, node->indexids); appendStringInfo(str, " :mergejoinorder "); @@ -1152,7 +1144,7 @@ _outJoinMethod(StringInfo str, JoinMethod *node) * HashInfo is a subclass of JoinMethod. */ static void -_outHashInfo(StringInfo str, HashInfo *node) +_outHashInfo(StringInfo str, HashInfo * node) { appendStringInfo(str, " HASHINFO :hashop %u :jmkeys ", node->hashop); _outNode(str, node->jmethod.jmkeys); @@ -1165,7 +1157,7 @@ _outHashInfo(StringInfo str, HashInfo *node) * JoinInfo is a subclass of Node. */ static void -_outJoinInfo(StringInfo str, JoinInfo *node) +_outJoinInfo(StringInfo str, JoinInfo * node) { appendStringInfo(str, " JINFO :unjoined_relids "); _outIntList(str, node->unjoined_relids); @@ -1174,8 +1166,8 @@ _outJoinInfo(StringInfo str, JoinInfo *node) _outNode(str, node->jinfo_restrictinfo); appendStringInfo(str, " :mergejoinable %s :hashjoinable %s ", - node->mergejoinable ? "true" : "false", - node->hashjoinable ? "true" : "false"); + node->mergejoinable ? "true" : "false", + node->hashjoinable ? "true" : "false"); } /* @@ -1184,9 +1176,9 @@ _outJoinInfo(StringInfo str, JoinInfo *node) static void _outDatum(StringInfo str, Datum value, Oid type) { - char *s; + char *s; Size length, - typeLength; + typeLength; bool byValue; int i; @@ -1213,6 +1205,7 @@ _outDatum(StringInfo str, Datum value, Oid type) appendStringInfo(str, " 0 [ ] "); else { + /* * length is unsigned - very bad to do < comparison to -1 * without casting it to int first!! -mer 8 Jan 1991 @@ -1221,9 +1214,7 @@ _outDatum(StringInfo str, Datum value, Oid type) length = VARSIZE(s); appendStringInfo(str, " %d [ ", length); for (i = 0; i < length; i++) - { appendStringInfo(str, " %d ", (int) (s[i])); - } appendStringInfo(str, "] "); } } @@ -1239,19 +1230,19 @@ _outIter(StringInfo str, Iter *node) static void _outStream(StringInfo str, Stream *node) { - appendStringInfo(str, - " STREAM :pathptr @ 0x%x :cinfo @ 0x%x :clausetype %d :upstream @ 0x%x ", - (int) node->pathptr, - (int) node->cinfo, - (int) node->clausetype, - (int) node->upstream); + appendStringInfo(str, + " STREAM :pathptr @ 0x%x :cinfo @ 0x%x :clausetype %d :upstream @ 0x%x ", + (int) node->pathptr, + (int) node->cinfo, + (int) node->clausetype, + (int) node->upstream); - appendStringInfo(str, - " :downstream @ 0x%x :groupup %d :groupcost %f :groupsel %f ", - (int) node->downstream, - node->groupup, - node->groupcost, - node->groupsel); + appendStringInfo(str, + " :downstream @ 0x%x :groupup %d :groupcost %f :groupsel %f ", + (int) node->downstream, + node->groupup, + node->groupcost, + node->groupsel); } static void @@ -1289,7 +1280,7 @@ _outValue(StringInfo str, Value *value) { switch (value->type) { - case T_String: + case T_String: appendStringInfo(str, " \"%s\" ", stringStringInfo(value->val.str)); break; case T_Integer: @@ -1340,7 +1331,7 @@ _outAConst(StringInfo str, A_Const *node) static void _outConstraint(StringInfo str, Constraint *node) { - appendStringInfo(str," %s :type", stringStringInfo(node->name)); + appendStringInfo(str, " %s :type", stringStringInfo(node->name)); switch (node->contype) { @@ -1374,7 +1365,7 @@ _outConstraint(StringInfo str, Constraint *node) } static void -_outCaseExpr(StringInfo str, CaseExpr *node) +_outCaseExpr(StringInfo str, CaseExpr * node) { appendStringInfo(str, "CASE "); _outNode(str, node->args); @@ -1386,7 +1377,7 @@ _outCaseExpr(StringInfo str, CaseExpr *node) } static void -_outCaseWhen(StringInfo str, CaseWhen *node) +_outCaseWhen(StringInfo str, CaseWhen * node) { appendStringInfo(str, " WHEN "); _outNode(str, node->expr); @@ -1653,7 +1644,7 @@ _outNode(StringInfo str, void *obj) char * nodeToString(void *obj) { - StringInfoData str; + StringInfoData str; /* see stringinfo.h for an explanation of this maneuver */ initStringInfo(&str); diff --git a/src/backend/nodes/print.c b/src/backend/nodes/print.c index 97d3c46a8e6..4e8f767bbf3 100644 --- a/src/backend/nodes/print.c +++ b/src/backend/nodes/print.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/nodes/print.c,v 1.27 1999/05/10 00:45:13 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/nodes/print.c,v 1.28 1999/05/25 16:09:10 momjian Exp $ * * HISTORY * AUTHOR DATE MAJOR EVENT @@ -218,17 +218,19 @@ print_expr(Node *expr, List *rtable) void print_pathkeys(List *pathkeys, List *rtable) { - List *i, *k; + List *i, + *k; printf("("); foreach(i, pathkeys) { - List *pathkey = lfirst(i); + List *pathkey = lfirst(i); printf("("); foreach(k, pathkey) { Node *var = lfirst(k); + print_expr(var, rtable); if (lnext(k)) printf(", "); @@ -241,7 +243,7 @@ print_pathkeys(List *pathkeys, List *rtable) } /* - * print_tl + * print_tl * print targetlist in a more legible way. */ void diff --git a/src/backend/nodes/readfuncs.c b/src/backend/nodes/readfuncs.c index 82ccdd2dac9..b5e8d94c934 100644 --- a/src/backend/nodes/readfuncs.c +++ b/src/backend/nodes/readfuncs.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/nodes/readfuncs.c,v 1.63 1999/05/18 21:34:29 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/nodes/readfuncs.c,v 1.64 1999/05/25 16:09:11 momjian Exp $ * * NOTES * Most of the read functions for plan nodes are tested. (In fact, they @@ -169,9 +169,9 @@ _readQuery() local_node->unionClause = nodeRead(true); /***S*I***/ - token = lsptok(NULL, &length); /* skip :intersectClause */ - local_node->intersectClause = nodeRead(true); - + token = lsptok(NULL, &length); /* skip :intersectClause */ + local_node->intersectClause = nodeRead(true); + token = lsptok(NULL, &length); /* skip :limitOffset */ local_node->limitOffset = nodeRead(true); @@ -544,7 +544,7 @@ _readIndexScan() local_node->indxqual = nodeRead(true); /* now read it */ token = lsptok(NULL, &length); /* eat :indxqualorig */ - local_node->indxqualorig = nodeRead(true); /* now read it */ + local_node->indxqualorig = nodeRead(true); /* now read it */ return local_node; } @@ -1407,7 +1407,7 @@ _readRangeTblEntry() static RowMark * _readRowMark() { - RowMark *local_node = makeNode(RowMark); + RowMark *local_node = makeNode(RowMark); char *token; int length; @@ -1431,7 +1431,7 @@ _readRowMark() static PathOrder * _readPathOrder() { - PathOrder *local_node; + PathOrder *local_node; char *token; int length; @@ -1443,17 +1443,18 @@ _readPathOrder() if (local_node->ordtype == SORTOP_ORDER) { - token = lsptok(NULL, &length); /* get :sortop */ + token = lsptok(NULL, &length); /* get :sortop */ if (length == 0) local_node->ord.sortop = NULL; else { - int i = -1; - - local_node->ord.sortop = palloc(sizeof(Oid) * (INDEX_MAX_KEYS+1)); - - do { + int i = -1; + + local_node->ord.sortop = palloc(sizeof(Oid) * (INDEX_MAX_KEYS + 1)); + + do + { i++; Assert(i <= INDEX_MAX_KEYS); token = lsptok(NULL, &length); /* now read it */ @@ -1463,7 +1464,7 @@ _readPathOrder() } else { - token = lsptok(NULL, &length); /* get :merge */ + token = lsptok(NULL, &length); /* get :merge */ local_node->ord.merge = nodeRead(true); /* now read it */ } @@ -1494,10 +1495,10 @@ _readPath() local_node->path_cost = (Cost) atof(token); token = lsptok(NULL, &length); /* get :pathorder */ - local_node->pathorder = nodeRead(true); /* now read it */ + local_node->pathorder = nodeRead(true); /* now read it */ token = lsptok(NULL, &length); /* get :pathkeys */ - local_node->pathkeys = nodeRead(true); /* now read it */ + local_node->pathkeys = nodeRead(true); /* now read it */ return local_node; } @@ -1526,10 +1527,10 @@ _readIndexPath() local_node->path.path_cost = (Cost) atof(token); token = lsptok(NULL, &length); /* get :pathorder */ - local_node->path.pathorder = nodeRead(true); /* now read it */ + local_node->path.pathorder = nodeRead(true); /* now read it */ token = lsptok(NULL, &length); /* get :pathkeys */ - local_node->path.pathkeys = nodeRead(true); /* now read it */ + local_node->path.pathkeys = nodeRead(true); /* now read it */ token = lsptok(NULL, &length); /* get :indexid */ local_node->indexid = toIntList(nodeRead(true)); @@ -1568,7 +1569,7 @@ _readNestPath() local_node->path.pathorder = nodeRead(true); /* now read it */ token = lsptok(NULL, &length); /* get :pathkeys */ - local_node->path.pathkeys = nodeRead(true); /* now read it */ + local_node->path.pathkeys = nodeRead(true); /* now read it */ token = lsptok(NULL, &length); /* get :pathinfo */ local_node->pathinfo = nodeRead(true); /* now read it */ @@ -1630,13 +1631,13 @@ _readMergePath() local_node->jpath.path.path_cost = (Cost) atof(token); token = lsptok(NULL, &length); /* get :pathorder */ - local_node->jpath.path.pathorder = nodeRead(true); /* now read it */ + local_node->jpath.path.pathorder = nodeRead(true); /* now read it */ token = lsptok(NULL, &length); /* get :pathkeys */ - local_node->jpath.path.pathkeys = nodeRead(true); /* now read it */ + local_node->jpath.path.pathkeys = nodeRead(true); /* now read it */ token = lsptok(NULL, &length); /* get :pathinfo */ - local_node->jpath.pathinfo = nodeRead(true); /* now read it */ + local_node->jpath.pathinfo = nodeRead(true); /* now read it */ /* * Not sure if these are nodes; they're declared as "struct path *". @@ -1664,7 +1665,7 @@ _readMergePath() local_node->jpath.path.outerjoincost = (Cost) atof(token); token = lsptok(NULL, &length); /* get :joinid */ - local_node->jpath.path.joinid = toIntList(nodeRead(true)); /* now read it */ + local_node->jpath.path.joinid = toIntList(nodeRead(true)); /* now read it */ token = lsptok(NULL, &length); /* get :path_mergeclauses */ local_node->path_mergeclauses = nodeRead(true); /* now read it */ @@ -1704,13 +1705,13 @@ _readHashPath() local_node->jpath.path.path_cost = (Cost) atof(token); token = lsptok(NULL, &length); /* get :pathorder */ - local_node->jpath.path.pathorder = nodeRead(true); /* now read it */ + local_node->jpath.path.pathorder = nodeRead(true); /* now read it */ token = lsptok(NULL, &length); /* get :pathkeys */ - local_node->jpath.path.pathkeys = nodeRead(true); /* now read it */ + local_node->jpath.path.pathkeys = nodeRead(true); /* now read it */ token = lsptok(NULL, &length); /* get :pathinfo */ - local_node->jpath.pathinfo = nodeRead(true); /* now read it */ + local_node->jpath.pathinfo = nodeRead(true); /* now read it */ /* * Not sure if these are nodes; they're declared as "struct path *". @@ -1738,7 +1739,7 @@ _readHashPath() local_node->jpath.path.outerjoincost = (Cost) atof(token); token = lsptok(NULL, &length); /* get :joinid */ - local_node->jpath.path.joinid = toIntList(nodeRead(true)); /* now read it */ + local_node->jpath.path.joinid = toIntList(nodeRead(true)); /* now read it */ token = lsptok(NULL, &length); /* get :path_hashclauses */ local_node->path_hashclauses = nodeRead(true); /* now read it */ @@ -1924,7 +1925,7 @@ _readJoinMethod() static HashInfo * _readHashInfo() { - HashInfo *local_node; + HashInfo *local_node; char *token; int length; @@ -1960,10 +1961,10 @@ _readJoinInfo() local_node = makeNode(JoinInfo); token = lsptok(NULL, &length); /* get :unjoined_relids */ - local_node->unjoined_relids = toIntList(nodeRead(true)); /* now read it */ + local_node->unjoined_relids = toIntList(nodeRead(true)); /* now read it */ token = lsptok(NULL, &length); /* get :jinfo_restrictinfo */ - local_node->jinfo_restrictinfo = nodeRead(true); /* now read it */ + local_node->jinfo_restrictinfo = nodeRead(true); /* now read it */ token = lsptok(NULL, &length); /* get :mergejoinable */ diff --git a/src/backend/optimizer/geqo/geqo_eval.c b/src/backend/optimizer/geqo/geqo_eval.c index 31a77f46e4a..69d568dbc35 100644 --- a/src/backend/optimizer/geqo/geqo_eval.c +++ b/src/backend/optimizer/geqo/geqo_eval.c @@ -5,7 +5,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: geqo_eval.c,v 1.37 1999/05/17 00:25:34 tgl Exp $ + * $Id: geqo_eval.c,v 1.38 1999/05/25 16:09:15 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -56,7 +56,7 @@ static MemoryContext geqo_eval_context; /* * geqo_eval_startup: - * Must be called during geqo_main startup (before geqo_eval may be called) + * Must be called during geqo_main startup (before geqo_eval may be called) * * The main thing we need to do here is prepare a private memory context for * allocation of temp storage used while constructing a path in geqo_eval(). @@ -70,9 +70,10 @@ void geqo_eval_startup(void) { #define GEQO_PORTAL_NAME "<geqo workspace>" - Portal geqo_portal = GetPortalByName(GEQO_PORTAL_NAME); + Portal geqo_portal = GetPortalByName(GEQO_PORTAL_NAME); - if (!PortalIsValid(geqo_portal)) { + if (!PortalIsValid(geqo_portal)) + { /* First time through (within current transaction, that is) */ geqo_portal = CreatePortal(GEQO_PORTAL_NAME); Assert(PortalIsValid(geqo_portal)); @@ -89,15 +90,18 @@ geqo_eval_startup(void) Cost geqo_eval(Query *root, Gene *tour, int num_gene) { - MemoryContext oldcxt; - RelOptInfo *joinrel; - Cost fitness; - List *savelist; + MemoryContext oldcxt; + RelOptInfo *joinrel; + Cost fitness; + List *savelist; /* preserve root->join_rel_list, which gimme_tree changes */ savelist = root->join_rel_list; - /* create a temporary allocation context for the path construction work */ + /* + * create a temporary allocation context for the path construction + * work + */ oldcxt = MemoryContextSwitchTo(geqo_eval_context); StartPortalAllocMode(DefaultAllocMode, 0); @@ -118,7 +122,7 @@ geqo_eval(Query *root, Gene *tour, int num_gene) } /* - * gimme_tree + * gimme_tree * this program presumes that only LEFT-SIDED TREES are considered! * * 'old_rel' is the preceding join @@ -126,7 +130,7 @@ geqo_eval(Query *root, Gene *tour, int num_gene) * Returns a new join relation incorporating all joins in a left-sided tree. */ RelOptInfo * -gimme_tree(Query *root, Gene *tour, int rel_count, int num_gene, RelOptInfo *old_rel) +gimme_tree(Query *root, Gene *tour, int rel_count, int num_gene, RelOptInfo * old_rel) { RelOptInfo *inner_rel; /* current relation */ int base_rel_index; @@ -139,7 +143,7 @@ gimme_tree(Query *root, Gene *tour, int rel_count, int num_gene, RelOptInfo *old /* tour[0] = 3; tour[1] = 1; tour[2] = 2 */ base_rel_index = (int) tour[rel_count]; - inner_rel = (RelOptInfo *) nth(base_rel_index-1, root->base_rel_list); + inner_rel = (RelOptInfo *) nth(base_rel_index - 1, root->base_rel_list); if (rel_count == 0) { /* processing first join with @@ -151,15 +155,17 @@ gimme_tree(Query *root, Gene *tour, int rel_count, int num_gene, RelOptInfo *old { /* tree main part */ if (!(new_rels = make_rels_by_clause_joins(root, old_rel, old_rel->joininfo, - inner_rel->relids))) + inner_rel->relids))) { new_rels = make_rels_by_clauseless_joins(old_rel, - lcons(inner_rel,NIL)); - /* we don't do bushy plans in geqo, do we? bjm 02/18/1999 - new_rels = append(new_rels, - make_rels_by_clauseless_joins(old_rel, - lcons(old_rel,NIL)); - */ + lcons(inner_rel, NIL)); + + /* + * we don't do bushy plans in geqo, do we? bjm 02/18/1999 + * new_rels = append(new_rels, + * make_rels_by_clauseless_joins(old_rel, + * lcons(old_rel,NIL)); + */ } /* process new_rel->pathlist */ @@ -202,5 +208,5 @@ gimme_tree(Query *root, Gene *tour, int rel_count, int num_gene, RelOptInfo *old } } - return old_rel; /* tree finished ... */ + return old_rel; /* tree finished ... */ } diff --git a/src/backend/optimizer/geqo/geqo_main.c b/src/backend/optimizer/geqo/geqo_main.c index 2cedda675bd..88bcce1ed7d 100644 --- a/src/backend/optimizer/geqo/geqo_main.c +++ b/src/backend/optimizer/geqo/geqo_main.c @@ -6,7 +6,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: geqo_main.c,v 1.15 1999/05/17 00:25:33 tgl Exp $ + * $Id: geqo_main.c,v 1.16 1999/05/25 16:09:16 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -77,24 +77,28 @@ geqo(Query *root) status_interval; Gene *best_tour; RelOptInfo *best_rel; + #if defined(ERX) Edge *edge_table; /* list of edges */ int edge_failures = 0; float difference; + #endif #if defined(CX) || defined(PX) || defined(OX1) || defined(OX2) City *city_table; /* list of cities */ + #endif #if defined(CX) int cycle_diffs = 0; int mutations = 0; + #endif /* set tour size */ number_of_rels = length(root->base_rel_list); /* set GA parameters */ - geqo_params(number_of_rels); /* read "$PGDATA/pg_geqo" file */ + geqo_params(number_of_rels);/* read "$PGDATA/pg_geqo" file */ pool_size = PoolSize; number_generations = Generations; status_interval = 10; diff --git a/src/backend/optimizer/geqo/geqo_misc.c b/src/backend/optimizer/geqo/geqo_misc.c index adb4255c89c..dd4320a3d43 100644 --- a/src/backend/optimizer/geqo/geqo_misc.c +++ b/src/backend/optimizer/geqo/geqo_misc.c @@ -5,7 +5,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: geqo_misc.c,v 1.17 1999/02/13 23:16:09 momjian Exp $ + * $Id: geqo_misc.c,v 1.18 1999/05/25 16:09:17 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -261,7 +261,7 @@ geqo_print_path(Query *root, Path *path, int indent) } void -geqo_print_rel(Query *root, RelOptInfo *rel) +geqo_print_rel(Query *root, RelOptInfo * rel) { List *l; diff --git a/src/backend/optimizer/geqo/geqo_pool.c b/src/backend/optimizer/geqo/geqo_pool.c index f8530ef4ef0..c01073e614a 100644 --- a/src/backend/optimizer/geqo/geqo_pool.c +++ b/src/backend/optimizer/geqo/geqo_pool.c @@ -5,7 +5,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: geqo_pool.c,v 1.11 1999/02/13 23:16:12 momjian Exp $ + * $Id: geqo_pool.c,v 1.12 1999/05/25 16:09:18 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -109,7 +109,7 @@ random_init_pool(Query *root, Pool *pool, int strt, int stp) * "geqo_recombination.c" * */ - pool->data[i].worth = geqo_eval(root, chromo[i].string, pool->string_length); /* "from geqo_eval.c" */ + pool->data[i].worth = geqo_eval(root, chromo[i].string, pool->string_length); /* "from geqo_eval.c" */ } } diff --git a/src/backend/optimizer/geqo/minspantree.c b/src/backend/optimizer/geqo/minspantree.c index daf8a459e3a..c49f135ce25 100644 --- a/src/backend/optimizer/geqo/minspantree.c +++ b/src/backend/optimizer/geqo/minspantree.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION -* $Header: /cvsroot/pgsql/src/backend/optimizer/geqo/Attic/minspantree.c,v 1.10 1999/02/13 23:16:13 momjian Exp $ +* $Header: /cvsroot/pgsql/src/backend/optimizer/geqo/Attic/minspantree.c,v 1.11 1999/05/25 16:09:19 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -41,7 +41,7 @@ */ void -minspantree(Query *root, List *join_rels, RelOptInfo *garel) +minspantree(Query *root, List *join_rels, RelOptInfo * garel) { int number_of_rels = length(root->base_rel_list); int number_of_joins = length(join_rels); diff --git a/src/backend/optimizer/path/_deadcode/predmig.c b/src/backend/optimizer/path/_deadcode/predmig.c index 058b89780d6..a27b61fb62c 100644 --- a/src/backend/optimizer/path/_deadcode/predmig.c +++ b/src/backend/optimizer/path/_deadcode/predmig.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/path/_deadcode/Attic/predmig.c,v 1.1 1999/02/18 19:58:53 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/path/_deadcode/Attic/predmig.c,v 1.2 1999/05/25 16:09:30 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -257,7 +257,7 @@ xfunc_llel_chains(Stream root, Stream bottom) */ Assert(xfunc_num_relids(pathstream) > xfunc_num_relids(tmpstream)); progress = xfunc_prdmig_pullup(origstream, tmpstream, - (JoinPath) get_pathptr(pathstream)); + (JoinPath) get_pathptr(pathstream)); } if (get_downstream(tmpstream)) pathstream = (Stream) xfunc_get_downjoin((Stream) get_downstream(tmpstream)); @@ -269,7 +269,7 @@ xfunc_llel_chains(Stream root, Stream bottom) } /* - ** xfunc_complete_stream + ** xfunc_complete_stream ** Given a stream composed of join nodes only, make a copy containing the ** join nodes along with the associated restriction nodes. */ @@ -313,7 +313,7 @@ xfunc_complete_stream(Stream stream) static bool xfunc_prdmig_pullup(Stream origstream, Stream pullme, JoinPath joinpath) { - RestrictInfo restrictinfo = get_cinfo(pullme); + RestrictInfo restrictinfo = get_cinfo(pullme); bool progress = false; Stream upjoin, orignode, @@ -347,10 +347,10 @@ xfunc_prdmig_pullup(Stream origstream, Stream pullme, JoinPath joinpath) else whichchild = INNER; restrictinfo = xfunc_pullup((Path) get_pathptr((Stream) get_downstream(upjoin)), - (JoinPath) get_pathptr(upjoin), - restrictinfo, - whichchild, - get_clausetype(orignode)); + (JoinPath) get_pathptr(upjoin), + restrictinfo, + whichchild, + get_clausetype(orignode)); set_pathptr(pullme, get_pathptr(upjoin)); /* pullme has been moved into locrestrictinfo */ set_clausetype(pullme, XFUNC_LOCPRD); @@ -390,7 +390,7 @@ xfunc_prdmig_pullup(Stream origstream, Stream pullme, JoinPath joinpath) } /* - ** xfunc_form_groups + ** xfunc_form_groups ** A group is a pair of stream nodes a,b such that a is constrained to ** precede b (for instance if a and b are both joins), but rank(a) > rank(b). ** In such a situation, Monma and Sidney prove that no clauses should end @@ -487,10 +487,10 @@ xfunc_form_groups(Query *queryInfo, Stream root, Stream bottom) } -/* ------------------- UTILITY FUNCTIONS ------------------------- */ +/* ------------------- UTILITY FUNCTIONS ------------------------- */ /* - ** xfunc_free_stream + ** xfunc_free_stream ** walk down a stream and pfree it */ static void @@ -525,7 +525,7 @@ xfunc_add_clauses(Stream current) foreach(temp, get_loc_restrictinfo((Path) get_pathptr(current))) { topnode = xfunc_streaminsert((RestrictInfo) lfirst(temp), topnode, - XFUNC_LOCPRD); + XFUNC_LOCPRD); } /* and add in the join clauses */ @@ -536,7 +536,7 @@ xfunc_add_clauses(Stream current) { if (!equal(get_clause((RestrictInfo) lfirst(temp)), primjoin)) topnode = xfunc_streaminsert((RestrictInfo) lfirst(temp), topnode, - XFUNC_JOINPRD); + XFUNC_JOINPRD); } } return topnode; @@ -623,7 +623,7 @@ xfunc_num_relids(Stream node) } /* - ** xfunc_get_downjoin + ** xfunc_get_downjoin ** Given a stream node, find the next lowest node which points to a ** join predicate or a scan node. */ @@ -642,7 +642,7 @@ xfunc_get_downjoin(Stream node) } /* - ** xfunc_get_upjoin + ** xfunc_get_upjoin ** same as above, but upwards. */ static StreamPtr @@ -660,7 +660,7 @@ xfunc_get_upjoin(Stream node) } /* - ** xfunc_stream_qsort + ** xfunc_stream_qsort ** Given a stream, sort by group rank the elements in the stream from the ** node "bottom" up. DESTRUCTIVELY MODIFIES STREAM! Returns new root. */ diff --git a/src/backend/optimizer/path/_deadcode/xfunc.c b/src/backend/optimizer/path/_deadcode/xfunc.c index f365cdcd1b5..7ee1c3616c5 100644 --- a/src/backend/optimizer/path/_deadcode/xfunc.c +++ b/src/backend/optimizer/path/_deadcode/xfunc.c @@ -9,7 +9,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/path/_deadcode/Attic/xfunc.c,v 1.2 1999/05/10 00:45:14 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/path/_deadcode/Attic/xfunc.c,v 1.3 1999/05/25 16:09:31 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -49,7 +49,7 @@ static int xfunc_card_unreferenced(Query *queryInfo, */ /* -** xfunc_trypullup +** xfunc_trypullup ** Preliminary pullup of predicates, to allow for maximal pruning. ** Given a relation, check each of its paths and see if you can ** pullup clauses from its inner and outer. @@ -59,7 +59,7 @@ void xfunc_trypullup(RelOptInfo rel) { LispValue y; /* list ptr */ - RestrictInfo maxcinfo; /* The RestrictInfo to pull up, as + RestrictInfo maxcinfo; /* The RestrictInfo to pull up, as * calculated by xfunc_shouldpull() */ JoinPath curpath; /* current path in list */ int progress; /* has progress been made this time @@ -81,7 +81,7 @@ xfunc_trypullup(RelOptInfo rel) { /* No, the following should NOT be '==' !! */ if (clausetype = xfunc_shouldpull((Path) get_innerjoinpath(curpath), - curpath, INNER, &maxcinfo)) + curpath, INNER, &maxcinfo)) { xfunc_pullup((Path) get_innerjoinpath(curpath), @@ -96,7 +96,7 @@ xfunc_trypullup(RelOptInfo rel) /* No, the following should NOT be '==' !! */ if (clausetype = xfunc_shouldpull((Path) get_outerjoinpath(curpath), - curpath, OUTER, &maxcinfo)) + curpath, OUTER, &maxcinfo)) { xfunc_pullup((Path) get_outerjoinpath(curpath), @@ -127,7 +127,7 @@ xfunc_trypullup(RelOptInfo rel) } /* - ** xfunc_shouldpull + ** xfunc_shouldpull ** find clause with highest rank, and decide whether to pull it up ** from child to parent. Currently we only pullup secondary join clauses ** that are in the pathrestrictinfo. Secondary hash and sort clauses are @@ -144,12 +144,12 @@ xfunc_shouldpull(Query *queryInfo, Path childpath, JoinPath parentpath, int whichchild, - RestrictInfo *maxcinfopt) /* Out: pointer to clause + RestrictInfo * maxcinfopt) /* Out: pointer to clause * to pullup */ { LispValue clauselist, tmplist; /* lists of clauses */ - RestrictInfo maxcinfo; /* clause to pullup */ + RestrictInfo maxcinfo; /* clause to pullup */ LispValue primjoinclause /* primary join clause */ = xfunc_primary_join(parentpath); Cost tmprank, @@ -225,7 +225,7 @@ xfunc_shouldpull(Query *queryInfo, || (!is_join(childpath) && (whichchild == INNER) && IsA(parentpath, NestPath) - &&!IsA(parentpath, HashPath) + && !IsA(parentpath, HashPath) &&!IsA(parentpath, MergePath))))) { @@ -250,7 +250,7 @@ xfunc_shouldpull(Query *queryInfo, /* - ** xfunc_pullup + ** xfunc_pullup ** move clause from child pathnode to parent pathnode. This operation ** makes the child pathnode produce a larger relation than it used to. ** This means that we must construct a new RelOptInfo just for the childpath, @@ -264,7 +264,7 @@ RestrictInfo xfunc_pullup(Query *queryInfo, Path childpath, JoinPath parentpath, - RestrictInfo cinfo, /* clause to pull up */ + RestrictInfo cinfo,/* clause to pull up */ int whichchild, /* whether child is INNER or OUTER of join */ int clausetype) /* whether clause to pull is join or local */ { @@ -272,22 +272,22 @@ xfunc_pullup(Query *queryInfo, RelOptInfo newrel; Cost pulled_selec; Cost cost; - RestrictInfo newinfo; + RestrictInfo newinfo; /* remove clause from childpath */ newkid = (Path) copyObject((Node) childpath); if (clausetype == XFUNC_LOCPRD) { set_locrestrictinfo(newkid, - xfunc_LispRemove((LispValue) cinfo, - (List) get_loc_restrictinfo(newkid))); + xfunc_LispRemove((LispValue) cinfo, + (List) get_loc_restrictinfo(newkid))); } else { set_pathrestrictinfo ((JoinPath) newkid, xfunc_LispRemove((LispValue) cinfo, - (List) get_pathrestrictinfo((JoinPath) newkid))); + (List) get_pathrestrictinfo((JoinPath) newkid))); } /* @@ -328,8 +328,8 @@ xfunc_pullup(Query *queryInfo, /* add clause to parentpath, and fix up its cost. */ set_locrestrictinfo(parentpath, - lispCons((LispValue) newinfo, - (LispValue) get_loc_restrictinfo(parentpath))); + lispCons((LispValue) newinfo, + (LispValue) get_loc_restrictinfo(parentpath))); /* put new childpath into the path tree */ if (whichchild == INNER) set_innerjoinpath(parentpath, (pathPtr) newkid); @@ -386,7 +386,7 @@ LispValue clause; } /* - ** xfunc_join_expense + ** xfunc_join_expense ** Find global expense of a join clause */ Cost @@ -457,7 +457,7 @@ xfunc_local_expense(LispValue clause) } /* - ** xfunc_func_expense + ** xfunc_func_expense ** given a Func or Oper and its args, find its expense. ** Note: in Stonebraker's SIGMOD '91 paper, he uses a more complicated metric ** than the one here. We can ignore the expected number of tuples for @@ -581,7 +581,7 @@ xfunc_func_expense(LispValue node, LispValue args) } /* - ** xfunc_width + ** xfunc_width ** recursively find the width of a expression */ @@ -694,7 +694,7 @@ xfunc_width(LispValue clause) */ Assert(length(get_func_tlist(func)) == 1); /* sanity */ retval = xfunc_width((LispValue) - get_expr(lfirst(get_func_tlist(func)))); + get_expr(lfirst(get_func_tlist(func)))); goto exit; } else @@ -771,8 +771,8 @@ xfunc_card_product(Query *queryInfo, Relids relids) { if (!xfunc_expense(queryInfo, get_clause((RestrictInfo) lfirst(cinfonode)))) tuples *= compute_clause_selec(queryInfo, - get_clause((RestrictInfo) lfirst(cinfonode)), - LispNil); + get_clause((RestrictInfo) lfirst(cinfonode)), + LispNil); } if (retval == 0) @@ -857,7 +857,7 @@ LispValue xfunc_primary_join(JoinPath pathnode) { LispValue joinclauselist = get_pathrestrictinfo(pathnode); - RestrictInfo mincinfo; + RestrictInfo mincinfo; LispValue tmplist; LispValue minclause = LispNil; Cost minrank, @@ -931,7 +931,7 @@ xfunc_get_path_cost(Query *queryInfo, Path pathnode) */ if (XfuncMode != XFUNC_OFF) set_locrestrictinfo(pathnode, lisp_qsort(get_loc_restrictinfo(pathnode), - xfunc_cinfo_compare)); + xfunc_cinfo_compare)); for (tmplist = get_loc_restrictinfo(pathnode), selec = 1.0; tmplist != LispNil; tmplist = lnext(tmplist)) @@ -939,7 +939,7 @@ xfunc_get_path_cost(Query *queryInfo, Path pathnode) cost += (Cost) (xfunc_local_expense(get_clause((RestrictInfo) lfirst(tmplist))) * (Cost) get_tuples(get_parent(pathnode)) * selec); selec *= compute_clause_selec(queryInfo, - get_clause((RestrictInfo) lfirst(tmplist)), + get_clause((RestrictInfo) lfirst(tmplist)), LispNil); } @@ -951,8 +951,8 @@ xfunc_get_path_cost(Query *queryInfo, Path pathnode) { if (XfuncMode != XFUNC_OFF) set_pathrestrictinfo((JoinPath) pathnode, lisp_qsort - (get_pathrestrictinfo((JoinPath) pathnode), - xfunc_cinfo_compare)); + (get_pathrestrictinfo((JoinPath) pathnode), + xfunc_cinfo_compare)); for (tmplist = get_pathrestrictinfo((JoinPath) pathnode), selec = 1.0; tmplist != LispNil; tmplist = lnext(tmplist)) @@ -960,7 +960,7 @@ xfunc_get_path_cost(Query *queryInfo, Path pathnode) cost += (Cost) (xfunc_local_expense(get_clause((RestrictInfo) lfirst(tmplist))) * (Cost) get_tuples(get_parent(pathnode)) * selec); selec *= compute_clause_selec(queryInfo, - get_clause((RestrictInfo) lfirst(tmplist)), + get_clause((RestrictInfo) lfirst(tmplist)), LispNil); } } @@ -1071,7 +1071,7 @@ xfunc_total_path_cost(JoinPath pathnode) /* - ** xfunc_expense_per_tuple + ** xfunc_expense_per_tuple ** return the expense of the join *per-tuple* of the input relation. ** The cost model here is that a join costs ** k*card(outer)*card(inner) + l*card(outer) + m*card(inner) + n @@ -1124,7 +1124,7 @@ xfunc_expense_per_tuple(JoinPath joinnode, int whichchild) } /* - ** xfunc_fixvars + ** xfunc_fixvars ** After pulling up a clause, we must walk its expression tree, fixing Var ** nodes to point to the correct varno (either INNER or OUTER, depending ** on which child the clause was pulled from), and the right varattno in the @@ -1189,8 +1189,8 @@ xfunc_fixvars(LispValue clause, /* clause being pulled up */ int xfunc_cinfo_compare(void *arg1, void *arg2) { - RestrictInfo info1 = *(RestrictInfo *) arg1; - RestrictInfo info2 = *(RestrictInfo *) arg2; + RestrictInfo info1 = *(RestrictInfo *) arg1; + RestrictInfo info2 = *(RestrictInfo *) arg2; LispValue clause1 = (LispValue) get_clause(info1), clause2 = (LispValue) get_clause(info2); @@ -1223,7 +1223,7 @@ xfunc_clause_compare(void *arg1, void *arg2) } /* - ** xfunc_disjunct_sort + ** xfunc_disjunct_sort ** given a list of clauses, for each clause sort the disjuncts by cost ** (this assumes the predicates have been converted to Conjunctive NF) ** Modifies the clause list! @@ -1287,7 +1287,7 @@ xfunc_disjunct_compare(Query *queryInfo, void *arg1, void *arg2) /* ------------------------ UTILITY FUNCTIONS ------------------------------- */ /* - ** xfunc_func_width + ** xfunc_func_width ** Given a function OID and operands, find the width of the return value. */ int @@ -1349,7 +1349,7 @@ exit: } /* - ** xfunc_tuple_width + ** xfunc_tuple_width ** Return the sum of the lengths of all the attributes of a given relation */ int @@ -1371,7 +1371,7 @@ xfunc_tuple_width(Relation rd) } /* - ** xfunc_num_join_clauses + ** xfunc_num_join_clauses ** Find the number of join clauses associated with this join path */ int @@ -1388,7 +1388,7 @@ xfunc_num_join_clauses(JoinPath path) } /* - ** xfunc_LispRemove + ** xfunc_LispRemove ** Just like LispRemove, but it whines if the item to be removed ain't there */ LispValue @@ -1419,11 +1419,11 @@ do { \ } while(0) /* - ** xfunc_copyrel + ** xfunc_copyrel ** Just like _copyRel, but doesn't copy the paths */ bool -xfunc_copyrel(RelOptInfo from, RelOptInfo *to) +xfunc_copyrel(RelOptInfo from, RelOptInfo * to) { RelOptInfo newnode; diff --git a/src/backend/optimizer/path/allpaths.c b/src/backend/optimizer/path/allpaths.c index ba421b4f5ff..8ebcc5d4794 100644 --- a/src/backend/optimizer/path/allpaths.c +++ b/src/backend/optimizer/path/allpaths.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/path/allpaths.c,v 1.44 1999/02/22 05:26:18 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/path/allpaths.c,v 1.45 1999/05/25 16:09:22 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -45,10 +45,10 @@ int32 _use_geqo_rels_ = GEQO_RELS; static void set_base_rel_pathlist(Query *root, List *rels); static RelOptInfo *make_one_rel_by_joins(Query *root, List *rels, - int levels_needed); + int levels_needed); #ifdef OPTIMIZER_DEBUG -static void debug_print_rel(Query *root, RelOptInfo *rel); +static void debug_print_rel(Query *root, RelOptInfo * rel); #endif @@ -76,6 +76,7 @@ make_one_rel(Query *root, List *rels) if (levels_needed <= 1) { + /* * Unsorted single relation, no more processing is required. */ @@ -83,6 +84,7 @@ make_one_rel(Query *root, List *rels) } else { + /* * This means that joins or sorts are required. set selectivities * of clauses that have not been set by an index. @@ -117,17 +119,17 @@ set_base_rel_pathlist(Query *root, List *rels) sequential_scan_list = lcons(create_seqscan_path(rel), NIL); rel_index_scan_list = create_index_paths(root, - rel, - find_relation_indices(root, rel), - rel->restrictinfo, - rel->joininfo); + rel, + find_relation_indices(root, rel), + rel->restrictinfo, + rel->joininfo); or_index_scan_list = create_or_index_paths(root, rel, rel->restrictinfo); rel->pathlist = add_pathlist(rel, sequential_scan_list, nconc(rel_index_scan_list, - or_index_scan_list)); + or_index_scan_list)); set_cheapest(rel, rel->pathlist); @@ -171,13 +173,14 @@ make_one_rel_by_joins(Query *root, List *rels, int levels_needed) *******************************************/ if ((_use_geqo_) && length(root->base_rel_list) >= _use_geqo_rels_) return geqo(root); - + /******************************************* * rest will be deprecated in case of GEQO * *******************************************/ while (--levels_needed) { + /* * Determine all possible pairs of relations to be joined at this * level. Determine paths for joining these relation pairs and @@ -193,6 +196,7 @@ make_one_rel_by_joins(Query *root, List *rels, int levels_needed) root->join_rel_list = rels = joined_rels; #ifdef NOT_USED + /* * * for each expensive predicate in each path in each distinct * rel, * consider doing pullup -- JMH @@ -351,7 +355,7 @@ print_path(Query *root, Path *path, int indent) } static void -debug_print_rel(Query *root, RelOptInfo *rel) +debug_print_rel(Query *root, RelOptInfo * rel) { List *l; diff --git a/src/backend/optimizer/path/clausesel.c b/src/backend/optimizer/path/clausesel.c index 1eeae4c6d3d..bbc9e3547e3 100644 --- a/src/backend/optimizer/path/clausesel.c +++ b/src/backend/optimizer/path/clausesel.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/path/clausesel.c,v 1.19 1999/05/16 19:45:37 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/path/clausesel.c,v 1.20 1999/05/25 16:09:22 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -132,7 +132,7 @@ set_rest_selec(Query *root, List *restrictinfo_list) if (cost_clause <= 0 || valid_or_clause(clausenode)) { clausenode->selectivity = compute_clause_selec(root, - (Node *) clausenode->clause, + (Node *) clausenode->clause, lcons(makeFloat(cost_clause), NIL)); } } @@ -256,7 +256,7 @@ compute_selec(Query *root, List *clauses, List *or_selectivities) else if (not_clause((Node *) clause)) { /* negate this baby */ - return 1 - compute_selec(root, ((Expr *)clause)->args, or_selectivities); + return 1 - compute_selec(root, ((Expr *) clause)->args, or_selectivities); } else if (is_subplan((Node *) clause)) { diff --git a/src/backend/optimizer/path/costsize.c b/src/backend/optimizer/path/costsize.c index 22eb4d3e53d..327f58cf320 100644 --- a/src/backend/optimizer/path/costsize.c +++ b/src/backend/optimizer/path/costsize.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/path/costsize.c,v 1.36 1999/05/01 19:47:41 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/path/costsize.c,v 1.37 1999/05/25 16:09:23 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -37,7 +37,7 @@ extern int NBuffers; static int compute_attribute_width(TargetEntry *tlistentry); -static double relation_byte_size (int tuples, int width); +static double relation_byte_size(int tuples, int width); static double base_log(double x, double b); static int compute_targetlist_width(List *targetlist); @@ -134,9 +134,10 @@ cost_index(Oid indexid, if (!_enable_indexscan_ && !is_injoin) temp += _disable_cost_; - /* We want to be sure we estimate the cost of an index scan - * as more than the cost of a sequential scan (when selec == 1.0), - * even if we don't have good stats. So, disbelieve zero index size. + /* + * We want to be sure we estimate the cost of an index scan as more + * than the cost of a sequential scan (when selec == 1.0), even if we + * don't have good stats. So, disbelieve zero index size. */ if (expected_indexpages <= 0) expected_indexpages = 1; @@ -146,11 +147,11 @@ cost_index(Oid indexid, /* expected index relation pages */ temp += expected_indexpages; - /* expected base relation pages - * XXX this isn't really right, since we will access the table - * nonsequentially and might have to fetch the same page - * more than once. This calculation assumes the buffer cache - * will prevent that from happening... + /* + * expected base relation pages XXX this isn't really right, since we + * will access the table nonsequentially and might have to fetch the + * same page more than once. This calculation assumes the buffer + * cache will prevent that from happening... */ temp += ceil(((double) selec) * ((double) relpages)); @@ -192,8 +193,10 @@ cost_sort(List *pathkeys, int tuples, int width) if (!_enable_sort_) temp += _disable_cost_; - /* We want to be sure the cost of a sort is never estimated as zero, - * even if passed-in tuple count is zero. Besides, mustn't do log(0)... + /* + * We want to be sure the cost of a sort is never estimated as zero, + * even if passed-in tuple count is zero. Besides, mustn't do + * log(0)... */ if (tuples <= 0) tuples = 1; @@ -344,10 +347,11 @@ cost_hashjoin(Cost outercost, if (!_enable_hashjoin_) temp += _disable_cost_; - /* Bias against putting larger relation on inside. + /* + * Bias against putting larger relation on inside. * - * Code used to use "outerpages < innerpages" but that has - * poor resolution when both relations are small. + * Code used to use "outerpages < innerpages" but that has poor + * resolution when both relations are small. */ if (relation_byte_size(outersize, outerwidth) < relation_byte_size(innersize, innerwidth)) @@ -362,7 +366,8 @@ cost_hashjoin(Cost outercost, /* cost of main-memory hashtable */ temp += (innerpages < NBuffers) ? innerpages : NBuffers; - /* if inner relation is too big then we will need to "batch" the join, + /* + * if inner relation is too big then we will need to "batch" the join, * which implies writing and reading most of the tuples to disk an * extra time. */ @@ -385,7 +390,7 @@ cost_hashjoin(Cost outercost, * Returns the size. */ int -compute_rel_size(RelOptInfo *rel) +compute_rel_size(RelOptInfo * rel) { Cost temp; int temp1; @@ -408,7 +413,7 @@ compute_rel_size(RelOptInfo *rel) * Returns the width of the tuple as a fixnum. */ int -compute_rel_width(RelOptInfo *rel) +compute_rel_width(RelOptInfo * rel) { return compute_targetlist_width(get_actual_tlist(rel->targetlist)); } @@ -470,11 +475,11 @@ compute_joinrel_size(JoinPath *joinpath) temp *= ((Path *) joinpath->innerjoinpath)->parent->size; temp = temp * product_selec(joinpath->pathinfo); - if (temp >= (MAXINT-1)/2) + if (temp >= (MAXINT - 1) / 2) { /* if we exceed (MAXINT-1)/2, we switch to log scale */ /* +1 prevents log(0) */ - temp1 = ceil(log(temp + 1 - (MAXINT-1)/2) + (MAXINT-1)/2); + temp1 = ceil(log(temp + 1 - (MAXINT - 1) / 2) + (MAXINT - 1) / 2); } else temp1 = ceil((double) temp); @@ -485,13 +490,13 @@ compute_joinrel_size(JoinPath *joinpath) /* * relation_byte_size - * Estimate the storage space in bytes for a given number of tuples - * of a given width (size in bytes). - * To avoid overflow with big relations, result is a double. + * Estimate the storage space in bytes for a given number of tuples + * of a given width (size in bytes). + * To avoid overflow with big relations, result is a double. */ static double -relation_byte_size (int tuples, int width) +relation_byte_size(int tuples, int width) { return ((double) tuples) * ((double) (width + sizeof(HeapTupleData))); } diff --git a/src/backend/optimizer/path/hashutils.c b/src/backend/optimizer/path/hashutils.c index f67e4eb8eca..0d4b2326ba4 100644 --- a/src/backend/optimizer/path/hashutils.c +++ b/src/backend/optimizer/path/hashutils.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/path/Attic/hashutils.c,v 1.15 1999/04/03 00:18:27 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/path/Attic/hashutils.c,v 1.16 1999/05/25 16:09:23 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -30,7 +30,7 @@ static HashInfo *match_hashop_hashinfo(Oid hashop, List *hashinfo_list); * * 'restrictinfo_list' is the list of restrictinfo nodes * 'inner_relids' is the list of relids in the inner join relation - * (used to determine whether a join var is inner or outer) + * (used to determine whether a join var is inner or outer) * * Returns the new list of hashinfo nodes. * @@ -84,7 +84,7 @@ group_clauses_by_hashop(List *restrictinfo_list, } xhashinfo->jmethod.clauses = lcons(clause, - xhashinfo->jmethod.clauses); + xhashinfo->jmethod.clauses); xhashinfo->jmethod.jmkeys = lcons(joinkey, xhashinfo->jmethod.jmkeys); } @@ -105,7 +105,7 @@ static HashInfo * match_hashop_hashinfo(Oid hashop, List *hashinfo_list) { Oid key = 0; - HashInfo *xhashinfo = (HashInfo *) NULL; + HashInfo *xhashinfo = (HashInfo *) NULL; List *i = NIL; foreach(i, hashinfo_list) diff --git a/src/backend/optimizer/path/indxpath.c b/src/backend/optimizer/path/indxpath.c index 84ef82f3106..29694ed2587 100644 --- a/src/backend/optimizer/path/indxpath.c +++ b/src/backend/optimizer/path/indxpath.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/path/indxpath.c,v 1.54 1999/03/18 19:59:53 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/path/indxpath.c,v 1.55 1999/05/25 16:09:24 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -45,32 +45,32 @@ #include "utils/lsyscache.h" -static void match_index_orclauses(RelOptInfo *rel, RelOptInfo *index, int indexkey, +static void match_index_orclauses(RelOptInfo * rel, RelOptInfo * index, int indexkey, int xclass, List *restrictinfo_list); static bool match_index_to_operand(int indexkey, Expr *operand, - RelOptInfo *rel, RelOptInfo *index); -static List *match_index_orclause(RelOptInfo *rel, RelOptInfo *index, int indexkey, + RelOptInfo * rel, RelOptInfo * index); +static List *match_index_orclause(RelOptInfo * rel, RelOptInfo * index, int indexkey, int xclass, List *or_clauses, List *other_matching_indices); -static List *group_clauses_by_indexkey(RelOptInfo *rel, RelOptInfo *index, - int *indexkeys, Oid *classes, List *restrictinfo_list); -static List *group_clauses_by_ikey_for_joins(RelOptInfo *rel, RelOptInfo *index, +static List *group_clauses_by_indexkey(RelOptInfo * rel, RelOptInfo * index, + int *indexkeys, Oid *classes, List *restrictinfo_list); +static List *group_clauses_by_ikey_for_joins(RelOptInfo * rel, RelOptInfo * index, int *indexkeys, Oid *classes, List *join_cinfo_list, List *restr_cinfo_list); -static RestrictInfo *match_clause_to_indexkey(RelOptInfo *rel, RelOptInfo *index, int indexkey, - int xclass, RestrictInfo *restrictInfo, bool join); +static RestrictInfo *match_clause_to_indexkey(RelOptInfo * rel, RelOptInfo * index, int indexkey, + int xclass, RestrictInfo * restrictInfo, bool join); static bool pred_test(List *predicate_list, List *restrictinfo_list, List *joininfo_list); static bool one_pred_test(Expr *predicate, List *restrictinfo_list); static bool one_pred_clause_expr_test(Expr *predicate, Node *clause); static bool one_pred_clause_test(Expr *predicate, Node *clause); static bool clause_pred_clause_test(Expr *predicate, Node *clause); -static List *indexable_joinclauses(RelOptInfo *rel, RelOptInfo *index, +static List *indexable_joinclauses(RelOptInfo * rel, RelOptInfo * index, List *joininfo_list, List *restrictinfo_list); -static List *index_innerjoin(Query *root, RelOptInfo *rel, - List *clausegroup_list, RelOptInfo *index); -static List *create_index_path_group(Query *root, RelOptInfo *rel, RelOptInfo *index, - List *clausegroup_list, bool join); +static List *index_innerjoin(Query *root, RelOptInfo * rel, + List *clausegroup_list, RelOptInfo * index); +static List *create_index_path_group(Query *root, RelOptInfo * rel, RelOptInfo * index, + List *clausegroup_list, bool join); static List *add_index_paths(List *indexpaths, List *new_indexpaths); -static bool function_index_operand(Expr *funcOpnd, RelOptInfo *rel, RelOptInfo *index); +static bool function_index_operand(Expr *funcOpnd, RelOptInfo * rel, RelOptInfo * index); /* find_index_paths() @@ -100,10 +100,10 @@ static bool function_index_operand(Expr *funcOpnd, RelOptInfo *rel, RelOptInfo * */ List * create_index_paths(Query *root, - RelOptInfo *rel, - List *indices, - List *restrictinfo_list, - List *joininfo_list) + RelOptInfo * rel, + List *indices, + List *restrictinfo_list, + List *joininfo_list) { List *scanclausegroups = NIL; List *scanpaths = NIL; @@ -127,11 +127,11 @@ create_index_paths(Query *root, /* * 1. Try matching the index against subclauses of an 'or' clause. - * The fields of the restrictinfo nodes are marked with lists of the - * matching indices. No path are actually created. We currently - * only look to match the first key. We don't find multi-key - * index cases where an AND matches the first key, and the OR - * matches the second key. + * The fields of the restrictinfo nodes are marked with lists of + * the matching indices. No path are actually created. We + * currently only look to match the first key. We don't find + * multi-key index cases where an AND matches the first key, and + * the OR matches the second key. */ match_index_orclauses(rel, index, @@ -144,7 +144,7 @@ create_index_paths(Query *root, * restriction clauses, then create pathnodes corresponding to * each group of usable clauses. */ - scanclausegroups = group_clauses_by_indexkey(rel, + scanclausegroups = group_clauses_by_indexkey(rel, index, index->indexkeys, index->classlist, @@ -153,10 +153,10 @@ create_index_paths(Query *root, scanpaths = NIL; if (scanclausegroups != NIL) scanpaths = create_index_path_group(root, - rel, - index, - scanclausegroups, - false); + rel, + index, + scanclausegroups, + false); /* * 3. If this index can be used with any join clause, then create @@ -171,12 +171,12 @@ create_index_paths(Query *root, if (joinclausegroups != NIL) { joinpaths = create_index_path_group(root, rel, - index, - joinclausegroups, - true); + index, + joinclausegroups, + true); rel->innerjoin = nconc(rel->innerjoin, index_innerjoin(root, rel, - joinclausegroups, index)); + joinclausegroups, index)); } /* @@ -217,8 +217,8 @@ create_index_paths(Query *root, * */ static void -match_index_orclauses(RelOptInfo *rel, - RelOptInfo *index, +match_index_orclauses(RelOptInfo * rel, + RelOptInfo * index, int indexkey, int xclass, List *restrictinfo_list) @@ -238,9 +238,9 @@ match_index_orclauses(RelOptInfo *rel, * 'index' to the existing list where appropriate. */ restrictinfo->indexids = match_index_orclause(rel, index, indexkey, - xclass, - restrictinfo->clause->args, - restrictinfo->indexids); + xclass, + restrictinfo->clause->args, + restrictinfo->indexids); } } } @@ -253,8 +253,8 @@ match_index_orclauses(RelOptInfo *rel, static bool match_index_to_operand(int indexkey, Expr *operand, - RelOptInfo *rel, - RelOptInfo *index) + RelOptInfo * rel, + RelOptInfo * index) { bool result; @@ -296,8 +296,8 @@ match_index_to_operand(int indexkey, * match the third, g,h match the fourth, etc. */ static List * -match_index_orclause(RelOptInfo *rel, - RelOptInfo *index, +match_index_orclause(RelOptInfo * rel, + RelOptInfo * index, int indexkey, int xclass, List *or_clauses, @@ -325,8 +325,9 @@ match_index_orclause(RelOptInfo *rel, if (is_opclause(clause)) { - Expr *left = (Expr *) get_leftop((Expr *) clause); - Expr *right = (Expr *) get_rightop((Expr *) clause); + Expr *left = (Expr *) get_leftop((Expr *) clause); + Expr *right = (Expr *) get_rightop((Expr *) clause); + if (left && right && op_class(((Oper *) ((Expr *) clause)->oper)->opno, xclass, index->relam) && @@ -335,7 +336,7 @@ match_index_orclause(RelOptInfo *rel, (IsA(left, Const) && match_index_to_operand(indexkey, right, rel, index)))) lfirst(matching_indices) = lcons(index, - lfirst(matching_indices)); + lfirst(matching_indices)); } matching_indices = lnext(matching_indices); @@ -386,8 +387,8 @@ match_index_orclause(RelOptInfo *rel, * */ static List * -group_clauses_by_indexkey(RelOptInfo *rel, - RelOptInfo *index, +group_clauses_by_indexkey(RelOptInfo * rel, + RelOptInfo * index, int *indexkeys, Oid *classes, List *restrictinfo_list) @@ -448,8 +449,8 @@ group_clauses_by_indexkey(RelOptInfo *rel, * */ static List * -group_clauses_by_ikey_for_joins(RelOptInfo *rel, - RelOptInfo *index, +group_clauses_by_ikey_for_joins(RelOptInfo * rel, + RelOptInfo * index, int *indexkeys, Oid *classes, List *join_cinfo_list, @@ -570,11 +571,11 @@ group_clauses_by_ikey_for_joins(RelOptInfo *rel, * */ static RestrictInfo * -match_clause_to_indexkey(RelOptInfo *rel, - RelOptInfo *index, +match_clause_to_indexkey(RelOptInfo * rel, + RelOptInfo * index, int indexkey, int xclass, - RestrictInfo *restrictInfo, + RestrictInfo * restrictInfo, bool join) { Expr *clause = restrictInfo->clause; @@ -597,6 +598,7 @@ match_clause_to_indexkey(RelOptInfo *rel, */ if (!join) { + /* * Check for standard s-argable clause */ @@ -647,10 +649,10 @@ match_clause_to_indexkey(RelOptInfo *rel, restrict_op = oprid(newop); isIndexable = (op_class(restrict_op, xclass, index->relam) && - IndexScanableOperand(leftop, - indexkey, - rel, - index)); + IndexScanableOperand(leftop, + indexkey, + rel, + index)); if (isIndexable) ((Oper *) ((Expr *) clause)->oper)->opno = restrict_op; @@ -1181,7 +1183,7 @@ clause_pred_clause_test(Expr *predicate, Node *clause) * */ static List * -indexable_joinclauses(RelOptInfo *rel, RelOptInfo *index, +indexable_joinclauses(RelOptInfo * rel, RelOptInfo * index, List *joininfo_list, List *restrictinfo_list) { JoinInfo *joininfo = (JoinInfo *) NULL; @@ -1196,11 +1198,11 @@ indexable_joinclauses(RelOptInfo *rel, RelOptInfo *index, if (joininfo->jinfo_restrictinfo == NIL) continue; clausegroups = group_clauses_by_ikey_for_joins(rel, - index, - index->indexkeys, - index->classlist, + index, + index->indexkeys, + index->classlist, joininfo->jinfo_restrictinfo, - restrictinfo_list); + restrictinfo_list); if (clausegroups != NIL) { @@ -1253,8 +1255,8 @@ extract_restrict_clauses(List *clausegroup) * */ static List * -index_innerjoin(Query *root, RelOptInfo *rel, List *clausegroup_list, - RelOptInfo *index) +index_innerjoin(Query *root, RelOptInfo * rel, List *clausegroup_list, + RelOptInfo * index) { List *clausegroup = NIL; List *cg_list = NIL; @@ -1289,9 +1291,9 @@ index_innerjoin(Query *root, RelOptInfo *rel, List *clausegroup_list, pathnode->path.pathtype = T_IndexScan; pathnode->path.parent = rel; pathnode->path.pathorder = makeNode(PathOrder); - pathnode->path.pathorder->ordtype = SORTOP_ORDER; - pathnode->path.pathorder->ord.sortop = index->ordering; - pathnode->path.pathkeys = NIL; + pathnode->path.pathorder->ordtype = SORTOP_ORDER; + pathnode->path.pathorder->ord.sortop = index->ordering; + pathnode->path.pathkeys = NIL; pathnode->indexid = index->relids; pathnode->indexkeys = index->indexkeys; @@ -1300,27 +1302,25 @@ index_innerjoin(Query *root, RelOptInfo *rel, List *clausegroup_list, pathnode->path.joinid = ((RestrictInfo *) lfirst(clausegroup))->restrictinfojoinid; pathnode->path.path_cost = cost_index((Oid) lfirsti(index->relids), - (int) temp_pages, - temp_selec, - rel->pages, - rel->tuples, - index->pages, - index->tuples, - true); + (int) temp_pages, + temp_selec, + rel->pages, + rel->tuples, + index->pages, + index->tuples, + true); /* * copy restrictinfo list into path for expensive function * processing -- JMH, 7/7/92 */ pathnode->path.loc_restrictinfo = set_difference(copyObject((Node *) rel->restrictinfo), - clausegroup); + clausegroup); -#ifdef NOT_USED /* fix xfunc */ +#ifdef NOT_USED /* fix xfunc */ /* add in cost for expensive functions! -- JMH, 7/7/92 */ if (XfuncMode != XFUNC_OFF) - { ((Path *) pathnode)->path_cost += xfunc_get_path_cost((Path *) pathnode); - } #endif cg_list = lappend(cg_list, pathnode); } @@ -1343,10 +1343,10 @@ index_innerjoin(Query *root, RelOptInfo *rel, List *clausegroup_list, */ static List * create_index_path_group(Query *root, - RelOptInfo *rel, - RelOptInfo *index, - List *clausegroup_list, - bool join) + RelOptInfo * rel, + RelOptInfo * index, + List *clausegroup_list, + bool join) { List *clausegroup = NIL; List *ip_list = NIL; @@ -1366,7 +1366,7 @@ create_index_path_group(Query *root, restrictinfo = (RestrictInfo *) lfirst(j); if (!(is_joinable((Node *) restrictinfo->clause) && equal_path_merge_ordering(index->ordering, - restrictinfo->mergejoinorder))) + restrictinfo->mergejoinorder))) temp = false; } @@ -1386,7 +1386,7 @@ add_index_paths(List *indexpaths, List *new_indexpaths) } static bool -function_index_operand(Expr *funcOpnd, RelOptInfo *rel, RelOptInfo *index) +function_index_operand(Expr *funcOpnd, RelOptInfo * rel, RelOptInfo * index) { Oid heapRelid = (Oid) lfirsti(rel->relids); Func *function; diff --git a/src/backend/optimizer/path/joinpath.c b/src/backend/optimizer/path/joinpath.c index 9bb890c6eb1..a6f22c40edc 100644 --- a/src/backend/optimizer/path/joinpath.c +++ b/src/backend/optimizer/path/joinpath.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/path/joinpath.c,v 1.36 1999/05/18 21:36:10 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/path/joinpath.c,v 1.37 1999/05/25 16:09:25 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -30,14 +30,14 @@ * _enable_mergejoin} */ static Path *best_innerjoin(List *join_paths, List *outer_relid); -static List *sort_inner_and_outer(RelOptInfo *joinrel, RelOptInfo *outerrel, RelOptInfo *innerrel, +static List *sort_inner_and_outer(RelOptInfo * joinrel, RelOptInfo * outerrel, RelOptInfo * innerrel, List *mergeinfo_list); -static List *match_unsorted_outer(RelOptInfo *joinrel, RelOptInfo *outerrel, RelOptInfo *innerrel, +static List *match_unsorted_outer(RelOptInfo * joinrel, RelOptInfo * outerrel, RelOptInfo * innerrel, List *outerpath_list, Path *cheapest_inner, Path *best_innerjoin, List *mergeinfo_list); -static List *match_unsorted_inner(RelOptInfo *joinrel, RelOptInfo *outerrel, RelOptInfo *innerrel, +static List *match_unsorted_inner(RelOptInfo * joinrel, RelOptInfo * outerrel, RelOptInfo * innerrel, List *innerpath_list, List *mergeinfo_list); -static List *hash_inner_and_outer(RelOptInfo *joinrel, RelOptInfo *outerrel, RelOptInfo *innerrel, +static List *hash_inner_and_outer(RelOptInfo * joinrel, RelOptInfo * outerrel, RelOptInfo * innerrel, List *hashinfo_list); /* @@ -119,13 +119,13 @@ update_rels_pathlist_for_joins(Query *root, List *joinrels) * mergejoins where the outer path is already ordered. */ pathlist = add_pathlist(joinrel, pathlist, - match_unsorted_outer(joinrel, - outerrel, - innerrel, - outerrel->pathlist, - innerrel->cheapestpath, - bestinnerjoin, - mergeinfo_list)); + match_unsorted_outer(joinrel, + outerrel, + innerrel, + outerrel->pathlist, + innerrel->cheapestpath, + bestinnerjoin, + mergeinfo_list)); /* * 3. Consider paths where the inner relation need not be @@ -134,18 +134,18 @@ update_rels_pathlist_for_joins(Query *root, List *joinrels) * (match_unsorted_outer). */ pathlist = add_pathlist(joinrel, pathlist, - match_unsorted_inner(joinrel, outerrel, - innerrel, - innerrel->pathlist, - mergeinfo_list)); + match_unsorted_inner(joinrel, outerrel, + innerrel, + innerrel->pathlist, + mergeinfo_list)); /* * 4. Consider paths where both outer and inner relations must be * hashed before being joined. */ pathlist = add_pathlist(joinrel, pathlist, - hash_inner_and_outer(joinrel, outerrel, - innerrel, hashinfo_list)); + hash_inner_and_outer(joinrel, outerrel, + innerrel, hashinfo_list)); joinrel->pathlist = pathlist; } @@ -194,9 +194,9 @@ best_innerjoin(List *join_paths, Relids outer_relids) * Returns a list of mergejoin paths. */ static List * -sort_inner_and_outer(RelOptInfo *joinrel, - RelOptInfo *outerrel, - RelOptInfo *innerrel, +sort_inner_and_outer(RelOptInfo * joinrel, + RelOptInfo * outerrel, + RelOptInfo * innerrel, List *mergeinfo_list) { List *ms_list = NIL; @@ -212,28 +212,28 @@ sort_inner_and_outer(RelOptInfo *joinrel, xmergeinfo = (MergeInfo *) lfirst(i); outerkeys = make_pathkeys_from_joinkeys(xmergeinfo->jmethod.jmkeys, - outerrel->targetlist, - OUTER); + outerrel->targetlist, + OUTER); innerkeys = make_pathkeys_from_joinkeys(xmergeinfo->jmethod.jmkeys, - innerrel->targetlist, - INNER); + innerrel->targetlist, + INNER); merge_pathkeys = new_join_pathkeys(outerkeys, joinrel->targetlist, - xmergeinfo->jmethod.clauses); + xmergeinfo->jmethod.clauses); temp_node = create_mergejoin_path(joinrel, - outerrel->size, - innerrel->size, - outerrel->width, - innerrel->width, - (Path *) outerrel->cheapestpath, - (Path *) innerrel->cheapestpath, - merge_pathkeys, - xmergeinfo->m_ordering, - xmergeinfo->jmethod.clauses, - outerkeys, - innerkeys); + outerrel->size, + innerrel->size, + outerrel->width, + innerrel->width, + (Path *) outerrel->cheapestpath, + (Path *) innerrel->cheapestpath, + merge_pathkeys, + xmergeinfo->m_ordering, + xmergeinfo->jmethod.clauses, + outerkeys, + innerkeys); ms_list = lappend(ms_list, temp_node); } @@ -268,9 +268,9 @@ sort_inner_and_outer(RelOptInfo *joinrel, * Returns a list of possible join path nodes. */ static List * -match_unsorted_outer(RelOptInfo *joinrel, - RelOptInfo *outerrel, - RelOptInfo *innerrel, +match_unsorted_outer(RelOptInfo * joinrel, + RelOptInfo * outerrel, + RelOptInfo * innerrel, List *outerpath_list, Path *cheapest_inner, Path *best_innerjoin, @@ -298,7 +298,7 @@ match_unsorted_outer(RelOptInfo *joinrel, if (outerpath_ordering) xmergeinfo = match_order_mergeinfo(outerpath_ordering, - mergeinfo_list); + mergeinfo_list); if (xmergeinfo) clauses = xmergeinfo->jmethod.clauses; @@ -308,13 +308,13 @@ match_unsorted_outer(RelOptInfo *joinrel, List *jmkeys = xmergeinfo->jmethod.jmkeys; order_joinkeys_by_pathkeys(outerpath->pathkeys, - jmkeys, - clauses, - OUTER, - &matchedJoinKeys, - &matchedJoinClauses); - merge_pathkeys = new_join_pathkeys(outerpath->pathkeys, - joinrel->targetlist, clauses); + jmkeys, + clauses, + OUTER, + &matchedJoinKeys, + &matchedJoinClauses); + merge_pathkeys = new_join_pathkeys(outerpath->pathkeys, + joinrel->targetlist, clauses); } else merge_pathkeys = outerpath->pathkeys; @@ -338,21 +338,21 @@ match_unsorted_outer(RelOptInfo *joinrel, List *varkeys = NIL; Path *mergeinnerpath = get_cheapest_path_for_joinkeys( matchedJoinKeys, - outerpath_ordering, - innerrel->pathlist, - INNER); + outerpath_ordering, + innerrel->pathlist, + INNER); /* Should we use the mergeinner, or sort the cheapest inner? */ path_is_cheaper_than_sort = (bool) (mergeinnerpath && - (mergeinnerpath->path_cost < - (cheapest_inner->path_cost + - cost_sort(matchedJoinKeys, innerrel->size, - innerrel->width)))); + (mergeinnerpath->path_cost < + (cheapest_inner->path_cost + + cost_sort(matchedJoinKeys, innerrel->size, + innerrel->width)))); if (!path_is_cheaper_than_sort) { varkeys = make_pathkeys_from_joinkeys(matchedJoinKeys, - innerrel->targetlist, - INNER); + innerrel->targetlist, + INNER); } @@ -368,18 +368,18 @@ match_unsorted_outer(RelOptInfo *joinrel, mergeinnerpath = cheapest_inner; temp_node = lcons(create_mergejoin_path(joinrel, - outerrel->size, - innerrel->size, - outerrel->width, - innerrel->width, - outerpath, - mergeinnerpath, - merge_pathkeys, - xmergeinfo->m_ordering, - matchedJoinClauses, - NIL, - varkeys), - paths); + outerrel->size, + innerrel->size, + outerrel->width, + innerrel->width, + outerpath, + mergeinnerpath, + merge_pathkeys, + xmergeinfo->m_ordering, + matchedJoinClauses, + NIL, + varkeys), + paths); } else temp_node = paths; @@ -389,7 +389,7 @@ match_unsorted_outer(RelOptInfo *joinrel, } /* - * match_unsorted_inner + * match_unsorted_inner * Find the cheapest ordered join path for a given(ordered, unsorted) * inner join path. * @@ -411,9 +411,9 @@ match_unsorted_outer(RelOptInfo *joinrel, * Returns a list of possible merge paths. */ static List * -match_unsorted_inner(RelOptInfo *joinrel, - RelOptInfo *outerrel, - RelOptInfo *innerrel, +match_unsorted_inner(RelOptInfo * joinrel, + RelOptInfo * outerrel, + RelOptInfo * innerrel, List *innerpath_list, List *mergeinfo_list) { @@ -441,11 +441,11 @@ match_unsorted_inner(RelOptInfo *joinrel, List *jmkeys = xmergeinfo->jmethod.jmkeys; order_joinkeys_by_pathkeys(innerpath->pathkeys, - jmkeys, - clauses, - INNER, - &matchedJoinKeys, - &matchedJoinClauses); + jmkeys, + clauses, + INNER, + &matchedJoinKeys, + &matchedJoinClauses); } /* @@ -459,29 +459,29 @@ match_unsorted_inner(RelOptInfo *joinrel, temp1 = outerrel->cheapestpath->path_cost + cost_sort(matchedJoinKeys, outerrel->size, outerrel->width); - if (innerpath->outerjoincost <= 0 /* unset? */ + if (innerpath->outerjoincost <= 0 /* unset? */ || innerpath->outerjoincost > temp1) { List *outerkeys = make_pathkeys_from_joinkeys(matchedJoinKeys, - outerrel->targetlist, - OUTER); + outerrel->targetlist, + OUTER); List *merge_pathkeys = new_join_pathkeys(outerkeys, - joinrel->targetlist, - clauses); + joinrel->targetlist, + clauses); mp_list = lappend(mp_list, create_mergejoin_path(joinrel, - outerrel->size, - innerrel->size, - outerrel->width, - innerrel->width, + outerrel->size, + innerrel->size, + outerrel->width, + innerrel->width, (Path *) outerrel->cheapestpath, - innerpath, - merge_pathkeys, - xmergeinfo->m_ordering, - matchedJoinClauses, - outerkeys, - NIL)); + innerpath, + merge_pathkeys, + xmergeinfo->m_ordering, + matchedJoinClauses, + outerkeys, + NIL)); } } } @@ -503,9 +503,9 @@ match_unsorted_inner(RelOptInfo *joinrel, * Returns a list of hashjoin paths. */ static List * -hash_inner_and_outer(RelOptInfo *joinrel, - RelOptInfo *outerrel, - RelOptInfo *innerrel, +hash_inner_and_outer(RelOptInfo * joinrel, + RelOptInfo * outerrel, + RelOptInfo * innerrel, List *hashinfo_list) { List *hjoin_list = NIL; @@ -520,20 +520,22 @@ hash_inner_and_outer(RelOptInfo *joinrel, HashPath *temp_node; outerkeys = make_pathkeys_from_joinkeys( - ((JoinMethod *) xhashinfo)->jmkeys, - outerrel->targetlist, - OUTER); + ((JoinMethod *) xhashinfo)->jmkeys, + outerrel->targetlist, + OUTER); innerkeys = make_pathkeys_from_joinkeys( - ((JoinMethod *) xhashinfo)->jmkeys, - innerrel->targetlist, - INNER); - /* We cannot assume that the output of the hashjoin appears in any + ((JoinMethod *) xhashinfo)->jmkeys, + innerrel->targetlist, + INNER); + + /* + * We cannot assume that the output of the hashjoin appears in any * particular order, so it should have NIL pathkeys. */ #ifdef NOT_USED hash_pathkeys = new_join_pathkeys(outerkeys, - joinrel->targetlist, - ((JoinMethod *) xhashinfo)->clauses); + joinrel->targetlist, + ((JoinMethod *) xhashinfo)->clauses); #else hash_pathkeys = NIL; #endif @@ -547,7 +549,7 @@ hash_inner_and_outer(RelOptInfo *joinrel, (Path *) innerrel->cheapestpath, hash_pathkeys, xhashinfo->hashop, - ((JoinMethod *) xhashinfo)->clauses, + ((JoinMethod *) xhashinfo)->clauses, outerkeys, innerkeys); hjoin_list = lappend(hjoin_list, temp_node); diff --git a/src/backend/optimizer/path/joinrels.c b/src/backend/optimizer/path/joinrels.c index a4e08ca649f..861f3cb2255 100644 --- a/src/backend/optimizer/path/joinrels.c +++ b/src/backend/optimizer/path/joinrels.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/path/joinrels.c,v 1.32 1999/02/22 06:08:48 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/path/joinrels.c,v 1.33 1999/05/25 16:09:26 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -26,8 +26,8 @@ static List *new_joininfo_list(List *joininfo_list, Relids join_relids); static bool nonoverlap_sets(List *s1, List *s2); static bool is_subset(List *s1, List *s2); -static void set_joinrel_size(RelOptInfo *joinrel, RelOptInfo *outer_rel, - RelOptInfo *inner_rel, JoinInfo *jinfo); +static void set_joinrel_size(RelOptInfo * joinrel, RelOptInfo * outer_rel, + RelOptInfo * inner_rel, JoinInfo * jinfo); /* * make_rels_by_joins @@ -52,18 +52,19 @@ make_rels_by_joins(Query *root, List *old_rels) RelOptInfo *old_rel = (RelOptInfo *) lfirst(r); if (!(joined_rels = make_rels_by_clause_joins(root, old_rel, - old_rel->joininfo, - NIL))) + old_rel->joininfo, + NIL))) { + /* * Oops, we have a relation that is not joined to any other * relation. Cartesian product time. */ joined_rels = make_rels_by_clauseless_joins(old_rel, - root->base_rel_list); + root->base_rel_list); joined_rels = nconc(joined_rels, make_rels_by_clauseless_joins(old_rel, - old_rels)); + old_rels)); } join_list = nconc(join_list, joined_rels); @@ -88,14 +89,14 @@ make_rels_by_joins(Query *root, List *old_rels) * Returns a list of new join relations. */ List * -make_rels_by_clause_joins(Query *root, RelOptInfo *old_rel, - List *joininfo_list, Relids only_relids) +make_rels_by_clause_joins(Query *root, RelOptInfo * old_rel, + List *joininfo_list, Relids only_relids) { List *join_list = NIL; List *i = NIL; foreach(i, joininfo_list) - { + { JoinInfo *joininfo = (JoinInfo *) lfirst(i); RelOptInfo *joined_rel; Relids unjoined_relids = joininfo->unjoined_relids; @@ -104,29 +105,29 @@ make_rels_by_clause_joins(Query *root, RelOptInfo *old_rel, { if (length(unjoined_relids) == 1 && (only_relids == NIL || - /* geqo only wants certain relids to make new rels */ + /* geqo only wants certain relids to make new rels */ intMember(lfirsti(unjoined_relids), only_relids))) { joined_rel = make_join_rel(old_rel, - get_base_rel(root, - lfirsti(unjoined_relids)), - joininfo); + get_base_rel(root, + lfirsti(unjoined_relids)), + joininfo); join_list = lappend(join_list, joined_rel); /* Right-sided plan */ if (length(old_rel->relids) > 1) { joined_rel = make_join_rel( - get_base_rel(root, lfirsti(unjoined_relids)), - old_rel, - joininfo); + get_base_rel(root, lfirsti(unjoined_relids)), + old_rel, + joininfo); join_list = lappend(join_list, joined_rel); } } - if (only_relids == NIL) /* no bushy from geqo */ + if (only_relids == NIL) /* no bushy from geqo */ { - List *r; + List *r; foreach(r, root->join_rel_list) { @@ -134,11 +135,11 @@ make_rels_by_clause_joins(Query *root, RelOptInfo *old_rel, Assert(length(join_rel->relids) > 1); if (is_subset(unjoined_relids, join_rel->relids) && - nonoverlap_sets(old_rel->relids, join_rel->relids)) + nonoverlap_sets(old_rel->relids, join_rel->relids)) { joined_rel = make_join_rel(old_rel, - join_rel, - joininfo); + join_rel, + joininfo); join_list = lappend(join_list, joined_rel); } } @@ -158,7 +159,7 @@ make_rels_by_clause_joins(Query *root, RelOptInfo *old_rel, * Returns a list of new join relations. */ List * -make_rels_by_clauseless_joins(RelOptInfo *old_rel, List *inner_rels) +make_rels_by_clauseless_joins(RelOptInfo * old_rel, List *inner_rels) { RelOptInfo *inner_rel; List *t_list = NIL; @@ -191,7 +192,7 @@ make_rels_by_clauseless_joins(RelOptInfo *old_rel, List *inner_rels) * Returns the new join relation node. */ RelOptInfo * -make_join_rel(RelOptInfo *outer_rel, RelOptInfo *inner_rel, JoinInfo *joininfo) +make_join_rel(RelOptInfo * outer_rel, RelOptInfo * inner_rel, JoinInfo * joininfo) { RelOptInfo *joinrel = makeNode(RelOptInfo); List *joinrel_joininfo_list = NIL; @@ -203,7 +204,7 @@ make_join_rel(RelOptInfo *outer_rel, RelOptInfo *inner_rel, JoinInfo *joininfo) * of the outer and inner join relations and then merging the results * together. */ - new_outer_tlist = new_join_tlist(outer_rel->targetlist, 1); + new_outer_tlist = new_join_tlist(outer_rel->targetlist, 1); new_inner_tlist = new_join_tlist(inner_rel->targetlist, length(new_outer_tlist) + 1); @@ -224,8 +225,8 @@ make_join_rel(RelOptInfo *outer_rel, RelOptInfo *inner_rel, JoinInfo *joininfo) joinrel->innerjoin = NIL; /* - * This function uses a trick to pass inner/outer rels as - * different lists, and then flattens it out later. bjm + * This function uses a trick to pass inner/outer rels as different + * lists, and then flattens it out later. bjm */ joinrel->relids = lcons(outer_rel->relids, lcons(inner_rel->relids, NIL)); @@ -236,10 +237,10 @@ make_join_rel(RelOptInfo *outer_rel, RelOptInfo *inner_rel, JoinInfo *joininfo) joinrel->restrictinfo = joininfo->jinfo_restrictinfo; joinrel_joininfo_list = new_joininfo_list( - nconc(copyObject(outer_rel->joininfo), - copyObject(inner_rel->joininfo)), - nconc(listCopy(outer_rel->relids), - listCopy(inner_rel->relids))); + nconc(copyObject(outer_rel->joininfo), + copyObject(inner_rel->joininfo)), + nconc(listCopy(outer_rel->relids), + listCopy(inner_rel->relids))); joinrel->joininfo = joinrel_joininfo_list; @@ -278,12 +279,16 @@ new_join_tlist(List *tlist, foreach(i, tlist) { xtl = lfirst(i); - /* XXX surely this is wrong? join_list is never changed? tgl 2/99 */ + + /* + * XXX surely this is wrong? join_list is never changed? tgl + * 2/99 + */ in_final_tlist = (join_list == NIL); if (in_final_tlist) { resdomno += 1; - t_list = lappend(t_list,create_tl_element(get_expr(xtl), resdomno)); + t_list = lappend(t_list, create_tl_element(get_expr(xtl), resdomno)); } } @@ -335,8 +340,8 @@ new_joininfo_list(List *joininfo_list, Relids join_relids) if (other_joininfo) { other_joininfo->jinfo_restrictinfo = (List *) - LispUnion(joininfo->jinfo_restrictinfo, - other_joininfo->jinfo_restrictinfo); + LispUnion(joininfo->jinfo_restrictinfo, + other_joininfo->jinfo_restrictinfo); } else { @@ -393,7 +398,7 @@ get_cheapest_complete_rel(List *join_rel_list) } if (final) if (final_rel == NULL || - path_is_cheaper(rel->cheapestpath, final_rel->cheapestpath)) + path_is_cheaper(rel->cheapestpath, final_rel->cheapestpath)) final_rel = rel; } @@ -431,7 +436,7 @@ is_subset(List *s1, List *s2) } static void -set_joinrel_size(RelOptInfo *joinrel, RelOptInfo *outer_rel, RelOptInfo *inner_rel, JoinInfo *jinfo) +set_joinrel_size(RelOptInfo * joinrel, RelOptInfo * outer_rel, RelOptInfo * inner_rel, JoinInfo * jinfo) { int ntuples; float selec; diff --git a/src/backend/optimizer/path/mergeutils.c b/src/backend/optimizer/path/mergeutils.c index a5bc8d96980..8d8255cabb9 100644 --- a/src/backend/optimizer/path/mergeutils.c +++ b/src/backend/optimizer/path/mergeutils.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/path/Attic/mergeutils.c,v 1.21 1999/04/03 00:18:28 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/path/Attic/mergeutils.c,v 1.22 1999/05/25 16:09:27 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -37,7 +37,7 @@ * * 'restrictinfo_list' is the list of restrictinfo nodes * 'inner_relids' is the list of relids in the inner join relation - * (used to determine whether a join var is inner or outer) + * (used to determine whether a join var is inner or outer) * * Returns the new list of mergeinfo nodes. * @@ -56,6 +56,7 @@ group_clauses_by_order(List *restrictinfo_list, if (merge_ordering) { + /* * Create a new mergeinfo node and add it to 'mergeinfo_list' * if one does not yet exist for this merge ordering. @@ -63,8 +64,8 @@ group_clauses_by_order(List *restrictinfo_list, Expr *clause = restrictinfo->clause; Var *leftop = get_leftop(clause); Var *rightop = get_rightop(clause); - PathOrder *pathorder; - MergeInfo *xmergeinfo; + PathOrder *pathorder; + MergeInfo *xmergeinfo; JoinKey *jmkeys; pathorder = makeNode(PathOrder); @@ -91,9 +92,9 @@ group_clauses_by_order(List *restrictinfo_list, } xmergeinfo->jmethod.clauses = lcons(clause, - xmergeinfo->jmethod.clauses); + xmergeinfo->jmethod.clauses); xmergeinfo->jmethod.jmkeys = lcons(jmkeys, - xmergeinfo->jmethod.jmkeys); + xmergeinfo->jmethod.jmkeys); } } return mergeinfo_list; @@ -108,7 +109,7 @@ group_clauses_by_order(List *restrictinfo_list, * Returns the node if it exists. * */ -MergeInfo * +MergeInfo * match_order_mergeinfo(PathOrder *ordering, List *mergeinfo_list) { MergeOrder *xmergeorder; @@ -116,12 +117,12 @@ match_order_mergeinfo(PathOrder *ordering, List *mergeinfo_list) foreach(xmergeinfo, mergeinfo_list) { - MergeInfo *mergeinfo = (MergeInfo *) lfirst(xmergeinfo); + MergeInfo *mergeinfo = (MergeInfo *) lfirst(xmergeinfo); xmergeorder = mergeinfo->m_ordering; if ((ordering->ordtype == MERGE_ORDER && - equal_merge_ordering(ordering->ord.merge, xmergeorder)) || + equal_merge_ordering(ordering->ord.merge, xmergeorder)) || (ordering->ordtype == SORTOP_ORDER && equal_path_merge_ordering(ordering->ord.sortop, xmergeorder))) { diff --git a/src/backend/optimizer/path/orindxpath.c b/src/backend/optimizer/path/orindxpath.c index 833d00c82fa..4c257212185 100644 --- a/src/backend/optimizer/path/orindxpath.c +++ b/src/backend/optimizer/path/orindxpath.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/path/orindxpath.c,v 1.23 1999/03/08 14:01:55 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/path/orindxpath.c,v 1.24 1999/05/25 16:09:27 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -31,10 +31,9 @@ #include "parser/parsetree.h" -static void -best_or_subclause_indices(Query *root, RelOptInfo *rel, List *subclauses, -List *indices, List **indexids, Cost *cost, Cost *selec); -static void best_or_subclause_index(Query *root, RelOptInfo *rel, Expr *subclause, +static void best_or_subclause_indices(Query *root, RelOptInfo * rel, List *subclauses, + List *indices, List **indexids, Cost *cost, Cost *selec); +static void best_or_subclause_index(Query *root, RelOptInfo * rel, Expr *subclause, List *indices, int *indexid, Cost *cost, Cost *selec); @@ -50,7 +49,7 @@ static void best_or_subclause_index(Query *root, RelOptInfo *rel, Expr *subclaus */ List * create_or_index_paths(Query *root, - RelOptInfo *rel, List *clauses) + RelOptInfo * rel, List *clauses) { List *t_list = NIL; List *clist; @@ -88,7 +87,7 @@ create_or_index_paths(Query *root, IndexPath *pathnode = makeNode(IndexPath); List *indexids = NIL; Cost cost; - Cost selec; + Cost selec; best_or_subclause_indices(root, rel, @@ -101,14 +100,15 @@ create_or_index_paths(Query *root, pathnode->path.pathtype = T_IndexScan; pathnode->path.parent = rel; pathnode->path.pathorder = makeNode(PathOrder); - pathnode->path.pathorder->ordtype = SORTOP_ORDER; - /* - * This is an IndexScan, but it does index lookups based - * on the order of the fields specified in the WHERE clause, - * not in any order, so the sortop is NULL. + pathnode->path.pathorder->ordtype = SORTOP_ORDER; + + /* + * This is an IndexScan, but it does index lookups based + * on the order of the fields specified in the WHERE + * clause, not in any order, so the sortop is NULL. */ - pathnode->path.pathorder->ord.sortop = NULL; - pathnode->path.pathkeys = NIL; + pathnode->path.pathorder->ord.sortop = NULL; + pathnode->path.pathkeys = NIL; pathnode->indexqual = lcons(clausenode, NIL); pathnode->indexid = indexids; @@ -119,14 +119,12 @@ create_or_index_paths(Query *root, * processing -- JMH, 7/7/92 */ pathnode->path.loc_restrictinfo = set_difference(copyObject((Node *) rel->restrictinfo), - lcons(clausenode, NIL)); + lcons(clausenode, NIL)); -#ifdef NOT_USED /* fix xfunc */ +#ifdef NOT_USED /* fix xfunc */ /* add in cost for expensive functions! -- JMH, 7/7/92 */ if (XfuncMode != XFUNC_OFF) - { ((Path *) pathnode)->path_cost += xfunc_get_path_cost((Path) pathnode); - } #endif clausenode->selectivity = (Cost) selec; t_list = lappend(t_list, pathnode); @@ -158,18 +156,18 @@ create_or_index_paths(Query *root, */ static void best_or_subclause_indices(Query *root, - RelOptInfo *rel, + RelOptInfo * rel, List *subclauses, List *indices, List **indexids, /* return value */ - Cost *cost, /* return value */ - Cost *selec) /* return value */ + Cost *cost, /* return value */ + Cost *selec) /* return value */ { - List *slist; + List *slist; *selec = (Cost) 0.0; *cost = (Cost) 0.0; - + foreach(slist, subclauses) { int best_indexid; @@ -207,7 +205,7 @@ best_or_subclause_indices(Query *root, */ static void best_or_subclause_index(Query *root, - RelOptInfo *rel, + RelOptInfo * rel, Expr *subclause, List *indices, int *retIndexid, /* return value */ diff --git a/src/backend/optimizer/path/pathkeys.c b/src/backend/optimizer/path/pathkeys.c index 09a5b8a51f1..eee8a027a83 100644 --- a/src/backend/optimizer/path/pathkeys.c +++ b/src/backend/optimizer/path/pathkeys.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/path/pathkeys.c,v 1.9 1999/05/17 00:26:33 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/path/pathkeys.c,v 1.10 1999/05/25 16:09:28 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -26,9 +26,9 @@ #include "optimizer/ordering.h" static int match_pathkey_joinkeys(List *pathkey, List *joinkeys, - int outer_or_inner); + int outer_or_inner); static List *new_join_pathkey(List *pathkeys, List *join_rel_tlist, - List *joinclauses); + List *joinclauses); /*-------------------- @@ -41,7 +41,7 @@ static List *new_join_pathkey(List *pathkeys, List *join_rel_tlist, * of generating the relation and the resulting ordering of the tuples. * Sequential scan Paths have NIL pathkeys, indicating no known ordering. * Index scans have Path.pathkeys that represent the chosen index. - * A single-key index pathkeys would be { {tab1_indexkey1} }. For a + * A single-key index pathkeys would be { {tab1_indexkey1} }. For a * multi-key index pathkeys would be { {tab1_indexkey1}, {tab1_indexkey2} }, * indicating major sort by indexkey1 and minor sort by indexkey2. * @@ -70,12 +70,12 @@ static List *new_join_pathkey(List *pathkeys, List *join_rel_tlist, * executor might have to split the join into multiple batches. * * NestJoin does not perform sorting, and allows non-equijoins, so it does - * not allow useful pathkeys. (But couldn't we use the outer path's order?) + * not allow useful pathkeys. (But couldn't we use the outer path's order?) * * -- bjm *-------------------- */ - + /**************************************************************************** * KEY COMPARISONS ****************************************************************************/ @@ -111,11 +111,11 @@ static List *new_join_pathkey(List *pathkeys, List *join_rel_tlist, */ bool order_joinkeys_by_pathkeys(List *pathkeys, - List *joinkeys, - List *joinclauses, - int outer_or_inner, - List **matchedJoinKeysPtr, - List **matchedJoinClausesPtr) + List *joinkeys, + List *joinclauses, + int outer_or_inner, + List **matchedJoinKeysPtr, + List **matchedJoinClausesPtr) { List *matched_joinkeys = NIL; List *matched_joinclauses = NIL; @@ -123,9 +123,10 @@ order_joinkeys_by_pathkeys(List *pathkeys, List *i = NIL; int matched_joinkey_index = -1; int matched_keys = 0; + /* - * Reorder the joinkeys by picking out one that matches each pathkey, - * and create a new joinkey/joinclause list in pathkey order + * Reorder the joinkeys by picking out one that matches each pathkey, + * and create a new joinkey/joinclause list in pathkey order */ foreach(i, pathkeys) { @@ -138,34 +139,36 @@ order_joinkeys_by_pathkeys(List *pathkeys, matched_keys++; if (matchedJoinKeysPtr) { - JoinKey *joinkey = nth(matched_joinkey_index, joinkeys); + JoinKey *joinkey = nth(matched_joinkey_index, joinkeys); + matched_joinkeys = lappend(matched_joinkeys, joinkey); } - + if (matchedJoinClausesPtr) { Expr *joinclause = nth(matched_joinkey_index, joinclauses); + Assert(joinclauses); matched_joinclauses = lappend(matched_joinclauses, joinclause); } } else - /* A pathkey could not be matched. */ + /* A pathkey could not be matched. */ break; } /* - * Did we fail to match all the joinkeys? - * Extra pathkeys are no problem. + * Did we fail to match all the joinkeys? Extra pathkeys are no + * problem. */ if (matched_keys != length(joinkeys)) { - if (matchedJoinKeysPtr) - *matchedJoinKeysPtr = NIL; - if (matchedJoinClausesPtr) - *matchedJoinClausesPtr = NIL; - return false; + if (matchedJoinKeysPtr) + *matchedJoinKeysPtr = NIL; + if (matchedJoinClausesPtr) + *matchedJoinClausesPtr = NIL; + return false; } if (matchedJoinKeysPtr) @@ -190,7 +193,8 @@ match_pathkey_joinkeys(List *pathkey, { Var *key; int pos; - List *i, *x; + List *i, + *x; JoinKey *jk; foreach(i, pathkey) @@ -232,9 +236,9 @@ match_pathkey_joinkeys(List *pathkey, */ Path * get_cheapest_path_for_joinkeys(List *joinkeys, - PathOrder *ordering, - List *paths, - int outer_or_inner) + PathOrder *ordering, + List *paths, + int outer_or_inner) { Path *matched_path = NULL; List *i; @@ -243,7 +247,7 @@ get_cheapest_path_for_joinkeys(List *joinkeys, { Path *path = (Path *) lfirst(i); int better_sort; - + if (order_joinkeys_by_pathkeys(path->pathkeys, joinkeys, NIL, outer_or_inner, NULL, NULL) && pathorder_match(ordering, path->pathorder, &better_sort) && @@ -274,8 +278,8 @@ get_cheapest_path_for_joinkeys(List *joinkeys, */ List * make_pathkeys_from_joinkeys(List *joinkeys, - List *tlist, - int outer_or_inner) + List *tlist, + int outer_or_inner) { List *pathkeys = NIL; List *jk; @@ -284,7 +288,8 @@ make_pathkeys_from_joinkeys(List *joinkeys, { JoinKey *jkey = (JoinKey *) lfirst(jk); Var *key; - List *p, *p2; + List *p, + *p2; bool found = false; key = (Var *) extract_join_key(jkey, outer_or_inner); @@ -292,17 +297,19 @@ make_pathkeys_from_joinkeys(List *joinkeys, /* check to see if it is in the target list */ if (matching_tlist_var(key, tlist)) { + /* - * Include it in the pathkeys list if we haven't already done so + * Include it in the pathkeys list if we haven't already done + * so */ foreach(p, pathkeys) { List *pathkey = lfirst(p); - + foreach(p2, pathkey) { Var *pkey = lfirst(p2); - + if (equal(key, pkey)) { found = true; @@ -371,7 +378,7 @@ new_join_pathkeys(List *outer_pathkeys, * * Note that each returned pathkey is the var node found in * 'join_rel_tlist' rather than the joinclause var node. - * (Is this important?) Also, we return a fully copied list + * (Is this important?) Also, we return a fully copied list * that does not share any subnodes with existing data structures. * (Is that important, either?) * @@ -393,7 +400,7 @@ new_join_pathkey(List *pathkey, Expr *tlist_key; Assert(key); - + tlist_key = matching_tlist_var(key, join_rel_tlist); if (tlist_key && !member(tlist_key, new_pathkey)) new_pathkey = lcons(copyObject(tlist_key), new_pathkey); @@ -404,8 +411,8 @@ new_join_pathkey(List *pathkey, Expr *tlist_other_var; tlist_other_var = matching_tlist_var( - other_join_clause_var(key, joinclause), - join_rel_tlist); + other_join_clause_var(key, joinclause), + join_rel_tlist); if (tlist_other_var && !member(tlist_other_var, new_pathkey)) new_pathkey = lcons(copyObject(tlist_other_var), new_pathkey); } diff --git a/src/backend/optimizer/path/prune.c b/src/backend/optimizer/path/prune.c index 3d60c09f6cc..da52363cc87 100644 --- a/src/backend/optimizer/path/prune.c +++ b/src/backend/optimizer/path/prune.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/path/Attic/prune.c,v 1.37 1999/02/18 00:49:21 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/path/Attic/prune.c,v 1.38 1999/05/25 16:09:28 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -24,7 +24,7 @@ #include "utils/elog.h" -static List *merge_rel_with_same_relids(RelOptInfo *rel, Relids unjoined_relids); +static List *merge_rel_with_same_relids(RelOptInfo * rel, Relids unjoined_relids); /* * merge_rels_with_same_relids @@ -59,7 +59,7 @@ merge_rels_with_same_relids(List *rel_list) * */ static List * -merge_rel_with_same_relids(RelOptInfo *rel, Relids unjoined_relids) +merge_rel_with_same_relids(RelOptInfo * rel, Relids unjoined_relids) { List *i = NIL; List *result = NIL; @@ -69,9 +69,10 @@ merge_rel_with_same_relids(RelOptInfo *rel, Relids unjoined_relids) RelOptInfo *unjoined_rel = (RelOptInfo *) lfirst(i); if (same(rel->relids, unjoined_rel->relids)) + /* - * This are on the same relations, - * so get the best of their pathlists. + * This are on the same relations, so get the best of their + * pathlists. */ rel->pathlist = add_pathlist(rel, rel->pathlist, @@ -92,7 +93,7 @@ rels_set_cheapest(List *rel_list) { List *x = NIL; RelOptInfo *rel = (RelOptInfo *) NULL; - JoinPath *cheapest; + JoinPath *cheapest; foreach(x, rel_list) { diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c index d228f9d058d..c72d31ca10a 100644 --- a/src/backend/optimizer/plan/createplan.c +++ b/src/backend/optimizer/plan/createplan.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/createplan.c,v 1.55 1999/05/18 21:34:29 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/createplan.c,v 1.56 1999/05/25 16:09:34 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -42,18 +42,18 @@ #define NONAME_SORT 1 -#define NONAME_MATERIAL 2 +#define NONAME_MATERIAL 2 static List *switch_outer(List *clauses); static Oid *generate_merge_input_sortorder(List *pathkeys, - MergeOrder *mergeorder); + MergeOrder *mergeorder); static Scan *create_scan_node(Path *best_path, List *tlist); static Join *create_join_node(JoinPath *best_path, List *tlist); static SeqScan *create_seqscan_node(Path *best_path, List *tlist, List *scan_clauses); static IndexScan *create_indexscan_node(IndexPath *best_path, List *tlist, List *scan_clauses); -static NestLoop *create_nestloop_node(NestPath *best_path, List *tlist, +static NestLoop *create_nestloop_node(NestPath * best_path, List *tlist, List *clauses, Plan *outer_node, List *outer_tlist, Plan *inner_node, List *inner_tlist); static MergeJoin *create_mergejoin_node(MergePath *best_path, List *tlist, @@ -64,7 +64,7 @@ static HashJoin *create_hashjoin_node(HashPath *best_path, List *tlist, Plan *inner_node, List *inner_tlist); static Node *fix_indxqual_references(Node *clause, Path *index_path); static Noname *make_noname(List *tlist, List *pathkeys, Oid *operators, - Plan *plan_node, int nonametype); + Plan *plan_node, int nonametype); static IndexScan *make_indexscan(List *qptlist, List *qpqual, Index scanrelid, List *indxid, List *indxqual, List *indxqualorig); static NestLoop *make_nestloop(List *qptlist, List *qpqual, Plan *lefttree, @@ -133,7 +133,7 @@ create_plan(Path *best_path) pages = 1; plan_node->plan_tupperpage = tuples / pages; -#ifdef NOT_USED /* fix xfunc */ +#ifdef NOT_USED /* fix xfunc */ /* sort clauses by cost/(1-selectivity) -- JMH 2/26/92 */ if (XfuncMode != XFUNC_OFF) { @@ -197,7 +197,7 @@ create_scan_node(Path *best_path, List *tlist) } /* - * create_join_node + * create_join_node * Create a join path for 'best_path' and(recursively) paths for its * inner and outer paths. * @@ -263,7 +263,7 @@ create_join_node(JoinPath *best_path, List *tlist) /* * * Expensive function pullups may have pulled local predicates * - * into this path node. Put them in the qpqual of the plan node. * + * into this path node. Put them in the qpqual of the plan node. * * JMH, 6/15/92 */ if (get_loc_restrictinfo(best_path) != NIL) @@ -400,11 +400,11 @@ create_indexscan_node(IndexPath *best_path, fixed_indxqual = (List *) fix_indxqual_references((Node *) indxqual, (Path *) best_path); scan_node = make_indexscan(tlist, - qpqual, - lfirsti(best_path->path.parent->relids), - best_path->indexid, - fixed_indxqual, - indxqual); + qpqual, + lfirsti(best_path->path.parent->relids), + best_path->indexid, + fixed_indxqual, + indxqual); scan_node->scan.plan.cost = best_path->path.path_cost; @@ -418,7 +418,7 @@ create_indexscan_node(IndexPath *best_path, *****************************************************************************/ static NestLoop * -create_nestloop_node(NestPath *best_path, +create_nestloop_node(NestPath * best_path, List *tlist, List *clauses, Plan *outer_node, @@ -471,7 +471,7 @@ create_nestloop_node(NestPath *best_path, clauses = set_difference(clauses, inner_indxqual); /* XXX */ new_inner_qual = index_outerjoin_references(inner_indxqual, - outer_node->targetlist, + outer_node->targetlist, ((Scan *) inner_node)->scanrelid); ((IndexScan *) inner_node)->indxqual = lcons(new_inner_qual, NIL); } @@ -479,10 +479,10 @@ create_nestloop_node(NestPath *best_path, else if (IsA_Join(inner_node)) { inner_node = (Plan *) make_noname(inner_tlist, - NIL, - NULL, - inner_node, - NONAME_MATERIAL); + NIL, + NULL, + inner_node, + NONAME_MATERIAL); } join_node = make_nestloop(tlist, @@ -535,8 +535,9 @@ create_mergejoin_node(MergePath *best_path, if (best_path->outersortkeys) { Oid *outer_order = generate_merge_input_sortorder( - best_path->outersortkeys, - best_path->jpath.path.pathorder->ord.merge); + best_path->outersortkeys, + best_path->jpath.path.pathorder->ord.merge); + outer_node = (Plan *) make_noname(outer_tlist, best_path->outersortkeys, outer_order, @@ -547,8 +548,9 @@ create_mergejoin_node(MergePath *best_path, if (best_path->innersortkeys) { Oid *inner_order = generate_merge_input_sortorder( - best_path->innersortkeys, - best_path->jpath.path.pathorder->ord.merge); + best_path->innersortkeys, + best_path->jpath.path.pathorder->ord.merge); + inner_node = (Plan *) make_noname(inner_tlist, best_path->innersortkeys, inner_order, @@ -595,17 +597,17 @@ create_hashjoin_node(HashPath *best_path, * and set those clauses to contain references to lower attributes. */ qpqual = join_references(set_difference(clauses, - best_path->path_hashclauses), - outer_tlist, - inner_tlist); + best_path->path_hashclauses), + outer_tlist, + inner_tlist); /* * Now set the references in the hashclauses and rearrange them so * that the outer variable is always on the left. */ hashclauses = switch_outer(join_references(best_path->path_hashclauses, - outer_tlist, - inner_tlist)); + outer_tlist, + inner_tlist)); innerhashkey = get_rightop(lfirst(hashclauses)); @@ -671,20 +673,22 @@ fix_indxqual_references(Node *clause, Path *index_path) is_funcclause((Node *) get_leftop((Expr *) clause)) && ((Func *) ((Expr *) get_leftop((Expr *) clause))->oper)->funcisindex) { - /* This looks pretty seriously wrong to me, but I'm not sure what it's - * supposed to be doing ... tgl 5/99 + + /* + * This looks pretty seriously wrong to me, but I'm not sure what + * it's supposed to be doing ... tgl 5/99 */ Var *newvar = makeVar((Index) lfirsti(index_path->parent->relids), - 1, /* func indices have one key */ - ((Func *) ((Expr *) clause)->oper)->functype, - -1, - 0, - (Index) lfirsti(index_path->parent->relids), - 0); + 1, /* func indices have one key */ + ((Func *) ((Expr *) clause)->oper)->functype, + -1, + 0, + (Index) lfirsti(index_path->parent->relids), + 0); return ((Node *) make_opclause((Oper *) ((Expr *) clause)->oper, - newvar, - get_rightop((Expr *) clause))); + newvar, + get_rightop((Expr *) clause))); } else if (IsA(clause, Expr)) @@ -696,6 +700,7 @@ fix_indxqual_references(Node *clause, Path *index_path) foreach(i, expr->args) { Node *subclause = lfirst(i); + new_subclauses = lappend(new_subclauses, fix_indxqual_references(subclause, index_path)); @@ -711,6 +716,7 @@ fix_indxqual_references(Node *clause, Path *index_path) foreach(i, (List *) clause) { Node *subclause = lfirst(i); + new_subclauses = lappend(new_subclauses, fix_indxqual_references(subclause, index_path)); @@ -768,15 +774,17 @@ switch_outer(List *clauses) foreach(i, clauses) { clause = lfirst(i); - Assert(is_opclause((Node*) clause)); + Assert(is_opclause((Node *) clause)); op = (Node *) get_rightop(clause); - Assert(op != (Node*) NULL); + Assert(op != (Node *) NULL); if (IsA(op, ArrayRef)) op = ((ArrayRef *) op)->refexpr; Assert(IsA(op, Var)); if (var_is_outer((Var *) op)) { - /* Duplicate just enough of the structure to allow commuting + + /* + * Duplicate just enough of the structure to allow commuting * the clause without changing the original list. Could use * copyObject, but a complete deep copy is overkill. */ @@ -812,13 +820,14 @@ static Oid * generate_merge_input_sortorder(List *pathkeys, MergeOrder *mergeorder) { int listlength = length(pathkeys); - Oid *result = (Oid*) palloc(sizeof(Oid) * (listlength+1)); + Oid *result = (Oid *) palloc(sizeof(Oid) * (listlength + 1)); Oid *nextsortop = result; List *p; foreach(p, pathkeys) { - Var *pkey = (Var*) lfirst((List*) lfirst(p)); + Var *pkey = (Var *) lfirst((List *) lfirst(p)); + Assert(IsA(pkey, Var)); if (pkey->vartype == mergeorder->left_type) *nextsortop++ = mergeorder->left_operator; @@ -826,7 +835,7 @@ generate_merge_input_sortorder(List *pathkeys, MergeOrder *mergeorder) *nextsortop++ = mergeorder->right_operator; else elog(ERROR, - "generate_merge_input_sortorder: can't handle data type %d", + "generate_merge_input_sortorder: can't handle data type %d", pkey->vartype); } *nextsortop++ = InvalidOid; @@ -859,12 +868,13 @@ set_noname_tlist_operators(List *tlist, List *pathkeys, Oid *operators) resdom = tlist_member((Var *) pathkey, tlist); if (resdom) { + /* - * Order the resdom pathkey and replace the operator OID for each - * key with the regproc OID. + * Order the resdom pathkey and replace the operator OID for + * each key with the regproc OID. */ resdom->reskey = keyno; - resdom->reskeyop = get_opcode(operators[keyno-1]); + resdom->reskeyop = get_opcode(operators[keyno - 1]); } keyno += 1; } @@ -878,7 +888,7 @@ set_noname_tlist_operators(List *tlist, List *pathkeys, Oid *operators) */ static void -copy_costsize (Plan *dest, Plan *src) +copy_costsize(Plan *dest, Plan *src) { if (src) { @@ -915,10 +925,10 @@ copy_costsize (Plan *dest, Plan *src) */ static Noname * make_noname(List *tlist, - List *pathkeys, - Oid *operators, - Plan *plan_node, - int nonametype) + List *pathkeys, + Oid *operators, + Plan *plan_node, + int nonametype) { List *noname_tlist; Noname *retval = NULL; @@ -931,22 +941,22 @@ make_noname(List *tlist, { case NONAME_SORT: retval = (Noname *) make_seqscan(tlist, - NIL, - _NONAME_RELATION_ID_, - (Plan *) make_sort(noname_tlist, - _NONAME_RELATION_ID_, - plan_node, - length(pathkeys))); + NIL, + _NONAME_RELATION_ID_, + (Plan *) make_sort(noname_tlist, + _NONAME_RELATION_ID_, + plan_node, + length(pathkeys))); break; case NONAME_MATERIAL: retval = (Noname *) make_seqscan(tlist, - NIL, - _NONAME_RELATION_ID_, - (Plan *) make_material(noname_tlist, - _NONAME_RELATION_ID_, - plan_node, - length(pathkeys))); + NIL, + _NONAME_RELATION_ID_, + (Plan *) make_material(noname_tlist, + _NONAME_RELATION_ID_, + plan_node, + length(pathkeys))); break; default: @@ -1014,8 +1024,9 @@ make_nestloop(List *qptlist, NestLoop *node = makeNode(NestLoop); Plan *plan = &node->join; - /* this cost estimate is entirely bogus... - * hopefully it will be overwritten by caller. + /* + * this cost estimate is entirely bogus... hopefully it will be + * overwritten by caller. */ plan->cost = (lefttree ? lefttree->cost : 0) + (righttree ? righttree->cost : 0); @@ -1039,8 +1050,9 @@ make_hashjoin(List *tlist, HashJoin *node = makeNode(HashJoin); Plan *plan = &node->join; - /* this cost estimate is entirely bogus... - * hopefully it will be overwritten by caller. + /* + * this cost estimate is entirely bogus... hopefully it will be + * overwritten by caller. */ plan->cost = (lefttree ? lefttree->cost : 0) + (righttree ? righttree->cost : 0); @@ -1082,8 +1094,9 @@ make_mergejoin(List *tlist, MergeJoin *node = makeNode(MergeJoin); Plan *plan = &node->join; - /* this cost estimate is entirely bogus... - * hopefully it will be overwritten by caller. + /* + * this cost estimate is entirely bogus... hopefully it will be + * overwritten by caller. */ plan->cost = (lefttree ? lefttree->cost : 0) + (righttree ? righttree->cost : 0); @@ -1142,7 +1155,7 @@ make_agg(List *tlist, Plan *lefttree) { Agg *node = makeNode(Agg); - copy_costsize(& node->plan, lefttree); + copy_costsize(&node->plan, lefttree); node->plan.state = (EState *) NULL; node->plan.qual = NULL; node->plan.targetlist = tlist; @@ -1162,7 +1175,7 @@ make_group(List *tlist, { Group *node = makeNode(Group); - copy_costsize(& node->plan, (Plan *) lefttree); + copy_costsize(&node->plan, (Plan *) lefttree); node->plan.state = (EState *) NULL; node->plan.qual = NULL; node->plan.targetlist = tlist; diff --git a/src/backend/optimizer/plan/initsplan.c b/src/backend/optimizer/plan/initsplan.c index 0b54bd8c4bc..592f6e02031 100644 --- a/src/backend/optimizer/plan/initsplan.c +++ b/src/backend/optimizer/plan/initsplan.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/initsplan.c,v 1.29 1999/02/22 05:26:21 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/initsplan.c,v 1.30 1999/05/25 16:09:36 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -40,7 +40,7 @@ extern int Quiet; static void add_restrict_and_join_to_rel(Query *root, List *clause); -static void add_join_info_to_rels(Query *root, RestrictInfo *restrictinfo, +static void add_join_info_to_rels(Query *root, RestrictInfo * restrictinfo, Relids join_relids); static void add_vars_to_targetlist(Query *root, List *vars, Relids join_relids); @@ -183,6 +183,7 @@ add_restrict_and_join_to_rel(Query *root, List *clause) if (length(relids) == 1) { + /* * There is only one relation participating in 'clause', so * 'clause' must be a restriction clause. @@ -207,11 +208,13 @@ add_restrict_and_join_to_rel(Query *root, List *clause) } else { + /* * 'clause' is a join clause, since there is more than one atom in * the relid list. */ if (is_funcclause((Node *) clause)) + /* * XXX If we have a func clause set selectivity to 1/3, really * need a true selectivity function. @@ -237,8 +240,8 @@ add_restrict_and_join_to_rel(Query *root, List *clause) * */ static void -add_join_info_to_rels(Query *root, RestrictInfo *restrictinfo, - Relids join_relids) +add_join_info_to_rels(Query *root, RestrictInfo * restrictinfo, + Relids join_relids) { List *join_relid; @@ -247,7 +250,7 @@ add_join_info_to_rels(Query *root, RestrictInfo *restrictinfo, { JoinInfo *joininfo; Relids unjoined_relids = NIL; - List *rel; + List *rel; /* Get the relids not equal to the current relid */ foreach(rel, join_relids) @@ -259,7 +262,7 @@ add_join_info_to_rels(Query *root, RestrictInfo *restrictinfo, joininfo = find_joininfo_node(get_base_rel(root, lfirsti(join_relid)), unjoined_relids); joininfo->jinfo_restrictinfo = lcons(copyObject((void *) restrictinfo), - joininfo->jinfo_restrictinfo); + joininfo->jinfo_restrictinfo); } } @@ -375,7 +378,7 @@ mergejoinop(Expr *clause) rightOp; bool sortable; - if (!is_opclause((Node*) clause)) + if (!is_opclause((Node *) clause)) return NULL; left = get_leftop(clause); @@ -384,7 +387,7 @@ mergejoinop(Expr *clause) /* caution: is_opclause accepts more than I do, so check it */ if (!right) return NULL; /* unary opclauses need not apply */ - if (!IsA(left, Var) || !IsA(right, Var)) + if (!IsA(left, Var) ||!IsA(right, Var)) return NULL; opno = ((Oper *) clause->oper)->opno; @@ -422,7 +425,7 @@ hashjoinop(Expr *clause) Var *left, *right; - if (!is_opclause((Node*) clause)) + if (!is_opclause((Node *) clause)) return InvalidOid; left = get_leftop(clause); @@ -431,7 +434,7 @@ hashjoinop(Expr *clause) /* caution: is_opclause accepts more than I do, so check it */ if (!right) return InvalidOid; /* unary opclauses need not apply */ - if (!IsA(left, Var) || !IsA(right, Var)) + if (!IsA(left, Var) ||!IsA(right, Var)) return InvalidOid; return op_hashjoinable(((Oper *) clause->oper)->opno, diff --git a/src/backend/optimizer/plan/planmain.c b/src/backend/optimizer/plan/planmain.c index 0708e963b4b..dae0443e1e8 100644 --- a/src/backend/optimizer/plan/planmain.c +++ b/src/backend/optimizer/plan/planmain.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planmain.c,v 1.35 1999/05/03 00:38:43 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planmain.c,v 1.36 1999/05/25 16:09:36 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -154,7 +154,7 @@ query_planner(Query *root, else return (Plan *) scan; } - break; + break; default: return (Plan *) NULL; } @@ -195,9 +195,9 @@ query_planner(Query *root, * tree. -- Wei * * Note: formerly there was a test here to skip the flatten call if we - * expected union_planner to insert a Group or Agg node above our result. - * However, now union_planner tells us exactly what it wants returned, - * and we just do it. Much cleaner. + * expected union_planner to insert a Group or Agg node above our + * result. However, now union_planner tells us exactly what it wants + * returned, and we just do it. Much cleaner. */ else { @@ -207,6 +207,7 @@ query_planner(Query *root, } #ifdef NOT_USED + /* * Destructively modify the query plan's targetlist to add fjoin lists * to flatten functions that return sets of base types @@ -251,7 +252,7 @@ subplanner(Query *root, final_rel = make_one_rel(root, root->base_rel_list); -#ifdef NOT_USED /* fix xfunc */ +#ifdef NOT_USED /* fix xfunc */ /* * Perform Predicate Migration on each path, to optimize and correctly diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c index 86977028f7b..65327a12631 100644 --- a/src/backend/optimizer/plan/planner.c +++ b/src/backend/optimizer/plan/planner.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planner.c,v 1.53 1999/05/17 17:03:15 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planner.c,v 1.54 1999/05/25 16:09:37 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -56,10 +56,10 @@ #include "parser/parse_oper.h" static List *make_subplanTargetList(Query *parse, List *tlist, - AttrNumber **groupColIdx); + AttrNumber **groupColIdx); static Plan *make_groupplan(List *group_tlist, bool tuplePerGroup, - List *groupClause, AttrNumber *grpColIdx, - Plan *subplan); + List *groupClause, AttrNumber *grpColIdx, + Plan *subplan); static bool need_sortplan(List *sortcls, Plan *plan); static Plan *make_sortplan(List *tlist, List *sortcls, Plan *plannode); @@ -113,12 +113,12 @@ union_planner(Query *parse) if (parse->unionClause) { - result_plan = (Plan *) plan_union_queries(parse); - /* XXX do we need to do this? bjm 12/19/97 */ - tlist = preprocess_targetlist(tlist, - parse->commandType, - parse->resultRelation, - parse->rtable); + result_plan = (Plan *) plan_union_queries(parse); + /* XXX do we need to do this? bjm 12/19/97 */ + tlist = preprocess_targetlist(tlist, + parse->commandType, + parse->resultRelation, + parse->rtable); } else if ((rt_index = first_inherit_rt_entry(rangetable)) != -1) { @@ -127,78 +127,80 @@ union_planner(Query *parse) result_plan = (Plan *) plan_inherit_queries(parse, rt_index); /* XXX do we need to do this? bjm 12/19/97 */ tlist = preprocess_targetlist(tlist, - parse->commandType, - parse->resultRelation, - parse->rtable); + parse->commandType, + parse->resultRelation, + parse->rtable); } else { - List **vpm = NULL; - List *sub_tlist; + List **vpm = NULL; + List *sub_tlist; - /* Preprocess targetlist in case we are inside an INSERT/UPDATE. */ - tlist = preprocess_targetlist(tlist, - parse->commandType, - parse->resultRelation, - parse->rtable); + /* Preprocess targetlist in case we are inside an INSERT/UPDATE. */ + tlist = preprocess_targetlist(tlist, + parse->commandType, + parse->resultRelation, + parse->rtable); - /* Add row-mark targets for UPDATE - * (should this be done in preprocess_targetlist?) - */ - if (parse->rowMark != NULL) - { - List *l; + /* + * Add row-mark targets for UPDATE (should this be done in + * preprocess_targetlist?) + */ + if (parse->rowMark != NULL) + { + List *l; + + foreach(l, parse->rowMark) + { + RowMark *rowmark = (RowMark *) lfirst(l); + TargetEntry *ctid; + Resdom *resdom; + Var *var; + char *resname; + + if (!(rowmark->info & ROW_MARK_FOR_UPDATE)) + continue; + + resname = (char *) palloc(32); + sprintf(resname, "ctid%u", rowmark->rti); + resdom = makeResdom(length(tlist) + 1, + TIDOID, + -1, + resname, + 0, + 0, + true); + + var = makeVar(rowmark->rti, -1, TIDOID, + -1, 0, rowmark->rti, -1); + + ctid = makeTargetEntry(resdom, (Node *) var); + tlist = lappend(tlist, ctid); + } + } + + /* + * Generate appropriate target list for subplan; may be different + * from tlist if grouping or aggregation is needed. + */ + sub_tlist = make_subplanTargetList(parse, tlist, &groupColIdx); - foreach (l, parse->rowMark) + /* Generate the (sub) plan */ + if (parse->rtable != NULL) { - RowMark *rowmark = (RowMark*) lfirst(l); - TargetEntry *ctid; - Resdom *resdom; - Var *var; - char *resname; - - if (!(rowmark->info & ROW_MARK_FOR_UPDATE)) - continue; - - resname = (char*) palloc(32); - sprintf(resname, "ctid%u", rowmark->rti); - resdom = makeResdom(length(tlist) + 1, - TIDOID, - -1, - resname, - 0, - 0, - true); - - var = makeVar(rowmark->rti, -1, TIDOID, - -1, 0, rowmark->rti, -1); - - ctid = makeTargetEntry(resdom, (Node *) var); - tlist = lappend(tlist, ctid); + vpm = (List **) palloc(length(parse->rtable) * sizeof(List *)); + memset(vpm, 0, length(parse->rtable) * sizeof(List *)); } - } - - /* Generate appropriate target list for subplan; may be different - * from tlist if grouping or aggregation is needed. - */ - sub_tlist = make_subplanTargetList(parse, tlist, &groupColIdx); - - /* Generate the (sub) plan */ - if (parse->rtable != NULL) - { - vpm = (List **) palloc(length(parse->rtable) * sizeof(List *)); - memset(vpm, 0, length(parse->rtable) * sizeof(List *)); - } - PlannerVarParam = lcons(vpm, PlannerVarParam); - result_plan = query_planner(parse, - parse->commandType, - sub_tlist, - (List *) parse->qual); - PlannerVarParam = lnext(PlannerVarParam); - if (vpm != NULL) - pfree(vpm); + PlannerVarParam = lcons(vpm, PlannerVarParam); + result_plan = query_planner(parse, + parse->commandType, + sub_tlist, + (List *) parse->qual); + PlannerVarParam = lnext(PlannerVarParam); + if (vpm != NULL) + pfree(vpm); } - + /* * If we have a GROUP BY clause, insert a group node (with the * appropriate sort node.) @@ -216,7 +218,8 @@ union_planner(Query *parse) */ tuplePerGroup = parse->hasAggs; - /* If there are aggregates then the Group node should just return + /* + * If there are aggregates then the Group node should just return * the same (simplified) tlist as the subplan, which we indicate * to make_groupplan by passing NIL. If there are no aggregates * then the Group node had better compute the final tlist. @@ -235,7 +238,7 @@ union_planner(Query *parse) */ if (parse->havingQual) { - List **vpm = NULL; + List **vpm = NULL; if (parse->rtable != NULL) { @@ -249,15 +252,20 @@ union_planner(Query *parse) if (parse->hasSubLinks) { - /* There is a subselect in the havingQual, so we have to process it - * using the same function as for a subselect in 'where' + + /* + * There is a subselect in the havingQual, so we have to + * process it using the same function as for a subselect in + * 'where' */ parse->havingQual = (Node *) SS_process_sublinks(parse->havingQual); - /* Check for ungrouped variables passed to subplans. - * (Probably this should be done by the parser, but right now - * the parser is not smart enough to tell which level the vars - * belong to?) + + /* + * Check for ungrouped variables passed to subplans. (Probably + * this should be done by the parser, but right now the parser + * is not smart enough to tell which level the vars belong + * to?) */ check_having_for_ungrouped_vars(parse->havingQual, parse->groupClause, @@ -269,7 +277,7 @@ union_planner(Query *parse) PlannerVarParam = lnext(PlannerVarParam); if (vpm != NULL) - pfree(vpm); + pfree(vpm); } /* @@ -283,22 +291,22 @@ union_planner(Query *parse) result_plan->qual = (List *) parse->havingQual; /* - * Update vars to refer to subplan result tuples, - * find Aggrefs, make sure there is an Aggref in every HAVING clause. + * Update vars to refer to subplan result tuples, find Aggrefs, + * make sure there is an Aggref in every HAVING clause. */ - if (! set_agg_tlist_references((Agg *) result_plan)) + if (!set_agg_tlist_references((Agg *) result_plan)) elog(ERROR, "SELECT/HAVING requires aggregates to be valid"); /* * Check that we actually found some aggregates, else executor * will die unpleasantly. (The rewrite module currently has bugs - * that allow hasAggs to be incorrectly set 'true' sometimes. - * It's not easy to recover here, since we've already made decisions + * that allow hasAggs to be incorrectly set 'true' sometimes. It's + * not easy to recover here, since we've already made decisions * assuming there will be an Agg node.) */ if (((Agg *) result_plan)->aggs == NIL) elog(ERROR, "union_planner: query is marked hasAggs, but I don't see any"); - } + } /* * For now, before we hand back the plan, check to see if there is a @@ -363,7 +371,7 @@ union_planner(Query *parse) * SELECT a+1, ... GROUP BY a+1 * Note, however, that other varnodes in the parent's targetlist (and * havingQual, if any) will still need to be updated to refer to outputs - * of the subplan. This routine is quite large enough already, so we do + * of the subplan. This routine is quite large enough already, so we do * that later. *--------------- */ @@ -384,13 +392,15 @@ make_subplanTargetList(Query *parse, *groupColIdx = NULL; - /* If we're not grouping or aggregating, nothing to do here; + /* + * If we're not grouping or aggregating, nothing to do here; * query_planner should receive the unmodified target list. */ if (!parse->hasAggs && !parse->groupClause && !parse->havingQual) return tlist; - /* If grouping, make a working copy of groupClause list (which we use + /* + * If grouping, make a working copy of groupClause list (which we use * just to verify that we found all the groupClause items in tlist). * Also allocate space to remember where the group columns are in the * subplan tlist. @@ -403,14 +413,14 @@ make_subplanTargetList(Query *parse, *groupColIdx = grpColIdx; } - sub_tlist = new_unsorted_tlist(tlist); /* make a modifiable copy */ + sub_tlist = new_unsorted_tlist(tlist); /* make a modifiable copy */ /* * Step 1: build grpColIdx by finding targetlist items that match * GroupBy entries. If there are aggregates, remove non-GroupBy items * from sub_tlist, and reset its resnos accordingly. When we leave an - * expression in the subplan tlist, modify the parent tlist to copy the - * value from the subplan output rather than re-evaluating it. + * expression in the subplan tlist, modify the parent tlist to copy + * the value from the subplan output rather than re-evaluating it. */ prnt_tlist = tlist; /* scans parent tlist in sync with sl */ foreach(sl, sub_tlist) @@ -434,23 +444,28 @@ make_subplanTargetList(Query *parse, resdom->reskey = keyno; resdom->reskeyop = get_opcode(grpcl->grpOpoid); grpColIdx[keyno - 1] = next_resno; - /* Remove groupclause from our list of unmatched groupclauses. - * NB: this depends on having used a shallow listCopy() above. + + /* + * Remove groupclause from our list of unmatched + * groupclauses. NB: this depends on having used a shallow + * listCopy() above. */ - glc = lremove((void*) grpcl, glc); + glc = lremove((void *) grpcl, glc); break; } } - if (! foundGroupClause) + if (!foundGroupClause) { + /* * Non-GroupBy entry: remove it from subplan if there are - * aggregates in query - it will be evaluated by Aggregate plan. - * But do not remove simple-Var entries; we'd just have to add - * them back anyway, and we risk confusing INSERT/UPDATE. + * aggregates in query - it will be evaluated by Aggregate + * plan. But do not remove simple-Var entries; we'd just have + * to add them back anyway, and we risk confusing + * INSERT/UPDATE. */ - if (parse->hasAggs && ! IsA(te->expr, Var)) + if (parse->hasAggs && !IsA(te->expr, Var)) keepInSubPlan = false; } @@ -458,15 +473,16 @@ make_subplanTargetList(Query *parse, { /* Assign new sequential resnos to subplan tlist items */ resdom->resno = next_resno++; - if (! IsA(parentte->expr, Var)) + if (!IsA(parentte->expr, Var)) { - /* Since the item is being computed in the subplan, - * we can just make a Var node to reference it in the - * outer plan, rather than recomputing it there. - * Note we use varnoold = -1 as a flag to let - * replace_vars_with_subplan_refs know it needn't change - * this Var node. - * If it's only a Var anyway, we leave it alone for now; + + /* + * Since the item is being computed in the subplan, we can + * just make a Var node to reference it in the outer plan, + * rather than recomputing it there. Note we use varnoold + * = -1 as a flag to let replace_vars_with_subplan_refs + * know it needn't change this Var node. If it's only a + * Var anyway, we leave it alone for now; * replace_vars_with_subplan_refs will fix it later. */ parentte->expr = (Node *) makeVar(1, resdom->resno, @@ -477,9 +493,11 @@ make_subplanTargetList(Query *parse, } else { - /* Remove this tlist item from the subplan, but remember the - * vars it needs. The outer tlist item probably needs changes, - * but that will happen later. + + /* + * Remove this tlist item from the subplan, but remember the + * vars it needs. The outer tlist item probably needs + * changes, but that will happen later. */ sub_tlist = lremove(te, sub_tlist); extravars = nconc(extravars, pull_var_clause(te->expr)); @@ -493,8 +511,8 @@ make_subplanTargetList(Query *parse, elog(ERROR, "make_subplanTargetList: GROUP BY attribute not found in target list"); /* - * Add subplan targets for any variables needed by removed tlist entries - * that aren't otherwise mentioned in the subplan target list. + * Add subplan targets for any variables needed by removed tlist + * entries that aren't otherwise mentioned in the subplan target list. * We'll also need targets for any variables seen only in HAVING. */ extravars = nconc(extravars, pull_var_clause(parse->havingQual)); @@ -505,9 +523,11 @@ make_subplanTargetList(Query *parse, if (tlist_member(v, sub_tlist) == NULL) { - /* Make sure sub_tlist element is a fresh object not shared with - * any other structure; not sure if anything will break if it is - * shared, but better to be safe... + + /* + * Make sure sub_tlist element is a fresh object not shared + * with any other structure; not sure if anything will break + * if it is shared, but better to be safe... */ sub_tlist = lappend(sub_tlist, create_tl_element((Var *) copyObject(v), @@ -535,9 +555,9 @@ make_groupplan(List *group_tlist, /* * Make the targetlist for the Sort node; it always just references * each of the corresponding target items of the subplan. We need to - * ensure that simple Vars in the subplan's target list are recognizable - * by replace_vars_with_subplan_refs when it's applied to the Sort/Group - * target list, so copy up their varnoold/varoattno. + * ensure that simple Vars in the subplan's target list are + * recognizable by replace_vars_with_subplan_refs when it's applied to + * the Sort/Group target list, so copy up their varnoold/varoattno. */ sort_tlist = NIL; foreach(sl, subplan->targetlist) @@ -548,7 +568,8 @@ make_groupplan(List *group_tlist, if (IsA(te->expr, Var)) { - Var *subvar = (Var *) te->expr; + Var *subvar = (Var *) te->expr; + newvar = makeVar(1, resdom->resno, resdom->restype, resdom->restypmod, 0, subvar->varnoold, subvar->varoattno); @@ -561,8 +582,8 @@ make_groupplan(List *group_tlist, } sort_tlist = lappend(sort_tlist, - makeTargetEntry((Resdom *) copyObject(resdom), - (Node *) newvar)); + makeTargetEntry((Resdom *) copyObject(resdom), + (Node *) newvar)); } /* @@ -575,20 +596,19 @@ make_groupplan(List *group_tlist, sortplan->plan.cost = subplan->cost; /* XXX assume no cost */ /* - * If the caller gave us a target list, use it after fixing the variables. - * If not, we need the same sort of "repeater" tlist as for the Sort node. + * If the caller gave us a target list, use it after fixing the + * variables. If not, we need the same sort of "repeater" tlist as for + * the Sort node. */ if (group_tlist) { - group_tlist = copyObject(group_tlist); /* necessary?? */ + group_tlist = copyObject(group_tlist); /* necessary?? */ replace_tlist_with_subplan_refs(group_tlist, (Index) 0, subplan->targetlist); } else - { group_tlist = copyObject(sort_tlist); - } /* * Make the Group node @@ -686,7 +706,7 @@ pg_checkretval(Oid rettype, List *queryTreeList) int i; /* find the final query */ - parse = (Query *) nth(length(queryTreeList)-1, queryTreeList); + parse = (Query *) nth(length(queryTreeList) - 1, queryTreeList); /* * test 1: if the last query is a utility invocation, then there had @@ -787,7 +807,7 @@ pg_checkretval(Oid rettype, List *queryTreeList) tlist = lnext(tlist); tletype = exprType(thenode); -#ifdef NOT_USED /* fix me */ +#ifdef NOT_USED /* fix me */ /* this is tedious */ if (IsA(thenode, Var)) tletype = (Oid) ((Var *) thenode)->vartype; @@ -830,11 +850,12 @@ pg_checkretval(Oid rettype, List *queryTreeList) static TargetEntry * get_matching_tle(Plan *plan, Resdom *resdom) { - List *i; - TargetEntry *tle; + List *i; + TargetEntry *tle; - foreach (i, plan->targetlist) { - tle = (TargetEntry *)lfirst(i); + foreach(i, plan->targetlist) + { + tle = (TargetEntry *) lfirst(i); if (tle->resdom->resno == resdom->resno) return tle; } @@ -853,50 +874,45 @@ static bool need_sortplan(List *sortcls, Plan *plan) { Relation indexRel; - IndexScan *indexScan; - Oid indexId; - List *i; + IndexScan *indexScan; + Oid indexId; + List *i; HeapTuple htup; - Form_pg_index index_tup; - int key_no = 0; + Form_pg_index index_tup; + int key_no = 0; /* ---------- * Must be an IndexScan * ---------- */ - if (nodeTag(plan) != T_IndexScan) { + if (nodeTag(plan) != T_IndexScan) return TRUE; - } - indexScan = (IndexScan *)plan; + indexScan = (IndexScan *) plan; /* ---------- * Should not have left- or righttree * ---------- */ - if (plan->lefttree != NULL) { + if (plan->lefttree != NULL) return TRUE; - } - if (plan->righttree != NULL) { + if (plan->righttree != NULL) return TRUE; - } /* ---------- * Must be a single index scan * ---------- */ - if (length(indexScan->indxid) != 1) { + if (length(indexScan->indxid) != 1) return TRUE; - } /* ---------- * Indices can only have up to 8 attributes. So an ORDER BY using * more that 8 attributes could never be satisfied by an index. * ---------- */ - if (length(sortcls) > 8) { + if (length(sortcls) > 8) return TRUE; - } /* ---------- * The choosen Index must be a btree @@ -905,7 +921,8 @@ need_sortplan(List *sortcls, Plan *plan) indexId = lfirsti(indexScan->indxid); indexRel = index_open(indexId); - if (strcmp(nameout(&(indexRel->rd_am->amname)), "btree") != 0) { + if (strcmp(nameout(&(indexRel->rd_am->amname)), "btree") != 0) + { heap_close(indexRel); return TRUE; } @@ -916,34 +933,36 @@ need_sortplan(List *sortcls, Plan *plan) * ---------- */ htup = SearchSysCacheTuple(INDEXRELID, - ObjectIdGetDatum(indexId), 0, 0, 0); - if (!HeapTupleIsValid(htup)) { + ObjectIdGetDatum(indexId), 0, 0, 0); + if (!HeapTupleIsValid(htup)) elog(ERROR, "cache lookup for index %u failed", indexId); - } index_tup = (Form_pg_index) GETSTRUCT(htup); /* ---------- * Check if all the sort clauses match the attributes in the index * ---------- */ - foreach (i, sortcls) { - SortClause *sortcl; - Resdom *resdom; - TargetEntry *tle; - Var *var; + foreach(i, sortcls) + { + SortClause *sortcl; + Resdom *resdom; + TargetEntry *tle; + Var *var; sortcl = (SortClause *) lfirst(i); resdom = sortcl->resdom; tle = get_matching_tle(plan, resdom); - if (tle == NULL) { + if (tle == NULL) + { /* ---------- * Could this happen? * ---------- */ return TRUE; } - if (nodeTag(tle->expr) != T_Var) { + if (nodeTag(tle->expr) != T_Var) + { /* ---------- * The target list expression isn't a var, so it * cannot be the indexed attribute @@ -951,9 +970,10 @@ need_sortplan(List *sortcls, Plan *plan) */ return TRUE; } - var = (Var *)(tle->expr); + var = (Var *) (tle->expr); - if (var->varno != indexScan->scan.scanrelid) { + if (var->varno != indexScan->scan.scanrelid) + { /* ---------- * This Var isn't from the scan relation. So it isn't * that of the index @@ -962,7 +982,8 @@ need_sortplan(List *sortcls, Plan *plan) return TRUE; } - if (var->varattno != index_tup->indkey[key_no]) { + if (var->varattno != index_tup->indkey[key_no]) + { /* ---------- * It isn't the indexed attribute. * ---------- @@ -970,7 +991,8 @@ need_sortplan(List *sortcls, Plan *plan) return TRUE; } - if (oprid(oper("<", resdom->restype, resdom->restype, FALSE)) != sortcl->opoid) { + if (oprid(oper("<", resdom->restype, resdom->restype, FALSE)) != sortcl->opoid) + { /* ---------- * Sort order isn't in ascending order. * ---------- @@ -987,4 +1009,3 @@ need_sortplan(List *sortcls, Plan *plan) */ return FALSE; } - diff --git a/src/backend/optimizer/plan/setrefs.c b/src/backend/optimizer/plan/setrefs.c index ee3250080ce..31d1205a45c 100644 --- a/src/backend/optimizer/plan/setrefs.c +++ b/src/backend/optimizer/plan/setrefs.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/setrefs.c,v 1.46 1999/05/12 15:01:39 wieck Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/setrefs.c,v 1.47 1999/05/25 16:09:39 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -35,13 +35,13 @@ static void set_join_tlist_references(Join *join); static void set_nonamescan_tlist_references(SeqScan *nonamescan); -static void set_noname_tlist_references(Noname *noname); +static void set_noname_tlist_references(Noname * noname); static Node *replace_clause_joinvar_refs(Node *clause, - List *outer_tlist, - List *inner_tlist); + List *outer_tlist, + List *inner_tlist); static Var *replace_joinvar_refs(Var *var, - List *outer_tlist, - List *inner_tlist); + List *outer_tlist, + List *inner_tlist); static List *tlist_noname_references(Oid nonameid, List *tlist); static bool OperandIsInner(Node *opnd, int inner_relid); static List *pull_agg_clause(Node *clause); @@ -114,11 +114,12 @@ set_join_tlist_references(Join *join) foreach(entry, qptlist) { TargetEntry *xtl = (TargetEntry *) lfirst(entry); - Node *joinvar = replace_clause_joinvar_refs(xtl->expr, - outer_tlist, - inner_tlist); + Node *joinvar = replace_clause_joinvar_refs(xtl->expr, + outer_tlist, + inner_tlist); + new_join_targetlist = lappend(new_join_targetlist, - makeTargetEntry(xtl->resdom, joinvar)); + makeTargetEntry(xtl->resdom, joinvar)); } ((Plan *) join)->targetlist = new_join_targetlist; @@ -144,7 +145,7 @@ set_nonamescan_tlist_references(SeqScan *nonamescan) Noname *noname = (Noname *) ((Plan *) nonamescan)->lefttree; ((Plan *) nonamescan)->targetlist = tlist_noname_references(noname->nonameid, - ((Plan *) nonamescan)->targetlist); + ((Plan *) nonamescan)->targetlist); set_noname_tlist_references(noname); } @@ -160,7 +161,7 @@ set_nonamescan_tlist_references(SeqScan *nonamescan) * */ static void -set_noname_tlist_references(Noname *noname) +set_noname_tlist_references(Noname * noname) { Plan *source = ((Plan *) noname)->lefttree; @@ -168,7 +169,7 @@ set_noname_tlist_references(Noname *noname) { set_tlist_references(source); ((Plan *) noname)->targetlist = copy_vars(((Plan *) noname)->targetlist, - (source)->targetlist); + (source)->targetlist); } else elog(ERROR, "calling set_noname_tlist_references with empty lefttree"); @@ -235,9 +236,9 @@ index_outerjoin_references(List *inner_indxqual, if (OperandIsInner((Node *) get_rightop(clause), inner_relid)) { Var *joinvar = (Var *) - replace_clause_joinvar_refs((Node *) get_leftop(clause), - outer_tlist, - NIL); + replace_clause_joinvar_refs((Node *) get_leftop(clause), + outer_tlist, + NIL); temp = make_opclause(replace_opid((Oper *) ((Expr *) clause)->oper), joinvar, @@ -248,9 +249,9 @@ index_outerjoin_references(List *inner_indxqual, { /* inner scan on left */ Var *joinvar = (Var *) - replace_clause_joinvar_refs((Node *) get_rightop(clause), - outer_tlist, - NIL); + replace_clause_joinvar_refs((Node *) get_rightop(clause), + outer_tlist, + NIL); temp = make_opclause(replace_opid((Oper *) ((Expr *) clause)->oper), get_leftop(clause), @@ -290,8 +291,9 @@ replace_clause_joinvar_refs(Node *clause, return NULL; if (IsA(clause, Var)) { - Var *temp = replace_joinvar_refs((Var *) clause, - outer_tlist, inner_tlist); + Var *temp = replace_joinvar_refs((Var *) clause, + outer_tlist, inner_tlist); + if (temp != NULL) return (Node *) temp; else @@ -344,32 +346,32 @@ replace_clause_joinvar_refs(Node *clause, else if (is_funcclause(clause)) { return (Node *) make_funcclause( - (Func *) ((Expr *) clause)->oper, - (List *) replace_clause_joinvar_refs( - (Node *) ((Expr *) clause)->args, - outer_tlist, - inner_tlist)); + (Func *) ((Expr *) clause)->oper, + (List *) replace_clause_joinvar_refs( + (Node *) ((Expr *) clause)->args, + outer_tlist, + inner_tlist)); } else if (not_clause(clause)) { return (Node *) make_notclause((Expr *) - replace_clause_joinvar_refs( - (Node *) get_notclausearg((Expr *) clause), - outer_tlist, - inner_tlist)); + replace_clause_joinvar_refs( + (Node *) get_notclausearg((Expr *) clause), + outer_tlist, + inner_tlist)); } else if (is_opclause(clause)) { return (Node *) make_opclause( - replace_opid((Oper *) ((Expr *) clause)->oper), - (Var *) replace_clause_joinvar_refs( - (Node *) get_leftop((Expr *) clause), - outer_tlist, - inner_tlist), - (Var *) replace_clause_joinvar_refs( - (Node *) get_rightop((Expr *) clause), - outer_tlist, - inner_tlist)); + replace_opid((Oper *) ((Expr *) clause)->oper), + (Var *) replace_clause_joinvar_refs( + (Node *) get_leftop((Expr *) clause), + outer_tlist, + inner_tlist), + (Var *) replace_clause_joinvar_refs( + (Node *) get_rightop((Expr *) clause), + outer_tlist, + inner_tlist)); } else if (IsA(clause, List)) { @@ -379,25 +381,26 @@ replace_clause_joinvar_refs(Node *clause, foreach(subclause, (List *) clause) { t_list = lappend(t_list, - replace_clause_joinvar_refs(lfirst(subclause), - outer_tlist, - inner_tlist)); + replace_clause_joinvar_refs(lfirst(subclause), + outer_tlist, + inner_tlist)); } return (Node *) t_list; } else if (is_subplan(clause)) { /* This is a tad wasteful of space, but it works... */ - Expr *newclause = (Expr *) copyObject(clause); + Expr *newclause = (Expr *) copyObject(clause); + newclause->args = (List *) replace_clause_joinvar_refs((Node *) newclause->args, outer_tlist, inner_tlist); ((SubPlan *) newclause->oper)->sublink->oper = (List *) replace_clause_joinvar_refs( - (Node *) ((SubPlan *) newclause->oper)->sublink->oper, - outer_tlist, - inner_tlist); + (Node *) ((SubPlan *) newclause->oper)->sublink->oper, + outer_tlist, + inner_tlist); return (Node *) newclause; } else if (IsA(clause, CaseExpr)) @@ -406,7 +409,8 @@ replace_clause_joinvar_refs(Node *clause, CaseExpr *newnode = makeNode(CaseExpr); newnode->casetype = oldnode->casetype; - newnode->arg = oldnode->arg; /* XXX should always be null anyway ... */ + newnode->arg = oldnode->arg; /* XXX should always be null + * anyway ... */ newnode->args = (List *) replace_clause_joinvar_refs((Node *) oldnode->args, outer_tlist, @@ -494,7 +498,7 @@ replace_joinvar_refs(Var *var, List *outer_tlist, List *inner_tlist) */ static List * tlist_noname_references(Oid nonameid, - List *tlist) + List *tlist) { List *t_list = NIL; TargetEntry *noname = (TargetEntry *) NULL; @@ -512,13 +516,13 @@ tlist_noname_references(Oid nonameid, oattno = 0; noname = makeTargetEntry(xtl->resdom, - (Node *) makeVar(nonameid, - xtl->resdom->resno, - xtl->resdom->restype, - xtl->resdom->restypmod, - 0, - nonameid, - oattno)); + (Node *) makeVar(nonameid, + xtl->resdom->resno, + xtl->resdom->restype, + xtl->resdom->restypmod, + 0, + nonameid, + oattno)); t_list = lappend(t_list, noname); } @@ -573,11 +577,12 @@ replace_tlist_with_subplan_refs(List *tlist, Index subvarno, List *subplanTargetList) { - List *t; + List *t; foreach(t, tlist) { TargetEntry *entry = (TargetEntry *) lfirst(t); + replace_vars_with_subplan_refs((Node *) get_expr(entry), subvarno, subplanTargetList); } @@ -609,19 +614,20 @@ replace_vars_with_subplan_refs(Node *clause, return; if (IsA(clause, Var)) { + /* * Ha! A Var node! * * It could be that this varnode has been created by make_groupplan - * and is already set up to reference the subplan target list. - * We recognize that case by varno = 1, varnoold = -1, - * varattno = varoattno, and varlevelsup = 0. (Probably ought to - * have an explicit flag, but this should do for now.) + * and is already set up to reference the subplan target list. We + * recognize that case by varno = 1, varnoold = -1, varattno = + * varoattno, and varlevelsup = 0. (Probably ought to have an + * explicit flag, but this should do for now.) */ - Var *var = (Var *) clause; + Var *var = (Var *) clause; TargetEntry *subplanVar; - if (var->varno == (Index) 1 && + if (var->varno == (Index) 1 && var->varnoold == ((Index) -1) && var->varattno == var->varoattno && var->varlevelsup == 0) @@ -629,7 +635,7 @@ replace_vars_with_subplan_refs(Node *clause, /* Otherwise it had better be in the subplan list. */ subplanVar = match_varid(var, subplanTargetList); - if (! subplanVar) + if (!subplanVar) elog(ERROR, "replace_vars_with_subplan_refs: variable not in target list"); /* @@ -656,10 +662,11 @@ replace_vars_with_subplan_refs(Node *clause, } else if (IsA(clause, Expr)) { + /* - * Recursively scan the arguments of an expression. - * NOTE: this must come after is_subplan() case since - * subplan is a kind of Expr node. + * Recursively scan the arguments of an expression. NOTE: this + * must come after is_subplan() case since subplan is a kind of + * Expr node. */ foreach(t, ((Expr *) clause)->args) replace_vars_with_subplan_refs(lfirst(t), @@ -671,6 +678,7 @@ replace_vars_with_subplan_refs(Node *clause, else if (IsA(clause, ArrayRef)) { ArrayRef *aref = (ArrayRef *) clause; + foreach(t, aref->refupperindexpr) replace_vars_with_subplan_refs(lfirst(t), subvarno, subplanTargetList); @@ -687,6 +695,7 @@ replace_vars_with_subplan_refs(Node *clause, foreach(t, ((CaseExpr *) clause)->args) { CaseWhen *when = (CaseWhen *) lfirst(t); + replace_vars_with_subplan_refs(when->expr, subvarno, subplanTargetList); replace_vars_with_subplan_refs(when->result, @@ -767,15 +776,16 @@ set_agg_tlist_references(Agg *aggNode) all_quals_ok = true; foreach(ql, aggNode->plan.qual) { - Node *qual = lfirst(ql); - List *qualaggs; + Node *qual = lfirst(ql); + List *qualaggs; replace_vars_with_subplan_refs(qual, (Index) 0, subplanTargetList); qualaggs = pull_agg_clause(qual); if (qualaggs == NIL) - all_quals_ok = false; /* this qual clause has no agg functions! */ + all_quals_ok = false; /* this qual clause has no agg + * functions! */ else aggNode->aggs = nconc(qualaggs, aggNode->aggs); } @@ -800,7 +810,7 @@ pull_agg_clause(Node *clause) return pull_agg_clause(((Iter *) clause)->iterexpr); else if (is_subplan(clause)) { - SubLink *sublink = ((SubPlan *) ((Expr *) clause)->oper)->sublink; + SubLink *sublink = ((SubPlan *) ((Expr *) clause)->oper)->sublink; /* * Only the lefthand side of the sublink should be checked for @@ -814,10 +824,11 @@ pull_agg_clause(Node *clause) } else if (IsA(clause, Expr)) { + /* - * Recursively scan the arguments of an expression. - * NOTE: this must come after is_subplan() case since - * subplan is a kind of Expr node. + * Recursively scan the arguments of an expression. NOTE: this + * must come after is_subplan() case since subplan is a kind of + * Expr node. */ foreach(t, ((Expr *) clause)->args) agg_list = nconc(pull_agg_clause(lfirst(t)), agg_list); @@ -830,6 +841,7 @@ pull_agg_clause(Node *clause) else if (IsA(clause, ArrayRef)) { ArrayRef *aref = (ArrayRef *) clause; + foreach(t, aref->refupperindexpr) agg_list = nconc(pull_agg_clause(lfirst(t)), agg_list); foreach(t, aref->reflowerindexpr) @@ -842,6 +854,7 @@ pull_agg_clause(Node *clause) foreach(t, ((CaseExpr *) clause)->args) { CaseWhen *when = (CaseWhen *) lfirst(t); + agg_list = nconc(agg_list, pull_agg_clause(when->expr)); agg_list = nconc(agg_list, pull_agg_clause(when->result)); } @@ -951,7 +964,7 @@ del_agg_clause(Node *clause) * GROUP BY clauses and checks for subplans in the havingQual that are being * passed ungrouped variables as parameters. In other contexts, ungrouped * vars in the havingQual will be detected by the parser (see parse_agg.c, - * exprIsAggOrGroupCol()). But that routine currently does not check subplans, + * exprIsAggOrGroupCol()). But that routine currently does not check subplans, * because the necessary info is not computed until the planner runs. * This ought to be cleaned up someday. * @@ -962,7 +975,7 @@ del_agg_clause(Node *clause) void check_having_for_ungrouped_vars(Node *clause, List *groupClause, - List *targetList) + List *targetList) { List *t; @@ -971,8 +984,10 @@ check_having_for_ungrouped_vars(Node *clause, List *groupClause, if (IsA(clause, Var)) { - /* Ignore vars elsewhere in the having clause, since the - * parser already checked 'em. + + /* + * Ignore vars elsewhere in the having clause, since the parser + * already checked 'em. */ } else if (single_node(clause)) @@ -986,20 +1001,21 @@ check_having_for_ungrouped_vars(Node *clause, List *groupClause, } else if (is_subplan(clause)) { + /* - * The args list of the subplan node represents attributes from outside - * passed into the sublink. + * The args list of the subplan node represents attributes from + * outside passed into the sublink. */ foreach(t, ((Expr *) clause)->args) { - bool contained_in_group_clause = false; + bool contained_in_group_clause = false; List *gl; foreach(gl, groupClause) { if (var_equal(lfirst(t), - get_groupclause_expr((GroupClause *) - lfirst(gl), targetList))) + get_groupclause_expr((GroupClause *) + lfirst(gl), targetList))) { contained_in_group_clause = true; break; @@ -1012,23 +1028,25 @@ check_having_for_ungrouped_vars(Node *clause, List *groupClause, } else if (IsA(clause, Expr)) { + /* - * Recursively scan the arguments of an expression. - * NOTE: this must come after is_subplan() case since - * subplan is a kind of Expr node. + * Recursively scan the arguments of an expression. NOTE: this + * must come after is_subplan() case since subplan is a kind of + * Expr node. */ foreach(t, ((Expr *) clause)->args) check_having_for_ungrouped_vars(lfirst(t), groupClause, - targetList); + targetList); } else if (IsA(clause, List)) { + /* * Recursively scan AND subclauses (see NOTE above). */ foreach(t, ((List *) clause)) check_having_for_ungrouped_vars(lfirst(t), groupClause, - targetList); + targetList); } else if (IsA(clause, Aggref)) { @@ -1045,24 +1063,25 @@ check_having_for_ungrouped_vars(Node *clause, List *groupClause, */ foreach(t, aref->refupperindexpr) check_having_for_ungrouped_vars(lfirst(t), groupClause, - targetList); + targetList); foreach(t, aref->reflowerindexpr) check_having_for_ungrouped_vars(lfirst(t), groupClause, - targetList); + targetList); check_having_for_ungrouped_vars(aref->refexpr, groupClause, - targetList); + targetList); check_having_for_ungrouped_vars(aref->refassgnexpr, groupClause, - targetList); + targetList); } else if (case_clause(clause)) { foreach(t, ((CaseExpr *) clause)->args) { CaseWhen *when = (CaseWhen *) lfirst(t); + check_having_for_ungrouped_vars(when->expr, groupClause, - targetList); + targetList); check_having_for_ungrouped_vars(when->result, groupClause, - targetList); + targetList); } check_having_for_ungrouped_vars(((CaseExpr *) clause)->defresult, groupClause, targetList); diff --git a/src/backend/optimizer/plan/subselect.c b/src/backend/optimizer/plan/subselect.c index a4b67ba6e0e..82eb2efceb9 100644 --- a/src/backend/optimizer/plan/subselect.c +++ b/src/backend/optimizer/plan/subselect.c @@ -338,9 +338,7 @@ SS_replace_correlation_vars(Node *expr) } } else if (IsA(expr, Iter)) - { ((Iter *) expr)->iterexpr = SS_replace_correlation_vars(((Iter *) expr)->iterexpr); - } else if (single_node(expr)) return expr; else if (or_clause(expr) || and_clause(expr) || is_opclause(expr) || @@ -398,9 +396,7 @@ SS_process_sublinks(Node *expr) ((Expr *) expr)->args = (List *) SS_process_sublinks((Node *) ((Expr *) expr)->args); else if (IsA(expr, SubLink))/* got it! */ - { expr = _make_subplan((SubLink *) expr); - } return expr; } @@ -529,13 +525,13 @@ SS_pull_subplan(Node *expr) return SS_pull_subplan(((Aggref *) expr)->target); else if (IsA(expr, ArrayRef)) { - result = SS_pull_subplan((Node *)((ArrayRef *) expr)->refupperindexpr); + result = SS_pull_subplan((Node *) ((ArrayRef *) expr)->refupperindexpr); result = nconc(result, - SS_pull_subplan((Node*) ((ArrayRef *) expr)->reflowerindexpr)); + SS_pull_subplan((Node *) ((ArrayRef *) expr)->reflowerindexpr)); result = nconc(result, SS_pull_subplan(((ArrayRef *) expr)->refexpr)); result = nconc(result, - SS_pull_subplan(((ArrayRef *) expr)->refassgnexpr)); + SS_pull_subplan(((ArrayRef *) expr)->refassgnexpr)); } else if (IsA(expr, TargetEntry)) return SS_pull_subplan(((TargetEntry *) expr)->expr); diff --git a/src/backend/optimizer/prep/prepkeyset.c b/src/backend/optimizer/prep/prepkeyset.c index 979796ffe24..914779b4f69 100644 --- a/src/backend/optimizer/prep/prepkeyset.c +++ b/src/backend/optimizer/prep/prepkeyset.c @@ -15,89 +15,90 @@ /* * Node_Copy - * a macro to simplify calling of copyObject on the specified field + * a macro to simplify calling of copyObject on the specified field */ #define Node_Copy(from, newnode, field) newnode->field = copyObject(from->field) -bool _use_keyset_query_optimizer = FALSE; +bool _use_keyset_query_optimizer = FALSE; -static int inspectOpNode(Expr *expr); -static int inspectAndNode(Expr *expr); -static int inspectOrNode(Expr *expr); -static int TotalExpr; +static int inspectOpNode(Expr *expr); +static int inspectAndNode(Expr *expr); +static int inspectOrNode(Expr *expr); +static int TotalExpr; /********************************************************************** - * This routine transforms query trees with the following form: - * SELECT a,b, ... FROM one_table WHERE - * (v1 = const1 AND v2 = const2 [ vn = constn ]) OR - * (v1 = const3 AND v2 = const4 [ vn = constn ]) OR - * (v1 = const5 AND v2 = const6 [ vn = constn ]) OR - * ... - * [(v1 = constn AND v2 = constn [ vn = constn ])] + * This routine transforms query trees with the following form: + * SELECT a,b, ... FROM one_table WHERE + * (v1 = const1 AND v2 = const2 [ vn = constn ]) OR + * (v1 = const3 AND v2 = const4 [ vn = constn ]) OR + * (v1 = const5 AND v2 = const6 [ vn = constn ]) OR + * ... + * [(v1 = constn AND v2 = constn [ vn = constn ])] * - * into + * into * - * SELECT a,b, ... FROM one_table WHERE - * (v1 = const1 AND v2 = const2 [ vn = constn ]) UNION - * SELECT a,b, ... FROM one_table WHERE - * (v1 = const3 AND v2 = const4 [ vn = constn ]) UNION - * SELECT a,b, ... FROM one_table WHERE - * (v1 = const5 AND v2 = const6 [ vn = constn ]) UNION - * ... - * SELECT a,b, ... FROM one_table WHERE - * [(v1 = constn AND v2 = constn [ vn = constn ])] + * SELECT a,b, ... FROM one_table WHERE + * (v1 = const1 AND v2 = const2 [ vn = constn ]) UNION + * SELECT a,b, ... FROM one_table WHERE + * (v1 = const3 AND v2 = const4 [ vn = constn ]) UNION + * SELECT a,b, ... FROM one_table WHERE + * (v1 = const5 AND v2 = const6 [ vn = constn ]) UNION + * ... + * SELECT a,b, ... FROM one_table WHERE + * [(v1 = constn AND v2 = constn [ vn = constn ])] * * - * To qualify for transformation the query must not be a sub select, - * a HAVING, or a GROUP BY. It must be a single table and have KSQO - * set to 'on'. + * To qualify for transformation the query must not be a sub select, + * a HAVING, or a GROUP BY. It must be a single table and have KSQO + * set to 'on'. * - * The primary use of this transformation is to avoid the exponrntial - * memory consumption of cnfify() and to make use of index access - * methods. + * The primary use of this transformation is to avoid the exponrntial + * memory consumption of cnfify() and to make use of index access + * methods. * - * daveh@insightdist.com 1998-08-31 + * daveh@insightdist.com 1998-08-31 * - * May want to also prune out duplicate terms. + * May want to also prune out duplicate terms. **********************************************************************/ void transformKeySetQuery(Query *origNode) { - /* Qualify as a key set query candidate */ - if (_use_keyset_query_optimizer == FALSE || - origNode->groupClause || - origNode->havingQual || - origNode->hasAggs || - origNode->utilityStmt || - origNode->unionClause || - origNode->unionall || - origNode->hasSubLinks || - origNode->commandType != CMD_SELECT) + /* Qualify as a key set query candidate */ + if (_use_keyset_query_optimizer == FALSE || + origNode->groupClause || + origNode->havingQual || + origNode->hasAggs || + origNode->utilityStmt || + origNode->unionClause || + origNode->unionall || + origNode->hasSubLinks || + origNode->commandType != CMD_SELECT) return; - /* Qualify single table query */ + /* Qualify single table query */ if (length(origNode->rtable) != 1) - return; - - /* Sorry about the global, not worth passing around */ - /* 9 expressions seems like a good number. More than 9 */ - /* and it starts to slow down quite a bit */ - TotalExpr = 0; - /*************************/ - /* Qualify where clause */ - /*************************/ - if ( ! inspectOrNode((Expr*)origNode->qual) || TotalExpr < 9) return; - /* Copy essential elements into a union node */ - while (((Expr*)origNode->qual)->opType == OR_EXPR) { + /* Sorry about the global, not worth passing around */ + /* 9 expressions seems like a good number. More than 9 */ + /* and it starts to slow down quite a bit */ + TotalExpr = 0; + /*************************/ + /* Qualify where clause */ + /*************************/ + if (!inspectOrNode((Expr *) origNode->qual) || TotalExpr < 9) + return; + + /* Copy essential elements into a union node */ + while (((Expr *) origNode->qual)->opType == OR_EXPR) + { Query *unionNode = makeNode(Query); - /* Pull up Expr = */ - unionNode->qual = lsecond(((Expr*)origNode->qual)->args); + /* Pull up Expr = */ + unionNode->qual = lsecond(((Expr *) origNode->qual)->args); - /* Pull up balance of tree */ - origNode->qual = lfirst(((Expr*)origNode->qual)->args); + /* Pull up balance of tree */ + origNode->qual = lfirst(((Expr *) origNode->qual)->args); unionNode->commandType = origNode->commandType; unionNode->resultRelation = origNode->resultRelation; @@ -121,37 +122,38 @@ transformKeySetQuery(Query *origNode) static int /********************************************************************** - * Checks for 1 or more OR terms w/ 1 or more AND terms. - * AND terms must be equal in size. - * Returns the number of each AND term. + * Checks for 1 or more OR terms w/ 1 or more AND terms. + * AND terms must be equal in size. + * Returns the number of each AND term. **********************************************************************/ inspectOrNode(Expr *expr) { - int rc; - Expr *firstExpr, *secondExpr; + int rc; + Expr *firstExpr, + *secondExpr; - if ( ! (expr && nodeTag(expr) == T_Expr && expr->opType == OR_EXPR)) + if (!(expr && nodeTag(expr) == T_Expr && expr->opType == OR_EXPR)) return 0; firstExpr = lfirst(expr->args); secondExpr = lsecond(expr->args); - if (nodeTag(firstExpr) != T_Expr || nodeTag(secondExpr) != T_Expr) + if (nodeTag(firstExpr) != T_Expr || nodeTag(secondExpr) != T_Expr) return 0; if (firstExpr->opType == OR_EXPR && secondExpr->opType == AND_EXPR) { - if ((rc = inspectOrNode(firstExpr)) == 0) + if ((rc = inspectOrNode(firstExpr)) == 0) return 0; - return (rc == inspectAndNode(secondExpr)) ? rc : 0; + return (rc == inspectAndNode(secondExpr)) ? rc : 0; } else if (firstExpr->opType == AND_EXPR && secondExpr->opType == AND_EXPR) { - if ((rc = inspectAndNode(firstExpr)) == 0) + if ((rc = inspectAndNode(firstExpr)) == 0) return 0; - - return (rc == inspectAndNode(secondExpr)) ? rc : 0; - + + return (rc == inspectAndNode(secondExpr)) ? rc : 0; + } return 0; @@ -160,34 +162,33 @@ inspectOrNode(Expr *expr) static int /********************************************************************** - * Check for one or more AND terms. Each sub-term must be a T_Const - * T_Var expression. - * Returns the number of AND terms. + * Check for one or more AND terms. Each sub-term must be a T_Const + * T_Var expression. + * Returns the number of AND terms. **********************************************************************/ inspectAndNode(Expr *expr) { - int rc; - Expr *firstExpr, *secondExpr; + int rc; + Expr *firstExpr, + *secondExpr; - if ( ! (expr && nodeTag(expr) == T_Expr && expr->opType == AND_EXPR)) + if (!(expr && nodeTag(expr) == T_Expr && expr->opType == AND_EXPR)) return 0; firstExpr = lfirst(expr->args); secondExpr = lsecond(expr->args); - if (nodeTag(firstExpr) != T_Expr || nodeTag(secondExpr) != T_Expr) + if (nodeTag(firstExpr) != T_Expr || nodeTag(secondExpr) != T_Expr) return 0; if (firstExpr->opType == AND_EXPR && - secondExpr->opType == OP_EXPR && inspectOpNode(secondExpr)) + secondExpr->opType == OP_EXPR && inspectOpNode(secondExpr)) { - rc = inspectAndNode(firstExpr); - return ((rc) ? (rc + 1) : 0); /* Add up the AND nodes */ + rc = inspectAndNode(firstExpr); + return ((rc) ? (rc + 1) : 0); /* Add up the AND nodes */ } - else if (firstExpr->opType == OP_EXPR && inspectOpNode(firstExpr) && - secondExpr->opType == OP_EXPR && inspectOpNode(secondExpr)) - { + else if (firstExpr->opType == OP_EXPR && inspectOpNode(firstExpr) && + secondExpr->opType == OP_EXPR && inspectOpNode(secondExpr)) return 1; - } return 0; } @@ -195,12 +196,13 @@ inspectAndNode(Expr *expr) static int /****************************************************************** - * Return TRUE if T_Var = T_Const, else FALSE - * Actually it does not test for =. Need to do this! + * Return TRUE if T_Var = T_Const, else FALSE + * Actually it does not test for =. Need to do this! ******************************************************************/ inspectOpNode(Expr *expr) { - Expr *firstExpr, *secondExpr; + Expr *firstExpr, + *secondExpr; if (nodeTag(expr) != T_Expr || expr->opType != OP_EXPR) return FALSE; @@ -209,5 +211,5 @@ inspectOpNode(Expr *expr) firstExpr = lfirst(expr->args); secondExpr = lsecond(expr->args); - return (firstExpr && secondExpr && nodeTag(firstExpr) == T_Var && nodeTag(secondExpr) == T_Const); + return (firstExpr && secondExpr && nodeTag(firstExpr) == T_Var && nodeTag(secondExpr) == T_Const); } diff --git a/src/backend/optimizer/prep/prepqual.c b/src/backend/optimizer/prep/prepqual.c index cea2939a150..aed73727044 100644 --- a/src/backend/optimizer/prep/prepqual.c +++ b/src/backend/optimizer/prep/prepqual.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/prep/prepqual.c,v 1.14 1999/02/15 01:06:59 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/prep/prepqual.c,v 1.15 1999/05/25 16:09:45 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -106,8 +106,9 @@ find_nots(Expr *qual) if (is_opclause((Node *) qual)) { - Expr *left = (Expr *) get_leftop(qual); - Expr *right = (Expr *) get_rightop(qual); + Expr *left = (Expr *) get_leftop(qual); + Expr *right = (Expr *) get_rightop(qual); + if (right) return make_clause(qual->opType, qual->oper, lcons(find_nots(left), @@ -162,8 +163,9 @@ normalize(Expr *qual) if (is_opclause((Node *) qual)) { - Expr *left = (Expr *) get_leftop(qual); - Expr *right = (Expr *) get_rightop(qual); + Expr *left = (Expr *) get_leftop(qual); + Expr *right = (Expr *) get_rightop(qual); + if (right) return make_clause(qual->opType, qual->oper, lcons(normalize(left), @@ -229,8 +231,9 @@ qual_cleanup(Expr *qual) if (is_opclause((Node *) qual)) { - Expr *left = (Expr *) get_leftop(qual); - Expr *right = (Expr *) get_rightop(qual); + Expr *left = (Expr *) get_leftop(qual); + Expr *right = (Expr *) get_rightop(qual); + if (right) return (List *) make_clause(qual->opType, qual->oper, lcons(qual_cleanup(left), @@ -295,8 +298,9 @@ pull_args(Expr *qual) if (is_opclause((Node *) qual)) { - Expr *left = (Expr *) get_leftop(qual); - Expr *right = (Expr *) get_rightop(qual); + Expr *left = (Expr *) get_leftop(qual); + Expr *right = (Expr *) get_rightop(qual); + if (right) return make_clause(qual->opType, qual->oper, lcons(pull_args(left), @@ -485,7 +489,7 @@ or_normalize(List *orlist) { return (or_normalize(lcons(distribute_args(lfirst(new_orlist), ((Expr *) distributable)->args), - lnext(new_orlist)))); + lnext(new_orlist)))); } else return orlist; @@ -537,8 +541,9 @@ remove_ands(Expr *qual) return NIL; if (is_opclause((Node *) qual)) { - Expr *left = (Expr *) get_leftop(qual); - Expr *right = (Expr *) get_rightop(qual); + Expr *left = (Expr *) get_leftop(qual); + Expr *right = (Expr *) get_rightop(qual); + if (right) return (List *) make_clause(qual->opType, qual->oper, lcons(remove_ands(left), diff --git a/src/backend/optimizer/prep/preptlist.c b/src/backend/optimizer/prep/preptlist.c index 92ab4db94d6..0256fd483b0 100644 --- a/src/backend/optimizer/prep/preptlist.c +++ b/src/backend/optimizer/prep/preptlist.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/prep/preptlist.c,v 1.20 1999/05/17 17:03:18 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/prep/preptlist.c,v 1.21 1999/05/25 16:09:46 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -211,8 +211,8 @@ replace_matching_resname(List *new_tlist, List *old_tlist) * locks. * * So, copy all these entries to the end of the target list and set their - * 'resjunk' value to true to show that these are special attributes and - * have to be treated specially by the executor! + * 'resjunk' value to true to show that these are special attributes + * and have to be treated specially by the executor! */ foreach(temp, old_tlist) { @@ -231,28 +231,27 @@ replace_matching_resname(List *new_tlist, List *old_tlist) } /* - * Also it is possible that the parser or rewriter added - * some junk attributes to hold GROUP BY expressions which - * are not part of the result attributes. - * We can simply identify them by looking at the resgroupref - * in the TLE's resdom, which is a unique number telling which - * TLE belongs to which GroupClause. + * Also it is possible that the parser or rewriter added some junk + * attributes to hold GROUP BY expressions which are not part of + * the result attributes. We can simply identify them by looking + * at the resgroupref in the TLE's resdom, which is a unique + * number telling which TLE belongs to which GroupClause. */ if (old_tle->resdom->resgroupref > 0) { - bool already_there = FALSE; - TargetEntry *new_tle; - Resdom *newresno; + bool already_there = FALSE; + TargetEntry *new_tle; + Resdom *newresno; /* * Check if the tle is already in the new list */ foreach(i, t_list) { - new_tle = (TargetEntry *)lfirst(i); + new_tle = (TargetEntry *) lfirst(i); - if (new_tle->resdom->resgroupref == - old_tle->resdom->resgroupref) + if (new_tle->resdom->resgroupref == + old_tle->resdom->resgroupref) { already_there = TRUE; break; @@ -349,8 +348,8 @@ new_relation_targetlist(Oid relid, Index rt_index, NodeTag node_type) TargetEntry *temp_list = NULL; temp_var = makeVar(rt_index, attno, atttype, - get_atttypmod(relid, attno), - 0, rt_index, attno); + get_atttypmod(relid, attno), + 0, rt_index, attno); temp_list = makeTargetEntry(makeResdom(attno, atttype, diff --git a/src/backend/optimizer/prep/prepunion.c b/src/backend/optimizer/prep/prepunion.c index 1bbfa9ef06a..6bd493a4883 100644 --- a/src/backend/optimizer/prep/prepunion.c +++ b/src/backend/optimizer/prep/prepunion.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/prep/prepunion.c,v 1.30 1999/02/18 00:49:32 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/prep/prepunion.c,v 1.31 1999/05/25 16:09:47 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -223,8 +223,8 @@ plan_inherit_queries(Query *parse, Index rt_index) List *union_relids = NIL; union_relids = find_all_inheritors(lconsi(rt_entry->relid, - NIL), - NIL); + NIL), + NIL); /* * Remove the flag for this relation, since we're about to handle it diff --git a/src/backend/optimizer/util/clauses.c b/src/backend/optimizer/util/clauses.c index 0dbd65cd5d4..8d02a66e76b 100644 --- a/src/backend/optimizer/util/clauses.c +++ b/src/backend/optimizer/util/clauses.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/util/clauses.c,v 1.33 1999/05/10 00:45:24 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/util/clauses.c,v 1.34 1999/05/25 16:09:50 momjian Exp $ * * HISTORY * AUTHOR DATE MAJOR EVENT @@ -84,7 +84,7 @@ bool is_opclause(Node *clause) { return (clause != NULL && - nodeTag(clause) == T_Expr && ((Expr *) clause)->opType == OP_EXPR); + nodeTag(clause) == T_Expr && ((Expr *) clause)->opType == OP_EXPR); } /* @@ -163,7 +163,7 @@ bool is_funcclause(Node *clause) { return (clause != NULL && - nodeTag(clause) == T_Expr && ((Expr *) clause)->opType == FUNC_EXPR); + nodeTag(clause) == T_Expr && ((Expr *) clause)->opType == FUNC_EXPR); } /* @@ -320,7 +320,7 @@ bool case_clause(Node *clause) { return (clause != NULL && - nodeTag(clause) == T_CaseExpr); + nodeTag(clause) == T_CaseExpr); } /***************************************************************************** @@ -369,7 +369,7 @@ pull_constant_clauses(List *quals, List **constantQual) * */ void -clause_get_relids_vars(Node *clause, Relids *relids, List **vars) +clause_get_relids_vars(Node *clause, Relids * relids, List **vars) { List *clvars = pull_var_clause(clause); List *var_list = NIL; @@ -515,9 +515,9 @@ qual_clause_p(Node *clause) return false; /* unary opclauses need not apply */ /* How about Param-s ? - vadim 02/03/98 */ - if (IsA(leftop, Var) && IsA(rightop, Const)) + if (IsA(leftop, Var) &&IsA(rightop, Const)) return true; - if (IsA(rightop, Var) && IsA(leftop, Const)) + if (IsA(rightop, Var) &&IsA(leftop, Const)) return true; return false; } @@ -646,14 +646,14 @@ get_relattval(Node *clause, if (!right) goto default_results; - if (IsA(left, Var) && IsA(right, Const)) + if (IsA(left, Var) &&IsA(right, Const)) { *relid = left->varno; *attno = left->varattno; *constval = ((Const *) right)->constvalue; *flag = (_SELEC_CONSTANT_RIGHT_ | _SELEC_IS_CONSTANT_); } - else if (IsA(left, Var) && IsA(right, Param)) + else if (IsA(left, Var) &&IsA(right, Param)) { *relid = left->varno; *attno = left->varattno; @@ -669,7 +669,7 @@ get_relattval(Node *clause, *constval = ((Const *) right)->constvalue; *flag = (_SELEC_CONSTANT_RIGHT_ | _SELEC_IS_CONSTANT_); } - else if (IsA(right, Var) && IsA(left, Const)) + else if (IsA(right, Var) &&IsA(left, Const)) { *relid = right->varno; *attno = right->varattno; @@ -723,16 +723,16 @@ get_rels_atts(Node *clause, { if (is_opclause(clause)) { - Var *left = get_leftop((Expr *) clause); - Var *right = get_rightop((Expr *) clause); + Var *left = get_leftop((Expr *) clause); + Var *right = get_rightop((Expr *) clause); if (left && right) { - bool var_left = IsA(left, Var); - bool var_right = IsA(right, Var); - bool varexpr_left = (bool) ((IsA(left, Func) || IsA(left, Oper)) && - contain_var_clause((Node *) left)); - bool varexpr_right = (bool) ((IsA(right, Func) || IsA(right, Oper)) && + bool var_left = IsA(left, Var); + bool var_right = IsA(right, Var); + bool varexpr_left = (bool) ((IsA(left, Func) ||IsA(left, Oper)) && + contain_var_clause((Node *) left)); + bool varexpr_right = (bool) ((IsA(right, Func) ||IsA(right, Oper)) && contain_var_clause((Node *) right)); if (var_left && var_right) diff --git a/src/backend/optimizer/util/indexnode.c b/src/backend/optimizer/util/indexnode.c index 64fcbbf8517..7d4cf825db7 100644 --- a/src/backend/optimizer/util/indexnode.c +++ b/src/backend/optimizer/util/indexnode.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/util/Attic/indexnode.c,v 1.14 1999/02/13 23:16:43 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/util/Attic/indexnode.c,v 1.15 1999/05/25 16:09:53 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -33,7 +33,7 @@ static List *find_secondary_index(Query *root, Oid relid); * */ List * -find_relation_indices(Query *root, RelOptInfo *rel) +find_relation_indices(Query *root, RelOptInfo * rel) { if (rel->indexed) return find_secondary_index(root, lfirsti(rel->relids)); diff --git a/src/backend/optimizer/util/joininfo.c b/src/backend/optimizer/util/joininfo.c index f3797aa3b96..e9d919c436e 100644 --- a/src/backend/optimizer/util/joininfo.c +++ b/src/backend/optimizer/util/joininfo.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/util/joininfo.c,v 1.19 1999/02/22 05:26:26 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/util/joininfo.c,v 1.20 1999/05/25 16:09:54 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -38,11 +38,11 @@ JoinInfo * joininfo_member(List *join_relids, List *joininfo_list) { - List *i; + List *i; foreach(i, joininfo_list) { - JoinInfo *joininfo = (JoinInfo *)lfirst(i); + JoinInfo *joininfo = (JoinInfo *) lfirst(i); if (same(join_relids, joininfo->unjoined_relids)) return joininfo; @@ -62,7 +62,7 @@ joininfo_member(List *join_relids, List *joininfo_list) * */ JoinInfo * -find_joininfo_node(RelOptInfo *this_rel, Relids join_relids) +find_joininfo_node(RelOptInfo * this_rel, Relids join_relids) { JoinInfo *joininfo = joininfo_member(join_relids, this_rel->joininfo); diff --git a/src/backend/optimizer/util/keys.c b/src/backend/optimizer/util/keys.c index c921c24c0d1..84528e7d064 100644 --- a/src/backend/optimizer/util/keys.c +++ b/src/backend/optimizer/util/keys.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/util/Attic/keys.c,v 1.19 1999/02/20 18:01:02 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/util/Attic/keys.c,v 1.20 1999/05/25 16:09:56 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -54,7 +54,7 @@ static bool equal_indexkey_var(int index_key, Var *var); * */ bool -match_indexkey_operand(int indexkey, Var *operand, RelOptInfo *rel) +match_indexkey_operand(int indexkey, Var *operand, RelOptInfo * rel) { if (IsA(operand, Var) && (lfirsti(rel->relids) == operand->varno) && @@ -112,7 +112,7 @@ extract_join_key(JoinKey *jk, int outer_or_inner) * * See the top of optimizer/path/pathkeys.c for a description of pathkeys. * Each pathkey is ordered by its join order, so they not pre-ordered to - * match. We must search them ourselves. + * match. We must search them ourselves. * * This gets called a lot, so it is optimized. */ @@ -128,31 +128,33 @@ pathkeys_match(List *keys1, List *keys2, int *better_key) key1 != NIL && key2 != NIL; key1 = lnext(key1), key2 = lnext(key2)) { - List *i; + List *i; if (key1_subsetof_key2) foreach(i, lfirst(key1)) + { + Var *subkey = lfirst(i); + + if (!member(subkey, lfirst(key2))) { - Var *subkey = lfirst(i); - if (!member(subkey, lfirst(key2))) - { - key1_subsetof_key2 = false; - break; - } + key1_subsetof_key2 = false; + break; } + } if (key2_subsetof_key1) foreach(i, lfirst(key2)) + { + Var *subkey = lfirst(i); + + if (!member(subkey, lfirst(key1))) { - Var *subkey = lfirst(i); - if (!member(subkey, lfirst(key1))) - { - key2_subsetof_key1 = false; - break; - } + key2_subsetof_key1 = false; + break; } + } if (!key1_subsetof_key2 && !key2_subsetof_key1) - break; /* no need to continue comparisons. */ + break; /* no need to continue comparisons. */ } if (!key1_subsetof_key2 && !key2_subsetof_key1) diff --git a/src/backend/optimizer/util/ordering.c b/src/backend/optimizer/util/ordering.c index eef0fbb3141..46948609f1d 100644 --- a/src/backend/optimizer/util/ordering.c +++ b/src/backend/optimizer/util/ordering.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/util/Attic/ordering.c,v 1.15 1999/02/13 23:16:46 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/util/Attic/ordering.c,v 1.16 1999/05/25 16:09:57 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -19,7 +19,7 @@ #include "optimizer/ordering.h" static bool sortops_order_match(Oid *ordering1, Oid *ordering2, - int *better_sort); + int *better_sort); /* * equal_path_ordering @@ -31,12 +31,12 @@ pathorder_match(PathOrder *path_ordering1, PathOrder *path_ordering2, int *better_sort) { - + *better_sort = 0; if (path_ordering1 == path_ordering2) return true; - + if (!path_ordering2) { *better_sort = 1; @@ -51,15 +51,13 @@ pathorder_match(PathOrder *path_ordering1, if (path_ordering1->ordtype == MERGE_ORDER && path_ordering2->ordtype == MERGE_ORDER) - { return equal(path_ordering1->ord.merge, path_ordering2->ord.merge); - } else if (path_ordering1->ordtype == SORTOP_ORDER && path_ordering2->ordtype == SORTOP_ORDER) { return sortops_order_match(path_ordering1->ord.sortop, - path_ordering2->ord.sortop, - better_sort); + path_ordering2->ord.sortop, + better_sort); } else if (path_ordering1->ordtype == MERGE_ORDER && path_ordering2->ordtype == SORTOP_ORDER) @@ -112,7 +110,7 @@ equal_path_merge_ordering(Oid *path_ordering, */ bool equal_merge_ordering(MergeOrder *merge_ordering1, - MergeOrder *merge_ordering2) + MergeOrder *merge_ordering2) { return equal(merge_ordering1, merge_ordering2); } @@ -133,7 +131,7 @@ sortops_order_match(Oid *ordering1, Oid *ordering2, int *better_sort) int i = 0; *better_sort = 0; - + if (ordering1 == ordering2) return true; @@ -142,13 +140,13 @@ sortops_order_match(Oid *ordering1, Oid *ordering2, int *better_sort) *better_sort = 1; return true; } - + if (!ordering1) { *better_sort = 2; return true; } - + while (ordering1[i] != 0 && ordering2[i] != 0) { if (ordering1[i] != ordering2[i]) @@ -167,6 +165,6 @@ sortops_order_match(Oid *ordering1, Oid *ordering2, int *better_sort) *better_sort = 2; return true; } - + return ordering1[i] == 0 && ordering2[i] == 0; } diff --git a/src/backend/optimizer/util/pathnode.c b/src/backend/optimizer/util/pathnode.c index 4e3d2fe353f..7e9b8e30903 100644 --- a/src/backend/optimizer/util/pathnode.c +++ b/src/backend/optimizer/util/pathnode.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/util/pathnode.c,v 1.40 1999/02/21 03:48:54 scrappy Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/util/pathnode.c,v 1.41 1999/05/25 16:09:58 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -62,7 +62,7 @@ path_is_cheaper(Path *path1, Path *path2) * */ Path * -set_cheapest(RelOptInfo *parent_rel, List *pathlist) +set_cheapest(RelOptInfo * parent_rel, List *pathlist) { List *p; Path *cheapest_so_far; @@ -99,14 +99,14 @@ set_cheapest(RelOptInfo *parent_rel, List *pathlist) * */ List * -add_pathlist(RelOptInfo *parent_rel, List *unique_paths, List *new_paths) +add_pathlist(RelOptInfo * parent_rel, List *unique_paths, List *new_paths) { List *p1; foreach(p1, new_paths) { Path *new_path = (Path *) lfirst(p1); - Path *old_path; + Path *old_path; bool is_new; /* Is this new path already in unique_paths? */ @@ -174,7 +174,7 @@ better_path(Path *new_path, List *unique_paths, bool *is_new) #ifdef OPTDUP_DEBUG if (!pathkeys_match(new_path->pathkeys, path->pathkeys, &better_key) || - better_key != 0) + better_key != 0) { printf("betterkey = %d\n", better_key); printf("newpath\n"); @@ -182,13 +182,15 @@ better_path(Path *new_path, List *unique_paths, bool *is_new) printf("oldpath\n"); pprint(path->pathkeys); if (path->pathkeys && new_path->pathkeys && - length(lfirst(path->pathkeys)) >= 2/* && - length(lfirst(path->pathkeys)) < - length(lfirst(new_path->pathkeys))*/) - sleep(0); /* set breakpoint here */ + length(lfirst(path->pathkeys)) >= 2 /* && + * length(lfirst(path->pa + * thkeys)) < + * length(lfirst(new_path + ->pathkeys)) */ ) + sleep(0); /* set breakpoint here */ } if (!pathorder_match(new_path->pathorder, path->pathorder, - &better_sort) || + &better_sort) || better_sort != 0) { printf("neword\n"); @@ -199,25 +201,26 @@ better_path(Path *new_path, List *unique_paths, bool *is_new) #endif if (pathkeys_match(new_path->pathkeys, path->pathkeys, - &better_key) && + &better_key) && pathorder_match(new_path->pathorder, path->pathorder, - &better_sort)) + &better_sort)) { + /* * Replace pathkeys that match exactly, {{1,2}}, {{1,2}} - * Replace pathkeys {{1,2}} with {{1,2,3}}} if the latter is not - * more expensive and replace unordered path with ordered - * path if it is not more expensive. Favor sorted keys - * over unsorted keys in the same way. + * Replace pathkeys {{1,2}} with {{1,2,3}}} if the latter is + * not more expensive and replace unordered path with ordered + * path if it is not more expensive. Favor sorted keys over + * unsorted keys in the same way. */ - /* same keys, and new is cheaper, use it */ - if ((better_key == 0 && better_sort == 0 && + /* same keys, and new is cheaper, use it */ + if ((better_key == 0 && better_sort == 0 && new_path->path_cost < path->path_cost) || - /* new is better, and cheaper, use it */ + /* new is better, and cheaper, use it */ (((better_key == 1 && better_sort != 2) || (better_key != 2 && better_sort == 1)) && - new_path->path_cost <= path->path_cost)) + new_path->path_cost <= path->path_cost)) { #ifdef OPTDUP_DEBUG printf("replace with new %p old %p better key %d better sort %d\n", &new_path, &path, better_key, better_sort); @@ -230,14 +233,14 @@ better_path(Path *new_path, List *unique_paths, bool *is_new) return path; } - /* same keys, new is more expensive, stop */ + /* same keys, new is more expensive, stop */ if ((better_key == 0 && better_sort == 0 && new_path->path_cost >= path->path_cost) || - /* old is better, and less expensive, stop */ + /* old is better, and less expensive, stop */ (((better_key == 2 && better_sort != 1) || (better_key != 1 && better_sort == 2)) && - new_path->path_cost >= path->path_cost)) + new_path->path_cost >= path->path_cost)) { #ifdef OPTDUP_DEBUG printf("skip new %p old %p better key %d better sort %d\n", &new_path, &path, better_key, better_sort); @@ -253,11 +256,11 @@ better_path(Path *new_path, List *unique_paths, bool *is_new) } #ifdef OPTDUP_DEBUG - printf("add new %p old %p better key %d better sort %d\n", &new_path, &path, better_key, better_sort); - printf("new\n"); - pprint(new_path); + printf("add new %p old %p better key %d better sort %d\n", &new_path, &path, better_key, better_sort); + printf("new\n"); + pprint(new_path); #endif - + *is_new = true; return NULL; } @@ -275,7 +278,7 @@ better_path(Path *new_path, List *unique_paths, bool *is_new) * */ Path * -create_seqscan_path(RelOptInfo *rel) +create_seqscan_path(RelOptInfo * rel) { int relid = 0; @@ -290,7 +293,7 @@ create_seqscan_path(RelOptInfo *rel) pathnode->pathkeys = NIL; /* - * copy restrictinfo list into path for expensive function processing + * copy restrictinfo list into path for expensive function processing * JMH, 7/7/92 */ pathnode->loc_restrictinfo = (List *) copyObject((Node *) rel->restrictinfo); @@ -303,9 +306,7 @@ create_seqscan_path(RelOptInfo *rel) /* add in expensive functions cost! -- JMH, 7/7/92 */ #ifdef NOT_USED if (XfuncMode != XFUNC_OFF) - { pathnode->path_cost += xfunc_get_path_cost(pathnode); - } #endif return pathnode; } @@ -325,8 +326,8 @@ create_seqscan_path(RelOptInfo *rel) */ IndexPath * create_index_path(Query *root, - RelOptInfo *rel, - RelOptInfo *index, + RelOptInfo * rel, + RelOptInfo * index, List *restriction_clauses, bool is_join_scan) { @@ -343,11 +344,11 @@ create_index_path(Query *root, pathnode->indexqual = NIL; /* - * copy restrictinfo list into path for expensive function processing + * copy restrictinfo list into path for expensive function processing * JMH, 7/7/92 */ pathnode->path.loc_restrictinfo = set_difference((List *) copyObject((Node *) rel->restrictinfo), - (List *) restriction_clauses); + (List *) restriction_clauses); /* * The index must have an ordering for the path to have (ordering) @@ -356,7 +357,7 @@ create_index_path(Query *root, if (pathnode->path.pathorder->ord.sortop) { pathnode->path.pathkeys = collect_index_pathkeys(index->indexkeys, - rel->targetlist); + rel->targetlist); /* * Check that the keys haven't 'disappeared', since they may no @@ -381,19 +382,19 @@ create_index_path(Query *root, /* is the statement above really true? what about IndexScan as the inner of a join? */ pathnode->path.path_cost = cost_index(lfirsti(index->relids), - index->pages, - 1.0, - rel->pages, - rel->tuples, - index->pages, - index->tuples, - false); + index->pages, + 1.0, + rel->pages, + rel->tuples, + index->pages, + index->tuples, + false); #ifdef NOT_USED /* add in expensive functions cost! -- JMH, 7/7/92 */ if (XfuncMode != XFUNC_OFF) { pathnode->path_cost = (pathnode->path_cost + - xfunc_get_path_cost((Path *) pathnode)); + xfunc_get_path_cost((Path *) pathnode)); } #endif } @@ -427,24 +428,22 @@ create_index_path(Query *root, &npages, &selec); /* each clause gets an equal selectivity */ - clausesel = pow(selec, 1.0 / (double) length(restriction_clauses)); + clausesel = pow(selec, 1.0 / (double) length(restriction_clauses)); pathnode->indexqual = restriction_clauses; pathnode->path.path_cost = cost_index(lfirsti(index->relids), - (int) npages, - selec, - rel->pages, - rel->tuples, - index->pages, - index->tuples, - false); + (int) npages, + selec, + rel->pages, + rel->tuples, + index->pages, + index->tuples, + false); #ifdef NOT_USED /* add in expensive functions cost! -- JMH, 7/7/92 */ if (XfuncMode != XFUNC_OFF) - { pathnode->path_cost += xfunc_get_path_cost((Path *) pathnode); - } #endif /* @@ -474,8 +473,8 @@ create_index_path(Query *root, * */ NestPath * -create_nestloop_path(RelOptInfo *joinrel, - RelOptInfo *outer_rel, +create_nestloop_path(RelOptInfo * joinrel, + RelOptInfo * outer_rel, Path *outer_path, Path *inner_path, List *pathkeys) @@ -492,7 +491,7 @@ create_nestloop_path(RelOptInfo *joinrel, pathnode->path.outerjoincost = (Cost) 0.0; pathnode->path.loc_restrictinfo = NIL; pathnode->path.pathorder = makeNode(PathOrder); - + if (pathkeys) { pathnode->path.pathorder->ordtype = outer_path->pathorder->ordtype; @@ -508,12 +507,12 @@ create_nestloop_path(RelOptInfo *joinrel, } pathnode->path.path_cost = cost_nestloop(outer_path->path_cost, - inner_path->path_cost, - outer_rel->size, - inner_path->parent->size, - page_size(outer_rel->size, - outer_rel->width), - IsA(inner_path, IndexPath)); + inner_path->path_cost, + outer_rel->size, + inner_path->parent->size, + page_size(outer_rel->size, + outer_rel->width), + IsA(inner_path, IndexPath)); /* add in expensive function costs -- JMH 7/7/92 */ #ifdef NOT_USED if (XfuncMode != XFUNC_OFF) @@ -542,7 +541,7 @@ create_nestloop_path(RelOptInfo *joinrel, * */ MergePath * -create_mergejoin_path(RelOptInfo *joinrel, +create_mergejoin_path(RelOptInfo * joinrel, int outersize, int innersize, int outerwidth, @@ -571,19 +570,17 @@ create_mergejoin_path(RelOptInfo *joinrel, pathnode->outersortkeys = outersortkeys; pathnode->innersortkeys = innersortkeys; pathnode->jpath.path.path_cost = cost_mergejoin(outer_path->path_cost, - inner_path->path_cost, - outersortkeys, - innersortkeys, - outersize, - innersize, - outerwidth, - innerwidth); + inner_path->path_cost, + outersortkeys, + innersortkeys, + outersize, + innersize, + outerwidth, + innerwidth); /* add in expensive function costs -- JMH 7/7/92 */ #ifdef NOT_USED if (XfuncMode != XFUNC_OFF) - { pathnode->path_cost += xfunc_get_path_cost((Path *) pathnode); - } #endif return pathnode; } @@ -607,7 +604,7 @@ create_mergejoin_path(RelOptInfo *joinrel, * */ HashPath * -create_hashjoin_path(RelOptInfo *joinrel, +create_hashjoin_path(RelOptInfo * joinrel, int outersize, int innersize, int outerwidth, @@ -639,17 +636,15 @@ create_hashjoin_path(RelOptInfo *joinrel, pathnode->outerhashkeys = outerkeys; pathnode->innerhashkeys = innerkeys; pathnode->jpath.path.path_cost = cost_hashjoin(outer_path->path_cost, - inner_path->path_cost, - outerkeys, - innerkeys, - outersize, innersize, - outerwidth, innerwidth); + inner_path->path_cost, + outerkeys, + innerkeys, + outersize, innersize, + outerwidth, innerwidth); /* add in expensive function costs -- JMH 7/7/92 */ #ifdef NOT_USED if (XfuncMode != XFUNC_OFF) - { pathnode->path_cost += xfunc_get_path_cost((Path *) pathnode); - } #endif return pathnode; } diff --git a/src/backend/optimizer/util/plancat.c b/src/backend/optimizer/util/plancat.c index a1f6026b0ed..a333b5af099 100644 --- a/src/backend/optimizer/util/plancat.c +++ b/src/backend/optimizer/util/plancat.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/util/plancat.c,v 1.29 1999/05/10 00:45:25 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/util/plancat.c,v 1.30 1999/05/25 16:09:59 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -461,6 +461,7 @@ VersionGetParents(Oid verrelid) heap_close(relation); return list; } + #endif @@ -545,6 +546,7 @@ IndexSelectivity(Oid indexrelid, select = 1.0; for (n = 0; n < nIndexKeys; ++n) { + /* * Find the AM class for this key. * @@ -579,7 +581,7 @@ IndexSelectivity(Oid indexrelid, amopTuple = SearchSysCacheTuple(AMOPOPID, ObjectIdGetDatum(indclass), - ObjectIdGetDatum(operatorObjectIds[n]), + ObjectIdGetDatum(operatorObjectIds[n]), ObjectIdGetDatum(relam), 0); if (!HeapTupleIsValid(amopTuple)) diff --git a/src/backend/optimizer/util/relnode.c b/src/backend/optimizer/util/relnode.c index 3b7594d87f1..5346a1c72a5 100644 --- a/src/backend/optimizer/util/relnode.c +++ b/src/backend/optimizer/util/relnode.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/util/relnode.c,v 1.15 1999/02/18 00:49:38 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/util/relnode.c,v 1.16 1999/05/25 16:10:01 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -30,7 +30,7 @@ RelOptInfo * get_base_rel(Query *root, int relid) { - Relids relids; + Relids relids; RelOptInfo *rel; relids = lconsi(relid, NIL); @@ -63,6 +63,7 @@ get_base_rel(Query *root, int relid) */ if (relid < 0) { + /* * If the relation is a materialized relation, assume * constants for sizes. @@ -75,6 +76,7 @@ get_base_rel(Query *root, int relid) bool hasindex; int pages, tuples; + /* * Otherwise, retrieve relation characteristics from the * system catalogs. diff --git a/src/backend/optimizer/util/restrictinfo.c b/src/backend/optimizer/util/restrictinfo.c index 374533a4222..5c59e0fdf88 100644 --- a/src/backend/optimizer/util/restrictinfo.c +++ b/src/backend/optimizer/util/restrictinfo.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/util/restrictinfo.c,v 1.2 1999/02/13 23:16:49 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/util/restrictinfo.c,v 1.3 1999/05/25 16:10:02 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -27,7 +27,7 @@ * */ bool -valid_or_clause(RestrictInfo *restrictinfo) +valid_or_clause(RestrictInfo * restrictinfo) { if (restrictinfo != NULL && !single_node((Node *) restrictinfo->clause) && @@ -117,7 +117,7 @@ get_relattvals(List *restrictinfo_list, } /* - * get_joinvars + * get_joinvars * Given a list of join restrictinfo nodes to be used with the index * of an inner join relation, return three lists consisting of: * the attributes corresponding to the inner join relation @@ -184,7 +184,7 @@ get_opnos(List *restrictinfo_list) { temp = (RestrictInfo *) lfirst(i); result = lappendi(result, - (((Oper *) temp->clause->oper)->opno)); + (((Oper *) temp->clause->oper)->opno)); } return result; } diff --git a/src/backend/optimizer/util/tlist.c b/src/backend/optimizer/util/tlist.c index e0620c26a3e..497bb78b3b4 100644 --- a/src/backend/optimizer/util/tlist.c +++ b/src/backend/optimizer/util/tlist.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/util/tlist.c,v 1.31 1999/05/17 17:03:23 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/util/tlist.c,v 1.32 1999/05/25 16:10:03 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -93,7 +93,7 @@ matching_tlist_var(Var *var, List *targetlist) * CREATES: new var_node iff no matching var_node exists in targetlist */ void -add_var_to_tlist(RelOptInfo *rel, Var *var) +add_var_to_tlist(RelOptInfo * rel, Var *var) { Expr *oldvar; @@ -114,8 +114,8 @@ add_var_to_tlist(RelOptInfo *rel, Var *var) var->varoattno); rel->targetlist = lappend(tlist, - create_tl_element(newvar, - length(tlist) + 1)); + create_tl_element(newvar, + length(tlist) + 1)); } } @@ -203,6 +203,7 @@ tlist_member(Var *var, List *tlist) foreach(i, tlist) { TargetEntry *tle = (TargetEntry *) lfirst(i); + if (var_equal(var, get_expr(tle))) return tle->resdom; } @@ -222,6 +223,7 @@ tlist_resdom(List *tlist, Resdom *resnode) { TargetEntry *tle = (TargetEntry *) lfirst(i); Resdom *resdom = tle->resdom; + /* Since resnos are supposed to be unique */ if (resnode->resno == resdom->resno) return resdom; @@ -362,7 +364,7 @@ flatten_tlist(List *tlist) TargetEntry *temp_entry = (TargetEntry *) lfirst(temp); tlist_vars = nconc(tlist_vars, - pull_var_clause((Node *) get_expr(temp_entry))); + pull_var_clause((Node *) get_expr(temp_entry))); } foreach(temp, tlist_vars) @@ -411,8 +413,8 @@ flatten_tlist_vars(List *full_tlist, List *flat_tlist) TargetEntry *tle = lfirst(x); result = lappend(result, makeTargetEntry(tle->resdom, - flatten_tlistentry((Node *) get_expr(tle), - flat_tlist))); + flatten_tlistentry((Node *) get_expr(tle), + flat_tlist))); } return result; @@ -456,10 +458,11 @@ flatten_tlistentry(Node *tlistentry, List *flat_tlist) } else if (IsA(tlistentry, Expr)) { + /* - * Recursively scan the arguments of an expression. - * NOTE: this must come after is_subplan() case since - * subplan is a kind of Expr node. + * Recursively scan the arguments of an expression. NOTE: this + * must come after is_subplan() case since subplan is a kind of + * Expr node. */ foreach(temp, ((Expr *) tlistentry)->args) lfirst(temp) = flatten_tlistentry(lfirst(temp), flat_tlist); @@ -467,8 +470,10 @@ flatten_tlistentry(Node *tlistentry, List *flat_tlist) } else if (IsA(tlistentry, Aggref)) { - /* XXX shouldn't this be recursing into the agg's target? - * Seems to work though, so will leave it alone ... tgl 5/99 + + /* + * XXX shouldn't this be recursing into the agg's target? Seems to + * work though, so will leave it alone ... tgl 5/99 */ return tlistentry; } @@ -481,7 +486,7 @@ flatten_tlistentry(Node *tlistentry, List *flat_tlist) foreach(temp, aref->reflowerindexpr) lfirst(temp) = flatten_tlistentry(lfirst(temp), flat_tlist); aref->refexpr = flatten_tlistentry(aref->refexpr, flat_tlist); - aref->refassgnexpr = flatten_tlistentry(aref->refassgnexpr,flat_tlist); + aref->refassgnexpr = flatten_tlistentry(aref->refassgnexpr, flat_tlist); return tlistentry; } @@ -491,7 +496,8 @@ flatten_tlistentry(Node *tlistentry, List *flat_tlist) foreach(temp, cexpr->args) { - CaseWhen *cwhen = (CaseWhen *) lfirst(temp); + CaseWhen *cwhen = (CaseWhen *) lfirst(temp); + cwhen->expr = flatten_tlistentry(cwhen->expr, flat_tlist); cwhen->result = flatten_tlistentry(cwhen->result, flat_tlist); } @@ -521,18 +527,18 @@ get_expr(TargetEntry *tle) Var * get_groupclause_expr(GroupClause *groupClause, List *targetList) { - List *l; - TargetEntry *tle; + List *l; + TargetEntry *tle; foreach(l, targetList) { - tle = (TargetEntry *)lfirst(l); + tle = (TargetEntry *) lfirst(l); if (tle->resdom->resgroupref == groupClause->tleGroupref) return get_expr(tle); } - elog(ERROR, - "get_groupclause_expr: GROUP BY expression not found in targetlist"); + elog(ERROR, + "get_groupclause_expr: GROUP BY expression not found in targetlist"); return NULL; } diff --git a/src/backend/optimizer/util/var.c b/src/backend/optimizer/util/var.c index b906f8e4c48..fd57067cdd2 100644 --- a/src/backend/optimizer/util/var.c +++ b/src/backend/optimizer/util/var.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/util/var.c,v 1.18 1999/05/03 00:38:44 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/util/var.c,v 1.19 1999/05/25 16:10:05 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -102,10 +102,11 @@ contain_var_clause(Node *clause) } else if (IsA(clause, Expr)) { + /* - * Recursively scan the arguments of an expression. - * NOTE: this must come after is_subplan() case since - * subplan is a kind of Expr node. + * Recursively scan the arguments of an expression. NOTE: this + * must come after is_subplan() case since subplan is a kind of + * Expr node. */ foreach(temp, ((Expr *) clause)->args) { @@ -139,6 +140,7 @@ contain_var_clause(Node *clause) foreach(temp, ((CaseExpr *) clause)->args) { CaseWhen *when = (CaseWhen *) lfirst(temp); + if (contain_var_clause(when->expr)) return TRUE; if (contain_var_clause(when->result)) @@ -188,10 +190,11 @@ pull_var_clause(Node *clause) } else if (IsA(clause, Expr)) { + /* - * Recursively scan the arguments of an expression. - * NOTE: this must come after is_subplan() case since - * subplan is a kind of Expr node. + * Recursively scan the arguments of an expression. NOTE: this + * must come after is_subplan() case since subplan is a kind of + * Expr node. */ foreach(temp, ((Expr *) clause)->args) retval = nconc(retval, pull_var_clause(lfirst(temp))); @@ -214,6 +217,7 @@ pull_var_clause(Node *clause) foreach(temp, ((CaseExpr *) clause)->args) { CaseWhen *when = (CaseWhen *) lfirst(temp); + retval = nconc(retval, pull_var_clause(when->expr)); retval = nconc(retval, pull_var_clause(when->result)); } diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c index 14c8150ff05..243165efc68 100644 --- a/src/backend/parser/analyze.c +++ b/src/backend/parser/analyze.c @@ -5,7 +5,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: analyze.c,v 1.107 1999/05/23 21:41:14 tgl Exp $ + * $Id: analyze.c,v 1.108 1999/05/25 16:10:10 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -45,8 +45,8 @@ static Query *transformUpdateStmt(ParseState *pstate, UpdateStmt *stmt); static Query *transformCursorStmt(ParseState *pstate, SelectStmt *stmt); static Query *transformCreateStmt(ParseState *pstate, CreateStmt *stmt); -static void transformForUpdate(Query *qry, List *forUpdate); -void CheckSelectForUpdate(Query *qry); +static void transformForUpdate(Query *qry, List *forUpdate); +void CheckSelectForUpdate(Query *qry); List *extras_before = NIL; List *extras_after = NIL; @@ -62,9 +62,9 @@ List *extras_after = NIL; List * parse_analyze(List *pl, ParseState *parentParseState) { - List *result = NIL; + List *result = NIL; ParseState *pstate; - Query *parsetree; + Query *parsetree; while (pl != NIL) { @@ -76,7 +76,7 @@ parse_analyze(List *pl, ParseState *parentParseState) while (extras_before != NIL) { result = lappend(result, - transformStmt(pstate, lfirst(extras_before))); + transformStmt(pstate, lfirst(extras_before))); if (pstate->p_target_relation != NULL) heap_close(pstate->p_target_relation); extras_before = lnext(extras_before); @@ -192,8 +192,8 @@ transformStmt(ParseState *pstate, Node *parseTree) if (!((SelectStmt *) parseTree)->portalname) { result = transformSelectStmt(pstate, (SelectStmt *) parseTree); - result->limitOffset = ((SelectStmt *)parseTree)->limitOffset; - result->limitCount = ((SelectStmt *)parseTree)->limitCount; + result->limitOffset = ((SelectStmt *) parseTree)->limitOffset; + result->limitCount = ((SelectStmt *) parseTree)->limitCount; } else result = transformCursorStmt(pstate, (SelectStmt *) parseTree); @@ -276,8 +276,8 @@ transformInsertStmt(ParseState *pstate, InsertStmt *stmt) int ndef = pstate->p_target_relation->rd_att->constr->num_defval; /* - * if stmt->cols == NIL then makeTargetNames returns list of all attrs. - * May have to shorten icolumns list... + * if stmt->cols == NIL then makeTargetNames returns list of all + * attrs. May have to shorten icolumns list... */ if (stmt->cols == NIL) { @@ -286,16 +286,18 @@ transformInsertStmt(ParseState *pstate, InsertStmt *stmt) foreach(extrl, icolumns) { + /* - * decrements first, so if we started with zero items - * it will now be negative + * decrements first, so if we started with zero items it + * will now be negative */ if (--i <= 0) break; } + /* - * this an index into the targetList, - * so make sure we had one to start... + * this an index into the targetList, so make sure we had one + * to start... */ if (i >= 0) { @@ -303,9 +305,7 @@ transformInsertStmt(ParseState *pstate, InsertStmt *stmt) lnext(extrl) = NIL; } else - { icolumns = NIL; - } } while (ndef-- > 0) @@ -378,15 +378,18 @@ transformInsertStmt(ParseState *pstate, InsertStmt *stmt) /* * The INSERT INTO ... SELECT ... could have a UNION in child, so - * unionClause may be false -, */ - qry->unionall = stmt->unionall; + * unionClause may be false , + */ + qry->unionall = stmt->unionall; + + /***S*I***/ - /***S*I***/ - /* Just hand through the unionClause and intersectClause. - * We will handle it in the function Except_Intersect_Rewrite() */ - qry->unionClause = stmt->unionClause; - qry->intersectClause = stmt->intersectClause; + /* + * Just hand through the unionClause and intersectClause. We will + * handle it in the function Except_Intersect_Rewrite() + */ + qry->unionClause = stmt->unionClause; + qry->intersectClause = stmt->intersectClause; /* * If there is a havingQual but there are no aggregates, then there is @@ -508,9 +511,12 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt) Constraint *constraint; List *keys; Ident *key; - List *blist = NIL; /* "before list" of things to do before creating the table */ - List *ilist = NIL; /* "index list" of things to do after creating the table */ - IndexStmt *index, *pkey = NULL; + List *blist = NIL; /* "before list" of things to do before + * creating the table */ + List *ilist = NIL; /* "index list" of things to do after + * creating the table */ + IndexStmt *index, + *pkey = NULL; IndexElem *iparam; q = makeNode(Query); @@ -532,15 +538,15 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt) if (column->is_sequence) { - char *sname; - char *cstring; + char *sname; + char *cstring; CreateSeqStmt *sequence; sname = makeTableName(stmt->relname, column->colname, "seq", NULL); if (sname == NULL) elog(ERROR, "CREATE TABLE/SERIAL implicit sequence name must be less than %d characters" "\n\tSum of lengths of '%s' and '%s' must be less than %d", - NAMEDATALEN, stmt->relname, column->colname, (NAMEDATALEN-5)); + NAMEDATALEN, stmt->relname, column->colname, (NAMEDATALEN - 5)); constraint = makeNode(Constraint); constraint->contype = CONSTR_DEFAULT; @@ -560,7 +566,7 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt) if (constraint->name == NULL) elog(ERROR, "CREATE TABLE/SERIAL implicit index name must be less than %d characters" "\n\tSum of lengths of '%s' and '%s' must be less than %d", - NAMEDATALEN, stmt->relname, column->colname, (NAMEDATALEN-5)); + NAMEDATALEN, stmt->relname, column->colname, (NAMEDATALEN - 5)); column->constraints = lappend(column->constraints, constraint); sequence = makeNode(CreateSeqStmt); @@ -582,8 +588,11 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt) switch (constraint->contype) { case CONSTR_NULL: - /* We should mark this explicitly, - * so we can tell if NULL and NOT NULL are both specified + + /* + * We should mark this explicitly, so we + * can tell if NULL and NOT NULL are both + * specified */ if (column->is_not_null) elog(ERROR, "CREATE TABLE/(NOT) NULL conflicting declaration" @@ -611,7 +620,7 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt) if (constraint->name == NULL) elog(ERROR, "CREATE TABLE/PRIMARY KEY implicit index name must be less than %d characters" "\n\tLength of '%s' must be less than %d", - NAMEDATALEN, stmt->relname, (NAMEDATALEN-6)); + NAMEDATALEN, stmt->relname, (NAMEDATALEN - 6)); if (constraint->keys == NIL) constraint->keys = lappend(constraint->keys, column); dlist = lappend(dlist, constraint); @@ -623,7 +632,7 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt) if (constraint->name == NULL) elog(ERROR, "CREATE TABLE/UNIQUE implicit index name must be less than %d characters" "\n\tLength of '%s' must be less than %d", - NAMEDATALEN, stmt->relname, (NAMEDATALEN-5)); + NAMEDATALEN, stmt->relname, (NAMEDATALEN - 5)); if (constraint->keys == NIL) constraint->keys = lappend(constraint->keys, column); dlist = lappend(dlist, constraint); @@ -636,7 +645,7 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt) if (constraint->name == NULL) elog(ERROR, "CREATE TABLE/CHECK implicit constraint name must be less than %d characters" "\n\tSum of lengths of '%s' and '%s' must be less than %d", - NAMEDATALEN, stmt->relname, column->colname, (NAMEDATALEN-1)); + NAMEDATALEN, stmt->relname, column->colname, (NAMEDATALEN - 1)); break; default: @@ -657,8 +666,8 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt) constraint->name = makeTableName(stmt->relname, "pkey", NULL); if (constraint->name == NULL) elog(ERROR, "CREATE TABLE/PRIMARY KEY implicit index name must be less than %d characters" - "\n\tLength of '%s' must be less than %d", - NAMEDATALEN, stmt->relname, (NAMEDATALEN-5)); + "\n\tLength of '%s' must be less than %d", + NAMEDATALEN, stmt->relname, (NAMEDATALEN - 5)); dlist = lappend(dlist, constraint); break; @@ -704,12 +713,12 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt) constraint = lfirst(dlist); Assert(nodeTag(constraint) == T_Constraint); Assert((constraint->contype == CONSTR_PRIMARY) - || (constraint->contype == CONSTR_UNIQUE)); + || (constraint->contype == CONSTR_UNIQUE)); index = makeNode(IndexStmt); index->unique = TRUE; - index->primary = (constraint->contype == CONSTR_PRIMARY ? TRUE:FALSE); + index->primary = (constraint->contype == CONSTR_PRIMARY ? TRUE : FALSE); if (index->primary) { if (pkey != NULL) @@ -719,21 +728,17 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt) } if (constraint->name != NULL) - { index->idxname = constraint->name; - } else if (constraint->contype == CONSTR_PRIMARY) { index->idxname = makeTableName(stmt->relname, "pkey", NULL); if (index->idxname == NULL) elog(ERROR, "CREATE TABLE/PRIMARY KEY implicit index name must be less than %d characters" "\n\tLength of '%s' must be less than %d", - NAMEDATALEN, stmt->relname, (NAMEDATALEN-5)); + NAMEDATALEN, stmt->relname, (NAMEDATALEN - 5)); } else - { index->idxname = NULL; - } index->relname = stmt->relname; index->accessMethod = "btree"; @@ -793,16 +798,20 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt) ilist = NIL; while (dlist != NIL) { - int keep = TRUE; + int keep = TRUE; index = lfirst(dlist); - /* has a single column argument, so might be a conflicting index... */ + /* + * has a single column argument, so might be a conflicting + * index... + */ if ((index != pkey) - && (length(index->indexParams) == 1)) + && (length(index->indexParams) == 1)) { - char *pname = ((IndexElem *) lfirst(index->indexParams))->name; - char *iname = ((IndexElem *) lfirst(index->indexParams))->name; + char *pname = ((IndexElem *) lfirst(index->indexParams))->name; + char *iname = ((IndexElem *) lfirst(index->indexParams))->name; + /* same names? then don't keep... */ keep = (strcmp(iname, pname) != 0); } @@ -818,7 +827,7 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt) { index = lfirst(dlist); elog(NOTICE, "CREATE TABLE/%s will create implicit index '%s' for table '%s'", - (index->primary? "PRIMARY KEY": "UNIQUE"), + (index->primary ? "PRIMARY KEY" : "UNIQUE"), index->idxname, stmt->relname); dlist = lnext(dlist); } @@ -828,7 +837,7 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt) extras_after = ilist; return q; -} /* transformCreateStmt() */ +} /* transformCreateStmt() */ /* * transformIndexStmt - @@ -1006,11 +1015,14 @@ transformSelectStmt(ParseState *pstate, SelectStmt *stmt) */ qry->unionall = stmt->unionall; - /***S*I***/ - /* Just hand through the unionClause and intersectClause. - * We will handle it in the function Except_Intersect_Rewrite() */ - qry->unionClause = stmt->unionClause; - qry->intersectClause = stmt->intersectClause; + /***S*I***/ + + /* + * Just hand through the unionClause and intersectClause. We will + * handle it in the function Except_Intersect_Rewrite() + */ + qry->unionClause = stmt->unionClause; + qry->intersectClause = stmt->intersectClause; /* * If there is a havingQual but there are no aggregates, then there is @@ -1092,91 +1104,92 @@ transformCursorStmt(ParseState *pstate, SelectStmt *stmt) * The built up list is handed back in **select_list. * If one of the SelectStmt Nodes has the 'unionall' flag * set to true *unionall_present hands back 'true' */ -void +void create_select_list(Node *ptr, List **select_list, bool *unionall_present) { - if(IsA(ptr, SelectStmt)) { - *select_list = lappend(*select_list, ptr); - if(((SelectStmt *)ptr)->unionall == TRUE) *unionall_present = TRUE; - return; - } - - /* Recursively call for all arguments. A NOT expr has no lexpr! */ - if (((A_Expr *)ptr)->lexpr != NULL) - create_select_list(((A_Expr *)ptr)->lexpr, select_list, unionall_present); - create_select_list(((A_Expr *)ptr)->rexpr, select_list, unionall_present); + if (IsA(ptr, SelectStmt)) + { + *select_list = lappend(*select_list, ptr); + if (((SelectStmt *) ptr)->unionall == TRUE) + *unionall_present = TRUE; + return; + } + + /* Recursively call for all arguments. A NOT expr has no lexpr! */ + if (((A_Expr *) ptr)->lexpr != NULL) + create_select_list(((A_Expr *) ptr)->lexpr, select_list, unionall_present); + create_select_list(((A_Expr *) ptr)->rexpr, select_list, unionall_present); } /* Changes the A_Expr Nodes to Expr Nodes and exchanges ANDs and ORs. - * The reason for the exchange is easy: We implement INTERSECTs and EXCEPTs + * The reason for the exchange is easy: We implement INTERSECTs and EXCEPTs * by rewriting these queries to semantically equivalent queries that use - * IN and NOT IN subselects. To be able to use all three operations - * (UNIONs INTERSECTs and EXCEPTs) in one complex query we have to + * IN and NOT IN subselects. To be able to use all three operations + * (UNIONs INTERSECTs and EXCEPTs) in one complex query we have to * translate the queries into Disjunctive Normal Form (DNF). Unfortunately * there is no function 'dnfify' but there is a function 'cnfify' * which produces DNF when we exchange ANDs and ORs before calling * 'cnfify' and exchange them back in the result. * * If an EXCEPT or INTERSECT is present *intersect_present - * hands back 'true' */ -Node *A_Expr_to_Expr(Node *ptr, bool *intersect_present) + * hands back 'true' */ +Node * +A_Expr_to_Expr(Node *ptr, bool *intersect_present) { - Node *result = NULL; - - switch(nodeTag(ptr)) - { - case T_A_Expr: - { - A_Expr *a = (A_Expr *)ptr; - - switch (a->oper) - { - case AND: - { - Expr *expr = makeNode(Expr); - Node *lexpr = A_Expr_to_Expr(((A_Expr *)ptr)->lexpr, intersect_present); - Node *rexpr = A_Expr_to_Expr(((A_Expr *)ptr)->rexpr, intersect_present); - - *intersect_present = TRUE; - - expr->typeOid = BOOLOID; - expr->opType = OR_EXPR; - expr->args = makeList(lexpr, rexpr, -1); - result = (Node *) expr; - break; - } - case OR: - { - Expr *expr = makeNode(Expr); - Node *lexpr = A_Expr_to_Expr(((A_Expr *)ptr)->lexpr, intersect_present); - Node *rexpr = A_Expr_to_Expr(((A_Expr *)ptr)->rexpr, intersect_present); - - expr->typeOid = BOOLOID; - expr->opType = AND_EXPR; - expr->args = makeList(lexpr, rexpr, -1); - result = (Node *) expr; - break; - } - case NOT: - { - Expr *expr = makeNode(Expr); - Node *rexpr = A_Expr_to_Expr(((A_Expr *)ptr)->rexpr, intersect_present); - - expr->typeOid = BOOLOID; - expr->opType = NOT_EXPR; - expr->args = makeList(rexpr, -1); - result = (Node *) expr; - break; - } - } - break; - } - default: - { - result = ptr; - } - } - return result; + Node *result = NULL; + + switch (nodeTag(ptr)) + { + case T_A_Expr: + { + A_Expr *a = (A_Expr *) ptr; + + switch (a->oper) + { + case AND: + { + Expr *expr = makeNode(Expr); + Node *lexpr = A_Expr_to_Expr(((A_Expr *) ptr)->lexpr, intersect_present); + Node *rexpr = A_Expr_to_Expr(((A_Expr *) ptr)->rexpr, intersect_present); + + *intersect_present = TRUE; + + expr->typeOid = BOOLOID; + expr->opType = OR_EXPR; + expr->args = makeList(lexpr, rexpr, -1); + result = (Node *) expr; + break; + } + case OR: + { + Expr *expr = makeNode(Expr); + Node *lexpr = A_Expr_to_Expr(((A_Expr *) ptr)->lexpr, intersect_present); + Node *rexpr = A_Expr_to_Expr(((A_Expr *) ptr)->rexpr, intersect_present); + + expr->typeOid = BOOLOID; + expr->opType = AND_EXPR; + expr->args = makeList(lexpr, rexpr, -1); + result = (Node *) expr; + break; + } + case NOT: + { + Expr *expr = makeNode(Expr); + Node *rexpr = A_Expr_to_Expr(((A_Expr *) ptr)->rexpr, intersect_present); + + expr->typeOid = BOOLOID; + expr->opType = NOT_EXPR; + expr->args = makeList(rexpr, -1); + result = (Node *) expr; + break; + } + } + break; + } + default: + result = ptr; + } + return result; } void @@ -1196,7 +1209,7 @@ static void transformForUpdate(Query *qry, List *forUpdate) { List *rowMark = NULL; - RowMark *newrm; + RowMark *newrm; List *l; Index i; @@ -1205,37 +1218,37 @@ transformForUpdate(Query *qry, List *forUpdate) if (lfirst(forUpdate) == NULL) /* all tables */ { i = 1; - foreach (l, qry->rtable) + foreach(l, qry->rtable) { newrm = makeNode(RowMark); newrm->rti = i++; - newrm->info = ROW_MARK_FOR_UPDATE|ROW_ACL_FOR_UPDATE; + newrm->info = ROW_MARK_FOR_UPDATE | ROW_ACL_FOR_UPDATE; rowMark = lappend(rowMark, newrm); } qry->rowMark = nconc(qry->rowMark, rowMark); return; } - foreach (l, forUpdate) + foreach(l, forUpdate) { - List *l2; - List *l3; + List *l2; + List *l3; i = 1; - foreach (l2, qry->rtable) + foreach(l2, qry->rtable) { - if (strcmp(((RangeTblEntry*)lfirst(l2))->refname, lfirst(l)) == 0) + if (strcmp(((RangeTblEntry *) lfirst(l2))->refname, lfirst(l)) == 0) { - foreach (l3, rowMark) + foreach(l3, rowMark) { - if (((RowMark*)lfirst(l3))->rti == i) /* duplicate */ + if (((RowMark *) lfirst(l3))->rti == i) /* duplicate */ break; } if (l3 == NULL) { newrm = makeNode(RowMark); newrm->rti = i; - newrm->info = ROW_MARK_FOR_UPDATE|ROW_ACL_FOR_UPDATE; + newrm->info = ROW_MARK_FOR_UPDATE | ROW_ACL_FOR_UPDATE; rowMark = lappend(rowMark, newrm); } break; diff --git a/src/backend/parser/parse_agg.c b/src/backend/parser/parse_agg.c index 19dd98dfbe8..559337cc2f9 100644 --- a/src/backend/parser/parse_agg.c +++ b/src/backend/parser/parse_agg.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/parse_agg.c,v 1.20 1999/05/23 21:41:14 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/parse_agg.c,v 1.21 1999/05/25 16:10:13 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -33,8 +33,8 @@ static bool contain_agg_clause(Node *clause); static bool exprIsAggOrGroupCol(Node *expr, List *groupClause, List *tlist); -static bool tleIsAggOrGroupCol(TargetEntry *tle, List *groupClause, - List *tlist); +static bool tleIsAggOrGroupCol(TargetEntry *tle, List *groupClause, + List *tlist); /* * contain_agg_clause @@ -106,7 +106,7 @@ exprIsAggOrGroupCol(Node *expr, List *groupClause, List *tlist) List *gl; if (expr == NULL || IsA(expr, Const) || - IsA(expr, Param) || IsA(expr, Aggref) || + IsA(expr, Param) ||IsA(expr, Aggref) || IsA(expr, SubLink)) /* can't handle currently !!! */ return TRUE; @@ -190,11 +190,11 @@ parseCheckAggregates(ParseState *pstate, Query *qry) Assert(pstate->p_hasAggs || qry->groupClause); /* - * Aggregates must never appear in WHERE clauses. - * (Note this check should appear first to deliver an appropriate - * error message; otherwise we are likely to generate the generic - * "illegal use of aggregates in target list" message, which is - * outright misleading if the problem is in WHERE.) + * Aggregates must never appear in WHERE clauses. (Note this check + * should appear first to deliver an appropriate error message; + * otherwise we are likely to generate the generic "illegal use of + * aggregates in target list" message, which is outright misleading if + * the problem is in WHERE.) */ if (contain_agg_clause(qry->qual)) elog(ERROR, "Aggregates not allowed in WHERE clause"); @@ -219,7 +219,7 @@ parseCheckAggregates(ParseState *pstate, Query *qry) if (!exprIsAggOrGroupCol(qry->havingQual, qry->groupClause, qry->targetList)) elog(ERROR, - "Illegal use of aggregates or non-group column in HAVING clause"); + "Illegal use of aggregates or non-group column in HAVING clause"); } @@ -313,7 +313,7 @@ ParseAgg(ParseState *pstate, char *aggname, Oid basetype, basetype = aggform->aggbasetype; vartype = exprType(lfirst(target)); if ((basetype != vartype) - && (! IS_BINARY_COMPATIBLE(basetype, vartype))) + && (!IS_BINARY_COMPATIBLE(basetype, vartype))) { Type tp1, tp2; @@ -321,8 +321,8 @@ ParseAgg(ParseState *pstate, char *aggname, Oid basetype, tp1 = typeidType(basetype); tp2 = typeidType(vartype); elog(ERROR, "Aggregate type mismatch" - "\n\t%s() works on %s, not on %s", - aggname, typeTypeName(tp1), typeTypeName(tp2)); + "\n\t%s() works on %s, not on %s", + aggname, typeTypeName(tp1), typeTypeName(tp2)); } } diff --git a/src/backend/parser/parse_clause.c b/src/backend/parser/parse_clause.c index f7b6f2219d1..618554e5613 100644 --- a/src/backend/parser/parse_clause.c +++ b/src/backend/parser/parse_clause.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/parse_clause.c,v 1.35 1999/05/22 02:55:57 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/parse_clause.c,v 1.36 1999/05/25 16:10:14 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -41,13 +41,14 @@ static TargetEntry * static void parseFromClause(ParseState *pstate, List *frmList, Node **qual); -Attr *makeAttr(char *relname, char *attname); +Attr *makeAttr(char *relname, char *attname); #ifdef ENABLE_OUTER_JOINS -Node *transformUsingClause(ParseState *pstate, List *onList, char *lname, char *rname); +Node *transformUsingClause(ParseState *pstate, List *onList, char *lname, char *rname); + #endif -char *transformTableEntry(ParseState *pstate, RangeVar *r); +char *transformTableEntry(ParseState *pstate, RangeVar *r); /* @@ -67,16 +68,14 @@ makeRangeTable(ParseState *pstate, char *relname, List *frmList, Node **qual) return; if ((refnameRangeTablePosn(pstate, relname, &sublevels_up) == 0) - || (sublevels_up != 0)) + || (sublevels_up != 0)) rte = addRangeTableEntry(pstate, relname, relname, FALSE, FALSE); else rte = refnameRangeTableEntry(pstate, relname); /* This could only happen for multi-action rules */ if (pstate->p_target_relation != NULL) - { heap_close(pstate->p_target_relation); - } pstate->p_target_rangetblentry = rte; pstate->p_target_relation = heap_open(rte->relid); @@ -102,7 +101,8 @@ transformWhereClause(ParseState *pstate, Node *a_expr, Node *o_expr) if ((a_expr != NULL) && (o_expr != NULL)) { - A_Expr *a = makeNode(A_Expr); + A_Expr *a = makeNode(A_Expr); + a->oper = AND; a->opname = NULL; a->lexpr = o_expr; @@ -110,12 +110,12 @@ transformWhereClause(ParseState *pstate, Node *a_expr, Node *o_expr) expr = a; } else if (o_expr != NULL) - expr = (A_Expr *)o_expr; + expr = (A_Expr *) o_expr; else - expr = (A_Expr *)a_expr; + expr = (A_Expr *) a_expr; pstate->p_in_where_clause = true; - qual = transformExpr(pstate, (Node *)expr, EXPR_COLUMN_FIRST); + qual = transformExpr(pstate, (Node *) expr, EXPR_COLUMN_FIRST); pstate->p_in_where_clause = false; if (exprType(qual) != BOOLOID) @@ -130,6 +130,7 @@ Attr * makeAttr(char *relname, char *attname) { Attr *a = makeNode(Attr); + a->relname = relname; a->paramNo = NULL; a->attrs = lcons(makeString(attname), NIL); @@ -149,30 +150,34 @@ transformUsingClause(ParseState *pstate, List *onList, char *lname, char *rname) List *on; Node *qual; - foreach (on, onList) + foreach(on, onList) { qual = lfirst(on); - /* Ident node means it is just a column name from a real USING clause... */ + /* + * Ident node means it is just a column name from a real USING + * clause... + */ if (IsA(qual, Ident)) { - Ident *i = (Ident *)qual; + Ident *i = (Ident *) qual; Attr *lattr = makeAttr(lname, i->name); Attr *rattr = makeAttr(rname, i->name); - A_Expr *e = makeNode(A_Expr); + A_Expr *e = makeNode(A_Expr); e->oper = OP; e->opname = "="; - e->lexpr = (Node *)lattr; - e->rexpr = (Node *)rattr; + e->lexpr = (Node *) lattr; + e->rexpr = (Node *) rattr; if (expr != NULL) { - A_Expr *a = makeNode(A_Expr); + A_Expr *a = makeNode(A_Expr); + a->oper = AND; a->opname = NULL; - a->lexpr = (Node *)expr; - a->rexpr = (Node *)e; + a->lexpr = (Node *) expr; + a->rexpr = (Node *) e; expr = a; } else @@ -184,21 +189,21 @@ transformUsingClause(ParseState *pstate, List *onList, char *lname, char *rname) { if (expr != NULL) { - A_Expr *a = makeNode(A_Expr); + A_Expr *a = makeNode(A_Expr); + a->oper = AND; a->opname = NULL; - a->lexpr = (Node *)expr; - a->rexpr = (Node *)qual; + a->lexpr = (Node *) expr; + a->rexpr = (Node *) qual; expr = a; } else - { - expr = (A_Expr *)qual; - } + expr = (A_Expr *) qual; } } - return ((Node *)transformExpr(pstate, (Node *)expr, EXPR_COLUMN_FIRST)); + return ((Node *) transformExpr(pstate, (Node *) expr, EXPR_COLUMN_FIRST)); } + #endif char * @@ -213,15 +218,14 @@ transformTableEntry(ParseState *pstate, RangeVar *r) refname = relname; /* - * marks this entry to indicate it comes from the FROM clause. In - * SQL, the target list can only refer to range variables - * specified in the from clause but we follow the more powerful - * POSTQUEL semantics and automatically generate the range - * variable if not specified. However there are times we need to - * know whether the entries are legitimate. + * marks this entry to indicate it comes from the FROM clause. In SQL, + * the target list can only refer to range variables specified in the + * from clause but we follow the more powerful POSTQUEL semantics and + * automatically generate the range variable if not specified. However + * there are times we need to know whether the entries are legitimate. * - * eg. select * from foo f where f.x = 1; will generate wrong answer - * if we expand * to foo.x. + * eg. select * from foo f where f.x = 1; will generate wrong answer if + * we expand * to foo.x. */ rte = addRangeTableEntry(pstate, relname, refname, baserel->inh, TRUE); @@ -253,7 +257,8 @@ parseFromClause(ParseState *pstate, List *frmList, Node **qual) foreach(fl, frmList) { - Node *n = lfirst(fl); + Node *n = lfirst(fl); + /* * marks this entry to indicate it comes from the FROM clause. In * SQL, the target list can only refer to range variables @@ -266,34 +271,36 @@ parseFromClause(ParseState *pstate, List *frmList, Node **qual) * if we expand * to foo.x. */ if (IsA(n, RangeVar)) - { - transformTableEntry(pstate, (RangeVar *)n); - } + transformTableEntry(pstate, (RangeVar *) n); else if (IsA(n, JoinExpr)) { - JoinExpr *j = (JoinExpr *)n; + JoinExpr *j = (JoinExpr *) n; + #ifdef ENABLE_OUTER_JOINS - char *lname = transformTableEntry(pstate, (RangeVar *)j->larg); + char *lname = transformTableEntry(pstate, (RangeVar *) j->larg); + #endif char *rname; - if (IsA((Node *)j->rarg, RangeVar)) - rname = transformTableEntry(pstate, (RangeVar *)j->rarg); + if (IsA((Node *) j->rarg, RangeVar)) + rname = transformTableEntry(pstate, (RangeVar *) j->rarg); else elog(ERROR, "Nested JOINs are not yet supported"); #ifdef ENABLE_OUTER_JOINS if (j->jointype == INNER_P) { - /* This is an inner join, so rip apart the join node - * and transform into a traditional FROM list. - * NATURAL JOIN and USING clauses both change the shape - * of the result. Need to generate a list of result columns - * to use for target list expansion and validation. - * Not doing this yet though! + + /* + * This is an inner join, so rip apart the join node and + * transform into a traditional FROM list. NATURAL JOIN + * and USING clauses both change the shape of the result. + * Need to generate a list of result columns to use for + * target list expansion and validation. Not doing this + * yet though! */ if (IsA(j->quals, List)) - j->quals = lcons(transformUsingClause(pstate, (List *)j->quals, lname, rname), NIL); + j->quals = lcons(transformUsingClause(pstate, (List *) j->quals, lname, rname), NIL); Assert(qual != NULL); @@ -302,19 +309,19 @@ parseFromClause(ParseState *pstate, List *frmList, Node **qual) else elog(ERROR, "Multiple JOIN/ON clauses not handled (internal error)"); - /* if we are transforming this node back into a FROM list, + /* + * if we are transforming this node back into a FROM list, * then we will need to replace the node with two nodes. * Will need access to the previous list item to change - * the link pointer to reference these new nodes. - * Try accumulating and returning a new list. - * - thomas 1999-01-08 - * Not doing this yet though! + * the link pointer to reference these new nodes. Try + * accumulating and returning a new list. - thomas + * 1999-01-08 Not doing this yet though! */ } else if ((j->jointype == LEFT) - || (j->jointype == RIGHT) - || (j->jointype == FULL)) + || (j->jointype == RIGHT) + || (j->jointype == FULL)) elog(ERROR, "OUTER JOIN is not implemented"); else elog(ERROR, "Unrecognized JOIN clause; tag is %d (internal error)", @@ -545,7 +552,7 @@ transformGroupClause(ParseState *pstate, List *grouplist, List *targetlist) resdom->restype, false)); if (glist == NIL) { - int groupref = length(glist) + 1; + int groupref = length(glist) + 1; restarget->resdom->resgroupref = groupref; grpcl->tleGroupref = groupref; @@ -561,12 +568,12 @@ transformGroupClause(ParseState *pstate, List *grouplist, List *targetlist) GroupClause *gcl = (GroupClause *) lfirst(i); if (equal(get_groupclause_expr(gcl, targetlist), - restarget->expr)) + restarget->expr)) break; } if (i == NIL) /* not in grouplist already */ { - int groupref = length(glist) + 1; + int groupref = length(glist) + 1; restarget->resdom->resgroupref = groupref; grpcl->tleGroupref = groupref; @@ -749,21 +756,22 @@ transformUnionClause(List *unionClause, List *targetlist) /* recursion */ qlist = parse_analyze(unionClause, NULL); - foreach (qlist_item, qlist) + foreach(qlist_item, qlist) { Query *query = (Query *) lfirst(qlist_item); List *prev_target = targetlist; List *next_target; - int prev_len = 0, next_len = 0; + int prev_len = 0, + next_len = 0; foreach(prev_target, targetlist) if (!((TargetEntry *) lfirst(prev_target))->resdom->resjunk) - prev_len++; + prev_len++; foreach(next_target, query->targetList) if (!((TargetEntry *) lfirst(next_target))->resdom->resjunk) - next_len++; - + next_len++; + if (prev_len != next_len) elog(ERROR, "Each UNION clause must have the same number of columns"); diff --git a/src/backend/parser/parse_coerce.c b/src/backend/parser/parse_coerce.c index a481ecfa0a0..17b06faf4b5 100644 --- a/src/backend/parser/parse_coerce.c +++ b/src/backend/parser/parse_coerce.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/parse_coerce.c,v 2.15 1999/05/22 04:12:26 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/parse_coerce.c,v 2.16 1999/05/25 16:10:15 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -28,7 +28,7 @@ Oid DemoteType(Oid inType); Oid PromoteTypeToNext(Oid inType); -static Oid PreferredType(CATEGORY category, Oid type); +static Oid PreferredType(CATEGORY category, Oid type); /* coerce_type() @@ -36,7 +36,7 @@ static Oid PreferredType(CATEGORY category, Oid type); */ Node * coerce_type(ParseState *pstate, Node *node, Oid inputTypeId, Oid targetTypeId, - int32 atttypmod) + int32 atttypmod) { Node *result = NULL; Oid infunc; @@ -60,6 +60,7 @@ coerce_type(ParseState *pstate, Node *node, Oid inputTypeId, Oid targetTypeId, */ else if (inputTypeId != UNKNOWNOID) { + /* * We already know there is a function which will do this, so * let's use it @@ -77,22 +78,22 @@ coerce_type(ParseState *pstate, Node *node, Oid inputTypeId, Oid targetTypeId, { Const *con = (Const *) node; - val = (Datum) textout((struct varlena *)con->constvalue); + val = (Datum) textout((struct varlena *) con->constvalue); infunc = typeidInfunc(targetTypeId); con = makeNode(Const); con->consttype = targetTypeId; con->constlen = typeLen(typeidType(targetTypeId)); /* - * Use "-1" for varchar() type. - * For char(), we need to pad out the type with the proper - * number of spaces. This was a major problem for - * DEFAULT string constants to char() types. + * Use "-1" for varchar() type. For char(), we need to pad + * out the type with the proper number of spaces. This + * was a major problem for DEFAULT string constants to + * char() types. */ con->constvalue = (Datum) fmgr(infunc, val, - typeidTypElem(targetTypeId), - (targetTypeId != BPCHAROID) ? -1 : atttypmod); + typeidTypElem(targetTypeId), + (targetTypeId != BPCHAROID) ? -1 : atttypmod); con->constisnull = false; con->constbyval = typeByVal(typeidType(targetTypeId)); con->constisset = false; @@ -150,6 +151,7 @@ can_coerce_type(int nargs, Oid *input_typeids, Oid *func_typeids) /* don't know what to do for the input type? then quit... */ else if (input_typeids[i] == InvalidOid) return false; + /* * if not unknown input type, try for explicit conversion * using functions... @@ -298,7 +300,7 @@ PreferredType(CATEGORY category, Oid type) case (NETWORK_TYPE): result = INETOID; break; - + case (GEOMETRIC_TYPE): case (USER_TYPE): result = type; diff --git a/src/backend/parser/parse_expr.c b/src/backend/parser/parse_expr.c index 8245beed110..8ea98d28097 100644 --- a/src/backend/parser/parse_expr.c +++ b/src/backend/parser/parse_expr.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/parse_expr.c,v 1.47 1999/05/22 04:12:26 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/parse_expr.c,v 1.48 1999/05/25 16:10:16 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -152,7 +152,7 @@ transformExpr(ParseState *pstate, Node *expr, int precedence) */ idx = lnext(idx); } - result = (Node *) make_array_ref((Node *)param, pno->indirection); + result = (Node *) make_array_ref((Node *) param, pno->indirection); } else result = (Node *) param; @@ -251,7 +251,8 @@ transformExpr(ParseState *pstate, Node *expr, int precedence) { /* - * look for a column name or a relation name (the default behavior) + * look for a column name or a relation name (the default + * behavior) */ result = transformIdent(pstate, expr, precedence); break; @@ -343,28 +344,31 @@ transformExpr(ParseState *pstate, Node *expr, int precedence) if (c->arg != NULL) { /* shorthand form was specified, so expand... */ - A_Expr *a = makeNode(A_Expr); + A_Expr *a = makeNode(A_Expr); + a->oper = OP; a->opname = "="; a->lexpr = c->arg; a->rexpr = w->expr; - w->expr = (Node *)a; + w->expr = (Node *) a; } lfirst(args) = transformExpr(pstate, (Node *) w, precedence); } - /* It's not shorthand anymore, so drop the implicit argument. - * This is necessary to keep the executor from seeing an - * untransformed expression... + /* + * It's not shorthand anymore, so drop the implicit + * argument. This is necessary to keep the executor from + * seeing an untransformed expression... */ c->arg = NULL; /* transform the default clause */ if (c->defresult == NULL) { - A_Const *n = makeNode(A_Const); + A_Const *n = makeNode(A_Const); + n->val.type = T_Null; - c->defresult = (Node *)n; + c->defresult = (Node *) n; } c->defresult = transformExpr(pstate, (Node *) c->defresult, precedence); @@ -380,7 +384,7 @@ transformExpr(ParseState *pstate, Node *expr, int precedence) wtype = exprType(w->result); /* move on to next one if no new information... */ if (wtype && (wtype != UNKNOWNOID) - && (wtype != ptype)) + && (wtype != ptype)) { /* so far, only nulls so take anything... */ if (!ptype) @@ -388,15 +392,23 @@ transformExpr(ParseState *pstate, Node *expr, int precedence) ptype = wtype; pcategory = TypeCategory(ptype); } - /* both types in different categories? then not much hope... */ + + /* + * both types in different categories? then not + * much hope... + */ else if ((TypeCategory(wtype) != pcategory) - || ((TypeCategory(wtype) == USER_TYPE) - && (TypeCategory(c->casetype) == USER_TYPE))) + || ((TypeCategory(wtype) == USER_TYPE) + && (TypeCategory(c->casetype) == USER_TYPE))) { - elog(ERROR,"CASE/WHEN types '%s' and '%s' not matched", + elog(ERROR, "CASE/WHEN types '%s' and '%s' not matched", typeidTypeName(c->casetype), typeidTypeName(wtype)); } - /* new one is preferred and can convert? then take it... */ + + /* + * new one is preferred and can convert? then take + * it... + */ else if (IsPreferredType(pcategory, wtype) && can_coerce_type(1, &ptype, &wtype)) { @@ -409,21 +421,24 @@ transformExpr(ParseState *pstate, Node *expr, int precedence) /* Convert default result clause, if necessary */ if (c->casetype != ptype) { - if (! c->casetype) + if (!c->casetype) { - /* default clause is NULL, - * so assign preferred type from WHEN clauses... */ + + /* + * default clause is NULL, so assign preferred + * type from WHEN clauses... + */ c->casetype = ptype; } else if (can_coerce_type(1, &c->casetype, &ptype)) { c->defresult = coerce_type(pstate, c->defresult, - c->casetype, ptype, -1); + c->casetype, ptype, -1); c->casetype = ptype; } else { - elog(ERROR,"CASE/ELSE unable to convert to type %s", + elog(ERROR, "CASE/ELSE unable to convert to type %s", typeidTypeName(ptype)); } } @@ -431,11 +446,15 @@ transformExpr(ParseState *pstate, Node *expr, int precedence) /* Convert when clauses, if not null and if necessary */ foreach(args, c->args) { - Oid wtype; + Oid wtype; w = lfirst(args); wtype = exprType(w->result); - /* only bother with conversion if not NULL and different type... */ + + /* + * only bother with conversion if not NULL and + * different type... + */ if (wtype && (wtype != ptype)) { if (can_coerce_type(1, &wtype, &ptype)) @@ -445,7 +464,7 @@ transformExpr(ParseState *pstate, Node *expr, int precedence) } else { - elog(ERROR,"CASE/WHEN unable to convert to type %s", + elog(ERROR, "CASE/WHEN unable to convert to type %s", typeidTypeName(ptype)); } } @@ -461,14 +480,18 @@ transformExpr(ParseState *pstate, Node *expr, int precedence) w->expr = transformExpr(pstate, (Node *) w->expr, precedence); if (exprType(w->expr) != BOOLOID) - elog(ERROR,"WHEN clause must have a boolean result"); + elog(ERROR, "WHEN clause must have a boolean result"); - /* result is NULL for NULLIF() construct - thomas 1998-11-11 */ + /* + * result is NULL for NULLIF() construct - thomas + * 1998-11-11 + */ if (w->result == NULL) { - A_Const *n = makeNode(A_Const); + A_Const *n = makeNode(A_Const); + n->val.type = T_Null; - w->result = (Node *)n; + w->result = (Node *) n; } w->result = transformExpr(pstate, (Node *) w->result, precedence); result = expr; @@ -530,7 +553,7 @@ transformIdent(ParseState *pstate, Node *expr, int precedence) att->relname = rte->refname; att->attrs = lcons(makeString(ident->name), NIL); column_result = (Node *) ParseNestedFuncOrColumn(pstate, att, - &pstate->p_last_resno, precedence); + &pstate->p_last_resno, precedence); } /* try to find the ident as a relation */ @@ -602,11 +625,13 @@ exprType(Node *expr) break; case T_SubLink: { - SubLink *sublink = (SubLink *) expr; + SubLink *sublink = (SubLink *) expr; + if (sublink->subLinkType == EXPR_SUBLINK) { /* return the result type of the combining operator */ - Expr *op_expr = (Expr *) lfirst(sublink->oper); + Expr *op_expr = (Expr *) lfirst(sublink->oper); + type = op_expr->typeOid; } else diff --git a/src/backend/parser/parse_func.c b/src/backend/parser/parse_func.c index 6a4258048b9..8fa8fb8b365 100644 --- a/src/backend/parser/parse_func.c +++ b/src/backend/parser/parse_func.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/parse_func.c,v 1.45 1999/05/22 04:12:27 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/parse_func.c,v 1.46 1999/05/25 16:10:17 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -77,9 +77,9 @@ static int match_argtypes(int nargs, static List *setup_tlist(char *attname, Oid relid); static List *setup_base_tlist(Oid typeid); static Oid *func_select_candidate(int nargs, Oid *input_typeids, - CandidateList candidates); -static int agg_get_candidates(char *aggname, Oid typeId, CandidateList *candidates); -static Oid agg_select_candidate(Oid typeid, CandidateList candidates); + CandidateList candidates); +static int agg_get_candidates(char *aggname, Oid typeId, CandidateList *candidates); +static Oid agg_select_candidate(Oid typeid, CandidateList candidates); #define ISCOMPLEX(type) (typeidTypeRelid(type) ? true : false) @@ -91,7 +91,7 @@ typedef struct _SuperQE } SuperQE; /* - ** ParseNestedFuncOrColumn + ** ParseNestedFuncOrColumn ** Given a nested dot expression (i.e. (relation func ... attr), build up ** a tree with of Iter and Func nodes. */ @@ -139,12 +139,12 @@ agg_get_candidates(char *aggname, Oid typeId, CandidateList *candidates) { - CandidateList current_candidate; - Relation pg_aggregate_desc; - HeapScanDesc pg_aggregate_scan; - HeapTuple tup; - Form_pg_aggregate agg; - int ncandidates = 0; + CandidateList current_candidate; + Relation pg_aggregate_desc; + HeapScanDesc pg_aggregate_scan; + HeapTuple tup; + Form_pg_aggregate agg; + int ncandidates = 0; static ScanKeyData aggKey[1] = { {0, Anum_pg_aggregate_aggname, F_NAMEEQ}}; @@ -157,7 +157,7 @@ agg_get_candidates(char *aggname, pg_aggregate_desc = heap_openr(AggregateRelationName); pg_aggregate_scan = heap_beginscan(pg_aggregate_desc, 0, - SnapshotSelf, /* ??? */ + SnapshotSelf, /* ??? */ 1, aggKey); @@ -185,12 +185,12 @@ agg_get_candidates(char *aggname, static Oid agg_select_candidate(Oid typeid, CandidateList candidates) { - CandidateList current_candidate; - CandidateList last_candidate; - Oid current_typeid; - int ncandidates; - CATEGORY category, - current_category; + CandidateList current_candidate; + CandidateList last_candidate; + Oid current_typeid; + int ncandidates; + CATEGORY category, + current_category; /* * Look for candidates which allow coersion and have a preferred type. @@ -227,13 +227,11 @@ agg_select_candidate(Oid typeid, CandidateList candidates) } /* otherwise, don't bother keeping this one around... */ else if (last_candidate != NULL) - { last_candidate->next = NULL; - } } return ((ncandidates == 1) ? candidates->args[0] : 0); -} /* agg_select_candidate() */ +} /* agg_select_candidate() */ /* @@ -352,13 +350,14 @@ ParseFuncOrColumn(ParseState *pstate, char *funcname, List *fargs, } else { + /* * Parsing aggregates. */ - Type tp; - Oid basetype; - int ncandidates; - CandidateList candidates; + Type tp; + Oid basetype; + int ncandidates; + CandidateList candidates; /* * the aggregate COUNT is a special case, ignore its base @@ -378,14 +377,13 @@ ParseFuncOrColumn(ParseState *pstate, char *funcname, List *fargs, fargs, precedence); /* - * No exact match yet, so see if there is another entry - * in the aggregate table which is compatible. - * - thomas 1998-12-05 + * No exact match yet, so see if there is another entry in the + * aggregate table which is compatible. - thomas 1998-12-05 */ ncandidates = agg_get_candidates(funcname, basetype, &candidates); if (ncandidates > 0) { - Oid type; + Oid type; type = agg_select_candidate(basetype, candidates); if (OidIsValid(type)) @@ -399,7 +397,7 @@ ParseFuncOrColumn(ParseState *pstate, char *funcname, List *fargs, } else { - elog(ERROR,"Unable to select an aggregate function %s(%s)", + elog(ERROR, "Unable to select an aggregate function %s(%s)", funcname, typeidTypeName(basetype)); } } @@ -407,18 +405,16 @@ ParseFuncOrColumn(ParseState *pstate, char *funcname, List *fargs, /* * See if this is a single argument function with the function * name also a type name and the input argument and type name - * binary compatible... - * This means that you are trying for a type conversion which does not - * need to take place, so we'll just pass through the argument itself. - * (make this clearer with some extra brackets - thomas 1998-12-05) + * binary compatible... This means that you are trying for a + * type conversion which does not need to take place, so we'll + * just pass through the argument itself. (make this clearer + * with some extra brackets - thomas 1998-12-05) */ if ((HeapTupleIsValid(tp = SearchSysCacheTuple(TYPNAME, - PointerGetDatum(funcname), + PointerGetDatum(funcname), 0, 0, 0))) && IS_BINARY_COMPATIBLE(typeTypeId(tp), basetype)) - { return ((Node *) lfirst(fargs)); - } } } @@ -440,6 +436,7 @@ ParseFuncOrColumn(ParseState *pstate, char *funcname, List *fargs, if (nodeTag(pair) == T_Ident && ((Ident *) pair)->isRel) { + /* * a relation */ @@ -551,9 +548,7 @@ ParseFuncOrColumn(ParseState *pstate, char *funcname, List *fargs, if (attisset) { if (!strcmp(funcname, "*")) - { funcnode->func_tlist = expandAll(pstate, relname, refname, curr_resno); - } else { funcnode->func_tlist = setup_tlist(funcname, argrelid); @@ -581,13 +576,13 @@ ParseFuncOrColumn(ParseState *pstate, char *funcname, List *fargs, seqrel = textout((text *) DatumGetPointer(seq->constvalue)); /* Do we have nextval('"Aa"')? */ if (strlen(seqrel) >= 2 && - seqrel[0] == '\"' && seqrel[strlen(seqrel)-1] == '\"') + seqrel[0] == '\"' && seqrel[strlen(seqrel) - 1] == '\"') { /* strip off quotes, keep case */ - seqrel = pstrdup(seqrel+1); - seqrel[strlen(seqrel)-1] = '\0'; + seqrel = pstrdup(seqrel + 1); + seqrel[strlen(seqrel) - 1] = '\0'; pfree(DatumGetPointer(seq->constvalue)); - seq->constvalue = (Datum)textin(seqrel); + seq->constvalue = (Datum) textin(seqrel); } else { @@ -669,7 +664,7 @@ func_get_candidates(char *funcname, int nargs) Relation heapRelation; Relation idesc; ScanKeyData skey; - HeapTupleData tuple; + HeapTupleData tuple; IndexScanDesc sd; RetrieveIndexResult indexRes; Form_pg_proc pgProcP; @@ -837,9 +832,7 @@ func_select_candidate(int nargs, ncandidates++; } else - { last_candidate->next = NULL; - } } if (ncandidates == 1) @@ -870,9 +863,7 @@ func_select_candidate(int nargs, } else if ((current_category != slot_category) && IS_BUILTIN_TYPE(current_type)) - { return NULL; - } else if (current_type != slot_type) { if (IsPreferredType(slot_category, current_type)) @@ -881,16 +872,12 @@ func_select_candidate(int nargs, candidates = current_candidate; } else if (IsPreferredType(slot_category, slot_type)) - { - candidates->next = current_candidate->next; - } + candidates->next = current_candidate->next; } } if (slot_type != InvalidOid) - { input_typeids[i] = slot_type; - } } else { @@ -979,7 +966,7 @@ func_get_detail(char *funcname, ftup = SearchSysCacheTuple(PRONAME, PointerGetDatum(funcname), Int32GetDatum(nargs), - PointerGetDatum(*true_typeids), + PointerGetDatum(*true_typeids), 0); Assert(HeapTupleIsValid(ftup)); } @@ -991,8 +978,8 @@ func_get_detail(char *funcname, else if (ncandidates > 1) { *true_typeids = func_select_candidate(nargs, - current_input_typeids, - current_function_typeids); + current_input_typeids, + current_function_typeids); /* couldn't decide, so quit */ if (*true_typeids == NULL) @@ -1006,9 +993,9 @@ func_get_detail(char *funcname, else { ftup = SearchSysCacheTuple(PRONAME, - PointerGetDatum(funcname), + PointerGetDatum(funcname), Int32GetDatum(nargs), - PointerGetDatum(*true_typeids), + PointerGetDatum(*true_typeids), 0); Assert(HeapTupleIsValid(ftup)); } @@ -1304,9 +1291,9 @@ make_arguments(ParseState *pstate, if (input_typeids[i] == UNKNOWNOID && function_typeids[i] != InvalidOid) { lfirst(current_fargs) = parser_typecast2(lfirst(current_fargs), - input_typeids[i], - typeidType(function_typeids[i]), - -1); + input_typeids[i], + typeidType(function_typeids[i]), + -1); } /* types don't match? then force coersion using a function call... */ @@ -1321,7 +1308,7 @@ make_arguments(ParseState *pstate, } /* - ** setup_tlist + ** setup_tlist ** Build a tlist that says which attribute to project to. ** This routine is called by ParseFuncOrColumn() to set up a target list ** on a tuple parameter or return value. Due to a bug in 4.0, @@ -1359,7 +1346,7 @@ setup_tlist(char *attname, Oid relid) } /* - ** setup_base_tlist + ** setup_base_tlist ** Build a tlist that extracts a base type from the tuple ** returned by the executor. */ diff --git a/src/backend/parser/parse_oper.c b/src/backend/parser/parse_oper.c index 6e039517603..9f41d00b9e3 100644 --- a/src/backend/parser/parse_oper.c +++ b/src/backend/parser/parse_oper.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/parse_oper.c,v 1.24 1999/05/10 00:45:29 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/parse_oper.c,v 1.25 1999/05/25 16:10:18 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -27,8 +27,8 @@ #include "storage/bufmgr.h" #include "utils/syscache.h" -static Oid * oper_select_candidate(int nargs, Oid *input_typeids, - CandidateList candidates); +static Oid *oper_select_candidate(int nargs, Oid *input_typeids, + CandidateList candidates); static int binary_oper_get_candidates(char *opname, Oid leftTypeId, Oid rightTypeId, @@ -227,9 +227,7 @@ oper_select_candidate(int nargs, } /* otherwise, don't bother keeping this one... */ else - { last_candidate->next = NULL; - } } if (ncandidates <= 1) @@ -281,18 +279,14 @@ oper_select_candidate(int nargs, ncandidates++; } else - { last_candidate->next = NULL; - } } if (ncandidates <= 1) { if (!can_coerce_type(1, &input_typeids[0], &candidates->args[0]) - || ((nargs > 1) && !can_coerce_type(1, &input_typeids[1], &candidates->args[1]))) - { + || ((nargs > 1) && !can_coerce_type(1, &input_typeids[1], &candidates->args[1]))) ncandidates = 0; - } return (ncandidates == 1) ? candidates->args : NULL; } @@ -349,9 +343,7 @@ oper_select_candidate(int nargs, slot_type = current_type; } else if (current_category != slot_category) - { return NULL; - } else if (current_type != slot_type) { if (IsPreferredType(slot_category, current_type)) @@ -366,9 +358,7 @@ oper_select_candidate(int nargs, } if (slot_type != InvalidOid) - { input_typeids[i] = slot_type; - } } else { @@ -656,9 +646,7 @@ right_oper(char *op, Oid arg) CharGetDatum('r')); } else - { tup = NULL; - } if (!HeapTupleIsValid(tup)) { @@ -717,9 +705,7 @@ left_oper(char *op, Oid arg) CharGetDatum('l')); } else - { tup = NULL; - } if (!HeapTupleIsValid(tup)) { diff --git a/src/backend/parser/parse_relation.c b/src/backend/parser/parse_relation.c index 07919e1b317..3101f7ac7a0 100644 --- a/src/backend/parser/parse_relation.c +++ b/src/backend/parser/parse_relation.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/parse_relation.c,v 1.21 1999/05/22 04:12:28 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/parse_relation.c,v 1.22 1999/05/25 16:10:19 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -446,8 +446,8 @@ checkTargetTypes(ParseState *pstate, char *target_colname, if (can_coerce_type(1, &attrtype_id, &attrtype_target)) { Node *expr = coerce_type(pstate, expr, attrtype_id, - attrtype_target, - get_atttypmod(pstate->p_target_relation->rd_id, resdomno_target)); + attrtype_target, + get_atttypmod(pstate->p_target_relation->rd_id, resdomno_target)); elog(ERROR, "Type %s(%d) can be coerced to match target column %s(%d)", colname, get_atttypmod(rte->relid, resdomno_id), diff --git a/src/backend/parser/parse_target.c b/src/backend/parser/parse_target.c index 2dfe2ece57d..1b821606f57 100644 --- a/src/backend/parser/parse_target.c +++ b/src/backend/parser/parse_target.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/parse_target.c,v 1.39 1999/05/23 21:42:09 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/parse_target.c,v 1.40 1999/05/25 16:10:21 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -64,10 +64,12 @@ MakeTargetEntryIdent(ParseState *pstate, if (pstate->p_is_insert && !resjunk) { - /* Assign column name of destination column to the new TLE. - * XXX this is probably WRONG in INSERT ... SELECT case, - * since handling of GROUP BY and so forth probably should use - * the source table's names not the destination's names. + + /* + * Assign column name of destination column to the new TLE. XXX + * this is probably WRONG in INSERT ... SELECT case, since + * handling of GROUP BY and so forth probably should use the + * source table's names not the destination's names. */ if (pstate->p_insert_columns != NIL) { @@ -123,8 +125,8 @@ MakeTargetEntryIdent(ParseState *pstate, if (can_coerce_type(1, &attrtype_id, &attrtype_target)) { expr = coerce_type(pstate, node, attrtype_id, - attrtype_target, - get_atttypmod(pstate->p_target_relation->rd_id, resdomno_target)); + attrtype_target, + get_atttypmod(pstate->p_target_relation->rd_id, resdomno_target)); expr = transformExpr(pstate, expr, EXPR_COLUMN_FIRST); tent = MakeTargetEntryExpr(pstate, *resname, expr, false, false); expr = tent->expr; @@ -248,7 +250,7 @@ MakeTargetEntryExpr(ParseState *pstate, if (!HeapTupleIsValid(expr)) elog(ERROR, "Attribute '%s' is of type '%s'" " but expression is of type '%s'" - "\n\tYou will need to rewrite or cast the expression", + "\n\tYou will need to rewrite or cast the expression", colname, typeidTypeName(attrtype), typeidTypeName(type_id)); @@ -326,20 +328,20 @@ static TargetEntry * MakeTargetEntryCase(ParseState *pstate, ResTarget *res) { - TargetEntry *tent; - CaseExpr *expr; - Resdom *resnode; - int resdomno; - Oid type_id; - int32 type_mod; + TargetEntry *tent; + CaseExpr *expr; + Resdom *resnode; + int resdomno; + Oid type_id; + int32 type_mod; - expr = (CaseExpr *)transformExpr(pstate, (Node *)res->val, EXPR_COLUMN_FIRST); + expr = (CaseExpr *) transformExpr(pstate, (Node *) res->val, EXPR_COLUMN_FIRST); type_id = expr->casetype; type_mod = -1; handleTargetColname(pstate, &res->name, NULL, NULL); if (res->name == NULL) - res->name = FigureColname((Node *)expr, res->val); + res->name = FigureColname((Node *) expr, res->val); resdomno = pstate->p_last_resno++; resnode = makeResdom((AttrNumber) resdomno, @@ -352,7 +354,7 @@ MakeTargetEntryCase(ParseState *pstate, tent = makeNode(TargetEntry); tent->resdom = resnode; - tent->expr = (Node *)expr; + tent->expr = (Node *) expr; return tent; } /* MakeTargetEntryCase() */ @@ -435,7 +437,7 @@ MakeTargetEntryComplex(ParseState *pstate, else { /* this is not an array assignment */ - char *colname = res->name; + char *colname = res->name; if (colname == NULL) { @@ -564,7 +566,7 @@ transformTargetList(ParseState *pstate, List *targetlist) identname = ((Ident *) res->val)->name; tent = MakeTargetEntryIdent(pstate, - (Node *) res->val, &res->name, NULL, identname, false); + (Node *) res->val, &res->name, NULL, identname, false); break; } case T_ParamNo: @@ -619,7 +621,7 @@ transformTargetList(ParseState *pstate, List *targetlist) att->relname, &pstate->p_last_resno); else lnext(tail_p_target) = expandAll(pstate, att->relname, att->relname, - &pstate->p_last_resno); + &pstate->p_last_resno); expand_star = true; } } @@ -668,9 +670,7 @@ CoerceTargetExpr(ParseState *pstate, Oid attrtype) { if (can_coerce_type(1, &type_id, &attrtype)) - { expr = coerce_type(pstate, expr, type_id, attrtype, -1); - } #ifndef DISABLE_STRING_HACKS @@ -818,6 +818,7 @@ ExpandAllTables(ParseState *pstate) rtable = pstate->p_rtable; if (pstate->p_is_rule) { + /* * skip first two entries, "*new*" and "*current*" */ @@ -876,7 +877,7 @@ FigureColname(Node *expr, Node *resval) { switch (nodeTag(expr)) { - case T_Aggref: + case T_Aggref: return (char *) ((Aggref *) expr)->aggname; case T_Expr: if (((Expr *) expr)->opType == FUNC_EXPR) @@ -887,7 +888,8 @@ FigureColname(Node *expr, Node *resval) break; case T_CaseExpr: { - char *name; + char *name; + name = FigureColname(((CaseExpr *) expr)->defresult, resval); if (!strcmp(name, "?column?")) name = "case"; diff --git a/src/backend/parser/parse_type.c b/src/backend/parser/parse_type.c index 6f77c0e8763..cdec9d9aeac 100644 --- a/src/backend/parser/parse_type.c +++ b/src/backend/parser/parse_type.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/parse_type.c,v 1.20 1999/05/10 00:45:29 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/parse_type.c,v 1.21 1999/05/25 16:10:22 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -172,6 +172,7 @@ typeidOutfunc(Oid type_id) outfunc = type->typoutput; return outfunc; } + #endif Oid diff --git a/src/backend/parser/parser.c b/src/backend/parser/parser.c index b1059936413..48c9860159e 100644 --- a/src/backend/parser/parser.c +++ b/src/backend/parser/parser.c @@ -6,7 +6,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/parser.c,v 1.38 1999/05/13 07:28:39 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/parser.c,v 1.39 1999/05/25 16:10:24 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -22,6 +22,7 @@ #if defined(FLEX_SCANNER) extern void DeleteBuffer(void); + #endif /* FLEX_SCANNER */ char *parseString; /* the char* which holds the string to be @@ -31,6 +32,7 @@ List *parsetree; /* result of parsing is left here */ #ifdef SETS_FIXED static void fixupsets(); static void define_sets(); + #endif /* diff --git a/src/backend/parser/scansup.c b/src/backend/parser/scansup.c index 36a5734bb3e..f32aee93f82 100644 --- a/src/backend/parser/scansup.c +++ b/src/backend/parser/scansup.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/scansup.c,v 1.12 1999/02/13 23:17:12 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/scansup.c,v 1.13 1999/05/25 16:10:25 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -51,8 +51,10 @@ scanstr(char *s) { if (s[i] == '\'') { - /* Note: if scanner is working right, unescaped quotes can only - * appear in pairs, so there should be another character. + + /* + * Note: if scanner is working right, unescaped quotes can + * only appear in pairs, so there should be another character. */ i++; newStr[j] = s[i]; diff --git a/src/backend/port/dynloader/freebsd.c b/src/backend/port/dynloader/freebsd.c index 14d21fb61f2..0b5e327de4d 100644 --- a/src/backend/port/dynloader/freebsd.c +++ b/src/backend/port/dynloader/freebsd.c @@ -68,7 +68,7 @@ BSD44_derived_dlopen(const char *file, int num) void *vp; if ((vp = dlopen((char *) file, num)) == (void *) NULL) - sprintf(error_message, "dlopen '%s' failed. (%s)", file, dlerror() ); + sprintf(error_message, "dlopen '%s' failed. (%s)", file, dlerror()); return vp; #endif } diff --git a/src/backend/port/hpux/fixade.h b/src/backend/port/hpux/fixade.h index d76c8c256e0..a85fa8b1a5c 100644 --- a/src/backend/port/hpux/fixade.h +++ b/src/backend/port/hpux/fixade.h @@ -7,7 +7,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: fixade.h,v 1.6 1999/05/03 19:09:44 momjian Exp $ + * $Id: fixade.h,v 1.7 1999/05/25 16:10:36 momjian Exp $ * * NOTES * This must be included in EVERY source file. @@ -47,11 +47,11 @@ */ struct HP_WAY_BOGUS { - char hpwb_bogus[8191+1]; + char hpwb_bogus[8191 + 1]; }; struct HP_TOO_BOGUS { - int hptb_bogus[8191+1]; + int hptb_bogus[8191 + 1]; }; #endif /* BROKEN_STRUCT_INIT */ diff --git a/src/backend/port/snprintf.c b/src/backend/port/snprintf.c index 705989b6cae..0f9ed9cbc2b 100644 --- a/src/backend/port/snprintf.c +++ b/src/backend/port/snprintf.c @@ -51,11 +51,13 @@ * here called long_long (or ulong_long for unsigned). */ #ifdef HAVE_LONG_LONG_INT_64 -typedef long long long_long; -typedef unsigned long long ulong_long; +typedef long long long_long; +typedef unsigned long long ulong_long; + #else -typedef long long_long; -typedef unsigned long ulong_long; +typedef long long_long; +typedef unsigned long ulong_long; + #endif /* @@ -80,7 +82,7 @@ typedef unsigned long ulong_long; * causing nast effects. **************************************************************/ -/*static char _id[] = "$Id: snprintf.c,v 1.21 1999/02/21 03:49:08 scrappy Exp $";*/ +/*static char _id[] = "$Id: snprintf.c,v 1.22 1999/05/25 16:10:28 momjian Exp $";*/ static char *end; static int SnprfOverflow; @@ -92,7 +94,7 @@ int snprintf(char *str, size_t count, const char *fmt,...) { int len; - va_list args; + va_list args; va_start(args, fmt); len = vsnprintf(str, count, fmt, args); @@ -120,11 +122,11 @@ vsnprintf(char *str, size_t count, const char *fmt, va_list args) * dopr(): poor man's version of doprintf */ -static void fmtstr (char *value, int ljust, int len, int zpad, int maxwidth); -static void fmtnum (long_long value, int base, int dosign, int ljust, int len, int zpad); -static void fmtfloat (double value, char type, int ljust, int len, int precision, int pointflag); -static void dostr (char *str, int cut); -static void dopr_outch (int c); +static void fmtstr(char *value, int ljust, int len, int zpad, int maxwidth); +static void fmtnum(long_long value, int base, int dosign, int ljust, int len, int zpad); +static void fmtfloat(double value, char type, int ljust, int len, int precision, int pointflag); +static void dostr(char *str, int cut); +static void dopr_outch(int c); static char *output; @@ -408,7 +410,7 @@ fmtnum(long_long value, int base, int dosign, int ljust, int len, int zpad) } static void -fmtfloat (double value, char type, int ljust, int len, int precision, int pointflag) +fmtfloat(double value, char type, int ljust, int len, int precision, int pointflag) { char fmt[32]; char convert[512]; diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index cf1271c7ec4..46e224385ba 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -10,7 +10,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.104 1999/05/22 17:47:50 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.105 1999/05/25 16:10:40 momjian Exp $ * * NOTES * @@ -164,16 +164,16 @@ static IpcMemoryKey ipc_key; static int MaxBackends = DEF_MAXBACKENDS; - /* - * MaxBackends is the actual limit on the number of backends we will start. - * The default is established by configure, but it can be readjusted - * from 1..MAXBACKENDS with the postmaster -N switch. - * Note that a larger MaxBackends value will increase the size of the - * shared memory area as well as cause the postmaster to grab more - * kernel semaphores, even if you never actually use that many backends. + /* + * MaxBackends is the actual limit on the number of backends we will + * start. The default is established by configure, but it can be + * readjusted from 1..MAXBACKENDS with the postmaster -N switch. Note + * that a larger MaxBackends value will increase the size of the shared + * memory area as well as cause the postmaster to grab more kernel + * semaphores, even if you never actually use that many backends. */ -static int NextBackendTag = MAXINT; /* XXX why count down not up? */ +static int NextBackendTag = MAXINT; /* XXX why count down not up? */ static char *progname = (char *) NULL; static char **real_argv; static int real_argc; @@ -184,8 +184,10 @@ static int real_argc; static char Execfile[MAXPATHLEN] = ""; static int ServerSock_INET = INVALID_SOCK; /* stream socket server */ + #ifndef __CYGWIN32__ static int ServerSock_UNIX = INVALID_SOCK; /* stream socket server */ + #endif /* @@ -254,7 +256,7 @@ static int initMasks(fd_set *rmask, fd_set *wmask); static long PostmasterRandom(void); static void RandomSalt(char *salt); static void SignalChildren(SIGNAL_ARGS); -static int CountChildren(void); +static int CountChildren(void); #ifdef CYR_RECODE void GetCharSetByHost(char *, int, char *); @@ -474,9 +476,10 @@ PostmasterMain(int argc, char *argv[]) */ break; case 'N': + /* - * The max number of backends to start. - * Can't set to less than 1 or more than compiled-in limit. + * The max number of backends to start. Can't set to less + * than 1 or more than compiled-in limit. */ MaxBackends = atoi(optarg); if (MaxBackends < 1) @@ -793,11 +796,12 @@ ServerLoop(void) "Sorry, too many clients already"); else { + /* * If the backend start fails then keep the connection * open to report it. Otherwise, pretend there is an - * error to close the connection which will now be managed - * by the backend. + * error to close the connection which will now be + * managed by the backend. */ if (BackendStartup(port) != STATUS_OK) PacketSendError(&port->pktInfo, @@ -1337,11 +1341,12 @@ BackendStartup(Port *port) } /* - * Flush stdio channels just before fork, to avoid double-output problems. - * Ideally we'd use fflush(NULL) here, but there are still a few non-ANSI - * stdio libraries out there (like SunOS 4.1.x) that coredump if we do. - * Presently stdout and stderr are the only stdio output channels used - * by the postmaster, so fflush'ing them should be sufficient. + * Flush stdio channels just before fork, to avoid double-output + * problems. Ideally we'd use fflush(NULL) here, but there are still a + * few non-ANSI stdio libraries out there (like SunOS 4.1.x) that + * coredump if we do. Presently stdout and stderr are the only stdio + * output channels used by the postmaster, so fflush'ing them should + * be sufficient. */ fflush(stdout); fflush(stderr); @@ -1372,7 +1377,9 @@ BackendStartup(Port *port) port->sock); /* Generate a new backend tag for every backend we start */ - /* XXX theoretically this could wrap around, if you have the patience + + /* + * XXX theoretically this could wrap around, if you have the patience * to start 2^31 backends ... */ NextBackendTag -= 1; @@ -1549,10 +1556,10 @@ DoBackend(Port *port) } /* - * Pass any backend switches specified with -o in the postmaster's - * own command line. We assume these are secure. - * (It's OK to mangle ExtraOptions since we are now in the child process; - * this won't change the postmaster's copy.) + * Pass any backend switches specified with -o in the postmaster's own + * command line. We assume these are secure. (It's OK to mangle + * ExtraOptions since we are now in the child process; this won't + * change the postmaster's copy.) */ split_opts(av, &ac, ExtraOptions); @@ -1561,8 +1568,8 @@ DoBackend(Port *port) av[ac++] = protobuf; /* - * Tell the backend it is being called from the postmaster, - * and which database to use. -p marks the end of secure switches. + * Tell the backend it is being called from the postmaster, and which + * database to use. -p marks the end of secure switches. */ av[ac++] = "-p"; @@ -1700,7 +1707,7 @@ static int CountChildren(void) { Dlelem *curr; - Backend *bp; + Backend *bp; int mypid = getpid(); int cnt = 0; diff --git a/src/backend/regex/regcomp.c b/src/backend/regex/regcomp.c index b68f70c4dd6..d7dded8f4b5 100644 --- a/src/backend/regex/regcomp.c +++ b/src/backend/regex/regcomp.c @@ -1037,9 +1037,9 @@ int endc; /* name ended by endc,']' */ == static char othercase(int ch); */ #ifdef MULTIBYTE -static unsigned char /* if no counterpart, return ch */ +static unsigned char /* if no counterpart, return ch */ #else -static char /* if no counterpart, return ch */ +static char /* if no counterpart, return ch */ #endif othercase(ch) int ch; @@ -1047,20 +1047,20 @@ int ch; assert(pg_isalpha(ch)); if (pg_isupper(ch)) #ifdef MULTIBYTE - return (unsigned char)tolower(ch); + return (unsigned char) tolower(ch); #else return tolower(ch); #endif else if (pg_islower(ch)) #ifdef MULTIBYTE - return (unsigned char)toupper(ch); + return (unsigned char) toupper(ch); #else return toupper(ch); #endif else /* peculiar, but could happen */ #ifdef MULTIBYTE - return (unsigned char)ch; + return (unsigned char) ch; #else return ch; #endif diff --git a/src/backend/regex/retest.c b/src/backend/regex/retest.c index 13dd0761f02..4eb9b2282fb 100644 --- a/src/backend/regex/retest.c +++ b/src/backend/regex/retest.c @@ -1,7 +1,7 @@ /* * a simple regexp debug program - * - * $Header: /cvsroot/pgsql/src/backend/regex/Attic/retest.c,v 1.1 1999/05/21 06:27:54 ishii Exp $ + * + * $Header: /cvsroot/pgsql/src/backend/regex/Attic/retest.c,v 1.2 1999/05/25 16:10:45 momjian Exp $ */ #include <stdio.h> @@ -9,34 +9,38 @@ #include "postgres.h" #include <regex/regex.h> -int main() +int +main() { - int sts; - regex_t re; - char buf[1024]; - char *p; + int sts; + regex_t re; + char buf[1024]; + char *p; - printf("type in regexp string: "); - if (!fgets(buf,sizeof(buf),stdin)) { - exit(0); - } - p = strchr(buf, '\n'); - if (p) *p = '\0'; + printf("type in regexp string: "); + if (!fgets(buf, sizeof(buf), stdin)) + exit(0); + p = strchr(buf, '\n'); + if (p) + *p = '\0'; - sts = pg95_regcomp(&re, buf, 1); - printf("regcomp: parses \"%s\" and returns %d\n",buf, sts); - for (;;) { - printf("type in target string: "); - if (!fgets(buf,sizeof(buf),stdin)) { - exit(0); - } - p = strchr(buf, '\n'); - if (p) *p = '\0'; + sts = pg95_regcomp(&re, buf, 1); + printf("regcomp: parses \"%s\" and returns %d\n", buf, sts); + for (;;) + { + printf("type in target string: "); + if (!fgets(buf, sizeof(buf), stdin)) + exit(0); + p = strchr(buf, '\n'); + if (p) + *p = '\0'; - sts = pg95_regexec(&re, buf, 0, 0, 0); - printf("regexec: returns %d\n", sts); - } + sts = pg95_regexec(&re, buf, 0, 0, 0); + printf("regexec: returns %d\n", sts); + } } -void elog(int lev, const char *fmt,...) -{} +void +elog(int lev, const char *fmt,...) +{ +} diff --git a/src/backend/rewrite/rewriteDefine.c b/src/backend/rewrite/rewriteDefine.c index 431006843f2..4c7fed8b300 100644 --- a/src/backend/rewrite/rewriteDefine.c +++ b/src/backend/rewrite/rewriteDefine.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteDefine.c,v 1.28 1999/05/12 17:04:46 wieck Exp $ + * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteDefine.c,v 1.29 1999/05/25 16:10:48 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -238,12 +238,12 @@ DefineQueryRewrite(RuleStmt *stmt) */ if (event_type == CMD_SELECT) { - TargetEntry *tle; - Resdom *resdom; - Form_pg_attribute attr; - char *attname; + TargetEntry *tle; + Resdom *resdom; + Form_pg_attribute attr; + char *attname; int i; - char expected_name[NAMEDATALEN + 5]; + char expected_name[NAMEDATALEN + 5]; /* * So there cannot be INSTEAD NOTHING, ... @@ -259,6 +259,7 @@ DefineQueryRewrite(RuleStmt *stmt) */ if (length(action) > 1) elog(ERROR, "multiple action rules on select currently not supported"); + /* * ... the one action must be a SELECT, ... */ @@ -269,8 +270,8 @@ DefineQueryRewrite(RuleStmt *stmt) elog(ERROR, "event qualifications not supported for rules on select"); /* - * ... the targetlist of the SELECT action must - * exactly match the event relation, ... + * ... the targetlist of the SELECT action must exactly match the + * event relation, ... */ event_relation = heap_openr(event_obj->relname); if (event_relation == NULL) @@ -279,8 +280,9 @@ DefineQueryRewrite(RuleStmt *stmt) if (event_relation->rd_att->natts != length(query->targetList)) elog(ERROR, "select rules target list must match event relations structure"); - for (i = 1; i <= event_relation->rd_att->natts; i++) { - tle = (TargetEntry *)nth(i - 1, query->targetList); + for (i = 1; i <= event_relation->rd_att->natts; i++) + { + tle = (TargetEntry *) nth(i - 1, query->targetList); resdom = tle->resdom; attr = event_relation->rd_att->attrs[i - 1]; attname = nameout(&(attr->attname)); @@ -289,19 +291,20 @@ DefineQueryRewrite(RuleStmt *stmt) elog(ERROR, "select rules target entry %d has different column name from %s", i, attname); if (attr->atttypid != resdom->restype) - elog(ERROR, "select rules target entry %d has different type from attribute %s", i, attname); + elog(ERROR, "select rules target entry %d has different type from attribute %s", i, attname); if (attr->atttypmod != resdom->restypmod) - elog(ERROR, "select rules target entry %d has different size from attribute %s", i, attname); + elog(ERROR, "select rules target entry %d has different size from attribute %s", i, attname); } /* - * ... there must not be another ON SELECT - * rule already ... + * ... there must not be another ON SELECT rule already ... */ - if (event_relation->rd_rules != NULL) { - for (i = 0; i < event_relation->rd_rules->numLocks; i++) { - RewriteRule *rule; + if (event_relation->rd_rules != NULL) + { + for (i = 0; i < event_relation->rd_rules->numLocks; i++) + { + RewriteRule *rule; rule = event_relation->rd_rules->rules[i]; if (rule->event == CMD_SELECT) @@ -333,9 +336,10 @@ DefineQueryRewrite(RuleStmt *stmt) * ... and finally the rule must be named _RETviewname. */ sprintf(expected_name, "_RET%s", event_obj->relname); - if (strcmp(expected_name, stmt->rulename) != 0) { + if (strcmp(expected_name, stmt->rulename) != 0) + { elog(ERROR, "view rule for %s must be named %s", - event_obj->relname, expected_name); + event_obj->relname, expected_name); } } diff --git a/src/backend/rewrite/rewriteHandler.c b/src/backend/rewrite/rewriteHandler.c index 7769d722992..ed02edddea0 100644 --- a/src/backend/rewrite/rewriteHandler.c +++ b/src/backend/rewrite/rewriteHandler.c @@ -6,7 +6,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteHandler.c,v 1.44 1999/05/25 13:16:10 wieck Exp $ + * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteHandler.c,v 1.45 1999/05/25 16:10:50 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -147,26 +147,27 @@ rangeTableEntry_used(Node *node, int rt_index, int sublevels_up) if (node == NULL) return FALSE; - switch(nodeTag(node)) { + switch (nodeTag(node)) + { case T_TargetEntry: { - TargetEntry *tle = (TargetEntry *)node; + TargetEntry *tle = (TargetEntry *) node; return rangeTableEntry_used( - (Node *)(tle->expr), - rt_index, - sublevels_up); + (Node *) (tle->expr), + rt_index, + sublevels_up); } break; case T_Aggref: { - Aggref *aggref = (Aggref *)node; + Aggref *aggref = (Aggref *) node; return rangeTableEntry_used( - (Node *)(aggref->target), - rt_index, - sublevels_up); + (Node *) (aggref->target), + rt_index, + sublevels_up); } break; @@ -175,61 +176,61 @@ rangeTableEntry_used(Node *node, int rt_index, int sublevels_up) case T_Expr: { - Expr *exp = (Expr *)node; + Expr *exp = (Expr *) node; return rangeTableEntry_used( - (Node *)(exp->args), - rt_index, - sublevels_up); + (Node *) (exp->args), + rt_index, + sublevels_up); } break; case T_Iter: { - Iter *iter = (Iter *)node; + Iter *iter = (Iter *) node; return rangeTableEntry_used( - (Node *)(iter->iterexpr), - rt_index, - sublevels_up); + (Node *) (iter->iterexpr), + rt_index, + sublevels_up); } break; case T_ArrayRef: { - ArrayRef *ref = (ArrayRef *)node; + ArrayRef *ref = (ArrayRef *) node; if (rangeTableEntry_used( - (Node *)(ref->refupperindexpr), - rt_index, - sublevels_up)) + (Node *) (ref->refupperindexpr), + rt_index, + sublevels_up)) return TRUE; - + if (rangeTableEntry_used( - (Node *)(ref->reflowerindexpr), - rt_index, - sublevels_up)) + (Node *) (ref->reflowerindexpr), + rt_index, + sublevels_up)) return TRUE; - + if (rangeTableEntry_used( - (Node *)(ref->refexpr), - rt_index, - sublevels_up)) + (Node *) (ref->refexpr), + rt_index, + sublevels_up)) return TRUE; - + if (rangeTableEntry_used( - (Node *)(ref->refassgnexpr), - rt_index, - sublevels_up)) + (Node *) (ref->refassgnexpr), + rt_index, + sublevels_up)) return TRUE; - + return FALSE; } break; case T_Var: { - Var *var = (Var *)node; + Var *var = (Var *) node; if (var->varlevelsup == sublevels_up) return var->varno == rt_index; @@ -246,13 +247,14 @@ rangeTableEntry_used(Node *node, int rt_index, int sublevels_up) case T_List: { - List *l; + List *l; - foreach (l, (List *)node) { + foreach(l, (List *) node) + { if (rangeTableEntry_used( - (Node *)lfirst(l), - rt_index, - sublevels_up)) + (Node *) lfirst(l), + rt_index, + sublevels_up)) return TRUE; } return FALSE; @@ -261,18 +263,18 @@ rangeTableEntry_used(Node *node, int rt_index, int sublevels_up) case T_SubLink: { - SubLink *sub = (SubLink *)node; + SubLink *sub = (SubLink *) node; if (rangeTableEntry_used( - (Node *)(sub->lefthand), - rt_index, - sublevels_up)) + (Node *) (sub->lefthand), + rt_index, + sublevels_up)) return TRUE; if (rangeTableEntry_used( - (Node *)(sub->subselect), - rt_index, - sublevels_up + 1)) + (Node *) (sub->subselect), + rt_index, + sublevels_up + 1)) return TRUE; return FALSE; @@ -281,18 +283,18 @@ rangeTableEntry_used(Node *node, int rt_index, int sublevels_up) case T_CaseExpr: { - CaseExpr *exp = (CaseExpr *)node; + CaseExpr *exp = (CaseExpr *) node; if (rangeTableEntry_used( - (Node *)(exp->args), - rt_index, - sublevels_up)) + (Node *) (exp->args), + rt_index, + sublevels_up)) return TRUE; if (rangeTableEntry_used( - (Node *)(exp->defresult), - rt_index, - sublevels_up)) + (Node *) (exp->defresult), + rt_index, + sublevels_up)) return TRUE; return FALSE; @@ -301,18 +303,18 @@ rangeTableEntry_used(Node *node, int rt_index, int sublevels_up) case T_CaseWhen: { - CaseWhen *when = (CaseWhen *)node; + CaseWhen *when = (CaseWhen *) node; if (rangeTableEntry_used( - (Node *)(when->expr), - rt_index, - sublevels_up)) + (Node *) (when->expr), + rt_index, + sublevels_up)) return TRUE; if (rangeTableEntry_used( - (Node *)(when->result), - rt_index, - sublevels_up)) + (Node *) (when->result), + rt_index, + sublevels_up)) return TRUE; return FALSE; @@ -321,24 +323,24 @@ rangeTableEntry_used(Node *node, int rt_index, int sublevels_up) case T_Query: { - Query *qry = (Query *)node; + Query *qry = (Query *) node; if (rangeTableEntry_used( - (Node *)(qry->targetList), - rt_index, - sublevels_up)) + (Node *) (qry->targetList), + rt_index, + sublevels_up)) return TRUE; if (rangeTableEntry_used( - (Node *)(qry->qual), - rt_index, - sublevels_up)) + (Node *) (qry->qual), + rt_index, + sublevels_up)) return TRUE; if (rangeTableEntry_used( - (Node *)(qry->havingQual), - rt_index, - sublevels_up)) + (Node *) (qry->havingQual), + rt_index, + sublevels_up)) return TRUE; return FALSE; @@ -368,28 +370,29 @@ attribute_used(Node *node, int rt_index, int attno, int sublevels_up) if (node == NULL) return FALSE; - switch(nodeTag(node)) { + switch (nodeTag(node)) + { case T_TargetEntry: { - TargetEntry *tle = (TargetEntry *)node; + TargetEntry *tle = (TargetEntry *) node; return attribute_used( - (Node *)(tle->expr), - rt_index, - attno, - sublevels_up); + (Node *) (tle->expr), + rt_index, + attno, + sublevels_up); } break; case T_Aggref: { - Aggref *aggref = (Aggref *)node; + Aggref *aggref = (Aggref *) node; return attribute_used( - (Node *)(aggref->target), - rt_index, - attno, - sublevels_up); + (Node *) (aggref->target), + rt_index, + attno, + sublevels_up); } break; @@ -398,58 +401,58 @@ attribute_used(Node *node, int rt_index, int attno, int sublevels_up) case T_Expr: { - Expr *exp = (Expr *)node; + Expr *exp = (Expr *) node; return attribute_used( - (Node *)(exp->args), - rt_index, - attno, - sublevels_up); + (Node *) (exp->args), + rt_index, + attno, + sublevels_up); } break; case T_Iter: { - Iter *iter = (Iter *)node; + Iter *iter = (Iter *) node; return attribute_used( - (Node *)(iter->iterexpr), - rt_index, - attno, - sublevels_up); + (Node *) (iter->iterexpr), + rt_index, + attno, + sublevels_up); } break; case T_ArrayRef: { - ArrayRef *ref = (ArrayRef *)node; + ArrayRef *ref = (ArrayRef *) node; if (attribute_used( - (Node *)(ref->refupperindexpr), - rt_index, - attno, - sublevels_up)) + (Node *) (ref->refupperindexpr), + rt_index, + attno, + sublevels_up)) return TRUE; if (attribute_used( - (Node *)(ref->reflowerindexpr), - rt_index, - attno, - sublevels_up)) + (Node *) (ref->reflowerindexpr), + rt_index, + attno, + sublevels_up)) return TRUE; if (attribute_used( - (Node *)(ref->refexpr), - rt_index, - attno, - sublevels_up)) + (Node *) (ref->refexpr), + rt_index, + attno, + sublevels_up)) return TRUE; if (attribute_used( - (Node *)(ref->refassgnexpr), - rt_index, - attno, - sublevels_up)) + (Node *) (ref->refassgnexpr), + rt_index, + attno, + sublevels_up)) return TRUE; return FALSE; @@ -458,7 +461,7 @@ attribute_used(Node *node, int rt_index, int attno, int sublevels_up) case T_Var: { - Var *var = (Var *)node; + Var *var = (Var *) node; if (var->varlevelsup == sublevels_up) return var->varno == rt_index; @@ -475,14 +478,15 @@ attribute_used(Node *node, int rt_index, int attno, int sublevels_up) case T_List: { - List *l; + List *l; - foreach (l, (List *)node) { + foreach(l, (List *) node) + { if (attribute_used( - (Node *)lfirst(l), - rt_index, - attno, - sublevels_up)) + (Node *) lfirst(l), + rt_index, + attno, + sublevels_up)) return TRUE; } return FALSE; @@ -491,20 +495,20 @@ attribute_used(Node *node, int rt_index, int attno, int sublevels_up) case T_SubLink: { - SubLink *sub = (SubLink *)node; + SubLink *sub = (SubLink *) node; if (attribute_used( - (Node *)(sub->lefthand), - rt_index, - attno, - sublevels_up)) + (Node *) (sub->lefthand), + rt_index, + attno, + sublevels_up)) return TRUE; if (attribute_used( - (Node *)(sub->subselect), - rt_index, - attno, - sublevels_up + 1)) + (Node *) (sub->subselect), + rt_index, + attno, + sublevels_up + 1)) return TRUE; return FALSE; @@ -513,27 +517,27 @@ attribute_used(Node *node, int rt_index, int attno, int sublevels_up) case T_Query: { - Query *qry = (Query *)node; + Query *qry = (Query *) node; if (attribute_used( - (Node *)(qry->targetList), - rt_index, - attno, - sublevels_up)) + (Node *) (qry->targetList), + rt_index, + attno, + sublevels_up)) return TRUE; if (attribute_used( - (Node *)(qry->qual), - rt_index, - attno, - sublevels_up)) + (Node *) (qry->qual), + rt_index, + attno, + sublevels_up)) return TRUE; if (attribute_used( - (Node *)(qry->havingQual), - rt_index, - attno, - sublevels_up)) + (Node *) (qry->havingQual), + rt_index, + attno, + sublevels_up)) return TRUE; return FALSE; @@ -564,61 +568,62 @@ modifyAggrefUplevel(Node *node) if (node == NULL) return; - switch(nodeTag(node)) { + switch (nodeTag(node)) + { case T_TargetEntry: { - TargetEntry *tle = (TargetEntry *)node; + TargetEntry *tle = (TargetEntry *) node; modifyAggrefUplevel( - (Node *)(tle->expr)); + (Node *) (tle->expr)); } break; case T_Aggref: { - Aggref *aggref = (Aggref *)node; + Aggref *aggref = (Aggref *) node; modifyAggrefUplevel( - (Node *)(aggref->target)); + (Node *) (aggref->target)); } break; case T_Expr: { - Expr *exp = (Expr *)node; + Expr *exp = (Expr *) node; modifyAggrefUplevel( - (Node *)(exp->args)); + (Node *) (exp->args)); } break; case T_Iter: { - Iter *iter = (Iter *)node; + Iter *iter = (Iter *) node; modifyAggrefUplevel( - (Node *)(iter->iterexpr)); + (Node *) (iter->iterexpr)); } break; case T_ArrayRef: { - ArrayRef *ref = (ArrayRef *)node; + ArrayRef *ref = (ArrayRef *) node; modifyAggrefUplevel( - (Node *)(ref->refupperindexpr)); + (Node *) (ref->refupperindexpr)); modifyAggrefUplevel( - (Node *)(ref->reflowerindexpr)); + (Node *) (ref->reflowerindexpr)); modifyAggrefUplevel( - (Node *)(ref->refexpr)); + (Node *) (ref->refexpr)); modifyAggrefUplevel( - (Node *)(ref->refassgnexpr)); + (Node *) (ref->refassgnexpr)); } break; case T_Var: { - Var *var = (Var *)node; + Var *var = (Var *) node; var->varlevelsup++; } @@ -632,41 +637,41 @@ modifyAggrefUplevel(Node *node) case T_List: { - List *l; + List *l; - foreach (l, (List *)node) + foreach(l, (List *) node) modifyAggrefUplevel( - (Node *)lfirst(l)); + (Node *) lfirst(l)); } break; case T_SubLink: { - SubLink *sub = (SubLink *)node; + SubLink *sub = (SubLink *) node; modifyAggrefUplevel( - (Node *)(sub->lefthand)); + (Node *) (sub->lefthand)); modifyAggrefUplevel( - (Node *)(sub->oper)); + (Node *) (sub->oper)); modifyAggrefUplevel( - (Node *)(sub->subselect)); + (Node *) (sub->subselect)); } break; case T_Query: { - Query *qry = (Query *)node; + Query *qry = (Query *) node; modifyAggrefUplevel( - (Node *)(qry->targetList)); + (Node *) (qry->targetList)); modifyAggrefUplevel( - (Node *)(qry->qual)); + (Node *) (qry->qual)); modifyAggrefUplevel( - (Node *)(qry->havingQual)); + (Node *) (qry->havingQual)); } break; @@ -690,33 +695,34 @@ modifyAggrefUplevel(Node *node) static void modifyAggrefChangeVarnodes(Node **nodePtr, int rt_index, int new_index, int sublevels_up) { - Node *node = *nodePtr; + Node *node = *nodePtr; if (node == NULL) return; - switch(nodeTag(node)) { + switch (nodeTag(node)) + { case T_TargetEntry: { - TargetEntry *tle = (TargetEntry *)node; + TargetEntry *tle = (TargetEntry *) node; modifyAggrefChangeVarnodes( - (Node **)(&(tle->expr)), - rt_index, - new_index, - sublevels_up); + (Node **) (&(tle->expr)), + rt_index, + new_index, + sublevels_up); } break; case T_Aggref: { - Aggref *aggref = (Aggref *)node; + Aggref *aggref = (Aggref *) node; modifyAggrefChangeVarnodes( - (Node **)(&(aggref->target)), - rt_index, - new_index, - sublevels_up); + (Node **) (&(aggref->target)), + rt_index, + new_index, + sublevels_up); } break; @@ -725,67 +731,68 @@ modifyAggrefChangeVarnodes(Node **nodePtr, int rt_index, int new_index, int subl case T_Expr: { - Expr *exp = (Expr *)node; + Expr *exp = (Expr *) node; modifyAggrefChangeVarnodes( - (Node **)(&(exp->args)), - rt_index, - new_index, - sublevels_up); + (Node **) (&(exp->args)), + rt_index, + new_index, + sublevels_up); } break; case T_Iter: { - Iter *iter = (Iter *)node; + Iter *iter = (Iter *) node; modifyAggrefChangeVarnodes( - (Node **)(&(iter->iterexpr)), - rt_index, - new_index, - sublevels_up); + (Node **) (&(iter->iterexpr)), + rt_index, + new_index, + sublevels_up); } break; case T_ArrayRef: { - ArrayRef *ref = (ArrayRef *)node; + ArrayRef *ref = (ArrayRef *) node; modifyAggrefChangeVarnodes( - (Node **)(&(ref->refupperindexpr)), - rt_index, - new_index, - sublevels_up); + (Node **) (&(ref->refupperindexpr)), + rt_index, + new_index, + sublevels_up); modifyAggrefChangeVarnodes( - (Node **)(&(ref->reflowerindexpr)), - rt_index, - new_index, - sublevels_up); + (Node **) (&(ref->reflowerindexpr)), + rt_index, + new_index, + sublevels_up); modifyAggrefChangeVarnodes( - (Node **)(&(ref->refexpr)), - rt_index, - new_index, - sublevels_up); + (Node **) (&(ref->refexpr)), + rt_index, + new_index, + sublevels_up); modifyAggrefChangeVarnodes( - (Node **)(&(ref->refassgnexpr)), - rt_index, - new_index, - sublevels_up); + (Node **) (&(ref->refassgnexpr)), + rt_index, + new_index, + sublevels_up); } break; case T_Var: { - Var *var = (Var *)node; + Var *var = (Var *) node; if (var->varlevelsup == sublevels_up && - var->varno == rt_index) { + var->varno == rt_index) + { var = copyObject(var); var->varno = new_index; var->varnoold = new_index; var->varlevelsup = 0; - *nodePtr = (Node *)var; + *nodePtr = (Node *) var; } } break; @@ -798,62 +805,62 @@ modifyAggrefChangeVarnodes(Node **nodePtr, int rt_index, int new_index, int subl case T_List: { - List *l; + List *l; - foreach (l, (List *)node) + foreach(l, (List *) node) modifyAggrefChangeVarnodes( - (Node **)(&lfirst(l)), - rt_index, - new_index, - sublevels_up); + (Node **) (&lfirst(l)), + rt_index, + new_index, + sublevels_up); } break; case T_SubLink: { - SubLink *sub = (SubLink *)node; + SubLink *sub = (SubLink *) node; modifyAggrefChangeVarnodes( - (Node **)(&(sub->lefthand)), - rt_index, - new_index, - sublevels_up); + (Node **) (&(sub->lefthand)), + rt_index, + new_index, + sublevels_up); modifyAggrefChangeVarnodes( - (Node **)(&(sub->oper)), - rt_index, - new_index, - sublevels_up); + (Node **) (&(sub->oper)), + rt_index, + new_index, + sublevels_up); modifyAggrefChangeVarnodes( - (Node **)(&(sub->subselect)), - rt_index, - new_index, - sublevels_up + 1); + (Node **) (&(sub->subselect)), + rt_index, + new_index, + sublevels_up + 1); } break; case T_Query: { - Query *qry = (Query *)node; + Query *qry = (Query *) node; modifyAggrefChangeVarnodes( - (Node **)(&(qry->targetList)), - rt_index, - new_index, - sublevels_up); + (Node **) (&(qry->targetList)), + rt_index, + new_index, + sublevels_up); modifyAggrefChangeVarnodes( - (Node **)(&(qry->qual)), - rt_index, - new_index, - sublevels_up); + (Node **) (&(qry->qual)), + rt_index, + new_index, + sublevels_up); modifyAggrefChangeVarnodes( - (Node **)(&(qry->havingQual)), - rt_index, - new_index, - sublevels_up); + (Node **) (&(qry->havingQual)), + rt_index, + new_index, + sublevels_up); } break; @@ -874,24 +881,25 @@ modifyAggrefChangeVarnodes(Node **nodePtr, int rt_index, int new_index, int subl static void modifyAggrefDropQual(Node **nodePtr, Node *orignode, Expr *expr) { - Node *node = *nodePtr; + Node *node = *nodePtr; if (node == NULL) return; - switch(nodeTag(node)) { + switch (nodeTag(node)) + { case T_Var: break; case T_Aggref: { - Aggref *aggref = (Aggref *)node; - Aggref *oaggref = (Aggref *)orignode; + Aggref *aggref = (Aggref *) node; + Aggref *oaggref = (Aggref *) orignode; modifyAggrefDropQual( - (Node **)(&(aggref->target)), - (Node *)(oaggref->target), - expr); + (Node **) (&(aggref->target)), + (Node *) (oaggref->target), + expr); } break; @@ -906,79 +914,81 @@ modifyAggrefDropQual(Node **nodePtr, Node *orignode, Expr *expr) case T_Expr: { - Expr *this_expr = (Expr *)node; - Expr *orig_expr = (Expr *)orignode; + Expr *this_expr = (Expr *) node; + Expr *orig_expr = (Expr *) orignode; - if (orig_expr == expr) { - Const *ctrue; + if (orig_expr == expr) + { + Const *ctrue; if (expr->typeOid != BOOLOID) elog(ERROR, - "aggregate expression in qualification isn't of type bool"); + "aggregate expression in qualification isn't of type bool"); ctrue = makeNode(Const); ctrue->consttype = BOOLOID; ctrue->constlen = 1; ctrue->constisnull = FALSE; - ctrue->constvalue = (Datum)TRUE; + ctrue->constvalue = (Datum) TRUE; ctrue->constbyval = TRUE; - *nodePtr = (Node *)ctrue; + *nodePtr = (Node *) ctrue; } else modifyAggrefDropQual( - (Node **)(&(this_expr->args)), - (Node *)(orig_expr->args), - expr); + (Node **) (&(this_expr->args)), + (Node *) (orig_expr->args), + expr); } break; case T_Iter: { - Iter *iter = (Iter *)node; - Iter *oiter = (Iter *)orignode; + Iter *iter = (Iter *) node; + Iter *oiter = (Iter *) orignode; modifyAggrefDropQual( - (Node **)(&(iter->iterexpr)), - (Node *)(oiter->iterexpr), - expr); + (Node **) (&(iter->iterexpr)), + (Node *) (oiter->iterexpr), + expr); } break; case T_ArrayRef: { - ArrayRef *ref = (ArrayRef *)node; - ArrayRef *oref = (ArrayRef *)orignode; + ArrayRef *ref = (ArrayRef *) node; + ArrayRef *oref = (ArrayRef *) orignode; modifyAggrefDropQual( - (Node **)(&(ref->refupperindexpr)), - (Node *)(oref->refupperindexpr), - expr); + (Node **) (&(ref->refupperindexpr)), + (Node *) (oref->refupperindexpr), + expr); modifyAggrefDropQual( - (Node **)(&(ref->reflowerindexpr)), - (Node *)(oref->reflowerindexpr), - expr); + (Node **) (&(ref->reflowerindexpr)), + (Node *) (oref->reflowerindexpr), + expr); modifyAggrefDropQual( - (Node **)(&(ref->refexpr)), - (Node *)(oref->refexpr), - expr); + (Node **) (&(ref->refexpr)), + (Node *) (oref->refexpr), + expr); modifyAggrefDropQual( - (Node **)(&(ref->refassgnexpr)), - (Node *)(oref->refassgnexpr), - expr); + (Node **) (&(ref->refassgnexpr)), + (Node *) (oref->refassgnexpr), + expr); } break; case T_List: { - List *l; - List *ol = (List *)orignode; - int li = 0; + List *l; + List *ol = (List *) orignode; + int li = 0; - foreach (l, (List *)node) { + foreach(l, (List *) node) + { modifyAggrefDropQual( - (Node **)(&(lfirst(l))), - (Node *)nth(li, ol), - expr); + (Node **) (&(lfirst(l))), + (Node *) nth(li, ol), + expr); li++; } } @@ -986,30 +996,30 @@ modifyAggrefDropQual(Node **nodePtr, Node *orignode, Expr *expr) case T_SubLink: { - SubLink *sub = (SubLink *)node; - SubLink *osub = (SubLink *)orignode; + SubLink *sub = (SubLink *) node; + SubLink *osub = (SubLink *) orignode; modifyAggrefDropQual( - (Node **)(&(sub->subselect)), - (Node *)(osub->subselect), - expr); + (Node **) (&(sub->subselect)), + (Node *) (osub->subselect), + expr); } break; case T_Query: { - Query *qry = (Query *)node; - Query *oqry = (Query *)orignode; + Query *qry = (Query *) node; + Query *oqry = (Query *) orignode; modifyAggrefDropQual( - (Node **)(&(qry->qual)), - (Node *)(oqry->qual), - expr); + (Node **) (&(qry->qual)), + (Node *) (oqry->qual), + expr); modifyAggrefDropQual( - (Node **)(&(qry->havingQual)), - (Node *)(oqry->havingQual), - expr); + (Node **) (&(qry->havingQual)), + (Node *) (oqry->havingQual), + expr); } break; @@ -1031,15 +1041,15 @@ modifyAggrefDropQual(Node **nodePtr, Node *orignode, Expr *expr) static SubLink * modifyAggrefMakeSublink(Expr *origexp, Query *parsetree) { - SubLink *sublink; - Query *subquery; - Node *subqual; - RangeTblEntry *rte; - Aggref *aggref; - Var *target; - TargetEntry *tle; - Resdom *resdom; - Expr *exp = copyObject(origexp); + SubLink *sublink; + Query *subquery; + Node *subqual; + RangeTblEntry *rte; + Aggref *aggref; + Var *target; + TargetEntry *tle; + Resdom *resdom; + Expr *exp = copyObject(origexp); if (nodeTag(nth(0, exp->args)) == T_Aggref) { @@ -1049,66 +1059,66 @@ modifyAggrefMakeSublink(Expr *origexp, Query *parsetree) elog(ERROR, "rewrite: aggregate column of view must be at rigth side in qual"); } - aggref = (Aggref *)nth(1, exp->args); - target = (Var *)(aggref->target); - rte = (RangeTblEntry *)nth(target->varno - 1, parsetree->rtable); - tle = makeNode(TargetEntry); - resdom = makeNode(Resdom); + aggref = (Aggref *) nth(1, exp->args); + target = (Var *) (aggref->target); + rte = (RangeTblEntry *) nth(target->varno - 1, parsetree->rtable); + tle = makeNode(TargetEntry); + resdom = makeNode(Resdom); aggref->usenulls = TRUE; - resdom->resno = 1; - resdom->restype = ((Oper *)(exp->oper))->opresulttype; + resdom->resno = 1; + resdom->restype = ((Oper *) (exp->oper))->opresulttype; resdom->restypmod = -1; resdom->resname = pstrdup("<noname>"); - resdom->reskey = 0; + resdom->reskey = 0; resdom->reskeyop = 0; - resdom->resjunk = false; + resdom->resjunk = false; - tle->resdom = resdom; - tle->expr = (Node *)aggref; + tle->resdom = resdom; + tle->expr = (Node *) aggref; subqual = copyObject(parsetree->qual); - modifyAggrefDropQual((Node **)&subqual, (Node *)parsetree->qual, origexp); + modifyAggrefDropQual((Node **) &subqual, (Node *) parsetree->qual, origexp); sublink = makeNode(SubLink); - sublink->subLinkType = EXPR_SUBLINK; - sublink->useor = FALSE; - sublink->lefthand = lappend(NIL, copyObject(lfirst(exp->args))); - sublink->oper = lappend(NIL, copyObject(exp)); - sublink->subselect = NULL; - - subquery = makeNode(Query); - sublink->subselect = (Node *)subquery; - - subquery->commandType = CMD_SELECT; - subquery->utilityStmt = NULL; - subquery->resultRelation = 0; - subquery->into = NULL; - subquery->isPortal = FALSE; - subquery->isBinary = FALSE; - subquery->isTemp = FALSE; - subquery->unionall = FALSE; - subquery->uniqueFlag = NULL; - subquery->sortClause = NULL; - subquery->rtable = lappend(NIL, rte); - subquery->targetList = lappend(NIL, tle); - subquery->qual = subqual; - subquery->groupClause = NIL; - subquery->havingQual = NULL; - subquery->hasAggs = TRUE; - subquery->hasSubLinks = FALSE; - subquery->unionClause = NULL; - - - modifyAggrefUplevel((Node *)sublink); - - modifyAggrefChangeVarnodes((Node **)&(sublink->lefthand), target->varno, - 1, target->varlevelsup); - modifyAggrefChangeVarnodes((Node **)&(sublink->oper), target->varno, - 1, target->varlevelsup); - modifyAggrefChangeVarnodes((Node **)&(sublink->subselect), target->varno, - 1, target->varlevelsup); + sublink->subLinkType = EXPR_SUBLINK; + sublink->useor = FALSE; + sublink->lefthand = lappend(NIL, copyObject(lfirst(exp->args))); + sublink->oper = lappend(NIL, copyObject(exp)); + sublink->subselect = NULL; + + subquery = makeNode(Query); + sublink->subselect = (Node *) subquery; + + subquery->commandType = CMD_SELECT; + subquery->utilityStmt = NULL; + subquery->resultRelation = 0; + subquery->into = NULL; + subquery->isPortal = FALSE; + subquery->isBinary = FALSE; + subquery->isTemp = FALSE; + subquery->unionall = FALSE; + subquery->uniqueFlag = NULL; + subquery->sortClause = NULL; + subquery->rtable = lappend(NIL, rte); + subquery->targetList = lappend(NIL, tle); + subquery->qual = subqual; + subquery->groupClause = NIL; + subquery->havingQual = NULL; + subquery->hasAggs = TRUE; + subquery->hasSubLinks = FALSE; + subquery->unionClause = NULL; + + + modifyAggrefUplevel((Node *) sublink); + + modifyAggrefChangeVarnodes((Node **) &(sublink->lefthand), target->varno, + 1, target->varlevelsup); + modifyAggrefChangeVarnodes((Node **) &(sublink->oper), target->varno, + 1, target->varlevelsup); + modifyAggrefChangeVarnodes((Node **) &(sublink->subselect), target->varno, + 1, target->varlevelsup); return sublink; } @@ -1124,12 +1134,13 @@ modifyAggrefMakeSublink(Expr *origexp, Query *parsetree) static void modifyAggrefQual(Node **nodePtr, Query *parsetree) { - Node *node = *nodePtr; + Node *node = *nodePtr; if (node == NULL) return; - switch(nodeTag(node)) { + switch (nodeTag(node)) + { case T_Var: break; @@ -1144,122 +1155,127 @@ modifyAggrefQual(Node **nodePtr, Query *parsetree) case T_Expr: { - Expr *exp = (Expr *)node; - SubLink *sub; + Expr *exp = (Expr *) node; + SubLink *sub; - if (length(exp->args) != 2) { + if (length(exp->args) != 2) + { modifyAggrefQual( - (Node **)(&(exp->args)), - parsetree); + (Node **) (&(exp->args)), + parsetree); break; } if (nodeTag(nth(0, exp->args)) != T_Aggref && - nodeTag(nth(1, exp->args)) != T_Aggref) { + nodeTag(nth(1, exp->args)) != T_Aggref) + { modifyAggrefQual( - (Node **)(&(exp->args)), - parsetree); + (Node **) (&(exp->args)), + parsetree); break; } sub = modifyAggrefMakeSublink(exp, - parsetree); + parsetree); - *nodePtr = (Node *)sub; + *nodePtr = (Node *) sub; parsetree->hasSubLinks = TRUE; } break; case T_CaseExpr: { - /* We're calling recursively, - * and this routine knows how to handle lists - * so let it do the work to handle the WHEN clauses... */ + + /* + * We're calling recursively, and this routine knows how + * to handle lists so let it do the work to handle the + * WHEN clauses... + */ modifyAggrefQual( - (Node **)(&(((CaseExpr *)node)->args)), - parsetree); + (Node **) (&(((CaseExpr *) node)->args)), + parsetree); modifyAggrefQual( - (Node **)(&(((CaseExpr *)node)->defresult)), - parsetree); + (Node **) (&(((CaseExpr *) node)->defresult)), + parsetree); } break; case T_CaseWhen: { modifyAggrefQual( - (Node **)(&(((CaseWhen *)node)->expr)), - parsetree); + (Node **) (&(((CaseWhen *) node)->expr)), + parsetree); modifyAggrefQual( - (Node **)(&(((CaseWhen *)node)->result)), - parsetree); + (Node **) (&(((CaseWhen *) node)->result)), + parsetree); } break; case T_Iter: { - Iter *iter = (Iter *)node; + Iter *iter = (Iter *) node; modifyAggrefQual( - (Node **)(&(iter->iterexpr)), - parsetree); + (Node **) (&(iter->iterexpr)), + parsetree); } break; case T_ArrayRef: { - ArrayRef *ref = (ArrayRef *)node; + ArrayRef *ref = (ArrayRef *) node; modifyAggrefQual( - (Node **)(&(ref->refupperindexpr)), - parsetree); + (Node **) (&(ref->refupperindexpr)), + parsetree); modifyAggrefQual( - (Node **)(&(ref->reflowerindexpr)), - parsetree); + (Node **) (&(ref->reflowerindexpr)), + parsetree); modifyAggrefQual( - (Node **)(&(ref->refexpr)), - parsetree); + (Node **) (&(ref->refexpr)), + parsetree); modifyAggrefQual( - (Node **)(&(ref->refassgnexpr)), - parsetree); + (Node **) (&(ref->refassgnexpr)), + parsetree); } break; case T_List: { - List *l; + List *l; - foreach (l, (List *)node) + foreach(l, (List *) node) modifyAggrefQual( - (Node **)(&(lfirst(l))), - parsetree); + (Node **) (&(lfirst(l))), + parsetree); } break; case T_SubLink: { - SubLink *sub = (SubLink *)node; + SubLink *sub = (SubLink *) node; modifyAggrefQual( - (Node **)(&(sub->subselect)), - (Query *)(sub->subselect)); + (Node **) (&(sub->subselect)), + (Query *) (sub->subselect)); } break; case T_Query: { - Query *qry = (Query *)node; + Query *qry = (Query *) node; modifyAggrefQual( - (Node **)(&(qry->qual)), - parsetree); + (Node **) (&(qry->qual)), + parsetree); modifyAggrefQual( - (Node **)(&(qry->havingQual)), - parsetree); + (Node **) (&(qry->havingQual)), + parsetree); } break; @@ -1284,12 +1300,13 @@ checkQueryHasAggs(Node *node) if (node == NULL) return FALSE; - switch(nodeTag(node)) { + switch (nodeTag(node)) + { case T_TargetEntry: { - TargetEntry *tle = (TargetEntry *)node; + TargetEntry *tle = (TargetEntry *) node; - return checkQueryHasAggs((Node *)(tle->expr)); + return checkQueryHasAggs((Node *) (tle->expr)); } break; @@ -1298,36 +1315,36 @@ checkQueryHasAggs(Node *node) case T_Expr: { - Expr *exp = (Expr *)node; + Expr *exp = (Expr *) node; - return checkQueryHasAggs((Node *)(exp->args)); + return checkQueryHasAggs((Node *) (exp->args)); } break; case T_Iter: { - Iter *iter = (Iter *)node; + Iter *iter = (Iter *) node; - return checkQueryHasAggs((Node *)(iter->iterexpr)); + return checkQueryHasAggs((Node *) (iter->iterexpr)); } break; case T_ArrayRef: { - ArrayRef *ref = (ArrayRef *)node; + ArrayRef *ref = (ArrayRef *) node; - if (checkQueryHasAggs((Node *)(ref->refupperindexpr))) + if (checkQueryHasAggs((Node *) (ref->refupperindexpr))) return TRUE; - - if (checkQueryHasAggs((Node *)(ref->reflowerindexpr))) + + if (checkQueryHasAggs((Node *) (ref->reflowerindexpr))) return TRUE; - - if (checkQueryHasAggs((Node *)(ref->refexpr))) + + if (checkQueryHasAggs((Node *) (ref->refexpr))) return TRUE; - - if (checkQueryHasAggs((Node *)(ref->refassgnexpr))) + + if (checkQueryHasAggs((Node *) (ref->refassgnexpr))) return TRUE; - + return FALSE; } break; @@ -1343,10 +1360,11 @@ checkQueryHasAggs(Node *node) case T_List: { - List *l; + List *l; - foreach (l, (List *)node) { - if (checkQueryHasAggs((Node *)lfirst(l))) + foreach(l, (List *) node) + { + if (checkQueryHasAggs((Node *) lfirst(l))) return TRUE; } return FALSE; @@ -1355,12 +1373,12 @@ checkQueryHasAggs(Node *node) case T_CaseExpr: { - CaseExpr *exp = (CaseExpr *)node; + CaseExpr *exp = (CaseExpr *) node; - if (checkQueryHasAggs((Node *)(exp->args))) + if (checkQueryHasAggs((Node *) (exp->args))) return TRUE; - if (checkQueryHasAggs((Node *)(exp->defresult))) + if (checkQueryHasAggs((Node *) (exp->defresult))) return TRUE; return FALSE; @@ -1369,12 +1387,12 @@ checkQueryHasAggs(Node *node) case T_CaseWhen: { - CaseWhen *when = (CaseWhen *)node; + CaseWhen *when = (CaseWhen *) node; - if (checkQueryHasAggs((Node *)(when->expr))) + if (checkQueryHasAggs((Node *) (when->expr))) return TRUE; - if (checkQueryHasAggs((Node *)(when->result))) + if (checkQueryHasAggs((Node *) (when->result))) return TRUE; return FALSE; @@ -1404,12 +1422,13 @@ checkQueryHasSubLink(Node *node) if (node == NULL) return FALSE; - switch(nodeTag(node)) { + switch (nodeTag(node)) + { case T_TargetEntry: { - TargetEntry *tle = (TargetEntry *)node; + TargetEntry *tle = (TargetEntry *) node; - return checkQueryHasSubLink((Node *)(tle->expr)); + return checkQueryHasSubLink((Node *) (tle->expr)); } break; @@ -1418,36 +1437,36 @@ checkQueryHasSubLink(Node *node) case T_Expr: { - Expr *exp = (Expr *)node; + Expr *exp = (Expr *) node; - return checkQueryHasSubLink((Node *)(exp->args)); + return checkQueryHasSubLink((Node *) (exp->args)); } break; case T_Iter: { - Iter *iter = (Iter *)node; + Iter *iter = (Iter *) node; - return checkQueryHasSubLink((Node *)(iter->iterexpr)); + return checkQueryHasSubLink((Node *) (iter->iterexpr)); } break; case T_ArrayRef: { - ArrayRef *ref = (ArrayRef *)node; + ArrayRef *ref = (ArrayRef *) node; - if (checkQueryHasSubLink((Node *)(ref->refupperindexpr))) + if (checkQueryHasSubLink((Node *) (ref->refupperindexpr))) return TRUE; - - if (checkQueryHasSubLink((Node *)(ref->reflowerindexpr))) + + if (checkQueryHasSubLink((Node *) (ref->reflowerindexpr))) return TRUE; - - if (checkQueryHasSubLink((Node *)(ref->refexpr))) + + if (checkQueryHasSubLink((Node *) (ref->refexpr))) return TRUE; - - if (checkQueryHasSubLink((Node *)(ref->refassgnexpr))) + + if (checkQueryHasSubLink((Node *) (ref->refassgnexpr))) return TRUE; - + return FALSE; } break; @@ -1463,10 +1482,11 @@ checkQueryHasSubLink(Node *node) case T_List: { - List *l; + List *l; - foreach (l, (List *)node) { - if (checkQueryHasSubLink((Node *)lfirst(l))) + foreach(l, (List *) node) + { + if (checkQueryHasSubLink((Node *) lfirst(l))) return TRUE; } return FALSE; @@ -1475,12 +1495,12 @@ checkQueryHasSubLink(Node *node) case T_CaseExpr: { - CaseExpr *exp = (CaseExpr *)node; + CaseExpr *exp = (CaseExpr *) node; - if (checkQueryHasSubLink((Node *)(exp->args))) + if (checkQueryHasSubLink((Node *) (exp->args))) return TRUE; - if (checkQueryHasSubLink((Node *)(exp->defresult))) + if (checkQueryHasSubLink((Node *) (exp->defresult))) return TRUE; return FALSE; @@ -1489,12 +1509,12 @@ checkQueryHasSubLink(Node *node) case T_CaseWhen: { - CaseWhen *when = (CaseWhen *)node; + CaseWhen *when = (CaseWhen *) node; - if (checkQueryHasSubLink((Node *)(when->expr))) + if (checkQueryHasSubLink((Node *) (when->expr))) return TRUE; - if (checkQueryHasSubLink((Node *)(when->result))) + if (checkQueryHasSubLink((Node *) (when->result))) return TRUE; return FALSE; @@ -1548,30 +1568,31 @@ make_null(Oid type) } -static void +static void apply_RIR_adjust_sublevel(Node *node, int sublevels_up) { if (node == NULL) return; - switch(nodeTag(node)) { + switch (nodeTag(node)) + { case T_TargetEntry: { - TargetEntry *tle = (TargetEntry *)node; + TargetEntry *tle = (TargetEntry *) node; apply_RIR_adjust_sublevel( - (Node *)(tle->expr), - sublevels_up); + (Node *) (tle->expr), + sublevels_up); } break; case T_Aggref: { - Aggref *aggref = (Aggref *)node; + Aggref *aggref = (Aggref *) node; apply_RIR_adjust_sublevel( - (Node *)(aggref->target), - sublevels_up); + (Node *) (aggref->target), + sublevels_up); } break; @@ -1580,49 +1601,49 @@ apply_RIR_adjust_sublevel(Node *node, int sublevels_up) case T_Expr: { - Expr *exp = (Expr *)node; + Expr *exp = (Expr *) node; apply_RIR_adjust_sublevel( - (Node *)(exp->args), - sublevels_up); + (Node *) (exp->args), + sublevels_up); } break; case T_Iter: { - Iter *iter = (Iter *)node; + Iter *iter = (Iter *) node; apply_RIR_adjust_sublevel( - (Node *)(iter->iterexpr), - sublevels_up); + (Node *) (iter->iterexpr), + sublevels_up); } break; case T_ArrayRef: { - ArrayRef *ref = (ArrayRef *)node; + ArrayRef *ref = (ArrayRef *) node; apply_RIR_adjust_sublevel( - (Node *)(ref->refupperindexpr), - sublevels_up); + (Node *) (ref->refupperindexpr), + sublevels_up); apply_RIR_adjust_sublevel( - (Node *)(ref->reflowerindexpr), - sublevels_up); + (Node *) (ref->reflowerindexpr), + sublevels_up); apply_RIR_adjust_sublevel( - (Node *)(ref->refexpr), - sublevels_up); + (Node *) (ref->refexpr), + sublevels_up); apply_RIR_adjust_sublevel( - (Node *)(ref->refassgnexpr), - sublevels_up); + (Node *) (ref->refassgnexpr), + sublevels_up); } break; case T_Var: { - Var *var = (Var *)node; + Var *var = (Var *) node; var->varlevelsup = sublevels_up; } @@ -1636,41 +1657,42 @@ apply_RIR_adjust_sublevel(Node *node, int sublevels_up) case T_List: { - List *l; + List *l; - foreach (l, (List *)node) { + foreach(l, (List *) node) + { apply_RIR_adjust_sublevel( - (Node *)lfirst(l), - sublevels_up); + (Node *) lfirst(l), + sublevels_up); } } break; case T_CaseExpr: { - CaseExpr *exp = (CaseExpr *)node; + CaseExpr *exp = (CaseExpr *) node; apply_RIR_adjust_sublevel( - (Node *)(exp->args), - sublevels_up); + (Node *) (exp->args), + sublevels_up); apply_RIR_adjust_sublevel( - (Node *)(exp->defresult), - sublevels_up); + (Node *) (exp->defresult), + sublevels_up); } break; case T_CaseWhen: { - CaseWhen *exp = (CaseWhen *)node; + CaseWhen *exp = (CaseWhen *) node; apply_RIR_adjust_sublevel( - (Node *)(exp->expr), - sublevels_up); + (Node *) (exp->expr), + sublevels_up); apply_RIR_adjust_sublevel( - (Node *)(exp->result), - sublevels_up); + (Node *) (exp->result), + sublevels_up); } break; @@ -1687,37 +1709,38 @@ apply_RIR_adjust_sublevel(Node *node, int sublevels_up) static void apply_RIR_view(Node **nodePtr, int rt_index, RangeTblEntry *rte, List *tlist, int *modified, int sublevels_up) { - Node *node = *nodePtr; + Node *node = *nodePtr; if (node == NULL) return; - switch(nodeTag(node)) { + switch (nodeTag(node)) + { case T_TargetEntry: { - TargetEntry *tle = (TargetEntry *)node; + TargetEntry *tle = (TargetEntry *) node; apply_RIR_view( - (Node **)(&(tle->expr)), - rt_index, - rte, - tlist, - modified, - sublevels_up); + (Node **) (&(tle->expr)), + rt_index, + rte, + tlist, + modified, + sublevels_up); } break; case T_Aggref: { - Aggref *aggref = (Aggref *)node; + Aggref *aggref = (Aggref *) node; apply_RIR_view( - (Node **)(&(aggref->target)), - rt_index, - rte, - tlist, - modified, - sublevels_up); + (Node **) (&(aggref->target)), + rt_index, + rte, + tlist, + modified, + sublevels_up); } break; @@ -1726,83 +1749,85 @@ apply_RIR_view(Node **nodePtr, int rt_index, RangeTblEntry *rte, List *tlist, in case T_Expr: { - Expr *exp = (Expr *)node; + Expr *exp = (Expr *) node; apply_RIR_view( - (Node **)(&(exp->args)), - rt_index, - rte, - tlist, - modified, - sublevels_up); + (Node **) (&(exp->args)), + rt_index, + rte, + tlist, + modified, + sublevels_up); } break; case T_Iter: { - Iter *iter = (Iter *)node; + Iter *iter = (Iter *) node; apply_RIR_view( - (Node **)(&(iter->iterexpr)), - rt_index, - rte, - tlist, - modified, - sublevels_up); + (Node **) (&(iter->iterexpr)), + rt_index, + rte, + tlist, + modified, + sublevels_up); } break; case T_ArrayRef: { - ArrayRef *ref = (ArrayRef *)node; + ArrayRef *ref = (ArrayRef *) node; apply_RIR_view( - (Node **)(&(ref->refupperindexpr)), - rt_index, - rte, - tlist, - modified, - sublevels_up); + (Node **) (&(ref->refupperindexpr)), + rt_index, + rte, + tlist, + modified, + sublevels_up); apply_RIR_view( - (Node **)(&(ref->reflowerindexpr)), - rt_index, - rte, - tlist, - modified, - sublevels_up); + (Node **) (&(ref->reflowerindexpr)), + rt_index, + rte, + tlist, + modified, + sublevels_up); apply_RIR_view( - (Node **)(&(ref->refexpr)), - rt_index, - rte, - tlist, - modified, - sublevels_up); + (Node **) (&(ref->refexpr)), + rt_index, + rte, + tlist, + modified, + sublevels_up); apply_RIR_view( - (Node **)(&(ref->refassgnexpr)), - rt_index, - rte, - tlist, - modified, - sublevels_up); + (Node **) (&(ref->refassgnexpr)), + rt_index, + rte, + tlist, + modified, + sublevels_up); } break; case T_Var: { - Var *var = (Var *)node; + Var *var = (Var *) node; if (var->varlevelsup == sublevels_up && - var->varno == rt_index) { - Node *exp; + var->varno == rt_index) + { + Node *exp; if (var->varattno < 0) elog(ERROR, "system column %s not available - %s is a view", get_attname(rte->relid, var->varattno), rte->relname); exp = FindMatchingTLEntry( - tlist, - get_attname(rte->relid, - var->varattno)); + tlist, + get_attname(rte->relid, + var->varattno)); - if (exp == NULL) { + if (exp == NULL) + { *nodePtr = make_null(var->vartype); return; } @@ -1824,122 +1849,123 @@ apply_RIR_view(Node **nodePtr, int rt_index, RangeTblEntry *rte, List *tlist, in case T_List: { - List *l; + List *l; - foreach (l, (List *)node) + foreach(l, (List *) node) apply_RIR_view( - (Node **)(&(lfirst(l))), - rt_index, - rte, - tlist, - modified, - sublevels_up); + (Node **) (&(lfirst(l))), + rt_index, + rte, + tlist, + modified, + sublevels_up); } break; case T_SubLink: { - SubLink *sub = (SubLink *)node; - List *tmp_lefthand, *tmp_oper; + SubLink *sub = (SubLink *) node; + List *tmp_lefthand, + *tmp_oper; apply_RIR_view( - (Node **)(&(sub->lefthand)), - rt_index, - rte, - tlist, - modified, - sublevels_up); + (Node **) (&(sub->lefthand)), + rt_index, + rte, + tlist, + modified, + sublevels_up); apply_RIR_view( - (Node **)(&(sub->subselect)), - rt_index, - rte, - tlist, - modified, - sublevels_up + 1); + (Node **) (&(sub->subselect)), + rt_index, + rte, + tlist, + modified, + sublevels_up + 1); /***S*I***/ - tmp_lefthand = sub->lefthand; + tmp_lefthand = sub->lefthand; foreach(tmp_oper, sub->oper) - { - lfirst(((Expr *) lfirst(tmp_oper))->args) = - lfirst(tmp_lefthand); - tmp_lefthand = lnext(tmp_lefthand); - } + { + lfirst(((Expr *) lfirst(tmp_oper))->args) = + lfirst(tmp_lefthand); + tmp_lefthand = lnext(tmp_lefthand); + } } break; case T_Query: { - Query *qry = (Query *)node; + Query *qry = (Query *) node; apply_RIR_view( - (Node **)(&(qry->targetList)), - rt_index, - rte, - tlist, - modified, - sublevels_up); + (Node **) (&(qry->targetList)), + rt_index, + rte, + tlist, + modified, + sublevels_up); apply_RIR_view( - (Node **)(&(qry->qual)), - rt_index, - rte, - tlist, - modified, - sublevels_up); + (Node **) (&(qry->qual)), + rt_index, + rte, + tlist, + modified, + sublevels_up); apply_RIR_view( - (Node **)(&(qry->havingQual)), - rt_index, - rte, - tlist, - modified, - sublevels_up); + (Node **) (&(qry->havingQual)), + rt_index, + rte, + tlist, + modified, + sublevels_up); } break; case T_CaseExpr: { - CaseExpr *exp = (CaseExpr *)node; + CaseExpr *exp = (CaseExpr *) node; apply_RIR_view( - (Node **)(&(exp->args)), - rt_index, - rte, - tlist, - modified, - sublevels_up); + (Node **) (&(exp->args)), + rt_index, + rte, + tlist, + modified, + sublevels_up); apply_RIR_view( - (Node **)(&(exp->defresult)), - rt_index, - rte, - tlist, - modified, - sublevels_up); + (Node **) (&(exp->defresult)), + rt_index, + rte, + tlist, + modified, + sublevels_up); } break; case T_CaseWhen: { - CaseWhen *exp = (CaseWhen *)node; + CaseWhen *exp = (CaseWhen *) node; apply_RIR_view( - (Node **)(&(exp->expr)), - rt_index, - rte, - tlist, - modified, - sublevels_up); + (Node **) (&(exp->expr)), + rt_index, + rte, + tlist, + modified, + sublevels_up); apply_RIR_view( - (Node **)(&(exp->result)), - rt_index, - rte, - tlist, - modified, - sublevels_up); + (Node **) (&(exp->result)), + rt_index, + rte, + tlist, + modified, + sublevels_up); } break; @@ -1950,7 +1976,7 @@ apply_RIR_view(Node **nodePtr, int rt_index, RangeTblEntry *rte, List *tlist, in } } -extern void CheckSelectForUpdate(Query *rule_action); /* in analyze.c */ +extern void CheckSelectForUpdate(Query *rule_action); /* in analyze.c */ static void ApplyRetrieveRule(Query *parsetree, @@ -2000,32 +2026,34 @@ ApplyRetrieveRule(Query *parsetree, parsetree->rtable = rtable; /* FOR UPDATE of view... */ - foreach (l, parsetree->rowMark) + foreach(l, parsetree->rowMark) { - if (((RowMark*)lfirst(l))->rti == rt_index) + if (((RowMark *) lfirst(l))->rti == rt_index) break; } - if (l != NULL) /* oh, hell -:) */ + if (l != NULL) /* oh, hell -:) */ { - RowMark *newrm; + RowMark *newrm; Index rti = 1; List *l2; CheckSelectForUpdate(rule_action); - /* - * We believe that rt_index is VIEW - nothing should be - * marked for VIEW, but ACL check must be done. - * As for real tables of VIEW - their rows must be marked, but - * we have to skip ACL check for them. + + /* + * We believe that rt_index is VIEW - nothing should be marked for + * VIEW, but ACL check must be done. As for real tables of VIEW - + * their rows must be marked, but we have to skip ACL check for + * them. */ - ((RowMark*)lfirst(l))->info &= ~ROW_MARK_FOR_UPDATE; - foreach (l2, rule_action->rtable) + ((RowMark *) lfirst(l))->info &= ~ROW_MARK_FOR_UPDATE; + foreach(l2, rule_action->rtable) { + /* - * RTable of VIEW has two entries of VIEW itself - - * we use relid to skip them. + * RTable of VIEW has two entries of VIEW itself - we use + * relid to skip them. */ - if (relation->rd_id != ((RangeTblEntry*)lfirst(l2))->relid) + if (relation->rd_id != ((RangeTblEntry *) lfirst(l2))->relid) { newrm = makeNode(RowMark); newrm->rti = rti + rt_length; @@ -2038,36 +2066,37 @@ ApplyRetrieveRule(Query *parsetree, } rule_action->rtable = rtable; - OffsetVarNodes((Node *) rule_qual, rt_length, 0); + OffsetVarNodes((Node *) rule_qual, rt_length, 0); OffsetVarNodes((Node *) rule_action, rt_length, 0); - ChangeVarNodes((Node *) rule_qual, + ChangeVarNodes((Node *) rule_qual, PRS2_CURRENT_VARNO + rt_length, rt_index, 0); ChangeVarNodes((Node *) rule_action, PRS2_CURRENT_VARNO + rt_length, rt_index, 0); if (relation_level) { - apply_RIR_view((Node **) &parsetree, rt_index, - (RangeTblEntry *)nth(rt_index - 1, rtable), - rule_action->targetList, modified, 0); - apply_RIR_view((Node **) &rule_action, rt_index, - (RangeTblEntry *)nth(rt_index - 1, rtable), - rule_action->targetList, modified, 0); + apply_RIR_view((Node **) &parsetree, rt_index, + (RangeTblEntry *) nth(rt_index - 1, rtable), + rule_action->targetList, modified, 0); + apply_RIR_view((Node **) &rule_action, rt_index, + (RangeTblEntry *) nth(rt_index - 1, rtable), + rule_action->targetList, modified, 0); } else { - HandleRIRAttributeRule(parsetree, rtable, rule_action->targetList, - rt_index, rule->attrno, modified, &badsql); + HandleRIRAttributeRule(parsetree, rtable, rule_action->targetList, + rt_index, rule->attrno, modified, &badsql); + } + if (*modified && !badsql) + { + AddQual(parsetree, rule_action->qual); + AddGroupClause(parsetree, rule_action->groupClause, + rule_action->targetList); + AddHavingQual(parsetree, rule_action->havingQual); + parsetree->hasAggs = (rule_action->hasAggs || parsetree->hasAggs); + parsetree->hasSubLinks = (rule_action->hasSubLinks || parsetree->hasSubLinks); } - if (*modified && !badsql) { - AddQual(parsetree, rule_action->qual); - AddGroupClause(parsetree, rule_action->groupClause, - rule_action->targetList); - AddHavingQual(parsetree, rule_action->havingQual); - parsetree->hasAggs = (rule_action->hasAggs || parsetree->hasAggs); - parsetree->hasSubLinks = (rule_action->hasSubLinks || parsetree->hasSubLinks); - } } @@ -2077,22 +2106,23 @@ fireRIRonSubselect(Node *node) if (node == NULL) return; - switch(nodeTag(node)) { + switch (nodeTag(node)) + { case T_TargetEntry: { - TargetEntry *tle = (TargetEntry *)node; + TargetEntry *tle = (TargetEntry *) node; fireRIRonSubselect( - (Node *)(tle->expr)); + (Node *) (tle->expr)); } break; case T_Aggref: { - Aggref *aggref = (Aggref *)node; + Aggref *aggref = (Aggref *) node; fireRIRonSubselect( - (Node *)(aggref->target)); + (Node *) (aggref->target)); } break; @@ -2101,34 +2131,34 @@ fireRIRonSubselect(Node *node) case T_Expr: { - Expr *exp = (Expr *)node; + Expr *exp = (Expr *) node; fireRIRonSubselect( - (Node *)(exp->args)); + (Node *) (exp->args)); } break; case T_Iter: { - Iter *iter = (Iter *)node; + Iter *iter = (Iter *) node; fireRIRonSubselect( - (Node *)(iter->iterexpr)); + (Node *) (iter->iterexpr)); } break; case T_ArrayRef: { - ArrayRef *ref = (ArrayRef *)node; + ArrayRef *ref = (ArrayRef *) node; fireRIRonSubselect( - (Node *)(ref->refupperindexpr)); + (Node *) (ref->refupperindexpr)); fireRIRonSubselect( - (Node *)(ref->reflowerindexpr)); + (Node *) (ref->reflowerindexpr)); fireRIRonSubselect( - (Node *)(ref->refexpr)); + (Node *) (ref->refexpr)); fireRIRonSubselect( - (Node *)(ref->refassgnexpr)); + (Node *) (ref->refassgnexpr)); } break; @@ -2143,26 +2173,26 @@ fireRIRonSubselect(Node *node) case T_List: { - List *l; + List *l; - foreach (l, (List *)node) + foreach(l, (List *) node) fireRIRonSubselect( - (Node *)(lfirst(l))); + (Node *) (lfirst(l))); } break; case T_SubLink: { - SubLink *sub = (SubLink *)node; - Query *qry; + SubLink *sub = (SubLink *) node; + Query *qry; fireRIRonSubselect( - (Node *)(sub->lefthand)); + (Node *) (sub->lefthand)); - qry = fireRIRrules((Query *)(sub->subselect)); + qry = fireRIRrules((Query *) (sub->subselect)); fireRIRonSubselect( - (Node *)qry); + (Node *) qry); sub->subselect = (Node *) qry; } @@ -2170,40 +2200,40 @@ fireRIRonSubselect(Node *node) case T_CaseExpr: { - CaseExpr *exp = (CaseExpr *)node; + CaseExpr *exp = (CaseExpr *) node; fireRIRonSubselect( - (Node *)(exp->args)); + (Node *) (exp->args)); fireRIRonSubselect( - (Node *)(exp->defresult)); + (Node *) (exp->defresult)); } break; case T_CaseWhen: { - CaseWhen *exp = (CaseWhen *)node; + CaseWhen *exp = (CaseWhen *) node; fireRIRonSubselect( - (Node *)(exp->expr)); + (Node *) (exp->expr)); fireRIRonSubselect( - (Node *)(exp->result)); + (Node *) (exp->result)); } break; case T_Query: { - Query *qry = (Query *)node; + Query *qry = (Query *) node; fireRIRonSubselect( - (Node *)(qry->targetList)); + (Node *) (qry->targetList)); fireRIRonSubselect( - (Node *)(qry->qual)); + (Node *) (qry->qual)); fireRIRonSubselect( - (Node *)(qry->havingQual)); + (Node *) (qry->havingQual)); } break; @@ -2224,30 +2254,32 @@ fireRIRonSubselect(Node *node) static Query * fireRIRrules(Query *parsetree) { - int rt_index; - RangeTblEntry *rte; + int rt_index; + RangeTblEntry *rte; Relation rel; - List *locks; - RuleLock *rules; - RewriteRule *rule; - RewriteRule RIRonly; - int modified; - int i; - List *l; + List *locks; + RuleLock *rules; + RewriteRule *rule; + RewriteRule RIRonly; + int modified; + int i; + List *l; rt_index = 0; - while(rt_index < length(parsetree->rtable)) { + while (rt_index < length(parsetree->rtable)) + { ++rt_index; rte = nth(rt_index - 1, parsetree->rtable); - if (!rangeTableEntry_used((Node *)parsetree, rt_index, 0)) + if (!rangeTableEntry_used((Node *) parsetree, rt_index, 0)) { + /* * Unused range table entries must not be marked as coming - * from a clause. Otherwise the planner will generate - * joins over relations that in fact shouldn't be scanned - * at all and the result will contain duplicates + * from a clause. Otherwise the planner will generate joins + * over relations that in fact shouldn't be scanned at all and + * the result will contain duplicates * * Jan * @@ -2255,9 +2287,10 @@ fireRIRrules(Query *parsetree) rte->inFromCl = FALSE; continue; } - + rel = heap_openr(rte->relname); - if (rel->rd_rules == NULL) { + if (rel->rd_rules == NULL) + { heap_close(rel); continue; } @@ -2268,15 +2301,16 @@ fireRIRrules(Query *parsetree) /* * Collect the RIR rules that we must apply */ - for (i = 0; i < rules->numLocks; i++) { + for (i = 0; i < rules->numLocks; i++) + { rule = rules->rules[i]; if (rule->event != CMD_SELECT) continue; - + if (rule->attrno > 0 && - !attribute_used((Node *)parsetree, - rt_index, - rule->attrno, 0)) + !attribute_used((Node *) parsetree, + rt_index, + rule->attrno, 0)) continue; locks = lappend(locks, rule); @@ -2290,20 +2324,21 @@ fireRIRrules(Query *parsetree) /* * Now apply them */ - foreach (l, locks) { + foreach(l, locks) + { rule = lfirst(l); - RIRonly.event = rule->event; - RIRonly.attrno = rule->attrno; - RIRonly.qual = rule->qual; - RIRonly.actions = rule->actions; + RIRonly.event = rule->event; + RIRonly.attrno = rule->attrno; + RIRonly.qual = rule->qual; + RIRonly.actions = rule->actions; ApplyRetrieveRule(parsetree, - &RIRonly, - rt_index, - RIRonly.attrno == -1, - rel, - &modified); + &RIRonly, + rt_index, + RIRonly.attrno == -1, + rel, + &modified); } heap_close(rel); @@ -2408,9 +2443,7 @@ fireRules(Query *parsetree, /* choose rule to fire from list of rules */ if (locks == NIL) - { return NIL; - } locks = orderRules(locks); /* real instead rules last */ foreach(i, locks) @@ -2529,9 +2562,7 @@ fireRules(Query *parsetree, rule_action->hasSubLinks = TRUE; } if (!parsetree->hasSubLinks && rule_action->hasSubLinks) - { parsetree->hasSubLinks = TRUE; - } /*-------------------------------------------------- * Step 1: @@ -2581,10 +2612,11 @@ fireRules(Query *parsetree, *-------------------------------------------------- */ info->rule_action->rtable = info->rt; + /* - ProcessRetrieveQuery(info->rule_action, info->rt, - &orig_instead_flag, TRUE); - */ + * ProcessRetrieveQuery(info->rule_action, info->rt, + * &orig_instead_flag, TRUE); + */ /*-------------------------------------------------- * Step 4 @@ -2614,19 +2646,19 @@ static List * RewriteQuery(Query *parsetree, bool *instead_flag, List **qual_products) { CmdType event; - List *product_queries = NIL; - int result_relation = 0; - RangeTblEntry *rt_entry; + List *product_queries = NIL; + int result_relation = 0; + RangeTblEntry *rt_entry; Relation rt_entry_relation = NULL; - RuleLock *rt_entry_locks = NULL; + RuleLock *rt_entry_locks = NULL; Assert(parsetree != NULL); event = parsetree->commandType; /* - * SELECT rules are handled later when we have all the - * queries that should get executed + * SELECT rules are handled later when we have all the queries that + * should get executed */ if (event == CMD_SELECT) return NIL; @@ -2646,8 +2678,7 @@ RewriteQuery(Query *parsetree, bool *instead_flag, List **qual_products) result_relation = parsetree->resultRelation; /* - * the statement is an update, insert or delete - fire rules - * on it. + * the statement is an update, insert or delete - fire rules on it. */ rt_entry = rt_fetch(result_relation, parsetree->rtable); rt_entry_relation = heap_openr(rt_entry->relname); @@ -2659,11 +2690,11 @@ RewriteQuery(Query *parsetree, bool *instead_flag, List **qual_products) List *locks = matchLocks(event, rt_entry_locks, result_relation, parsetree); product_queries = fireRules(parsetree, - result_relation, - event, - instead_flag, - locks, - qual_products); + result_relation, + event, + instead_flag, + locks, + qual_products); } return product_queries; @@ -2805,16 +2836,16 @@ RewritePreprocessQuery(Query *parsetree) static List * BasicQueryRewrite(Query *parsetree) { - List *querylist; - List *results = NIL; - List *l; - Query *query; + List *querylist; + List *results = NIL; + List *l; + Query *query; /* * Step 1 * - * There still seems something broken with the resdom numbers - * so we reassign them first. + * There still seems something broken with the resdom numbers so we + * reassign them first. */ RewritePreprocessQuery(parsetree); @@ -2830,19 +2861,21 @@ BasicQueryRewrite(Query *parsetree) * * Apply all the RIR rules on each query */ - foreach (l, querylist) { - query = fireRIRrules((Query *)lfirst(l)); + foreach(l, querylist) + { + query = fireRIRrules((Query *) lfirst(l)); + /* - * If the query was marked having aggregates, check if - * this is still true after rewriting. This check must get - * expanded when someday aggregates can appear somewhere - * else than in the targetlist or the having qual. + * If the query was marked having aggregates, check if this is + * still true after rewriting. This check must get expanded when + * someday aggregates can appear somewhere else than in the + * targetlist or the having qual. */ if (query->hasAggs) - query->hasAggs = checkQueryHasAggs((Node *)(query->targetList)) - | checkQueryHasAggs((Node *)(query->havingQual)); - query->hasSubLinks = checkQueryHasSubLink((Node *)(query->qual)) - | checkQueryHasSubLink((Node *)(query->havingQual)); + query->hasAggs = checkQueryHasAggs((Node *) (query->targetList)) + | checkQueryHasAggs((Node *) (query->havingQual)); + query->hasSubLinks = checkQueryHasSubLink((Node *) (query->qual)) + | checkQueryHasSubLink((Node *) (query->havingQual)); results = lappend(results, query); } return results; @@ -2866,8 +2899,11 @@ QueryRewrite(Query *parsetree) *rewritten_item; /***S*I***/ - /* Rewrite Union, Intersect and Except Queries - * to normal Union Queries using IN and NOT IN subselects */ + + /* + * Rewrite Union, Intersect and Except Queries to normal Union Queries + * using IN and NOT IN subselects + */ if (parsetree->intersectClause) parsetree = Except_Intersect_Rewrite(parsetree); @@ -2877,16 +2913,16 @@ QueryRewrite(Query *parsetree) /* * Rewrite the UNIONS. */ - foreach (rewritten_item, rewritten) + foreach(rewritten_item, rewritten) { Query *qry = (Query *) lfirst(rewritten_item); List *union_result = NIL; List *union_item; - foreach (union_item, qry->unionClause) + foreach(union_item, qry->unionClause) { union_result = nconc(union_result, - BasicQueryRewrite((Query *) lfirst(union_item))); + BasicQueryRewrite((Query *) lfirst(union_item))); } qry->unionClause = union_result; } @@ -2898,79 +2934,82 @@ QueryRewrite(Query *parsetree) /* This function takes two targetlists as arguments and checks if the * targetlists are compatible (i.e. both select for the same number of * attributes and the types are compatible */ -void check_targetlists_are_compatible(List *prev_target, List *current_target) +void +check_targetlists_are_compatible(List *prev_target, List *current_target) { - List *tl, *next_target; - int prev_len = 0, next_len = 0; + List *tl, + *next_target; + int prev_len = 0, + next_len = 0; - foreach(tl, prev_target) - if (!((TargetEntry *) lfirst(tl))->resdom->resjunk) + foreach(tl, prev_target) + if (!((TargetEntry *) lfirst(tl))->resdom->resjunk) prev_len++; - foreach(next_target, current_target) - if (!((TargetEntry *) lfirst(next_target))->resdom->resjunk) + foreach(next_target, current_target) + if (!((TargetEntry *) lfirst(next_target))->resdom->resjunk) next_len++; - - if (prev_len != next_len) - elog(ERROR,"Each UNION | EXCEPT | INTERSECT query must have the same number of columns."); - - foreach(next_target, current_target) - { - Oid itype; - Oid otype; - - otype = ((TargetEntry *) lfirst(prev_target))->resdom->restype; - itype = ((TargetEntry *) lfirst(next_target))->resdom->restype; - - /* one or both is a NULL column? then don't convert... */ - if (otype == InvalidOid) + + if (prev_len != next_len) + elog(ERROR, "Each UNION | EXCEPT | INTERSECT query must have the same number of columns."); + + foreach(next_target, current_target) { - /* propagate a known type forward, if available */ - if (itype != InvalidOid) - ((TargetEntry *) lfirst(prev_target))->resdom->restype = itype; + Oid itype; + Oid otype; + + otype = ((TargetEntry *) lfirst(prev_target))->resdom->restype; + itype = ((TargetEntry *) lfirst(next_target))->resdom->restype; + + /* one or both is a NULL column? then don't convert... */ + if (otype == InvalidOid) + { + /* propagate a known type forward, if available */ + if (itype != InvalidOid) + ((TargetEntry *) lfirst(prev_target))->resdom->restype = itype; #ifdef NOT_USED - else - { - ((TargetEntry *) lfirst(prev_target))->resdom->restype = UNKNOWNOID; - ((TargetEntry *) lfirst(next_target))->resdom->restype = UNKNOWNOID; - } + else + { + ((TargetEntry *) lfirst(prev_target))->resdom->restype = UNKNOWNOID; + ((TargetEntry *) lfirst(next_target))->resdom->restype = UNKNOWNOID; + } #endif + } + else if (itype == InvalidOid) + { + } + /* they don't match in type? then convert... */ + else if (itype != otype) + { + Node *expr; + + expr = ((TargetEntry *) lfirst(next_target))->expr; + expr = CoerceTargetExpr(NULL, expr, itype, otype); + if (expr == NULL) + { + elog(ERROR, "Unable to transform %s to %s" + "\n\tEach UNION | EXCEPT | INTERSECT clause must have compatible target types", + typeidTypeName(itype), + typeidTypeName(otype)); + } + ((TargetEntry *) lfirst(next_target))->expr = expr; + ((TargetEntry *) lfirst(next_target))->resdom->restype = otype; + } + + /* both are UNKNOWN? then evaluate as text... */ + else if (itype == UNKNOWNOID) + { + ((TargetEntry *) lfirst(next_target))->resdom->restype = TEXTOID; + ((TargetEntry *) lfirst(prev_target))->resdom->restype = TEXTOID; + } + prev_target = lnext(prev_target); } - else if (itype == InvalidOid) - { - } - /* they don't match in type? then convert... */ - else if (itype != otype) - { - Node *expr; - - expr = ((TargetEntry *) lfirst(next_target))->expr; - expr = CoerceTargetExpr(NULL, expr, itype, otype); - if (expr == NULL) - { - elog(ERROR, "Unable to transform %s to %s" - "\n\tEach UNION | EXCEPT | INTERSECT clause must have compatible target types", - typeidTypeName(itype), - typeidTypeName(otype)); - } - ((TargetEntry *) lfirst(next_target))->expr = expr; - ((TargetEntry *) lfirst(next_target))->resdom->restype = otype; - } - - /* both are UNKNOWN? then evaluate as text... */ - else if (itype == UNKNOWNOID) - { - ((TargetEntry *) lfirst(next_target))->resdom->restype = TEXTOID; - ((TargetEntry *) lfirst(prev_target))->resdom->restype = TEXTOID; - } - prev_target = lnext(prev_target); - } } /***S*I***/ /* Rewrites UNION INTERSECT and EXCEPT queries to semantiacally equivalent - * queries that use IN and NOT IN subselects. - * + * queries that use IN and NOT IN subselects. + * * The operator tree is attached to 'intersectClause' (see rule * 'SelectStmt' in gram.y) of the 'parsetree' given as an * argument. First we remember some clauses (the sortClause, the @@ -2983,233 +3022,291 @@ void check_targetlists_are_compatible(List *prev_target, List *current_target) * union list and for every OR we create an IN subselect. (NOT IN * subselects are created for OR NOT nodes). The first entry of the * union list is handed back but before that the remembered clauses - * (sortClause etc) are attached to the new top Node (Note that the + * (sortClause etc) are attached to the new top Node (Note that the * new top Node can differ from the parsetree given as argument because of * the translation to DNF. That's why we have to remember the sortClause or * unique flag!) */ Query * -Except_Intersect_Rewrite (Query *parsetree) +Except_Intersect_Rewrite(Query *parsetree) { - - SubLink *n; - Query *result, *intersect_node; - List *elist, *intersect_list = NIL, *intersect, *intersectClause; - List *union_list = NIL, *sortClause; - List *left_expr, *right_expr, *resnames = NIL; - char *op, *uniqueFlag, *into; - bool isBinary, isPortal, isTemp; - CmdType commandType = CMD_SELECT; - List *rtable_insert = NIL; - - List *prev_target = NIL; - - /* Remember the Resnames of the given parsetree's targetlist - * (these are the resnames of the first Select Statement of - * the query formulated by the user and he wants the columns - * named by these strings. The transformation to DNF can - * cause another Select Statment to be the top one which - * uses other names for its columns. Therefore we remeber - * the original names and attach them to the targetlist - * of the new topmost Node at the end of this function */ - foreach(elist, parsetree->targetList) - { - TargetEntry *tent = (TargetEntry *)lfirst(elist); - - resnames = lappend(resnames, tent->resdom->resname); - } - - /* If the Statement is an INSERT INTO ... (SELECT...) statement - * using UNIONs, INTERSECTs or EXCEPTs and the transformation - * to DNF makes another Node to the top node we have to transform - * the new top node to an INSERT node and the original INSERT node - * to a SELECT node */ - if (parsetree->commandType == CMD_INSERT) - { - parsetree->commandType = CMD_SELECT; - commandType = CMD_INSERT; - parsetree->resultRelation = 0; - - /* The result relation ( = the one to insert into) has to be - * attached to the rtable list of the new top node */ - rtable_insert = nth(length(parsetree->rtable) - 1, parsetree->rtable); - } - - /* Save some items, to be able to attach them to the resulting top node - * at the end of the function */ - sortClause = parsetree->sortClause; - uniqueFlag = parsetree->uniqueFlag; - into = parsetree->into; - isBinary = parsetree->isBinary; - isPortal = parsetree->isPortal; - isTemp = parsetree->isTemp; - - /* The operator tree attached to parsetree->intersectClause is still 'raw' - * ( = the leaf nodes are still SelectStmt nodes instead of Query nodes) - * So step through the tree and transform the nodes using parse_analyze(). - * - * The parsetree (given as an argument to - * Except_Intersect_Rewrite()) has already been transformed and - * transforming it again would cause troubles. So we give the 'raw' - * version (of the cooked parsetree) to the function to - * prevent an additional transformation. Instead we hand back the - * 'cooked' version also given as an argument to - * intersect_tree_analyze() */ - intersectClause = - (List *)intersect_tree_analyze((Node *)parsetree->intersectClause, - (Node *)lfirst(parsetree->unionClause), - (Node *)parsetree); - - /* intersectClause is no longer needed so set it to NIL */ - parsetree->intersectClause = NIL; - /* unionClause will be needed later on but the list it delivered - * is no longer needed, so set it to NIL */ - parsetree->unionClause = NIL; - - /* Transform the operator tree to DNF (remember ANDs and ORs have been exchanged, - * that's why we get DNF by using cnfify) - * - * After the call, explicit ANDs are removed and all AND operands - * are simply items in the intersectClause list */ - intersectClause = cnfify((Expr *)intersectClause, true); - - /* For every entry of the intersectClause list we generate one entry in - * the union_list */ - foreach(intersect, intersectClause) - { - /* for every OR we create an IN subselect and for every OR NOT - * we create a NOT IN subselect, so first extract all the Select - * Query nodes from the tree (that contains only OR or OR NOTs - * any more because we did a transformation to DNF - * - * There must be at least one node that is not negated - * (i.e. just OR and not OR NOT) and this node will be the first - * in the list returned */ - intersect_list = NIL; - create_list((Node *)lfirst(intersect), &intersect_list); - - /* This one will become the Select Query node, all other - * nodes are transformed into subselects under this node! */ - intersect_node = (Query *)lfirst(intersect_list); - intersect_list = lnext(intersect_list); - - /* Check if all Select Statements use the same number of attributes and - * if all corresponding attributes are of the same type */ - if (prev_target) - check_targetlists_are_compatible(prev_target, intersect_node->targetList); - prev_target = intersect_node->targetList; - /* End of check for corresponding targetlists */ - - /* Transform all nodes remaining into subselects and add them to - * the qualifications of the Select Query node */ - while(intersect_list != NIL) { - - n = makeNode(SubLink); - - /* Here we got an OR so transform it to an IN subselect */ - if(IsA(lfirst(intersect_list), Query)) - { - /* Check if all Select Statements use the same number of attributes and - * if all corresponding attributes are of the same type */ - check_targetlists_are_compatible(prev_target, - ((Query *)lfirst(intersect_list))->targetList); - /* End of check for corresponding targetlists */ - - n->subselect = lfirst(intersect_list); - op = "="; - n->subLinkType = ANY_SUBLINK; - n->useor = false; - } - /* Here we got an OR NOT node so transform it to a NOT IN subselect */ - else - { - /* Check if all Select Statements use the same number of attributes and - * if all corresponding attributes are of the same type */ - check_targetlists_are_compatible(prev_target, - ((Query *)lfirst(((Expr *)lfirst(intersect_list))->args))->targetList); - /* End of check for corresponding targetlists */ - - n->subselect = (Node *)lfirst(((Expr *)lfirst(intersect_list))->args); - op = "<>"; - n->subLinkType = ALL_SUBLINK; - n->useor = true; - } - - /* Prepare the lefthand side of the Sublinks: All the entries of the - * targetlist must be (IN) or must not be (NOT IN) the subselect */ - foreach(elist, intersect_node->targetList) - { - Node *expr = lfirst(elist); - TargetEntry *tent = (TargetEntry *)expr; - - n->lefthand = lappend(n->lefthand, tent->expr); - } - - /* The first arguments of oper also have to be created for the - * sublink (they are the same as the lefthand side!) */ - left_expr = n->lefthand; - right_expr = ((Query *)(n->subselect))->targetList; - - foreach(elist, left_expr) - { - Node *lexpr = lfirst(elist); - Node *rexpr = lfirst(right_expr); - TargetEntry *tent = (TargetEntry *) rexpr; - Expr *op_expr; - - op_expr = make_op(op, lexpr, tent->expr); - - n->oper = lappend(n->oper, op_expr); - right_expr = lnext(right_expr); - } - - /* If the Select Query node has aggregates in use - * add all the subselects to the HAVING qual else to - * the WHERE qual */ - if(intersect_node->hasAggs == false) { - AddQual(intersect_node, (Node *)n); + + SubLink *n; + Query *result, + *intersect_node; + List *elist, + *intersect_list = NIL, + *intersect, + *intersectClause; + List *union_list = NIL, + *sortClause; + List *left_expr, + *right_expr, + *resnames = NIL; + char *op, + *uniqueFlag, + *into; + bool isBinary, + isPortal, + isTemp; + CmdType commandType = CMD_SELECT; + List *rtable_insert = NIL; + + List *prev_target = NIL; + + /* + * Remember the Resnames of the given parsetree's targetlist (these + * are the resnames of the first Select Statement of the query + * formulated by the user and he wants the columns named by these + * strings. The transformation to DNF can cause another Select + * Statment to be the top one which uses other names for its columns. + * Therefore we remeber the original names and attach them to the + * targetlist of the new topmost Node at the end of this function + */ + foreach(elist, parsetree->targetList) + { + TargetEntry *tent = (TargetEntry *) lfirst(elist); + + resnames = lappend(resnames, tent->resdom->resname); + } + + /* + * If the Statement is an INSERT INTO ... (SELECT...) statement using + * UNIONs, INTERSECTs or EXCEPTs and the transformation to DNF makes + * another Node to the top node we have to transform the new top node + * to an INSERT node and the original INSERT node to a SELECT node + */ + if (parsetree->commandType == CMD_INSERT) + { + parsetree->commandType = CMD_SELECT; + commandType = CMD_INSERT; + parsetree->resultRelation = 0; + + /* + * The result relation ( = the one to insert into) has to be + * attached to the rtable list of the new top node + */ + rtable_insert = nth(length(parsetree->rtable) - 1, parsetree->rtable); } - else { - AddHavingQual(intersect_node, (Node *)n); - } - - /* Now we got sublinks */ - intersect_node->hasSubLinks = true; - intersect_list = lnext(intersect_list); - } - intersect_node->intersectClause = NIL; - union_list = lappend(union_list, intersect_node); - } - - /* The first entry to union_list is our new top node */ - result = (Query *)lfirst(union_list); - /* attach the rest to unionClause */ - result->unionClause = lnext(union_list); - /* Attach all the items remembered in the beginning of the function */ - result->sortClause = sortClause; - result->uniqueFlag = uniqueFlag; - result->into = into; - result->isPortal = isPortal; - result->isBinary = isBinary; - result->isTemp = isTemp; - - /* The relation to insert into is attached to the range table - * of the new top node */ - if (commandType == CMD_INSERT) - { - result->rtable = lappend(result->rtable, rtable_insert); - result->resultRelation = length(result->rtable); - result->commandType = commandType; - } - /* The resnames of the originally first SelectStatement are - * attached to the new first SelectStatement */ - foreach(elist, result->targetList) - { - TargetEntry *tent = (TargetEntry *)lfirst(elist); - - tent->resdom->resname = lfirst(resnames); - resnames = lnext(resnames); - } - return result; + + /* + * Save some items, to be able to attach them to the resulting top + * node at the end of the function + */ + sortClause = parsetree->sortClause; + uniqueFlag = parsetree->uniqueFlag; + into = parsetree->into; + isBinary = parsetree->isBinary; + isPortal = parsetree->isPortal; + isTemp = parsetree->isTemp; + + /* + * The operator tree attached to parsetree->intersectClause is still + * 'raw' ( = the leaf nodes are still SelectStmt nodes instead of + * Query nodes) So step through the tree and transform the nodes using + * parse_analyze(). + * + * The parsetree (given as an argument to Except_Intersect_Rewrite()) has + * already been transformed and transforming it again would cause + * troubles. So we give the 'raw' version (of the cooked parsetree) + * to the function to prevent an additional transformation. Instead we + * hand back the 'cooked' version also given as an argument to + * intersect_tree_analyze() + */ + intersectClause = + (List *) intersect_tree_analyze((Node *) parsetree->intersectClause, + (Node *) lfirst(parsetree->unionClause), + (Node *) parsetree); + + /* intersectClause is no longer needed so set it to NIL */ + parsetree->intersectClause = NIL; + + /* + * unionClause will be needed later on but the list it delivered is no + * longer needed, so set it to NIL + */ + parsetree->unionClause = NIL; + + /* + * Transform the operator tree to DNF (remember ANDs and ORs have been + * exchanged, that's why we get DNF by using cnfify) + * + * After the call, explicit ANDs are removed and all AND operands are + * simply items in the intersectClause list + */ + intersectClause = cnfify((Expr *) intersectClause, true); + + /* + * For every entry of the intersectClause list we generate one entry + * in the union_list + */ + foreach(intersect, intersectClause) + { + + /* + * for every OR we create an IN subselect and for every OR NOT we + * create a NOT IN subselect, so first extract all the Select + * Query nodes from the tree (that contains only OR or OR NOTs any + * more because we did a transformation to DNF + * + * There must be at least one node that is not negated (i.e. just OR + * and not OR NOT) and this node will be the first in the list + * returned + */ + intersect_list = NIL; + create_list((Node *) lfirst(intersect), &intersect_list); + + /* + * This one will become the Select Query node, all other nodes are + * transformed into subselects under this node! + */ + intersect_node = (Query *) lfirst(intersect_list); + intersect_list = lnext(intersect_list); + + /* + * Check if all Select Statements use the same number of + * attributes and if all corresponding attributes are of the same + * type + */ + if (prev_target) + check_targetlists_are_compatible(prev_target, intersect_node->targetList); + prev_target = intersect_node->targetList; + /* End of check for corresponding targetlists */ + + /* + * Transform all nodes remaining into subselects and add them to + * the qualifications of the Select Query node + */ + while (intersect_list != NIL) + { + + n = makeNode(SubLink); + + /* Here we got an OR so transform it to an IN subselect */ + if (IsA(lfirst(intersect_list), Query)) + { + + /* + * Check if all Select Statements use the same number of + * attributes and if all corresponding attributes are of + * the same type + */ + check_targetlists_are_compatible(prev_target, + ((Query *) lfirst(intersect_list))->targetList); + /* End of check for corresponding targetlists */ + + n->subselect = lfirst(intersect_list); + op = "="; + n->subLinkType = ANY_SUBLINK; + n->useor = false; + } + + /* + * Here we got an OR NOT node so transform it to a NOT IN + * subselect + */ + else + { + + /* + * Check if all Select Statements use the same number of + * attributes and if all corresponding attributes are of + * the same type + */ + check_targetlists_are_compatible(prev_target, + ((Query *) lfirst(((Expr *) lfirst(intersect_list))->args))->targetList); + /* End of check for corresponding targetlists */ + + n->subselect = (Node *) lfirst(((Expr *) lfirst(intersect_list))->args); + op = "<>"; + n->subLinkType = ALL_SUBLINK; + n->useor = true; + } + + /* + * Prepare the lefthand side of the Sublinks: All the entries + * of the targetlist must be (IN) or must not be (NOT IN) the + * subselect + */ + foreach(elist, intersect_node->targetList) + { + Node *expr = lfirst(elist); + TargetEntry *tent = (TargetEntry *) expr; + + n->lefthand = lappend(n->lefthand, tent->expr); + } + + /* + * The first arguments of oper also have to be created for the + * sublink (they are the same as the lefthand side!) + */ + left_expr = n->lefthand; + right_expr = ((Query *) (n->subselect))->targetList; + + foreach(elist, left_expr) + { + Node *lexpr = lfirst(elist); + Node *rexpr = lfirst(right_expr); + TargetEntry *tent = (TargetEntry *) rexpr; + Expr *op_expr; + + op_expr = make_op(op, lexpr, tent->expr); + + n->oper = lappend(n->oper, op_expr); + right_expr = lnext(right_expr); + } + + /* + * If the Select Query node has aggregates in use add all the + * subselects to the HAVING qual else to the WHERE qual + */ + if (intersect_node->hasAggs == false) + AddQual(intersect_node, (Node *) n); + else + AddHavingQual(intersect_node, (Node *) n); + + /* Now we got sublinks */ + intersect_node->hasSubLinks = true; + intersect_list = lnext(intersect_list); + } + intersect_node->intersectClause = NIL; + union_list = lappend(union_list, intersect_node); + } + + /* The first entry to union_list is our new top node */ + result = (Query *) lfirst(union_list); + /* attach the rest to unionClause */ + result->unionClause = lnext(union_list); + /* Attach all the items remembered in the beginning of the function */ + result->sortClause = sortClause; + result->uniqueFlag = uniqueFlag; + result->into = into; + result->isPortal = isPortal; + result->isBinary = isBinary; + result->isTemp = isTemp; + + /* + * The relation to insert into is attached to the range table of the + * new top node + */ + if (commandType == CMD_INSERT) + { + result->rtable = lappend(result->rtable, rtable_insert); + result->resultRelation = length(result->rtable); + result->commandType = commandType; + } + + /* + * The resnames of the originally first SelectStatement are attached + * to the new first SelectStatement + */ + foreach(elist, result->targetList) + { + TargetEntry *tent = (TargetEntry *) lfirst(elist); + + tent->resdom->resname = lfirst(resnames); + resnames = lnext(resnames); + } + return result; } /* Create a list of nodes that are either Query nodes of NOT Expr @@ -3217,74 +3314,70 @@ Except_Intersect_Rewrite (Query *parsetree) * least one non negated Query node. This node is attached to the * beginning of the list */ -void create_list(Node *ptr, List **intersect_list) +void +create_list(Node *ptr, List **intersect_list) { - List *arg; - - if(IsA(ptr,Query)) - { - /* The non negated node is attached at the beginning (lcons) */ - *intersect_list = lcons(ptr, *intersect_list); - return; - } - - if(IsA(ptr,Expr)) - { - if(((Expr *)ptr)->opType == NOT_EXPR) + List *arg; + + if (IsA(ptr, Query)) { - /* negated nodes are appended to the end (lappend) */ - *intersect_list = lappend(*intersect_list, ptr); - return; + /* The non negated node is attached at the beginning (lcons) */ + *intersect_list = lcons(ptr, *intersect_list); + return; } - else + + if (IsA(ptr, Expr)) { - foreach(arg, ((Expr *)ptr)->args) - { - create_list(lfirst(arg), intersect_list); - } - return; + if (((Expr *) ptr)->opType == NOT_EXPR) + { + /* negated nodes are appended to the end (lappend) */ + *intersect_list = lappend(*intersect_list, ptr); + return; + } + else + { + foreach(arg, ((Expr *) ptr)->args) + create_list(lfirst(arg), intersect_list); + return; + } + return; } - return; - } } /* The nodes given in 'tree' are still 'raw' so 'cook' them using parse_analyze(). * The node given in first_select has already been cooked, so don't transform - * it again but return a pointer to the previously cooked version given in 'parsetree' + * it again but return a pointer to the previously cooked version given in 'parsetree' * instead. */ -Node *intersect_tree_analyze(Node *tree, Node *first_select, Node *parsetree) +Node * +intersect_tree_analyze(Node *tree, Node *first_select, Node *parsetree) { - Node *result = (Node *) NIL; - List *arg; + Node *result = (Node *) NIL; + List *arg; if (IsA(tree, SelectStmt)) - { - /* If we get to the tree given in first_select return - * parsetree instead of performing parse_analyze() */ + { + + /* + * If we get to the tree given in first_select return parsetree + * instead of performing parse_analyze() + */ if (tree == first_select) - { result = parsetree; - } else - { - /* transform the 'raw' nodes to 'cooked' Query nodes */ - List *qtree = parse_analyze(lcons(tree, NIL), NULL); + { + /* transform the 'raw' nodes to 'cooked' Query nodes */ + List *qtree = parse_analyze(lcons(tree, NIL), NULL); + result = (Node *) lfirst(qtree); } - } + } - if(IsA(tree,Expr)) - { - /* Call recursively for every argument of the node */ - foreach(arg, ((Expr *)tree)->args) + if (IsA(tree, Expr)) { - lfirst(arg) = intersect_tree_analyze(lfirst(arg), first_select, parsetree); + /* Call recursively for every argument of the node */ + foreach(arg, ((Expr *) tree)->args) + lfirst(arg) = intersect_tree_analyze(lfirst(arg), first_select, parsetree); + result = tree; } - result = tree; - } - return result; + return result; } - - - - diff --git a/src/backend/rewrite/rewriteManip.c b/src/backend/rewrite/rewriteManip.c index 057579669d1..7be8d080ec1 100644 --- a/src/backend/rewrite/rewriteManip.c +++ b/src/backend/rewrite/rewriteManip.c @@ -6,7 +6,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteManip.c,v 1.30 1999/05/12 15:01:55 wieck Exp $ + * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteManip.c,v 1.31 1999/05/25 16:10:52 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -41,26 +41,27 @@ OffsetVarNodes(Node *node, int offset, int sublevels_up) if (node == NULL) return; - switch(nodeTag(node)) { + switch (nodeTag(node)) + { case T_TargetEntry: { - TargetEntry *tle = (TargetEntry *)node; + TargetEntry *tle = (TargetEntry *) node; OffsetVarNodes( - (Node *)(tle->expr), - offset, - sublevels_up); + (Node *) (tle->expr), + offset, + sublevels_up); } break; case T_Aggref: { - Aggref *aggref = (Aggref *)node; + Aggref *aggref = (Aggref *) node; OffsetVarNodes( - (Node *)(aggref->target), - offset, - sublevels_up); + (Node *) (aggref->target), + offset, + sublevels_up); } break; @@ -69,54 +70,55 @@ OffsetVarNodes(Node *node, int offset, int sublevels_up) case T_Expr: { - Expr *exp = (Expr *)node; + Expr *exp = (Expr *) node; OffsetVarNodes( - (Node *)(exp->args), - offset, - sublevels_up); + (Node *) (exp->args), + offset, + sublevels_up); } break; case T_Iter: { - Iter *iter = (Iter *)node; + Iter *iter = (Iter *) node; OffsetVarNodes( - (Node *)(iter->iterexpr), - offset, - sublevels_up); + (Node *) (iter->iterexpr), + offset, + sublevels_up); } break; case T_ArrayRef: { - ArrayRef *ref = (ArrayRef *)node; + ArrayRef *ref = (ArrayRef *) node; OffsetVarNodes( - (Node *)(ref->refupperindexpr), - offset, - sublevels_up); + (Node *) (ref->refupperindexpr), + offset, + sublevels_up); OffsetVarNodes( - (Node *)(ref->reflowerindexpr), - offset, - sublevels_up); + (Node *) (ref->reflowerindexpr), + offset, + sublevels_up); OffsetVarNodes( - (Node *)(ref->refexpr), - offset, - sublevels_up); + (Node *) (ref->refexpr), + offset, + sublevels_up); OffsetVarNodes( - (Node *)(ref->refassgnexpr), - offset, - sublevels_up); + (Node *) (ref->refassgnexpr), + offset, + sublevels_up); } break; case T_Var: { - Var *var = (Var *)node; + Var *var = (Var *) node; - if (var->varlevelsup == sublevels_up) { + if (var->varlevelsup == sublevels_up) + { var->varno += offset; var->varnoold += offset; } @@ -131,98 +133,104 @@ OffsetVarNodes(Node *node, int offset, int sublevels_up) case T_List: { - List *l; + List *l; - foreach (l, (List *)node) + foreach(l, (List *) node) OffsetVarNodes( - (Node *)lfirst(l), - offset, - sublevels_up); + (Node *) lfirst(l), + offset, + sublevels_up); } break; case T_SubLink: { - SubLink *sub = (SubLink *)node; - List *tmp_oper, *tmp_lefthand; + SubLink *sub = (SubLink *) node; + List *tmp_oper, + *tmp_lefthand; - /* We also have to adapt the variables used in sub->lefthand - * and sub->oper */ + /* + * We also have to adapt the variables used in + * sub->lefthand and sub->oper + */ OffsetVarNodes( - (Node *)(sub->lefthand), - offset, - sublevels_up); + (Node *) (sub->lefthand), + offset, + sublevels_up); OffsetVarNodes( - (Node *)(sub->subselect), - offset, - sublevels_up + 1); + (Node *) (sub->subselect), + offset, + sublevels_up + 1); /***S*I***/ - /* Make sure the first argument of sub->oper points to the - * same var as sub->lefthand does otherwise we will - * run into troubles using aggregates (aggno will not be - * set correctly) */ - tmp_lefthand = sub->lefthand; + + /* + * Make sure the first argument of sub->oper points to the + * same var as sub->lefthand does otherwise we will run + * into troubles using aggregates (aggno will not be set + * correctly) + */ + tmp_lefthand = sub->lefthand; foreach(tmp_oper, sub->oper) - { - lfirst(((Expr *) lfirst(tmp_oper))->args) = - lfirst(tmp_lefthand); - tmp_lefthand = lnext(tmp_lefthand); - } + { + lfirst(((Expr *) lfirst(tmp_oper))->args) = + lfirst(tmp_lefthand); + tmp_lefthand = lnext(tmp_lefthand); + } } break; case T_Query: { - Query *qry = (Query *)node; + Query *qry = (Query *) node; OffsetVarNodes( - (Node *)(qry->targetList), - offset, - sublevels_up); + (Node *) (qry->targetList), + offset, + sublevels_up); OffsetVarNodes( - (Node *)(qry->qual), - offset, - sublevels_up); + (Node *) (qry->qual), + offset, + sublevels_up); OffsetVarNodes( - (Node *)(qry->havingQual), - offset, - sublevels_up); + (Node *) (qry->havingQual), + offset, + sublevels_up); } break; case T_CaseExpr: { - CaseExpr *exp = (CaseExpr *)node; + CaseExpr *exp = (CaseExpr *) node; OffsetVarNodes( - (Node *)(exp->args), - offset, - sublevels_up); + (Node *) (exp->args), + offset, + sublevels_up); OffsetVarNodes( - (Node *)(exp->defresult), - offset, - sublevels_up); + (Node *) (exp->defresult), + offset, + sublevels_up); } break; case T_CaseWhen: { - CaseWhen *exp = (CaseWhen *)node; + CaseWhen *exp = (CaseWhen *) node; OffsetVarNodes( - (Node *)(exp->expr), - offset, - sublevels_up); + (Node *) (exp->expr), + offset, + sublevels_up); OffsetVarNodes( - (Node *)(exp->result), - offset, - sublevels_up); + (Node *) (exp->result), + offset, + sublevels_up); } break; @@ -245,28 +253,29 @@ ChangeVarNodes(Node *node, int rt_index, int new_index, int sublevels_up) if (node == NULL) return; - switch(nodeTag(node)) { + switch (nodeTag(node)) + { case T_TargetEntry: { - TargetEntry *tle = (TargetEntry *)node; + TargetEntry *tle = (TargetEntry *) node; ChangeVarNodes( - (Node *)(tle->expr), - rt_index, - new_index, - sublevels_up); + (Node *) (tle->expr), + rt_index, + new_index, + sublevels_up); } break; case T_Aggref: { - Aggref *aggref = (Aggref *)node; + Aggref *aggref = (Aggref *) node; ChangeVarNodes( - (Node *)(aggref->target), - rt_index, - new_index, - sublevels_up); + (Node *) (aggref->target), + rt_index, + new_index, + sublevels_up); } break; @@ -275,61 +284,62 @@ ChangeVarNodes(Node *node, int rt_index, int new_index, int sublevels_up) case T_Expr: { - Expr *exp = (Expr *)node; + Expr *exp = (Expr *) node; ChangeVarNodes( - (Node *)(exp->args), - rt_index, - new_index, - sublevels_up); + (Node *) (exp->args), + rt_index, + new_index, + sublevels_up); } break; case T_Iter: { - Iter *iter = (Iter *)node; + Iter *iter = (Iter *) node; ChangeVarNodes( - (Node *)(iter->iterexpr), - rt_index, - new_index, - sublevels_up); + (Node *) (iter->iterexpr), + rt_index, + new_index, + sublevels_up); } break; case T_ArrayRef: { - ArrayRef *ref = (ArrayRef *)node; + ArrayRef *ref = (ArrayRef *) node; ChangeVarNodes( - (Node *)(ref->refupperindexpr), - rt_index, - new_index, - sublevels_up); + (Node *) (ref->refupperindexpr), + rt_index, + new_index, + sublevels_up); ChangeVarNodes( - (Node *)(ref->reflowerindexpr), - rt_index, - new_index, - sublevels_up); + (Node *) (ref->reflowerindexpr), + rt_index, + new_index, + sublevels_up); ChangeVarNodes( - (Node *)(ref->refexpr), - rt_index, - new_index, - sublevels_up); + (Node *) (ref->refexpr), + rt_index, + new_index, + sublevels_up); ChangeVarNodes( - (Node *)(ref->refassgnexpr), - rt_index, - new_index, - sublevels_up); + (Node *) (ref->refassgnexpr), + rt_index, + new_index, + sublevels_up); } break; case T_Var: { - Var *var = (Var *)node; + Var *var = (Var *) node; if (var->varlevelsup == sublevels_up && - var->varno == rt_index) { + var->varno == rt_index) + { var->varno = new_index; var->varnoold = new_index; } @@ -344,106 +354,110 @@ ChangeVarNodes(Node *node, int rt_index, int new_index, int sublevels_up) case T_List: { - List *l; + List *l; - foreach (l, (List *)node) + foreach(l, (List *) node) ChangeVarNodes( - (Node *)lfirst(l), - rt_index, - new_index, - sublevels_up); + (Node *) lfirst(l), + rt_index, + new_index, + sublevels_up); } break; case T_SubLink: { - SubLink *sub = (SubLink *)node; - List *tmp_oper, *tmp_lefthand; - + SubLink *sub = (SubLink *) node; + List *tmp_oper, + *tmp_lefthand; + ChangeVarNodes( - (Node *)(sub->lefthand), - rt_index, - new_index, - sublevels_up); + (Node *) (sub->lefthand), + rt_index, + new_index, + sublevels_up); ChangeVarNodes( - (Node *)(sub->subselect), - rt_index, - new_index, - sublevels_up + 1); - + (Node *) (sub->subselect), + rt_index, + new_index, + sublevels_up + 1); + /***S*I***/ - /* Make sure the first argument of sub->oper points to the - * same var as sub->lefthand does otherwise we will - * run into troubles using aggregates (aggno will not be - * set correctly) */ + + /* + * Make sure the first argument of sub->oper points to the + * same var as sub->lefthand does otherwise we will run + * into troubles using aggregates (aggno will not be set + * correctly) + */ tmp_lefthand = sub->lefthand; foreach(tmp_oper, sub->oper) - { - lfirst(((Expr *) lfirst(tmp_oper))->args) = - lfirst(tmp_lefthand); - tmp_lefthand = lnext(tmp_lefthand); - } + { + lfirst(((Expr *) lfirst(tmp_oper))->args) = + lfirst(tmp_lefthand); + tmp_lefthand = lnext(tmp_lefthand); + } } break; case T_Query: { - Query *qry = (Query *)node; + Query *qry = (Query *) node; ChangeVarNodes( - (Node *)(qry->targetList), - rt_index, - new_index, - sublevels_up); + (Node *) (qry->targetList), + rt_index, + new_index, + sublevels_up); ChangeVarNodes( - (Node *)(qry->qual), - rt_index, - new_index, - sublevels_up); + (Node *) (qry->qual), + rt_index, + new_index, + sublevels_up); ChangeVarNodes( - (Node *)(qry->havingQual), - rt_index, - new_index, - sublevels_up); + (Node *) (qry->havingQual), + rt_index, + new_index, + sublevels_up); } break; case T_CaseExpr: { - CaseExpr *exp = (CaseExpr *)node; + CaseExpr *exp = (CaseExpr *) node; ChangeVarNodes( - (Node *)(exp->args), - rt_index, - new_index, - sublevels_up); + (Node *) (exp->args), + rt_index, + new_index, + sublevels_up); ChangeVarNodes( - (Node *)(exp->defresult), - rt_index, - new_index, - sublevels_up); + (Node *) (exp->defresult), + rt_index, + new_index, + sublevels_up); } break; case T_CaseWhen: { - CaseWhen *exp = (CaseWhen *)node; + CaseWhen *exp = (CaseWhen *) node; ChangeVarNodes( - (Node *)(exp->expr), - rt_index, - new_index, - sublevels_up); + (Node *) (exp->expr), + rt_index, + new_index, + sublevels_up); ChangeVarNodes( - (Node *)(exp->result), - rt_index, - new_index, - sublevels_up); + (Node *) (exp->result), + rt_index, + new_index, + sublevels_up); } break; @@ -513,7 +527,7 @@ AddNotHavingQual(Query *parsetree, Node *havingQual) /***S*I***/ /* INTERSECT want's the original, but we need to copy - Jan */ /* copy = (Node *) make_notclause((Expr *)havingQual); */ - copy = (Node *)make_notclause( (Expr *)copyObject(havingQual)); + copy = (Node *) make_notclause((Expr *) copyObject(havingQual)); AddHavingQual(parsetree, copy); } @@ -529,7 +543,7 @@ AddNotQual(Query *parsetree, Node *qual) /***S*I***/ /* INTERSECT want's the original, but we need to copy - Jan */ /* copy = (Node *) make_notclause((Expr *)qual); */ - copy = (Node *) make_notclause((Expr *)copyObject(qual)); + copy = (Node *) make_notclause((Expr *) copyObject(qual)); AddQual(parsetree, copy); } @@ -538,24 +552,24 @@ AddNotQual(Query *parsetree, Node *qual) void AddGroupClause(Query *parsetree, List *group_by, List *tlist) { - List *l; - List *tl; - GroupClause *groupclause; - TargetEntry *tle; - int new_resno; + List *l; + List *tl; + GroupClause *groupclause; + TargetEntry *tle; + int new_resno; new_resno = length(parsetree->targetList); - foreach (l, group_by) + foreach(l, group_by) { - groupclause = (GroupClause *)copyObject(lfirst(l)); + groupclause = (GroupClause *) copyObject(lfirst(l)); tle = NULL; foreach(tl, tlist) { - if (((TargetEntry *)lfirst(tl))->resdom->resgroupref == - groupclause->tleGroupref) + if (((TargetEntry *) lfirst(tl))->resdom->resgroupref == + groupclause->tleGroupref) { - tle = (TargetEntry *)copyObject(lfirst(tl)); + tle = (TargetEntry *) copyObject(lfirst(tl)); break; } } @@ -567,7 +581,7 @@ AddGroupClause(Query *parsetree, List *group_by, List *tlist) tle->resdom->resgroupref = length(parsetree->groupClause) + 1; groupclause->tleGroupref = tle->resdom->resgroupref; - parsetree->targetList = lappend(parsetree->targetList, tle); + parsetree->targetList = lappend(parsetree->targetList, tle); parsetree->groupClause = lappend(parsetree->groupClause, groupclause); } } @@ -604,6 +618,7 @@ FixResdomTypes(List *tlist) } } } + #endif static Node * @@ -735,10 +750,10 @@ FixNew(RewriteInfo *info, Query *parsetree) { ResolveNew(info, parsetree->targetList, (Node **) &(info->rule_action->targetList), 0); - ResolveNew(info, parsetree->targetList, - (Node **) &info->rule_action->qual, 0); - ResolveNew(info, parsetree->targetList, - (Node **) &(info->rule_action->groupClause), 0); + ResolveNew(info, parsetree->targetList, + (Node **) &info->rule_action->qual, 0); + ResolveNew(info, parsetree->targetList, + (Node **) &(info->rule_action->groupClause), 0); } static void @@ -797,7 +812,7 @@ nodeHandleRIRAttributeRule(Node **nodePtr, break; case T_ArrayRef: { - ArrayRef *ref = (ArrayRef *) node; + ArrayRef *ref = (ArrayRef *) node; nodeHandleRIRAttributeRule((Node **) (&(ref->refupperindexpr)), rtable, targetlist, rt_index, attr_num, @@ -972,7 +987,7 @@ nodeHandleViewRule(Node **nodePtr, break; case T_ArrayRef: { - ArrayRef *ref = (ArrayRef *) node; + ArrayRef *ref = (ArrayRef *) node; nodeHandleViewRule((Node **) (&(ref->refupperindexpr)), rtable, targetlist, @@ -1006,6 +1021,7 @@ nodeHandleViewRule(Node **nodePtr, *nodePtr = make_null(((Var *) node)->vartype); else { + /* * This is a hack: The varlevelsup of the orignal * variable and the new one should be the same. @@ -1026,7 +1042,7 @@ nodeHandleViewRule(Node **nodePtr, ((Var *) *nodePtr)->varlevelsup = this_varlevelsup; else nodeHandleViewRule(&n, rtable, targetlist, - rt_index, modified, sublevels_up); + rt_index, modified, sublevels_up); } *modified = TRUE; } @@ -1048,17 +1064,18 @@ nodeHandleViewRule(Node **nodePtr, { SubLink *sublink = (SubLink *) node; Query *query = (Query *) sublink->subselect; - List *tmp_lefthand, *tmp_oper; - + List *tmp_lefthand, + *tmp_oper; + nodeHandleViewRule((Node **) &(query->qual), rtable, targetlist, rt_index, modified, sublevels_up + 1); /***S*H*D***/ nodeHandleViewRule((Node **) &(query->havingQual), rtable, targetlist, - rt_index, modified, sublevels_up + 1); + rt_index, modified, sublevels_up + 1); nodeHandleViewRule((Node **) &(query->targetList), rtable, targetlist, - rt_index, modified, sublevels_up + 1); + rt_index, modified, sublevels_up + 1); /* @@ -1076,21 +1093,19 @@ nodeHandleViewRule(Node **nodePtr, */ pfree(lfirst(((Expr *) lfirst(sublink->oper))->args)); lfirst(((Expr *) lfirst(sublink->oper))->args) = - lfirst(sublink->lefthand); + lfirst(sublink->lefthand); /***S*I***/ /* INTERSECT want's this - Jan */ + /* - tmp_lefthand = sublink->lefthand; - foreach(tmp_oper, sublink->oper) - { - lfirst(((Expr *) lfirst(tmp_oper))->args) = - lfirst(tmp_lefthand); - tmp_lefthand = lnext(tmp_lefthand); - } - */ - } + * tmp_lefthand = sublink->lefthand; foreach(tmp_oper, + * sublink->oper) { lfirst(((Expr *) + * lfirst(tmp_oper))->args) = lfirst(tmp_lefthand); + * tmp_lefthand = lnext(tmp_lefthand); } + */ + } break; default: /* ignore the others */ @@ -1119,5 +1134,5 @@ HandleViewRule(Query *parsetree, nodeHandleViewRule((Node **) (&(parsetree->groupClause)), rtable, targetlist, rt_index, modified, 0); } -#endif +#endif diff --git a/src/backend/rewrite/rewriteRemove.c b/src/backend/rewrite/rewriteRemove.c index ceb43cba6ae..10cce0262bd 100644 --- a/src/backend/rewrite/rewriteRemove.c +++ b/src/backend/rewrite/rewriteRemove.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteRemove.c,v 1.23 1999/05/10 00:45:32 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteRemove.c,v 1.24 1999/05/25 16:10:54 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -42,7 +42,7 @@ RewriteGetRuleEventRel(char *rulename) 0, 0, 0); if (!HeapTupleIsValid(htup)) elog(ERROR, "Rule or view '%s' not found", - ((!strncmp(rulename, "_RET", 4))? (rulename+4): rulename)); + ((!strncmp(rulename, "_RET", 4)) ? (rulename + 4) : rulename)); eventrel = ((Form_pg_rewrite) GETSTRUCT(htup))->ev_class; htup = SearchSysCacheTuple(RELOID, PointerGetDatum(eventrel), diff --git a/src/backend/storage/buffer/buf_init.c b/src/backend/storage/buffer/buf_init.c index 13a55f32768..2ee839d8deb 100644 --- a/src/backend/storage/buffer/buf_init.c +++ b/src/backend/storage/buffer/buf_init.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/storage/buffer/buf_init.c,v 1.22 1999/02/22 06:16:50 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/storage/buffer/buf_init.c,v 1.23 1999/05/25 16:10:56 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -61,6 +61,7 @@ BufferBlock BufferBlocks; #ifndef HAS_TEST_AND_SET long *NWaitIOBackendP; + #endif extern IpcSemaphoreId WaitIOSemId; @@ -238,14 +239,14 @@ InitBufferPool(IPCKey key) WaitIOSemId = IpcSemaphoreCreate(IPCKeyGetWaitIOSemaphoreKey(key), 1, IPCProtection, 0, 1, &status); WaitCLSemId = IpcSemaphoreCreate(IPCKeyGetWaitCLSemaphoreKey(key), - 1, IPCProtection, - IpcSemaphoreDefaultStartValue, + 1, IPCProtection, + IpcSemaphoreDefaultStartValue, 1, &status); } #endif PrivateRefCount = (long *) calloc(NBuffers, sizeof(long)); LastRefCount = (long *) calloc(NBuffers, sizeof(long)); - BufferLocks = (bits8*) calloc (NBuffers, sizeof(bits8)); + BufferLocks = (bits8 *) calloc(NBuffers, sizeof(bits8)); CommitInfoNeedsSave = (long *) calloc(NBuffers, sizeof(long)); } diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c index c1040cfc16f..052abe8edef 100644 --- a/src/backend/storage/buffer/bufmgr.c +++ b/src/backend/storage/buffer/bufmgr.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/storage/buffer/bufmgr.c,v 1.51 1999/05/10 00:45:35 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/storage/buffer/bufmgr.c,v 1.52 1999/05/25 16:10:58 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -86,6 +86,7 @@ static void WaitIO(BufferDesc *buf, SPINLOCK spinlock); #ifndef HAS_TEST_AND_SET static void SignalIO(BufferDesc *buf); extern long *NWaitIOBackendP; /* defined in buf_init.c */ + #endif /* HAS_TEST_AND_SET */ static Buffer ReadBufferWithBufferLock(Relation relation, BlockNumber blockNum, @@ -95,7 +96,7 @@ static BufferDesc *BufferAlloc(Relation reln, BlockNumber blockNum, static int FlushBuffer(Buffer buffer, bool release); static void BufferSync(void); static int BufferReplace(BufferDesc *bufHdr, bool bufferLockHeld); -void PrintBufferDescs(void); +void PrintBufferDescs(void); /* not static but used by vacuum only ... */ int BlowawayRelationBuffers(Relation rel, BlockNumber block); @@ -161,7 +162,7 @@ extern int ShowPinTrace; * defined */ /* - * ReadBuffer + * ReadBuffer * */ Buffer @@ -1116,7 +1117,7 @@ WaitIO(BufferDesc *buf, SPINLOCK spinlock) } /* - * SignalIO + * SignalIO */ static void SignalIO(BufferDesc *buf) @@ -1217,7 +1218,7 @@ BufferPoolCheckLeak() BufferDesc *buf = &(BufferDescriptors[i - 1]); elog(NOTICE, - "Buffer Leak: [%03d] (freeNext=%d, freePrev=%d, \ + "Buffer Leak: [%03d] (freeNext=%d, freePrev=%d, \ relname=%s, blockNum=%d, flags=0x%x, refcount=%d %d)", i - 1, buf->freeNext, buf->freePrev, buf->sb_relname, buf->tag.blockNum, buf->flags, @@ -1246,7 +1247,7 @@ FlushBufferPool(int StableMainMemoryFlag) } /* - * BufferGetBlockNumber + * BufferGetBlockNumber * Returns the block number associated with a buffer. * * Note: @@ -1266,7 +1267,7 @@ BufferGetBlockNumber(Buffer buffer) #ifdef NOT_USED /* - * BufferGetRelation + * BufferGetRelation * Returns the relation desciptor associated with a buffer. * * Note: @@ -1299,6 +1300,7 @@ BufferGetRelation(Buffer buffer) return relation; } + #endif /* @@ -1363,7 +1365,7 @@ BufferReplace(BufferDesc *bufHdr, bool bufferLockHeld) } /* - * RelationGetNumberOfBlocks + * RelationGetNumberOfBlocks * Returns the buffer descriptor associated with a page in a relation. * * Note: @@ -1375,7 +1377,7 @@ BlockNumber RelationGetNumberOfBlocks(Relation relation) { return ((relation->rd_myxactonly) ? relation->rd_nblocks : - smgrnblocks(DEFAULT_SMGR, relation)); + smgrnblocks(DEFAULT_SMGR, relation)); } /* --------------------------------------------------------------------- @@ -1941,8 +1943,8 @@ UnlockBuffers() { if (BufferLocks[i] == 0) continue; - - Assert(BufferIsValid(i+1)); + + Assert(BufferIsValid(i + 1)); buf = &(BufferDescriptors[i]); #ifdef HAS_TEST_AND_SET @@ -1976,7 +1978,7 @@ UnlockBuffers() } void -LockBuffer (Buffer buffer, int mode) +LockBuffer(Buffer buffer, int mode) { BufferDesc *buf; @@ -1984,31 +1986,31 @@ LockBuffer (Buffer buffer, int mode) if (BufferIsLocal(buffer)) return; - buf = &(BufferDescriptors[buffer-1]); + buf = &(BufferDescriptors[buffer - 1]); #ifdef HAS_TEST_AND_SET - S_LOCK(&(buf->cntx_lock)); + S_LOCK(&(buf->cntx_lock)); #else - IpcSemaphoreLock(WaitCLSemId, 0, IpcExclusiveLock); + IpcSemaphoreLock(WaitCLSemId, 0, IpcExclusiveLock); #endif if (mode == BUFFER_LOCK_UNLOCK) { - if (BufferLocks[buffer-1] & BL_R_LOCK) + if (BufferLocks[buffer - 1] & BL_R_LOCK) { Assert(buf->r_locks > 0); Assert(!(buf->w_lock)); - Assert(!(BufferLocks[buffer-1] & (BL_W_LOCK | BL_RI_LOCK))) - (buf->r_locks)--; - BufferLocks[buffer-1] &= ~BL_R_LOCK; + Assert(!(BufferLocks[buffer - 1] & (BL_W_LOCK | BL_RI_LOCK))) + (buf->r_locks)--; + BufferLocks[buffer - 1] &= ~BL_R_LOCK; } - else if (BufferLocks[buffer-1] & BL_W_LOCK) + else if (BufferLocks[buffer - 1] & BL_W_LOCK) { Assert(buf->w_lock); Assert(buf->r_locks == 0 && !buf->ri_lock); - Assert(!(BufferLocks[buffer-1] & (BL_R_LOCK | BL_RI_LOCK))) - buf->w_lock = false; - BufferLocks[buffer-1] &= ~BL_W_LOCK; + Assert(!(BufferLocks[buffer - 1] & (BL_R_LOCK | BL_RI_LOCK))) + buf->w_lock = false; + BufferLocks[buffer - 1] &= ~BL_W_LOCK; } else elog(ERROR, "UNLockBuffer: buffer %u is not locked", buffer); @@ -2017,7 +2019,7 @@ LockBuffer (Buffer buffer, int mode) { unsigned i = 0; - Assert(!(BufferLocks[buffer-1] & (BL_R_LOCK | BL_W_LOCK | BL_RI_LOCK))); + Assert(!(BufferLocks[buffer - 1] & (BL_R_LOCK | BL_W_LOCK | BL_RI_LOCK))); while (buf->ri_lock || buf->w_lock) { #ifdef HAS_TEST_AND_SET @@ -2027,23 +2029,23 @@ LockBuffer (Buffer buffer, int mode) #else IpcSemaphoreUnlock(WaitCLSemId, 0, IpcExclusiveLock); s_lock_sleep(i++) - IpcSemaphoreLock(WaitCLSemId, 0, IpcExclusiveLock); + IpcSemaphoreLock(WaitCLSemId, 0, IpcExclusiveLock); #endif } (buf->r_locks)++; - BufferLocks[buffer-1] |= BL_R_LOCK; + BufferLocks[buffer - 1] |= BL_R_LOCK; } else if (mode == BUFFER_LOCK_EXCLUSIVE) { unsigned i = 0; - - Assert(!(BufferLocks[buffer-1] & (BL_R_LOCK | BL_W_LOCK | BL_RI_LOCK))); + + Assert(!(BufferLocks[buffer - 1] & (BL_R_LOCK | BL_W_LOCK | BL_RI_LOCK))); while (buf->r_locks > 0 || buf->w_lock) { if (buf->r_locks > 3) { - if (!(BufferLocks[buffer-1] & BL_RI_LOCK)) - BufferLocks[buffer-1] |= BL_RI_LOCK; + if (!(BufferLocks[buffer - 1] & BL_RI_LOCK)) + BufferLocks[buffer - 1] |= BL_RI_LOCK; buf->ri_lock = true; } #ifdef HAS_TEST_AND_SET @@ -2053,24 +2055,24 @@ LockBuffer (Buffer buffer, int mode) #else IpcSemaphoreUnlock(WaitCLSemId, 0, IpcExclusiveLock); s_lock_sleep(i++) - IpcSemaphoreLock(WaitCLSemId, 0, IpcExclusiveLock); + IpcSemaphoreLock(WaitCLSemId, 0, IpcExclusiveLock); #endif } buf->w_lock = true; - BufferLocks[buffer-1] |= BL_W_LOCK; - if (BufferLocks[buffer-1] & BL_RI_LOCK) + BufferLocks[buffer - 1] |= BL_W_LOCK; + if (BufferLocks[buffer - 1] & BL_RI_LOCK) { buf->ri_lock = false; - BufferLocks[buffer-1] &= ~BL_RI_LOCK; + BufferLocks[buffer - 1] &= ~BL_RI_LOCK; } } else elog(ERROR, "LockBuffer: unknown lock mode %d", mode); #ifdef HAS_TEST_AND_SET - S_UNLOCK(&(buf->cntx_lock)); + S_UNLOCK(&(buf->cntx_lock)); #else - IpcSemaphoreUnlock(WaitCLSemId, 0, IpcExclusiveLock); + IpcSemaphoreUnlock(WaitCLSemId, 0, IpcExclusiveLock); #endif } diff --git a/src/backend/storage/buffer/freelist.c b/src/backend/storage/buffer/freelist.c index ba2026ae37c..2b007b85e08 100644 --- a/src/backend/storage/buffer/freelist.c +++ b/src/backend/storage/buffer/freelist.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/storage/buffer/freelist.c,v 1.14 1999/02/13 23:17:59 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/storage/buffer/freelist.c,v 1.15 1999/05/25 16:10:59 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -55,7 +55,7 @@ extern SPINLOCK BufMgrLock; /* - * AddBufferToFreelist + * AddBufferToFreelist * * In theory, this is the only routine that needs to be changed * if the buffer replacement strategy changes. Just change diff --git a/src/backend/storage/buffer/s_lock.c b/src/backend/storage/buffer/s_lock.c index 788d67dae55..4dd30080125 100644 --- a/src/backend/storage/buffer/s_lock.c +++ b/src/backend/storage/buffer/s_lock.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/storage/buffer/Attic/s_lock.c,v 1.18 1999/03/14 16:03:00 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/storage/buffer/Attic/s_lock.c,v 1.19 1999/05/25 16:11:00 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -100,7 +100,8 @@ s_lock(volatile slock_t *lock, const char *file, const int line) #if defined(__m68k__) static void -tas_dummy() /* really means: extern int tas(slock_t **lock); */ + tas_dummy() /* really means: extern int tas(slock_t + * **lock); */ { __asm__(" \n\ .global _tas \n\ @@ -163,7 +164,8 @@ fail: \n\ j $31 \n\ "); } -#endif /* __mips */ + +#endif /* __mips */ #else /* defined(__GNUC__) */ /*************************************************************************** diff --git a/src/backend/storage/file/fd.c b/src/backend/storage/file/fd.c index 0cb04607562..eade2f1c642 100644 --- a/src/backend/storage/file/fd.c +++ b/src/backend/storage/file/fd.c @@ -6,7 +6,7 @@ * Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $Id: fd.c,v 1.39 1999/05/09 00:52:07 tgl Exp $ + * $Id: fd.c,v 1.40 1999/05/25 16:11:03 momjian Exp $ * * NOTES: * @@ -103,11 +103,11 @@ typedef struct vfd unsigned short fdstate; /* bitflags for VFD's state */ /* these are the assigned bits in fdstate: */ -#define FD_DIRTY (1 << 0) /* written to, but not yet fsync'd */ -#define FD_TEMPORARY (1 << 1) /* should be unlinked when closed */ +#define FD_DIRTY (1 << 0)/* written to, but not yet fsync'd */ +#define FD_TEMPORARY (1 << 1)/* should be unlinked when closed */ File nextFree; /* link to next free VFD, if in freelist */ - File lruMoreRecently; /* doubly linked recency-of-use list */ + File lruMoreRecently;/* doubly linked recency-of-use list */ File lruLessRecently; long seekPos; /* current logical file position */ char *fileName; /* name of file, or NULL for unused VFD */ @@ -118,7 +118,7 @@ typedef struct vfd /* * Virtual File Descriptor array pointer and size. This grows as - * needed. 'File' values are indexes into this array. + * needed. 'File' values are indexes into this array. * Note that VfdCache[0] is not a usable VFD, just a list header. */ static Vfd *VfdCache; @@ -139,7 +139,7 @@ static int nfile = 0; #define MAX_ALLOCATED_FILES 32 static int numAllocatedFiles = 0; -static FILE * allocatedFiles[MAX_ALLOCATED_FILES]; +static FILE *allocatedFiles[MAX_ALLOCATED_FILES]; /* * Number of temporary files opened during the current transaction; @@ -348,7 +348,7 @@ LruInsert(File file) if (FileIsNotOpen(file)) { - while (nfile+numAllocatedFiles >= pg_nofile()) + while (nfile + numAllocatedFiles >= pg_nofile()) ReleaseLruFile(); /* @@ -434,12 +434,13 @@ AllocateVfd() if (VfdCache[0].nextFree == 0) { + /* * The free list is empty so it is time to increase the size of * the array. We choose to double it each time this happens. * However, there's not much point in starting *real* small. */ - Size newCacheSize = SizeVfdCache * 2; + Size newCacheSize = SizeVfdCache * 2; if (newCacheSize < 32) newCacheSize = 32; @@ -532,8 +533,9 @@ FileAccess(File file) file, VfdCache[file].fileName)); /* - * Is the file open? If not, open it and put it at the head of the LRU - * ring (possibly closing the least recently used file to get an FD). + * Is the file open? If not, open it and put it at the head of the + * LRU ring (possibly closing the least recently used file to get an + * FD). */ if (FileIsNotOpen(file)) @@ -589,7 +591,7 @@ fileNameOpenFile(FileName fileName, file = AllocateVfd(); vfdP = &VfdCache[file]; - while (nfile+numAllocatedFiles >= pg_nofile()) + while (nfile + numAllocatedFiles >= pg_nofile()) ReleaseLruFile(); tryAgain: @@ -659,10 +661,13 @@ PathNameOpenFile(FileName fileName, int fileFlags, int fileMode) File OpenTemporaryFile(void) { - char tempfilename[64]; - File file; + char tempfilename[64]; + File file; - /* Generate a tempfile name that's unique within the current transaction */ + /* + * Generate a tempfile name that's unique within the current + * transaction + */ snprintf(tempfilename, sizeof(tempfilename), "pg_temp%d.%ld", (int) getpid(), tempFileCounter++); @@ -723,9 +728,7 @@ FileClose(File file) * Delete the file if it was temporary */ if (VfdCache[file].fdstate & FD_TEMPORARY) - { unlink(VfdCache[file].fileName); - } /* * Return the Vfd slot to the free list @@ -817,9 +820,7 @@ FileSeek(File file, long offset, int whence) } } else - { VfdCache[file].seekPos = lseek(VfdCache[file].fd, offset, whence); - } return VfdCache[file].seekPos; } @@ -893,7 +894,7 @@ FileNameUnlink(char *filename) /* * Routines that want to use stdio (ie, FILE*) should use AllocateFile * rather than plain fopen(). This lets fd.c deal with freeing FDs if - * necessary to open the file. When done, call FreeFile rather than fclose. + * necessary to open the file. When done, call FreeFile rather than fclose. * * Note that files that will be open for any significant length of time * should NOT be handled this way, since they cannot share kernel file @@ -929,21 +930,19 @@ TryAgain: } } else - { allocatedFiles[numAllocatedFiles++] = file; - } return file; } void FreeFile(FILE *file) { - int i; + int i; DO_DB(elog(DEBUG, "FreeFile: Allocated %d.", numAllocatedFiles)); /* Remove file from list of allocated files, if it's present */ - for (i = numAllocatedFiles; --i >= 0; ) + for (i = numAllocatedFiles; --i >= 0;) { if (allocatedFiles[i] == file) { @@ -971,7 +970,7 @@ closeAllVfds() if (SizeVfdCache > 0) { - Assert(FileIsNotOpen(0)); /* Make sure ring not corrupted */ + Assert(FileIsNotOpen(0)); /* Make sure ring not corrupted */ for (i = 1; i < SizeVfdCache; i++) { if (!FileIsNotOpen(i)) @@ -995,7 +994,7 @@ AtEOXact_Files(void) if (SizeVfdCache > 0) { - Assert(FileIsNotOpen(0)); /* Make sure ring not corrupted */ + Assert(FileIsNotOpen(0)); /* Make sure ring not corrupted */ for (i = 1; i < SizeVfdCache; i++) { if ((VfdCache[i].fdstate & FD_TEMPORARY) && @@ -1005,12 +1004,11 @@ AtEOXact_Files(void) } while (numAllocatedFiles > 0) - { FreeFile(allocatedFiles[0]); - } - /* Reset the tempfile name counter to 0; not really necessary, - * but helps keep the names from growing unreasonably long. + /* + * Reset the tempfile name counter to 0; not really necessary, but + * helps keep the names from growing unreasonably long. */ tempFileCounter = 0; } @@ -1018,7 +1016,7 @@ AtEOXact_Files(void) /* * Operations on BufFiles --- a very incomplete emulation of stdio - * atop virtual Files. Currently, we only support the buffered-I/O + * atop virtual Files. Currently, we only support the buffered-I/O * aspect of stdio: a read or write of the low-level File occurs only * when the buffer is filled or emptied. This is an even bigger win * for virtual Files than ordinary kernel files, since reducing the @@ -1032,12 +1030,13 @@ AtEOXact_Files(void) * by elog(ERROR). */ -struct BufFile { - File file; /* the underlying virtual File */ - bool dirty; /* does buffer need to be written? */ - int pos; /* next read/write position in buffer */ - int nbytes; /* total # of valid bytes in buffer */ - char buffer[BLCKSZ]; +struct BufFile +{ + File file; /* the underlying virtual File */ + bool dirty; /* does buffer need to be written? */ + int pos; /* next read/write position in buffer */ + int nbytes; /* total # of valid bytes in buffer */ + char buffer[BLCKSZ]; }; @@ -1046,10 +1045,10 @@ struct BufFile { * * This is comparable to fdopen() in stdio. */ -BufFile * +BufFile * BufFileCreate(File file) { - BufFile *bfile = (BufFile *) palloc(sizeof(BufFile)); + BufFile *bfile = (BufFile *) palloc(sizeof(BufFile)); bfile->file = file; bfile->dirty = false; @@ -1065,7 +1064,7 @@ BufFileCreate(File file) * Like fclose(), this also implicitly FileCloses the underlying File. */ void -BufFileClose(BufFile *file) +BufFileClose(BufFile * file) { /* flush any unwritten data */ BufFileFlush(file); @@ -1080,10 +1079,10 @@ BufFileClose(BufFile *file) * Like fread() except we assume 1-byte element size. */ size_t -BufFileRead(BufFile *file, void *ptr, size_t size) +BufFileRead(BufFile * file, void *ptr, size_t size) { - size_t nread = 0; - size_t nthistime; + size_t nread = 0; + size_t nthistime; if (file->dirty) { @@ -1126,10 +1125,10 @@ BufFileRead(BufFile *file, void *ptr, size_t size) * Like fwrite() except we assume 1-byte element size. */ size_t -BufFileWrite(BufFile *file, void *ptr, size_t size) +BufFileWrite(BufFile * file, void *ptr, size_t size) { - size_t nwritten = 0; - size_t nthistime; + size_t nwritten = 0; + size_t nthistime; while (size > 0) { @@ -1170,7 +1169,7 @@ BufFileWrite(BufFile *file, void *ptr, size_t size) * Like fflush() */ int -BufFileFlush(BufFile *file) +BufFileFlush(BufFile * file) { if (file->dirty) { @@ -1188,7 +1187,7 @@ BufFileFlush(BufFile *file) * the new file offset (or -1 in case of error). */ long -BufFileSeek(BufFile *file, long offset, int whence) +BufFileSeek(BufFile * file, long offset, int whence) { if (BufFileFlush(file) < 0) return -1L; diff --git a/src/backend/storage/ipc/ipc.c b/src/backend/storage/ipc/ipc.c index 62a38e14aae..b9ec1d171f5 100644 --- a/src/backend/storage/ipc/ipc.c +++ b/src/backend/storage/ipc/ipc.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/storage/ipc/ipc.c,v 1.36 1999/02/21 01:41:44 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/storage/ipc/ipc.c,v 1.37 1999/05/25 16:11:07 momjian Exp $ * * NOTES * @@ -680,7 +680,7 @@ struct ipcdummy SLock slocks[MAX_SPINS + 1]; }; -#define SLOCKMEMORYSIZE sizeof(struct ipcdummy) +#define SLOCKMEMORYSIZE sizeof(struct ipcdummy) void CreateAndInitSLockMemory(IPCKey key) @@ -747,4 +747,5 @@ IpcConfigTip(void) fprintf(stderr, "shared memory or System V IPC semaphore configuration.\n"); fprintf(stderr, "See the FAQ for more detailed information\n"); } + #endif diff --git a/src/backend/storage/ipc/ipci.c b/src/backend/storage/ipc/ipci.c index e7d6e702bf2..6fedbcf85af 100644 --- a/src/backend/storage/ipc/ipci.c +++ b/src/backend/storage/ipc/ipci.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/storage/ipc/ipci.c,v 1.23 1999/03/06 21:17:41 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/storage/ipc/ipci.c,v 1.24 1999/05/25 16:11:09 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -25,7 +25,7 @@ #include "miscadmin.h" /* for DebugLvl */ /* - * SystemPortAddressCreateMemoryKey + * SystemPortAddressCreateMemoryKey * Returns a memory key given a port address. */ IPCKey @@ -37,7 +37,7 @@ SystemPortAddressCreateIPCKey(SystemPortAddress address) } /* - * CreateSharedMemoryAndSemaphores + * CreateSharedMemoryAndSemaphores * Creates and initializes shared memory and semaphores. */ /************************************************** @@ -75,8 +75,8 @@ CreateSharedMemoryAndSemaphores(IPCKey key, int maxBackends) /* * Size of the primary shared-memory block is estimated via - * moderately-accurate estimates for the big hogs, plus 100K for - * the stuff that's too small to bother with estimating. + * moderately-accurate estimates for the big hogs, plus 100K for the + * stuff that's too small to bother with estimating. */ size = BufferShmemSize() + LockShmemSize(maxBackends); #ifdef STABLE_MEMORY_STORAGE @@ -113,7 +113,7 @@ CreateSharedMemoryAndSemaphores(IPCKey key, int maxBackends) /* - * AttachSharedMemoryAndSemaphores + * AttachSharedMemoryAndSemaphores * Attachs existant shared memory and semaphores. */ void diff --git a/src/backend/storage/ipc/shmem.c b/src/backend/storage/ipc/shmem.c index 421cd399c64..eafe53b0bb1 100644 --- a/src/backend/storage/ipc/shmem.c +++ b/src/backend/storage/ipc/shmem.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/storage/ipc/shmem.c,v 1.39 1999/04/02 04:51:03 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/storage/ipc/shmem.c,v 1.40 1999/05/25 16:11:11 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -106,7 +106,7 @@ ShmemIndexReset(void) } /* - * CreateSharedRegion() + * CreateSharedRegion() * * This routine is called once by the postmaster to * initialize the shared buffer pool. Assume there is @@ -348,10 +348,10 @@ ShmemInitHash(char *name, /* table string name for shmem index */ long *location; /* - * Hash tables allocated in shared memory have a fixed directory; - * it can't grow or other backends wouldn't be able to find it. - * The segbase is for calculating pointer values. - * The shared memory allocator must be specified too. + * Hash tables allocated in shared memory have a fixed directory; it + * can't grow or other backends wouldn't be able to find it. The + * segbase is for calculating pointer values. The shared memory + * allocator must be specified too. */ infoP->dsize = infoP->max_dsize = DEF_DIRSIZE; infoP->segbase = (long *) ShmemBase; @@ -360,7 +360,7 @@ ShmemInitHash(char *name, /* table string name for shmem index */ /* look it up in the shmem index */ location = ShmemInitStruct(name, - sizeof(HHDR) + DEF_DIRSIZE * sizeof(SEG_OFFSET), + sizeof(HHDR) + DEF_DIRSIZE * sizeof(SEG_OFFSET), &found); /* @@ -379,7 +379,7 @@ ShmemInitHash(char *name, /* table string name for shmem index */ /* Now provide the header and directory pointers */ infoP->hctl = (long *) location; - infoP->dir = (long *) (((char*) location) + sizeof(HHDR)); + infoP->dir = (long *) (((char *) location) + sizeof(HHDR)); return hash_create(init_size, infoP, hash_flags); } @@ -636,13 +636,13 @@ TransactionIdIsInProgress(TransactionId xid) Snapshot GetSnapshotData(bool serializable) { - Snapshot snapshot = (Snapshot) malloc(sizeof(SnapshotData)); - ShmemIndexEnt *result; - PROC *proc; - TransactionId cid = GetCurrentTransactionId(); - TransactionId xid; - uint32 count = 0; - uint32 have = 32; + Snapshot snapshot = (Snapshot) malloc(sizeof(SnapshotData)); + ShmemIndexEnt *result; + PROC *proc; + TransactionId cid = GetCurrentTransactionId(); + TransactionId xid; + uint32 count = 0; + uint32 have = 32; Assert(ShmemIndex); @@ -670,7 +670,7 @@ GetSnapshotData(bool serializable) strncmp(result->key, "PID ", 4) != 0) continue; proc = (PROC *) MAKE_PTR(result->location); - xid = proc->xid; /* we don't use spin-locking in xact.c ! */ + xid = proc->xid; /* we don't use spin-locking in xact.c ! */ if (proc == MyProc || xid < FirstTransactionId) continue; if (xid < snapshot->xmin) @@ -697,18 +697,18 @@ GetSnapshotData(bool serializable) /* * GetXmaxRecent -- returns oldest transaction that was running - * when all current transaction was started. - * It's used by vacuum to decide what deleted - * tuples must be preserved in a table. + * when all current transaction was started. + * It's used by vacuum to decide what deleted + * tuples must be preserved in a table. * * And yet another strange func for this place... - vadim 03/18/99 */ void GetXmaxRecent(TransactionId *XmaxRecent) { - ShmemIndexEnt *result; - PROC *proc; - TransactionId xmin; + ShmemIndexEnt *result; + PROC *proc; + TransactionId xmin; Assert(ShmemIndex); @@ -728,7 +728,7 @@ GetXmaxRecent(TransactionId *XmaxRecent) strncmp(result->key, "PID ", 4) != 0) continue; proc = (PROC *) MAKE_PTR(result->location); - xmin = proc->xmin; /* we don't use spin-locking in xact.c ! */ + xmin = proc->xmin; /* we don't use spin-locking in xact.c ! */ if (proc == MyProc || xmin < FirstTransactionId) continue; if (xmin < *XmaxRecent) diff --git a/src/backend/storage/ipc/sinval.c b/src/backend/storage/ipc/sinval.c index ec271bd963b..3617fa345d7 100644 --- a/src/backend/storage/ipc/sinval.c +++ b/src/backend/storage/ipc/sinval.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/storage/ipc/sinval.c,v 1.13 1999/02/13 23:18:14 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/storage/ipc/sinval.c,v 1.14 1999/05/25 16:11:12 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -87,7 +87,7 @@ InitSharedInvalidationState(void) } /* - * RegisterSharedInvalid + * RegisterSharedInvalid * Returns a new local cache invalidation state containing a new entry. * * Note: @@ -147,7 +147,7 @@ RegisterSharedInvalid(int cacheId, /* XXX */ } /* - * InvalidateSharedInvalid + * InvalidateSharedInvalid * Processes all entries in a shared cache invalidation state. */ /****************************************************************************/ diff --git a/src/backend/storage/ipc/sinvaladt.c b/src/backend/storage/ipc/sinvaladt.c index 4e5ab146bb5..27393c63ef6 100644 --- a/src/backend/storage/ipc/sinvaladt.c +++ b/src/backend/storage/ipc/sinvaladt.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/storage/ipc/sinvaladt.c,v 1.18 1999/05/10 00:45:37 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/storage/ipc/sinvaladt.c,v 1.19 1999/05/25 16:11:13 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -144,9 +144,7 @@ SIAssignBackendId(SISeg *segInOutP, BackendTag backendTag) for (index++; index < MAXBACKENDS; index++) { if (segInOutP->procState[index].tag == backendTag) - { elog(FATAL, "SIAssignBackendId: tag %d found twice", backendTag); - } } Assert(stateP); @@ -187,7 +185,7 @@ SISetDeadProcess(SISeg *segP, int backendId) } /* - * CleanupInvalidationState + * CleanupInvalidationState * Note: * This is a temporary hack. ExitBackend should call this instead * of exit (via on_shmem_exit). diff --git a/src/backend/storage/large_object/inv_api.c b/src/backend/storage/large_object/inv_api.c index 79df2912b9b..57d03568c7d 100644 --- a/src/backend/storage/large_object/inv_api.c +++ b/src/backend/storage/large_object/inv_api.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/storage/large_object/inv_api.c,v 1.52 1999/05/10 00:45:41 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/storage/large_object/inv_api.c,v 1.53 1999/05/25 16:11:15 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -131,7 +131,7 @@ inv_create(int flags) if (RelnameFindRelid(indname) != InvalidOid) { elog(ERROR, - "internal error: %s already exists -- cannot create large obj", + "internal error: %s already exists -- cannot create large obj", indname); } @@ -437,13 +437,13 @@ inv_tell(LargeObjectDesc *obj_desc) int inv_read(LargeObjectDesc *obj_desc, char *buf, int nbytes) { - HeapTupleData tuple; - int nread; - int off; - int ncopy; - Datum d; + HeapTupleData tuple; + int nread; + int off; + int ncopy; + Datum d; struct varlena *fsblock; - bool isNull; + bool isNull; Assert(PointerIsValid(obj_desc)); Assert(buf != NULL); @@ -499,9 +499,9 @@ inv_read(LargeObjectDesc *obj_desc, char *buf, int nbytes) int inv_write(LargeObjectDesc *obj_desc, char *buf, int nbytes) { - HeapTupleData tuple; - int nwritten; - int tuplen; + HeapTupleData tuple; + int nwritten; + int tuplen; Assert(PointerIsValid(obj_desc)); Assert(buf != NULL); @@ -549,10 +549,12 @@ inv_write(LargeObjectDesc *obj_desc, char *buf, int nbytes) } else tuplen = inv_wrold(obj_desc, buf, nbytes - nwritten, &tuple, buffer); - /* inv_wrold() has already issued WriteBuffer() - which has decremented local reference counter - (LocalRefCount). So we should not call - ReleaseBuffer() here. -- Tatsuo 99/2/4 */ + + /* + * inv_wrold() has already issued WriteBuffer() which has + * decremented local reference counter (LocalRefCount). So we + * should not call ReleaseBuffer() here. -- Tatsuo 99/2/4 + */ } /* move pointers past the amount we just wrote */ @@ -626,25 +628,26 @@ inv_fetchtup(LargeObjectDesc *obj_desc, HeapTuple tuple, Buffer *buffer) || obj_desc->offset < obj_desc->lowbyte || !ItemPointerIsValid(&(obj_desc->htid))) { - ScanKeyData skey; + ScanKeyData skey; ScanKeyEntryInitialize(&skey, 0x0, 1, F_INT4GE, - Int32GetDatum(obj_desc->offset)); + Int32GetDatum(obj_desc->offset)); /* initialize scan key if not done */ if (obj_desc->iscan == (IndexScanDesc) NULL) { + /* * As scan index may be prematurely closed (on commit), we * must use object current offset (was 0) to reinitialize the * entry [ PA ]. */ obj_desc->iscan = index_beginscan(obj_desc->index_r, - (bool) 0, (uint16) 1, - &skey); - } else { - index_rescan(obj_desc->iscan, false, &skey); - } + (bool) 0, (uint16) 1, + &skey); + } + else + index_rescan(obj_desc->iscan, false, &skey); do { res = index_getnext(obj_desc->iscan, ForwardScanDirection); @@ -671,15 +674,14 @@ inv_fetchtup(LargeObjectDesc *obj_desc, HeapTuple tuple, Buffer *buffer) } while (tuple->t_data == NULL); /* remember this tid -- we may need it for later reads/writes */ - ItemPointerCopy(&(tuple->t_self), &obj_desc->htid); + ItemPointerCopy(&(tuple->t_self), &obj_desc->htid); } else { tuple->t_self = obj_desc->htid; heap_fetch(obj_desc->heap_r, SnapshotNow, tuple, buffer); - if (tuple->t_data == NULL) { + if (tuple->t_data == NULL) elog(ERROR, "inv_fetchtup: heap_fetch failed"); - } } /* @@ -751,11 +753,13 @@ inv_wrnew(LargeObjectDesc *obj_desc, char *buf, int nbytes) nblocks = RelationGetNumberOfBlocks(hr); - if (nblocks > 0) { + if (nblocks > 0) + { buffer = ReadBuffer(hr, nblocks - 1); page = BufferGetPage(buffer); } - else { + else + { buffer = ReadBuffer(hr, P_NEW); page = BufferGetPage(buffer); PageInit(page, BufferGetPageSize(buffer), 0); @@ -794,7 +798,7 @@ inv_wrnew(LargeObjectDesc *obj_desc, char *buf, int nbytes) ntup = inv_newtuple(obj_desc, buffer, page, buf, nwritten); inv_indextup(obj_desc, ntup); - pfree (ntup); + pfree(ntup); /* new tuple is inserted */ WriteBuffer(buffer); @@ -874,11 +878,13 @@ inv_wrold(LargeObjectDesc *obj_desc, nblocks = RelationGetNumberOfBlocks(hr); - if (nblocks > 0) { + if (nblocks > 0) + { newbuf = ReadBuffer(hr, nblocks - 1); newpage = BufferGetPage(newbuf); } - else { + else + { newbuf = ReadBuffer(hr, P_NEW); newpage = BufferGetPage(newbuf); PageInit(newpage, BufferGetPageSize(newbuf), 0); @@ -966,7 +972,7 @@ inv_wrold(LargeObjectDesc *obj_desc, /* index the new tuple */ inv_indextup(obj_desc, ntup); - pfree (ntup); + pfree(ntup); /* * move the scandesc forward so we don't reread the newly inserted @@ -1002,7 +1008,7 @@ inv_newtuple(LargeObjectDesc *obj_desc, char *dbuf, int nwrite) { - HeapTuple ntup = (HeapTuple) palloc (sizeof(HeapTupleData)); + HeapTuple ntup = (HeapTuple) palloc(sizeof(HeapTupleData)); PageHeader ph; int tupsize; int hoff; @@ -1227,7 +1233,7 @@ _inv_getsize(Relation hreln, TupleDesc hdesc, Relation ireln) { IndexScanDesc iscan; RetrieveIndexResult res; - HeapTupleData tuple; + HeapTupleData tuple; Datum d; long size; bool isNull; diff --git a/src/backend/storage/lmgr/lmgr.c b/src/backend/storage/lmgr/lmgr.c index 7eb51207c7e..3cebcb9ba0a 100644 --- a/src/backend/storage/lmgr/lmgr.c +++ b/src/backend/storage/lmgr/lmgr.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/storage/lmgr/lmgr.c,v 1.23 1999/05/07 01:23:02 vadim Exp $ + * $Header: /cvsroot/pgsql/src/backend/storage/lmgr/lmgr.c,v 1.24 1999/05/25 16:11:20 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -76,7 +76,7 @@ static MASK LockConflicts[] = { /* AccessExclusiveLock */ (1 << ExclusiveLock) | (1 << ShareRowExclusiveLock) | (1 << ShareLock) | - (1 << RowExclusiveLock) | (1 << RowShareLock) | (1 << AccessExclusiveLock) | + (1 << RowExclusiveLock) | (1 << RowShareLock) | (1 << AccessExclusiveLock) | (1 << AccessShareLock), }; @@ -92,7 +92,7 @@ static int LockPrios[] = { 7 }; -LOCKMETHOD LockTableId = (LOCKMETHOD) NULL; +LOCKMETHOD LockTableId = (LOCKMETHOD) NULL; LOCKMETHOD LongTermTableId = (LOCKMETHOD) NULL; /* @@ -104,12 +104,14 @@ InitLockTable() int lockmethod; lockmethod = LockMethodTableInit("LockTable", - LockConflicts, LockPrios, MAX_LOCKMODES - 1); + LockConflicts, LockPrios, MAX_LOCKMODES - 1); LockTableId = lockmethod; + if (!(LockTableId)) elog(ERROR, "InitLockTable: couldnt initialize lock table"); #ifdef USER_LOCKS + /* * Allocate another tableId for long-term locks */ @@ -125,7 +127,7 @@ InitLockTable() } /* - * RelationInitLockInfo + * RelationInitLockInfo * Initializes the lock information in a relation descriptor. */ void @@ -322,10 +324,10 @@ XactLockTableWait(TransactionId xid) LockAcquire(LockTableId, &tag, ShareLock); TransactionIdFlushCache(); + /* - * Transaction was committed/aborted/crashed - - * we have to update pg_log if transaction is still - * marked as running. + * Transaction was committed/aborted/crashed - we have to update + * pg_log if transaction is still marked as running. */ if (!TransactionIdDidCommit(xid) && !TransactionIdDidAbort(xid)) TransactionIdAbort(xid); diff --git a/src/backend/storage/lmgr/lock.c b/src/backend/storage/lmgr/lock.c index 09e85e5e134..9860abca7e4 100644 --- a/src/backend/storage/lmgr/lock.c +++ b/src/backend/storage/lmgr/lock.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/storage/lmgr/lock.c,v 1.52 1999/05/13 15:55:44 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/storage/lmgr/lock.c,v 1.53 1999/05/25 16:11:21 momjian Exp $ * * NOTES * Outside modules can create a lock table and acquire/release @@ -50,7 +50,7 @@ #include "utils/trace.h" #include "utils/ps_status.h" -static int WaitOnLock(LOCKMETHOD lockmethod, LOCK *lock, LOCKMODE lockmode); +static int WaitOnLock(LOCKMETHOD lockmethod, LOCK *lock, LOCKMODE lockmode); /* * lockDebugRelation can be used to trace unconditionally a single relation, @@ -658,22 +658,22 @@ LockAcquire(LOCKMETHOD lockmethod, LOCKTAG *locktag, LOCKMODE lockmode) */ if (lockMethodTable->ctl->conflictTab[lockmode] & lock->waitMask) { - int i = 1; + int i = 1; /* - * If I don't hold locks or my locks don't conflict - * with waiters then force to sleep. + * If I don't hold locks or my locks don't conflict with waiters + * then force to sleep. */ if (result->nHolding > 0) { - for ( ; i <= lockMethodTable->ctl->numLockModes; i++) + for (; i <= lockMethodTable->ctl->numLockModes; i++) { - if (result->holders[i] > 0 && + if (result->holders[i] > 0 && lockMethodTable->ctl->conflictTab[i] & lock->waitMask) - break; /* conflict */ + break; /* conflict */ } } - + if (result->nHolding == 0 || i > lockMethodTable->ctl->numLockModes) { XID_PRINT("LockAcquire: higher priority proc waiting", @@ -718,17 +718,18 @@ LockAcquire(LOCKMETHOD lockmethod, LOCKTAG *locktag, LOCKMODE lockmode) return FALSE; } #endif + /* * Construct bitmask of locks we hold before going to sleep. */ MyProc->holdLock = 0; if (result->nHolding > 0) { - int i, - tmpMask = 2; + int i, + tmpMask = 2; - for (i = 1; i <= lockMethodTable->ctl->numLockModes; - i++, tmpMask <<= 1) + for (i = 1; i <= lockMethodTable->ctl->numLockModes; + i++, tmpMask <<= 1) { if (result->holders[i] > 0) MyProc->holdLock |= tmpMask; @@ -1166,14 +1167,15 @@ LockRelease(LOCKMETHOD lockmethod, LOCKTAG *locktag, LOCKMODE lockmode) wakeupNeeded = false; else #endif - /* - * Above is not valid any more (due to MVCC lock modes). - * Actually we should compare activeHolders[lockmode] with - * number of waiters holding lock of this type and try to - * wakeup only if these numbers are equal (and lock released - * conflicts with locks requested by waiters). For the moment - * we only check the last condition. - */ + + /* + * Above is not valid any more (due to MVCC lock modes). Actually + * we should compare activeHolders[lockmode] with number of + * waiters holding lock of this type and try to wakeup only if + * these numbers are equal (and lock released conflicts with locks + * requested by waiters). For the moment we only check the last + * condition. + */ if (lockMethodTable->ctl->conflictTab[lockmode] & lock->waitMask) wakeupNeeded = true; @@ -1238,14 +1240,12 @@ LockRelease(LOCKMETHOD lockmethod, LOCKTAG *locktag, LOCKMODE lockmode) } if (wakeupNeeded) - { ProcLockWakeup(&(lock->waitProcs), lockmethod, lock); - } else { if (((LOCKDEBUG(LOCK_LOCKMETHOD(*(lock))) >= 1) \ - && (lock->tag.relId >= lockDebugOidMin)) \ - || \ + &&(lock->tag.relId >= lockDebugOidMin)) \ + ||\ (lockDebugRelation && (lock->tag.relId == lockDebugRelation))) TPRINTF(TRACE_ALL, "LockRelease: no wakeup needed"); } @@ -1309,7 +1309,7 @@ LockReleaseAll(LOCKMETHOD lockmethod, SHM_QUEUE *lockQueue) for (;;) { - bool wakeupNeeded = false; + bool wakeupNeeded = false; /* * Sometimes the queue appears to be messed up. @@ -1377,7 +1377,7 @@ LockReleaseAll(LOCKMETHOD lockmethod, SHM_QUEUE *lockQueue) goto next_item; } TPRINTF(TRACE_USERLOCKS, - "LockReleaseAll: releasing user lock [%u] [%d,%d,%d]", + "LockReleaseAll: releasing user lock [%u] [%d,%d,%d]", lock->tag.objId.blkno, xidLook->tag.lock, xidLook->tag.pid, xidLook->tag.xid); } @@ -1391,7 +1391,7 @@ LockReleaseAll(LOCKMETHOD lockmethod, SHM_QUEUE *lockQueue) if (xidLook->tag.pid != 0) { TPRINTF(TRACE_LOCKS, - "LockReleaseAll: skiping user lock [%u] [%d,%d,%d]", + "LockReleaseAll: skiping user lock [%u] [%d,%d,%d]", lock->tag.objId.blkno, xidLook->tag.lock, xidLook->tag.pid, xidLook->tag.xid); nleft++; @@ -1415,10 +1415,11 @@ LockReleaseAll(LOCKMETHOD lockmethod, SHM_QUEUE *lockQueue) &&(lock->activeHolders[i] >= 0)); if (!lock->activeHolders[i]) lock->mask &= BITS_OFF[i]; + /* * Read comments in LockRelease */ - if (!wakeupNeeded && xidLook->holders[i] > 0 && + if (!wakeupNeeded && xidLook->holders[i] > 0 && lockMethodTable->ctl->conflictTab[i] & lock->waitMask) wakeupNeeded = true; } @@ -1521,7 +1522,7 @@ LockShmemSize(int maxBackends) int size = 0; size += MAXALIGN(sizeof(PROC_HDR)); /* ProcGlobal */ - size += MAXALIGN(maxBackends * sizeof(PROC)); /* each MyProc */ + size += MAXALIGN(maxBackends * sizeof(PROC)); /* each MyProc */ size += MAXALIGN(maxBackends * sizeof(LOCKMETHODCTL)); /* each * lockMethodTable->ctl */ @@ -1535,8 +1536,9 @@ LockShmemSize(int maxBackends) SHMEM_XIDTAB_KEYSIZE, SHMEM_XIDTAB_DATASIZE); - /* Since the lockHash entry count above is only an estimate, - * add 10% safety margin. + /* + * Since the lockHash entry count above is only an estimate, add 10% + * safety margin. */ size += size / 10; @@ -1569,21 +1571,21 @@ LockingDisabled() bool DeadLockCheck(void *proc, LOCK *findlock) { - XIDLookupEnt *xidLook = NULL; - XIDLookupEnt *tmp = NULL; - PROC *thisProc = (PROC*) proc, - *waitProc; - SHM_QUEUE *lockQueue = &(thisProc->lockQueue); - SHMEM_OFFSET end = MAKE_OFFSET(lockQueue); - LOCK *lock; - PROC_QUEUE *waitQueue; - int i, - j; - bool first_run = (thisProc == MyProc), - done; - - static PROC *checked_procs[MAXBACKENDS]; - static int nprocs; + XIDLookupEnt *xidLook = NULL; + XIDLookupEnt *tmp = NULL; + PROC *thisProc = (PROC *) proc, + *waitProc; + SHM_QUEUE *lockQueue = &(thisProc->lockQueue); + SHMEM_OFFSET end = MAKE_OFFSET(lockQueue); + LOCK *lock; + PROC_QUEUE *waitQueue; + int i, + j; + bool first_run = (thisProc == MyProc), + done; + + static PROC *checked_procs[MAXBACKENDS]; + static int nprocs; /* initialize at start of recursion */ if (first_run) @@ -1606,39 +1608,38 @@ DeadLockCheck(void *proc, LOCK *findlock) LOCK_PRINT("DeadLockCheck", lock, 0); - if (lock->tag.relId == 0) /* user' lock */ + if (lock->tag.relId == 0) /* user' lock */ goto nxtl; /* - * waitLock is always in lockQueue of waiting proc, - * if !first_run then upper caller will handle waitProcs - * queue of waitLock. + * waitLock is always in lockQueue of waiting proc, if !first_run + * then upper caller will handle waitProcs queue of waitLock. */ if (thisProc->waitLock == lock && !first_run) goto nxtl; /* - * If we found proc holding findlock and sleeping on some my - * other lock then we have to check does it block me or - * another waiters. + * If we found proc holding findlock and sleeping on some my other + * lock then we have to check does it block me or another waiters. */ if (lock == findlock && !first_run) { - LOCKMETHODCTL *lockctl = - LockMethodTable[DEFAULT_LOCKMETHOD]->ctl; - int lm; + LOCKMETHODCTL *lockctl = + LockMethodTable[DEFAULT_LOCKMETHOD]->ctl; + int lm; Assert(xidLook->nHolding > 0); for (lm = 1; lm <= lockctl->numLockModes; lm++) { - if (xidLook->holders[lm] > 0 && + if (xidLook->holders[lm] > 0 && lockctl->conflictTab[lm] & findlock->waitMask) return true; } + /* * Else - get the next lock from thisProc's lockQueue */ - goto nxtl; + goto nxtl; } waitQueue = &(lock->waitProcs); @@ -1653,10 +1654,10 @@ DeadLockCheck(void *proc, LOCK *findlock) waitProc = (PROC *) MAKE_PTR(waitProc->links.prev); continue; } - if (lock == findlock) /* first_run also true */ + if (lock == findlock) /* first_run also true */ { - LOCKMETHODCTL *lockctl = - LockMethodTable[DEFAULT_LOCKMETHOD]->ctl; + LOCKMETHODCTL *lockctl = + LockMethodTable[DEFAULT_LOCKMETHOD]->ctl; /* * If me blocked by his holdlock... @@ -1670,17 +1671,19 @@ DeadLockCheck(void *proc, LOCK *findlock) waitProc = (PROC *) MAKE_PTR(waitProc->links.prev); continue; } + /* - * If he isn't blocked by me and we request non-conflicting - * lock modes - no deadlock here because of he isn't - * blocked by me in any sence (explicitle or implicitly). - * Note that we don't do like test if !first_run - * (when thisProc is holder and non-waiter on lock) and so - * we call DeadLockCheck below for every waitProc in - * thisProc->lockQueue, even for waitProc-s un-blocked - * by thisProc. Should we? This could save us some time... + * If he isn't blocked by me and we request + * non-conflicting lock modes - no deadlock here because + * of he isn't blocked by me in any sence (explicitle or + * implicitly). Note that we don't do like test if + * !first_run (when thisProc is holder and non-waiter on + * lock) and so we call DeadLockCheck below for every + * waitProc in thisProc->lockQueue, even for waitProc-s + * un-blocked by thisProc. Should we? This could save us + * some time... */ - if (!(lockctl->conflictTab[waitProc->token] & MyProc->holdLock) && + if (!(lockctl->conflictTab[waitProc->token] & MyProc->holdLock) && !(lockctl->conflictTab[waitProc->token] & (1 << MyProc->token))) { waitProc = (PROC *) MAKE_PTR(waitProc->links.prev); @@ -1689,7 +1692,8 @@ DeadLockCheck(void *proc, LOCK *findlock) } /* - * Look in lockQueue of this waitProc, if didn't do this before. + * Look in lockQueue of this waitProc, if didn't do this + * before. */ for (j = 0; j < nprocs; j++) { @@ -1703,9 +1707,9 @@ DeadLockCheck(void *proc, LOCK *findlock) if (DeadLockCheck(waitProc, findlock)) { - LOCKMETHODCTL *lockctl = - LockMethodTable[DEFAULT_LOCKMETHOD]->ctl; - int holdLock; + LOCKMETHODCTL *lockctl = + LockMethodTable[DEFAULT_LOCKMETHOD]->ctl; + int holdLock; /* * Ok, but is waitProc waiting for me (thisProc) ? @@ -1715,14 +1719,16 @@ DeadLockCheck(void *proc, LOCK *findlock) Assert(first_run); holdLock = thisProc->holdLock; } - else /* should we cache holdLock ? */ + else +/* should we cache holdLock ? */ { - int lm, tmpMask = 2; + int lm, + tmpMask = 2; Assert(xidLook->nHolding > 0); - for (holdLock = 0, lm = 1; - lm <= lockctl->numLockModes; - lm++, tmpMask <<= 1) + for (holdLock = 0, lm = 1; + lm <= lockctl->numLockModes; + lm++, tmpMask <<= 1) { if (xidLook->holders[lm] > 0) holdLock |= tmpMask; @@ -1731,6 +1737,7 @@ DeadLockCheck(void *proc, LOCK *findlock) } if (lockctl->conflictTab[waitProc->token] & holdLock) { + /* * Last attempt to avoid deadlock - try to wakeup * myself. @@ -1751,6 +1758,7 @@ DeadLockCheck(void *proc, LOCK *findlock) } return true; } + /* * Hell! Is he blocked by any (other) holder ? */ @@ -1760,21 +1768,24 @@ DeadLockCheck(void *proc, LOCK *findlock) waitProc->xid, NULL) != STATUS_OK) { + /* * Blocked by others - no deadlock... */ #ifdef DEADLOCK_DEBUG - LOCK_PRINT("DeadLockCheck: blocked by others", - lock, waitProc->token); + LOCK_PRINT("DeadLockCheck: blocked by others", + lock, waitProc->token); #endif waitProc = (PROC *) MAKE_PTR(waitProc->links.prev); continue; } + /* * Well - wakeup this guy! This is the case of - * implicit blocking: thisProc blocked someone who blocked - * waitProc by the fact that he (someone) is already - * waiting for lock (we do this for anti-starving). + * implicit blocking: thisProc blocked someone who + * blocked waitProc by the fact that he/someone is + * already waiting for lock. We do this for + * anti-starving. */ GrantLock(lock, waitProc->token); waitQueue->size--; @@ -1785,7 +1796,7 @@ DeadLockCheck(void *proc, LOCK *findlock) waitProc = (PROC *) MAKE_PTR(waitProc->links.prev); } -nxtl:; +nxtl: ; if (done) break; SHMQueueFirst(&xidLook->queue, (Pointer *) &tmp, &tmp->queue); @@ -1832,7 +1843,7 @@ LockOwners(LOCKMETHOD lockmethod, LOCKTAG *locktag) if (is_user_lock) { TPRINTF(TRACE_USERLOCKS, "LockOwners: user lock tag [%u]", - locktag->objId.blkno;, + locktag->objId.blkno; } #endif @@ -1981,6 +1992,7 @@ LockOwners(LOCKMETHOD lockmethod, LOCKTAG *locktag) return array; } + #endif #ifdef DEADLOCK_DEBUG diff --git a/src/backend/storage/lmgr/multi.c b/src/backend/storage/lmgr/multi.c index 38e2d194d65..e60ba613ee8 100644 --- a/src/backend/storage/lmgr/multi.c +++ b/src/backend/storage/lmgr/multi.c @@ -12,7 +12,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/storage/lmgr/Attic/multi.c,v 1.28 1999/03/28 20:32:25 vadim Exp $ + * $Header: /cvsroot/pgsql/src/backend/storage/lmgr/Attic/multi.c,v 1.29 1999/05/25 16:11:22 momjian Exp $ * * NOTES: * (1) The lock.c module assumes that the caller here is doing @@ -170,6 +170,7 @@ MultiLockTuple(LockInfo lockinfo, ItemPointer tidPtr, LOCKMODE lockmode) tag.tupleId = *tidPtr; return MultiAcquire(MultiTableId, &tag, lockmode, TUPLE_LEVEL); } + #endif /* diff --git a/src/backend/storage/lmgr/proc.c b/src/backend/storage/lmgr/proc.c index 4eb97b8a6a8..3c0b96713ad 100644 --- a/src/backend/storage/lmgr/proc.c +++ b/src/backend/storage/lmgr/proc.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/storage/lmgr/proc.c,v 1.55 1999/05/13 15:55:44 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/storage/lmgr/proc.c,v 1.56 1999/05/25 16:11:23 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -46,7 +46,7 @@ * This is so that we can support more backends. (system-wide semaphore * sets run out pretty fast.) -ay 4/95 * - * $Header: /cvsroot/pgsql/src/backend/storage/lmgr/proc.c,v 1.55 1999/05/13 15:55:44 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/storage/lmgr/proc.c,v 1.56 1999/05/25 16:11:23 momjian Exp $ */ #include <sys/time.h> #include <unistd.h> @@ -150,18 +150,20 @@ InitProcGlobal(IPCKey key, int maxBackends) for (i = 0; i < MAX_PROC_SEMS / PROC_NSEMS_PER_SET; i++) ProcGlobal->freeSemMap[i] = 0; - /* Arrange to delete semas on exit --- set this up now so that - * we will clean up if pre-allocation fails... + /* + * Arrange to delete semas on exit --- set this up now so that we + * will clean up if pre-allocation fails... */ on_shmem_exit(ProcFreeAllSemaphores, NULL); - /* Pre-create the semaphores for the first maxBackends processes, + /* + * Pre-create the semaphores for the first maxBackends processes, * unless we are running as a standalone backend. */ if (key != PrivateIPCKey) { for (i = 0; - i < (maxBackends+PROC_NSEMS_PER_SET-1) / PROC_NSEMS_PER_SET; + i < (maxBackends + PROC_NSEMS_PER_SET - 1) / PROC_NSEMS_PER_SET; i++) { IPCKey semKey = ProcGlobal->currKey + i; @@ -266,10 +268,11 @@ InitProcess(IPCKey key) ProcGetNewSemKeyAndNum(&semKey, &semNum); - /* Note: because of the pre-allocation done in InitProcGlobal, - * this call should always attach to an existing semaphore. - * It will (try to) create a new group of semaphores only if - * the postmaster tries to start more backends than it said it would. + /* + * Note: because of the pre-allocation done in InitProcGlobal, + * this call should always attach to an existing semaphore. It + * will (try to) create a new group of semaphores only if the + * postmaster tries to start more backends than it said it would. */ semId = IpcSemaphoreCreate(semKey, PROC_NSEMS_PER_SET, @@ -489,7 +492,7 @@ ProcQueueInit(PROC_QUEUE *queue) */ int ProcSleep(PROC_QUEUE *waitQueue,/* lock->waitProcs */ - LOCKMETHODCTL *lockctl, + LOCKMETHODCTL * lockctl, int token, /* lockmode */ LOCK *lock) { @@ -534,23 +537,22 @@ ProcSleep(PROC_QUEUE *waitQueue,/* lock->waitProcs */ } /* if he waits for me */ else if (lockctl->conflictTab[proc->token] & MyProc->holdLock) - { break; - } /* if conflicting locks requested */ else if (lockctl->conflictTab[proc->token] & myMask) { + /* - * If I request non self-conflicting lock and there - * are others requesting the same lock just before me - - * stay here. + * If I request non self-conflicting lock and there are others + * requesting the same lock just before me - stay here. */ if (!selfConflict && prevSame) break; } + /* - * Last attempt to don't move any more: if we don't conflict - * with rest waiters in queue. + * Last attempt to don't move any more: if we don't conflict with + * rest waiters in queue. */ else if (!(lockctl->conflictTab[token] & waitMask)) break; @@ -558,7 +560,7 @@ ProcSleep(PROC_QUEUE *waitQueue,/* lock->waitProcs */ prevSame = (proc->token == token); (aheadHolders[proc->token])++; if (aheadHolders[proc->token] == lock->holders[proc->token]) - waitMask &= ~ (1 << proc->token); + waitMask &= ~(1 << proc->token); proc = (PROC *) MAKE_PTR(proc->links.prev); } @@ -885,7 +887,7 @@ ProcGetNewSemKeyAndNum(IPCKey *key, int *semNum) { int i; int32 *freeSemMap = ProcGlobal->freeSemMap; - int32 fullmask = (1 << (PROC_NSEMS_PER_SET+1)) - 1; + int32 fullmask = (1 << (PROC_NSEMS_PER_SET + 1)) - 1; /* * we hold ProcStructLock when entering this routine. We scan through @@ -906,8 +908,8 @@ ProcGetNewSemKeyAndNum(IPCKey *key, int *semNum) { /* - * a free semaphore found. Mark it as allocated. - * Also set the bit indicating whole set is allocated. + * a free semaphore found. Mark it as allocated. Also set + * the bit indicating whole set is allocated. */ freeSemMap[i] |= mask + (1 << PROC_NSEMS_PER_SET); @@ -938,9 +940,10 @@ ProcFreeSem(IpcSemaphoreKey semKey, int semNum) mask = ~(1 << semNum); freeSemMap[i] &= mask; - /* Formerly we'd release a semaphore set if it was now completely unused, - * but now we keep the semaphores to ensure we won't run out when - * starting new backends --- cf. InitProcGlobal. Note that the + /* + * Formerly we'd release a semaphore set if it was now completely + * unused, but now we keep the semaphores to ensure we won't run out + * when starting new backends --- cf. InitProcGlobal. Note that the * PROC_NSEMS_PER_SET+1'st bit of the freeSemMap entry remains set to * indicate it is still allocated; ProcFreeAllSemaphores() needs that. */ diff --git a/src/backend/storage/page/bufpage.c b/src/backend/storage/page/bufpage.c index 69074ae2ce1..8c12a7652c5 100644 --- a/src/backend/storage/page/bufpage.c +++ b/src/backend/storage/page/bufpage.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/storage/page/bufpage.c,v 1.21 1999/02/13 23:18:31 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/storage/page/bufpage.c,v 1.22 1999/05/25 16:11:25 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -35,7 +35,7 @@ static bool PageManagerShuffle = true; /* default is shuffle mode */ */ /* - * PageInit + * PageInit * Initializes the contents of a page. */ void @@ -56,7 +56,7 @@ PageInit(Page page, Size pageSize, Size specialSize) } /* - * PageAddItem + * PageAddItem * Adds item to the given page. * * Note: @@ -174,7 +174,7 @@ PageAddItem(Page page, } /* - * PageGetTempPage + * PageGetTempPage * Get a temporary page in local memory for special processing */ Page @@ -207,7 +207,7 @@ PageGetTempPage(Page page, Size specialSize) } /* - * PageRestoreTempPage + * PageRestoreTempPage * Copy temporary page back to permanent page after special processing * and release the temporary page. */ @@ -246,7 +246,7 @@ itemidcompare(const void *itemidp1, const void *itemidp2) } /* - * PageRepairFragmentation + * PageRepairFragmentation * Frees fragmented space on a page. */ void @@ -327,7 +327,7 @@ PageRepairFragmentation(Page page) } /* - * PageGetFreeSpace + * PageGetFreeSpace * Returns the size of the free (allocatable) space on a page. */ Size @@ -346,7 +346,7 @@ PageGetFreeSpace(Page page) } /* - * PageManagerModeSet + * PageManagerModeSet * * Sets mode to either: ShufflePageManagerMode (the default) or * OverwritePageManagerMode. For use by access methods code diff --git a/src/backend/storage/page/itemptr.c b/src/backend/storage/page/itemptr.c index 9e1353df5ec..1ac32fd5454 100644 --- a/src/backend/storage/page/itemptr.c +++ b/src/backend/storage/page/itemptr.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/storage/page/itemptr.c,v 1.5 1999/02/13 23:18:33 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/storage/page/itemptr.c,v 1.6 1999/05/25 16:11:27 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -19,7 +19,7 @@ #include "storage/bufpage.h" /* - * ItemPointerEquals + * ItemPointerEquals * Returns true if both item pointers point to the same item, * otherwise returns false. * diff --git a/src/backend/storage/smgr/md.c b/src/backend/storage/smgr/md.c index 84fd67510dc..ce4fd6ab651 100644 --- a/src/backend/storage/smgr/md.c +++ b/src/backend/storage/smgr/md.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/storage/smgr/md.c,v 1.43 1999/05/17 06:38:41 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/storage/smgr/md.c,v 1.44 1999/05/25 16:11:30 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -712,9 +712,9 @@ mdtruncate(Relation reln, int nblocks) #ifndef LET_OS_MANAGE_FILESIZE int curnblk, - i, - oldsegno, - newsegno; + i, + oldsegno, + newsegno; char fname[NAMEDATALEN]; char tname[NAMEDATALEN + 10]; @@ -724,13 +724,15 @@ mdtruncate(Relation reln, int nblocks) StrNCpy(fname, RelationGetRelationName(reln)->data, NAMEDATALEN); - if (newsegno < oldsegno) { - for (i = (newsegno + 1);; i++) { + if (newsegno < oldsegno) + { + for (i = (newsegno + 1);; i++) + { sprintf(tname, "%s.%d", fname, i); if (FileNameUnlink(tname) < 0) break; } - } + } #endif fd = RelationGetFile(reln); diff --git a/src/backend/storage/smgr/mm.c b/src/backend/storage/smgr/mm.c index 2d5c1cdc4d8..5bce97f93a2 100644 --- a/src/backend/storage/smgr/mm.c +++ b/src/backend/storage/smgr/mm.c @@ -10,7 +10,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/storage/smgr/Attic/mm.c,v 1.15 1999/03/06 21:17:50 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/storage/smgr/Attic/mm.c,v 1.16 1999/05/25 16:11:32 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -569,15 +569,15 @@ MMShmemSize() * first compute space occupied by the (dbid,relid,blkno) hash table */ size += hash_estimate_size(MMNBUFFERS, - 0, /* MMHashEntry includes key */ - sizeof(MMHashEntry)); + 0, /* MMHashEntry includes key */ + sizeof(MMHashEntry)); /* * now do the same for the rel hash table */ size += hash_estimate_size(MMNRELATIONS, - 0, /* MMRelHashEntry includes key */ - sizeof(MMRelHashEntry)); + 0, /* MMRelHashEntry includes key */ + sizeof(MMRelHashEntry)); /* * finally, add in the memory block we use directly diff --git a/src/backend/storage/smgr/smgr.c b/src/backend/storage/smgr/smgr.c index 175cfa0f53d..25644d088b2 100644 --- a/src/backend/storage/smgr/smgr.c +++ b/src/backend/storage/smgr/smgr.c @@ -10,7 +10,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/storage/smgr/smgr.c,v 1.23 1999/04/23 19:37:42 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/storage/smgr/smgr.c,v 1.24 1999/05/25 16:11:34 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -79,6 +79,7 @@ static bool smgrwo[] = { false, /* main memory */ #endif }; + #endif static int NSmgr = lengthof(smgrsw); @@ -408,4 +409,5 @@ smgriswo(int16 smgrno) return smgrwo[smgrno]; } + #endif diff --git a/src/backend/tcop/dest.c b/src/backend/tcop/dest.c index b564ac65aa6..dce9425e197 100644 --- a/src/backend/tcop/dest.c +++ b/src/backend/tcop/dest.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/tcop/dest.c,v 1.29 1999/04/28 22:17:58 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/tcop/dest.c,v 1.30 1999/05/25 16:11:37 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -60,17 +60,17 @@ static char CommandInfo[32] = {0}; * ---------------- */ static void -donothingReceive (HeapTuple tuple, TupleDesc typeinfo, DestReceiver* self) +donothingReceive(HeapTuple tuple, TupleDesc typeinfo, DestReceiver * self) { } static void -donothingSetup (DestReceiver* self, TupleDesc typeinfo) +donothingSetup(DestReceiver * self, TupleDesc typeinfo) { } static void -donothingCleanup (DestReceiver* self) +donothingCleanup(DestReceiver * self) { } @@ -149,9 +149,11 @@ BeginCommand(char *pname, if (operation == CMD_SELECT && !isIntoRel) { StringInfoData buf; + pq_beginmessage(&buf); - pq_sendbyte(&buf, 'T'); /* tuple descriptor message type */ - pq_sendint(&buf, natts, 2); /* # of attributes in tuples */ + pq_sendbyte(&buf, 'T'); /* tuple descriptor message type */ + pq_sendint(&buf, natts, 2); /* # of attributes in + * tuples */ for (i = 0; i < natts; ++i) { @@ -215,35 +217,35 @@ BeginCommand(char *pname, * DestToFunction - return appropriate receiver function set for dest * ---------------- */ -DestReceiver* +DestReceiver * DestToFunction(CommandDest dest) { switch (dest) { - case Remote: + case Remote: /* printtup wants a dynamically allocated DestReceiver */ return printtup_create_DR(); break; case RemoteInternal: - return & printtup_internalDR; + return &printtup_internalDR; break; case Local: - return & be_printtupDR; + return &be_printtupDR; break; case Debug: - return & debugtupDR; + return &debugtupDR; break; case SPI: - return & spi_printtupDR; + return &spi_printtupDR; break; case None: default: - return & donothingDR; + return &donothingDR; break; } @@ -251,7 +253,7 @@ DestToFunction(CommandDest dest) * never gets here, but DECstation lint appears to be stupid... */ - return & donothingDR; + return &donothingDR; } /* ---------------- @@ -330,13 +332,13 @@ NullCommand(CommandDest dest) { switch (dest) { - case RemoteInternal: - case Remote: + case RemoteInternal: + case Remote: /* ---------------- * tell the fe that we saw an empty query string * ---------------- */ - pq_putbytes("I", 2); /* note we send I and \0 */ + pq_putbytes("I", 2);/* note we send I and \0 */ break; case Local: @@ -362,8 +364,8 @@ ReadyForQuery(CommandDest dest) { switch (dest) { - case RemoteInternal: - case Remote: + case RemoteInternal: + case Remote: if (PG_PROTOCOL_MAJOR(FrontendProtocol) >= 2) pq_putbytes("Z", 1); /* Flush output at end of cycle in any case. */ @@ -383,7 +385,7 @@ UpdateCommandInfo(int operation, Oid lastoid, uint32 tuples) { switch (operation) { - case CMD_INSERT: + case CMD_INSERT: if (tuples > 1) lastoid = InvalidOid; sprintf(CommandInfo, " %u %u", lastoid, tuples); diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index ab29054aa77..fbafe1e6bd8 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.115 1999/05/22 17:47:49 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.116 1999/05/25 16:11:40 momjian Exp $ * * NOTES * this is the "main" module of the postgres backend and @@ -141,7 +141,7 @@ static bool IsEmptyQuery = false; char relname[80]; /* current relation name */ /* note: these declarations had better match tcopprot.h */ -DLLIMPORT sigjmp_buf Warn_restart; +DLLIMPORT sigjmp_buf Warn_restart; bool InError; extern int NBuffers; @@ -389,7 +389,8 @@ List * pg_parse_and_plan(char *query_string, /* string to execute */ Oid *typev, /* argument types */ int nargs, /* number of arguments */ - List **queryListP, /* returned pointer to the parse trees */ + List **queryListP, /* returned pointer to the parse + * trees */ CommandDest dest, /* where results should go */ bool aclOverride) { @@ -404,17 +405,17 @@ pg_parse_and_plan(char *query_string, /* string to execute */ if (DebugPrintQuery) { if (DebugPrintQuery > 3) - { + { /* Print the query string as is if query debug level > 3 */ - TPRINTF(TRACE_QUERY, "query: %s", query_string); + TPRINTF(TRACE_QUERY, "query: %s", query_string); } else { /* Print condensed query string to fit in one log line */ char buff[MAX_QUERY_SIZE + 1]; char c, - *s, - *d; + *s, + *d; int n, is_space = 1; @@ -462,21 +463,24 @@ pg_parse_and_plan(char *query_string, /* string to execute */ /* ---------------- * (2) rewrite the queries, as necessary * - * rewritten queries are collected in new_list. Note there may be - * more or fewer than in the original list. + * rewritten queries are collected in new_list. Note there may be + * more or fewer than in the original list. * ---------------- */ new_list = NIL; - foreach (querytree_list_item, querytree_list) + foreach(querytree_list_item, querytree_list) { querytree = (Query *) lfirst(querytree_list_item); if (DebugPrintParse || DebugPPrintParse) { - if (DebugPPrintParse) { + if (DebugPPrintParse) + { TPRINTF(TRACE_PRETTY_PARSE, "parser outputs:"); nodeDisplay(querytree); - } else { + } + else + { TPRINTF(TRACE_PARSE, "parser outputs:"); printf("\n%s\n\n", nodeToString(querytree)); } @@ -502,7 +506,7 @@ pg_parse_and_plan(char *query_string, /* string to execute */ */ if (aclOverride) { - foreach (querytree_list_item, querytree_list) + foreach(querytree_list_item, querytree_list) { List *l; @@ -522,19 +526,22 @@ pg_parse_and_plan(char *query_string, /* string to execute */ if (DebugPrintRewrittenParsetree || DebugPPrintRewrittenParsetree) { - if (DebugPPrintRewrittenParsetree) { + if (DebugPPrintRewrittenParsetree) + { TPRINTF(TRACE_PRETTY_REWRITTEN, "after rewriting:"); - foreach (querytree_list_item, querytree_list) + foreach(querytree_list_item, querytree_list) { querytree = (Query *) lfirst(querytree_list_item); nodeDisplay(querytree); printf("\n"); } - } else { + } + else + { TPRINTF(TRACE_REWRITTEN, "after rewriting:"); - foreach (querytree_list_item, querytree_list) + foreach(querytree_list_item, querytree_list) { querytree = (Query *) lfirst(querytree_list_item); printf("\n%s\n\n", nodeToString(querytree)); @@ -542,7 +549,7 @@ pg_parse_and_plan(char *query_string, /* string to execute */ } } - foreach (querytree_list_item, querytree_list) + foreach(querytree_list_item, querytree_list) { querytree = (Query *) lfirst(querytree_list_item); @@ -594,16 +601,20 @@ pg_parse_and_plan(char *query_string, /* string to execute */ */ if (DebugPrintPlan || DebugPPrintPlan) { - if (DebugPPrintPlan) { + if (DebugPPrintPlan) + { TPRINTF(TRACE_PRETTY_PLAN, "plan:"); nodeDisplay(plan); - } else { + } + else + { TPRINTF(TRACE_PLAN, "plan:"); printf("\n%s\n\n", nodeToString(plan)); } } #endif } + /* * If the command is an utility append a null plan. This is needed * to keep the plan_list aligned with the querytree_list or the @@ -670,14 +681,16 @@ pg_exec_query_dest(char *query_string, /* string to execute */ /* OK, do it to it! */ - /* NOTE: we do not use "foreach" here because we want to be sure - * the list pointers have been advanced before the query is executed. - * We need to do that because VACUUM has a nasty little habit of doing + /* + * NOTE: we do not use "foreach" here because we want to be sure the + * list pointers have been advanced before the query is executed. We + * need to do that because VACUUM has a nasty little habit of doing * CommitTransactionCommand at startup, and that will release the * memory holding our parse/plan lists :-(. This needs a better * solution --- currently, the code will crash if someone submits * "vacuum; something-else" in a single query string. But memory - * allocation needs redesigned anyway, so this will have to do for now. + * allocation needs redesigned anyway, so this will have to do for + * now. */ while (querytree_list) @@ -717,10 +730,13 @@ pg_exec_query_dest(char *query_string, /* string to execute */ */ if (DebugPrintPlan || DebugPPrintPlan) { - if (DebugPPrintPlan) { + if (DebugPPrintPlan) + { TPRINTF(TRACE_PRETTY_PLAN, "plan:"); nodeDisplay(plan); - } else { + } + else + { TPRINTF(TRACE_PLAN, "plan:"); printf("\n%s\n\n", nodeToString(plan)); } @@ -730,7 +746,7 @@ pg_exec_query_dest(char *query_string, /* string to execute */ SetQuerySnapshot(); /* - * execute the plan + * execute the plan */ if (ShowExecutorStats) ResetUsage(); @@ -762,13 +778,13 @@ pg_exec_query_dest(char *query_string, /* string to execute */ /* -------------------------------- * signal handler routines used in PostgresMain() * - * handle_warn() catches SIGQUIT. It forces control back to the main + * handle_warn() catches SIGQUIT. It forces control back to the main * loop, just as if an internal error (elog(ERROR,...)) had occurred. * elog() used to actually use kill(2) to induce a SIGQUIT to get here! * But that's not 100% reliable on some systems, so now it does its own - * siglongjmp() instead. + * siglongjmp() instead. * We still provide the signal catcher so that an error quit can be - * forced externally. This should be done only with great caution, + * forced externally. This should be done only with great caution, * however, since an asynchronous signal could leave the system in * who-knows-what inconsistent state. * @@ -832,6 +848,7 @@ QueryCancelHandler(SIGNAL_ARGS) void CancelQuery(void) { + /* * QueryCancel flag will be reset in main loop, which we reach by * longjmp from elog(). @@ -1150,7 +1167,8 @@ PostgresMain(int argc, char *argv[], int real_argc, char *real_argv[]) { IsUnderPostmaster = true; DBName = optarg; - secure = false; /* subsequent switches are NOT secure */ + secure = false; /* subsequent switches are NOT + * secure */ } break; @@ -1238,7 +1256,7 @@ PostgresMain(int argc, char *argv[], int real_argc, char *real_argv[]) break; case 'x': -#ifdef NOT_USED /* planner/xfunc.h */ +#ifdef NOT_USED /* planner/xfunc.h */ /* * control joey hellerstein's expensive function @@ -1326,7 +1344,7 @@ PostgresMain(int argc, char *argv[], int real_argc, char *real_argv[]) fprintf(stderr, "%s does not know where to find the database system " "data. You must specify the directory that contains the " "database system either by specifying the -D invocation " - "option or by setting the PGDATA environment variable.\n\n", + "option or by setting the PGDATA environment variable.\n\n", argv[0]); proc_exit(1); } @@ -1479,10 +1497,13 @@ PostgresMain(int argc, char *argv[], int real_argc, char *real_argv[]) pqsignal(SIGINT, QueryCancelHandler); /* cancel current query */ pqsignal(SIGQUIT, handle_warn); /* handle error */ pqsignal(SIGTERM, die); - pqsignal(SIGPIPE, SIG_IGN); /* ignore failure to write to frontend */ - /* Note: if frontend closes connection, we will notice it and exit cleanly - * when control next returns to outer loop. This seems safer than forcing - * exit in the midst of output during who-knows-what operation... + pqsignal(SIGPIPE, SIG_IGN); /* ignore failure to write to frontend */ + + /* + * Note: if frontend closes connection, we will notice it and exit + * cleanly when control next returns to outer loop. This seems safer + * than forcing exit in the midst of output during who-knows-what + * operation... */ pqsignal(SIGUSR1, quickdie); pqsignal(SIGUSR2, Async_NotifyHandler); /* flush also sinval cache */ @@ -1493,6 +1514,7 @@ PostgresMain(int argc, char *argv[], int real_argc, char *real_argv[]) PG_PROTOCOL_MAJOR(FrontendProtocol) >= 2) { StringInfoData buf; + pq_beginmessage(&buf); pq_sendbyte(&buf, 'K'); pq_sendint(&buf, (int32) MyProcPid, sizeof(int32)); @@ -1504,7 +1526,7 @@ PostgresMain(int argc, char *argv[], int real_argc, char *real_argv[]) if (!IsUnderPostmaster) { puts("\nPOSTGRES backend interactive interface "); - puts("$Revision: 1.115 $ $Date: 1999/05/22 17:47:49 $\n"); + puts("$Revision: 1.116 $ $Date: 1999/05/25 16:11:40 $\n"); } /* ---------------- @@ -1542,14 +1564,14 @@ PostgresMain(int argc, char *argv[], int real_argc, char *real_argv[]) /* ---------------- * (1) tell the frontend we're ready for a new query. * - * Note: this includes fflush()'ing the last of the prior output. + * Note: this includes fflush()'ing the last of the prior output. * ---------------- */ ReadyForQuery(whereToSendOutput); /* ---------------- * (2) deal with pending asynchronous NOTIFY from other backends, - * and enable async.c's signal handler to execute NOTIFY directly. + * and enable async.c's signal handler to execute NOTIFY directly. * ---------------- */ QueryCancel = false; /* forget any earlier CANCEL signal */ diff --git a/src/backend/tcop/pquery.c b/src/backend/tcop/pquery.c index 97e8663e7d1..83c400188f9 100644 --- a/src/backend/tcop/pquery.c +++ b/src/backend/tcop/pquery.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/tcop/pquery.c,v 1.22 1999/03/23 05:41:00 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/tcop/pquery.c,v 1.23 1999/05/25 16:11:41 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -41,7 +41,7 @@ static char *CreateOperationTag(int operationType); static void ProcessQueryDesc(QueryDesc *queryDesc, Node *limoffset, - Node *limcount); + Node *limcount); /* ---------------------------------------------------------------- @@ -374,5 +374,5 @@ ProcessQuery(Query *parsetree, } else ProcessQueryDesc(queryDesc, parsetree->limitOffset, - parsetree->limitCount); + parsetree->limitCount); } diff --git a/src/backend/tcop/utility.c b/src/backend/tcop/utility.c index a7fb1ed3a3f..38099254bf3 100644 --- a/src/backend/tcop/utility.c +++ b/src/backend/tcop/utility.c @@ -9,7 +9,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/tcop/utility.c,v 1.60 1999/05/22 19:49:42 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/tcop/utility.c,v 1.61 1999/05/25 16:11:43 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -616,7 +616,7 @@ ProcessUtility(Node *parsetree, PS_SET_STATUS(commandTag = "LOAD"); CHECK_IF_ABORTED(); - closeAllVfds(); /* probably not necessary... */ + closeAllVfds(); /* probably not necessary... */ load_file(stmt->filename); } break; @@ -653,6 +653,7 @@ ProcessUtility(Node *parsetree, break; #ifdef NOT_USED + /* * ******************************** Tioga-related statements ******************************* */ diff --git a/src/backend/tioga/Varray.c b/src/backend/tioga/Varray.c index 944b7766d8a..c211686c742 100644 --- a/src/backend/tioga/Varray.c +++ b/src/backend/tioga/Varray.c @@ -1,6 +1,6 @@ /* ************************************************************************ * - * Varray.c + * Varray.c * * routines to provide a generic set of functions to handle variable sized * arrays. originally by Jiang Wu diff --git a/src/backend/tioga/tgRecipe.h b/src/backend/tioga/tgRecipe.h index 70ed561c0ec..858d195cfa6 100644 --- a/src/backend/tioga/tgRecipe.h +++ b/src/backend/tioga/tgRecipe.h @@ -11,7 +11,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: tgRecipe.h,v 1.8 1999/02/13 23:18:55 momjian Exp $ + * $Id: tgRecipe.h,v 1.9 1999/05/25 16:11:46 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -35,6 +35,7 @@ typedef struct * * * + * * geo-decls.h */ #endif /* TIOGA_FRONTEND */ @@ -114,7 +115,7 @@ typedef struct _tgrecipe { TgElement elmValue; /* "inherits" TgElement attributes. */ Arr_TgNodePtr *allNodes; /* array of all nodes for this recipe. */ - Arr_TgNodePtr *rootNodes; /* array of root nodes for this recipe. + Arr_TgNodePtr *rootNodes; /* array of root nodes for this recipe. * root nodes are nodes with no parents */ Arr_TgNodePtr *eyes; /* array of pointers for the browser nodes * recipe, execution of recipe starts by diff --git a/src/backend/utils/adt/acl.c b/src/backend/utils/adt/acl.c index 2ca61704076..b1fc5574981 100644 --- a/src/backend/utils/adt/acl.c +++ b/src/backend/utils/adt/acl.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/acl.c,v 1.35 1999/05/12 12:47:24 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/acl.c,v 1.36 1999/05/25 16:11:49 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -34,7 +34,7 @@ static char *aclparse(char *s, AclItem *aip, unsigned *modechg); /* * getid * Consumes the first alphanumeric string (identifier) found in string - * 's', ignoring any leading white space. If it finds a double quote + * 's', ignoring any leading white space. If it finds a double quote * it returns the word inside the quotes. * * RETURNS: @@ -48,7 +48,7 @@ getid(char *s, char *n) { unsigned len; char *id; - int in_quotes = 0; + int in_quotes = 0; Assert(s && n); @@ -63,7 +63,7 @@ getid(char *s, char *n) for (id = s, len = 0; isalnum(*s) || *s == '_' || in_quotes; ++len, ++s) { - if (in_quotes && *s == '"') + if (in_quotes && *s == '"') { len--; in_quotes = 0; diff --git a/src/backend/utils/adt/arrayfuncs.c b/src/backend/utils/adt/arrayfuncs.c index 41f02797a7f..b0e59e3ff08 100644 --- a/src/backend/utils/adt/arrayfuncs.c +++ b/src/backend/utils/adt/arrayfuncs.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/arrayfuncs.c,v 1.42 1999/05/10 00:45:58 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/arrayfuncs.c,v 1.43 1999/05/25 16:11:50 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -200,7 +200,7 @@ array_in(char *string, /* input array in external form */ /* array not a large object */ dataPtr = (char *) _ReadArrayStr(p, nitems, ndim, dim, &inputproc, typelem, typmod, typdelim, typlen, typbyval, typalign, - &nbytes); + &nbytes); nbytes += ARR_OVERHEAD(ndim); retval = (ArrayType *) palloc(nbytes); MemSet(retval, 0, nbytes); @@ -246,7 +246,7 @@ array_in(char *string, /* input array in external form */ } /*----------------------------------------------------------------------------- - * _ArrayCount + * _ArrayCount * Counts the number of dimensions and the *dim array for an array string. * The syntax for array input is C-like nested curly braces *----------------------------------------------------------------------------- @@ -1284,19 +1284,19 @@ array_assgn(ArrayType *array, * Map an arbitrary function to an array and return a new array with * same dimensions and the source elements transformed by fn(). */ -ArrayType * +ArrayType * array_map(ArrayType *v, Oid type, - char * (*fn)(), + char *(*fn) (), Oid retType, int nargs, ...) { - ArrayType *result; - void *args[4]; - char **values; - char *elt; - int *dim; + ArrayType *result; + void *args[4]; + char **values; + char *elt; + int *dim; int ndim; int nitems; int i; @@ -1308,26 +1308,23 @@ array_map(ArrayType *v, char typdelim; Oid typelem; Oid proc; - char typalign; - char *s; - char *p; + char typalign; + char *s; + char *p; va_list ap; /* Large objects not yet supported */ - if (ARR_IS_LO(v) == true) { + if (ARR_IS_LO(v) == true) elog(ERROR, "array_map: large objects not supported"); - } /* Check nargs */ - if ((nargs < 0) || (nargs > 4)) { + if ((nargs < 0) || (nargs > 4)) elog(ERROR, "array_map: invalid nargs: %d", nargs); - } /* Copy extra args to local variable */ va_start(ap, nargs); - for (i=0; i<nargs; i++) { + for (i = 0; i < nargs; i++) args[i] = (void *) va_arg(ap, char *); - } va_end(ap); /* Lookup source and result types. Unneeded variables are reused. */ @@ -1336,14 +1333,13 @@ array_map(ArrayType *v, system_cache_lookup(retType, false, &typlen, &typbyval, &typdelim, &typelem, &proc, &typalign); - ndim = ARR_NDIM(v); - dim = ARR_DIMS(v); + ndim = ARR_NDIM(v); + dim = ARR_DIMS(v); nitems = getNitems(ndim, dim); /* Check for empty array */ - if (nitems <= 0) { + if (nitems <= 0) return v; - } /* Allocate temporary array for new values */ values = (char **) palloc(nitems * sizeof(char *)); @@ -1351,64 +1347,74 @@ array_map(ArrayType *v, /* Loop over source data */ s = (char *) ARR_DATA_PTR(v); - for (i=0; i<nitems; i++) { + for (i = 0; i < nitems; i++) + { /* Get source element */ - if (inp_typbyval) { - switch (inp_typlen) { - case 1: - elt = (char *) ((int) (*(char *) s)); - break; - case 2: - elt = (char *) ((int) (*(int16 *) s)); - break; - case 3: - case 4: - default: - elt = (char *) (*(int32 *) s); - break; + if (inp_typbyval) + { + switch (inp_typlen) + { + case 1: + elt = (char *) ((int) (*(char *) s)); + break; + case 2: + elt = (char *) ((int) (*(int16 *) s)); + break; + case 3: + case 4: + default: + elt = (char *) (*(int32 *) s); + break; } s += inp_typlen; - } else { + } + else + { elt = s; - if (inp_typlen > 0) { + if (inp_typlen > 0) s += inp_typlen; - } else { + else s += INTALIGN(*(int32 *) s); - } } /* - * Apply the given function to source elt and extra args. - * nargs is the number of extra args taken by fn(). + * Apply the given function to source elt and extra args. nargs is + * the number of extra args taken by fn(). */ - switch (nargs) { - case 0: - p = (char *) (*fn) (elt); - break; - case 1: - p = (char *) (*fn) (elt, args[0]); - break; - case 2: - p = (char *) (*fn) (elt, args[0], args[1]); - break; - case 3: - p = (char *) (*fn) (elt, args[0], args[1], args[2]); - break; - case 4: - default: - p = (char *) (*fn) (elt, args[0], args[1], args[2], args[3]); - break; + switch (nargs) + { + case 0: + p = (char *) (*fn) (elt); + break; + case 1: + p = (char *) (*fn) (elt, args[0]); + break; + case 2: + p = (char *) (*fn) (elt, args[0], args[1]); + break; + case 3: + p = (char *) (*fn) (elt, args[0], args[1], args[2]); + break; + case 4: + default: + p = (char *) (*fn) (elt, args[0], args[1], args[2], args[3]); + break; } /* Update values and total result size */ - if (typbyval) { + if (typbyval) + { values[i] = (char *) p; nbytes += typlen; - } else { - int len; + } + else + { + int len; + len = ((typlen > 0) ? typlen : INTALIGN(*(int32 *) p)); /* Needed because _CopyArrayEls tries to pfree items */ - if (p == elt) { + if (p == elt) + { p = (char *) palloc(len); memcpy(p, elt, len); } diff --git a/src/backend/utils/adt/cash.c b/src/backend/utils/adt/cash.c index a6e9711a463..9f74645d38a 100644 --- a/src/backend/utils/adt/cash.c +++ b/src/backend/utils/adt/cash.c @@ -9,7 +9,7 @@ * workings can be found in the book "Software Solutions in C" by * Dale Schumacher, Academic Press, ISBN: 0-12-632360-7. * - * $Header: /cvsroot/pgsql/src/backend/utils/adt/cash.c,v 1.27 1998/10/12 04:07:44 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/cash.c,v 1.28 1999/05/25 16:11:52 momjian Exp $ */ #include <stdio.h> @@ -681,8 +681,8 @@ cash_words_out(Cash *value) Cash m1; Cash m2; Cash m3; - text *result; - + text *result; + /* work with positive numbers */ if (*value < 0) { diff --git a/src/backend/utils/adt/char.c b/src/backend/utils/adt/char.c index 2984555af02..4c6e3711065 100644 --- a/src/backend/utils/adt/char.c +++ b/src/backend/utils/adt/char.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/char.c,v 1.21 1999/02/13 23:19:05 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/char.c,v 1.22 1999/05/25 16:11:53 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -163,10 +163,10 @@ text_char(text *arg1) text * char_text(int8 arg1) { - text *result; + text *result; - result = palloc(VARHDRSZ+1); - VARSIZE(result) = VARHDRSZ+1; + result = palloc(VARHDRSZ + 1); + VARSIZE(result) = VARHDRSZ + 1; *(VARDATA(result)) = arg1; return result; diff --git a/src/backend/utils/adt/chunk.c b/src/backend/utils/adt/chunk.c index eb692526f89..a9a49fe940e 100644 --- a/src/backend/utils/adt/chunk.c +++ b/src/backend/utils/adt/chunk.c @@ -6,7 +6,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/chunk.c,v 1.19 1999/02/13 23:19:06 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/chunk.c,v 1.20 1999/05/25 16:11:55 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -115,7 +115,7 @@ _ChunkArray(int fd, } /*-------------------------------------------------------------------------- - * GetChunkSize + * GetChunkSize * given an access pattern and array dimensionality etc, this program * returns the dimensions of the chunk in "d" *----------------------------------------------------------------------- @@ -160,7 +160,7 @@ GetChunkSize(FILE *fd, } /*------------------------------------------------------------------------- - * _FindBestChunk + * _FindBestChunk * This routine does most of the number crunching to compute the * optimal chunk shape. * Called by GetChunkSize @@ -213,7 +213,7 @@ _FindBestChunk(int size, } /*---------------------------------------------------------------------- - * get_next + * get_next * Called by _GetBestChunk to get the next tuple in the lexicographic order *--------------------------------------------------------------------- */ @@ -420,7 +420,7 @@ seek_and_read(int pos, int size, char *buff, int fp, int from) #endif /* LOARRAY */ /*---------------------------------------------------------------------------- - * _ReadChunkArray + * _ReadChunkArray * returns the subarray specified bu the range indices "st" and "endp" * from the chunked array stored in file "fp" *--------------------------------------------------------------------------- @@ -620,7 +620,7 @@ _ReadChunkArray(int *st, } /*------------------------------------------------------------------------ - * _ReadChunkArray1El + * _ReadChunkArray1El * returns one element of the chunked array as specified by the index "st" * the chunked file descriptor is "fp" *------------------------------------------------------------------------- diff --git a/src/backend/utils/adt/date.c b/src/backend/utils/adt/date.c index e582ebc2c65..7ad18a067e4 100644 --- a/src/backend/utils/adt/date.c +++ b/src/backend/utils/adt/date.c @@ -9,7 +9,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/date.c,v 1.31 1999/03/14 16:44:01 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/date.c,v 1.32 1999/05/25 16:11:56 momjian Exp $ * * NOTES * This code is actually (almost) unused. @@ -988,6 +988,7 @@ isreltime(char *str) return 0; } /* isreltime() */ + #endif #ifdef NOT_USED diff --git a/src/backend/utils/adt/datetime.c b/src/backend/utils/adt/datetime.c index aad1cec4eb0..84163583ef8 100644 --- a/src/backend/utils/adt/datetime.c +++ b/src/backend/utils/adt/datetime.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/datetime.c,v 1.32 1999/04/26 04:42:48 ishii Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/datetime.c,v 1.33 1999/05/25 16:11:58 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -311,7 +311,7 @@ abstime_date(AbsoluteTime abstime) * and then convert again to try to get the time zones correct. */ static int -date2tm(DateADT dateVal, int *tzp, struct tm *tm, double *fsec, char **tzn) +date2tm(DateADT dateVal, int *tzp, struct tm * tm, double *fsec, char **tzn) { struct tm *tx; time_t utime; @@ -358,7 +358,7 @@ date2tm(DateADT dateVal, int *tzp, struct tm *tm, double *fsec, char **tzn) /* tm_gmtoff is Sun/DEC-ism */ *tzp = -(tm->tm_gmtoff); if (tzn != NULL) - *tzn = (char *)tm->tm_zone; + *tzn = (char *) tm->tm_zone; #elif defined(HAVE_INT_TIMEZONE) #ifdef __CYGWIN__ *tzp = (tm->tm_isdst ? (_timezone - 3600) : _timezone); @@ -393,13 +393,13 @@ date2tm(DateADT dateVal, int *tzp, struct tm *tm, double *fsec, char **tzn) #ifdef DATEDEBUG #if defined(HAVE_TM_ZONE) - printf("date2tm- %d.%02d.%02d %02d:%02d:%02.0f (%d %s) dst=%d\n", - tm->tm_year, tm->tm_mon, tm->tm_mday, tm->tm_hour, tm->tm_min, (double) tm->tm_sec, - *tzp, tm->tm_zone, tm->tm_isdst); + printf("date2tm- %d.%02d.%02d %02d:%02d:%02.0f (%d %s) dst=%d\n", + tm->tm_year, tm->tm_mon, tm->tm_mday, tm->tm_hour, tm->tm_min, (double) tm->tm_sec, + *tzp, tm->tm_zone, tm->tm_isdst); #elif defined(HAVE_INT_TIMEZONE) - printf("date2tm- %d.%02d.%02d %02d:%02d:%02.0f (%d %s %s) dst=%d\n", - tm->tm_year, tm->tm_mon, tm->tm_mday, tm->tm_hour, tm->tm_min, (double) tm->tm_sec, - *tzp, tzname[0], tzname[1], tm->tm_isdst); + printf("date2tm- %d.%02d.%02d %02d:%02d:%02.0f (%d %s %s) dst=%d\n", + tm->tm_year, tm->tm_mon, tm->tm_mday, tm->tm_hour, tm->tm_min, (double) tm->tm_sec, + *tzp, tzname[0], tzname[1], tm->tm_isdst); #endif #endif diff --git a/src/backend/utils/adt/dt.c b/src/backend/utils/adt/dt.c index a055a03df80..9fb75cb5687 100644 --- a/src/backend/utils/adt/dt.c +++ b/src/backend/utils/adt/dt.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/dt.c,v 1.70 1999/05/01 17:14:56 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/dt.c,v 1.71 1999/05/25 16:12:00 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -34,9 +34,9 @@ static int DecodeDate(char *str, int fmask, int *tmask, struct tm * tm); static int DecodeNumber(int flen, char *field, - int fmask, int *tmask, struct tm * tm, double *fsec, int *is2digits); + int fmask, int *tmask, struct tm * tm, double *fsec, int *is2digits); static int DecodeNumberField(int len, char *str, - int fmask, int *tmask, struct tm * tm, double *fsec, int *is2digits); + int fmask, int *tmask, struct tm * tm, double *fsec, int *is2digits); static int DecodeSpecial(int field, char *lowtoken, int *val); static int DecodeTime(char *str, int fmask, int *tmask, struct tm * tm, double *fsec); @@ -55,9 +55,9 @@ static int tm2timespan(struct tm * tm, double fsec, TimeSpan *span); #define USE_DATE_CACHE 1 #define ROUND_ALL 0 -int day_tab[2][13] = { +int day_tab[2][13] = { {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 0}, - {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 0}}; +{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 0}}; char *months[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", @@ -2090,7 +2090,7 @@ static datetkn datetktbl[] = { {"idlw", TZ, NEG(72)}, /* Intl. Date Line, West */ {LATE, RESERV, DTK_LATE}, /* "infinity" reserved for "late time" */ {INVALID, RESERV, DTK_INVALID}, - /* "invalid" reserved for invalid time */ + /* "invalid" reserved for invalid time */ {"ist", TZ, 12}, /* Israel */ {"it", TZ, 21}, /* Iran Time */ {"jan", MONTH, 1}, @@ -2438,7 +2438,7 @@ datetime2tm(DateTime dt, int *tzp, struct tm * tm, double *fsec, char **tzn) *tzp = -(tm->tm_gmtoff); /* tm_gmtoff is Sun/DEC-ism */ if (tzn != NULL) - *tzn = (char *)tm->tm_zone; + *tzn = (char *) tm->tm_zone; #elif defined(HAVE_INT_TIMEZONE) #ifdef __CYGWIN__ *tzp = (tm->tm_isdst ? (_timezone - 3600) : _timezone); @@ -2833,8 +2833,10 @@ DecodeDateTime(char **field, int *ftype, int nf, case DTK_NUMBER: flen = strlen(field[i]); - /* long numeric string and either no date or no time read yet? - * then interpret as a concatenated date or time... */ + /* + * long numeric string and either no date or no time read + * yet? then interpret as a concatenated date or time... + */ if ((flen > 4) && !((fmask & DTK_DATE_M) && (fmask & DTK_TIME_M))) { if (DecodeNumberField(flen, field[i], fmask, &tmask, tm, fsec, &is2digits) != 0) @@ -2926,10 +2928,14 @@ DecodeDateTime(char **field, int *ftype, int nf, #ifdef DATEDEBUG printf("DecodeDateTime- month field %s value is %d\n", field[i], val); #endif - /* already have a (numeric) month? then see if we can substitute... */ - if ((fmask & DTK_M(MONTH)) && (! haveTextMonth) - && (!(fmask & DTK_M(DAY))) - && ((tm->tm_mon >= 1) && (tm->tm_mon <= 31))) + + /* + * already have a (numeric) month? then see if we + * can substitute... + */ + if ((fmask & DTK_M(MONTH)) && (!haveTextMonth) + && (!(fmask & DTK_M(DAY))) + && ((tm->tm_mon >= 1) && (tm->tm_mon <= 31))) { tm->tm_mday = tm->tm_mon; tmask = DTK_M(DAY); @@ -2942,7 +2948,11 @@ DecodeDateTime(char **field, int *ftype, int nf, break; case DTZMOD: - /* daylight savings time modifier (solves "MET DST" syntax) */ + + /* + * daylight savings time modifier (solves "MET + * DST" syntax) + */ tmask |= DTK_M(DTZ); tm->tm_isdst = 1; if (tzp == NULL) @@ -3010,7 +3020,7 @@ DecodeDateTime(char **field, int *ftype, int nf, if (tm->tm_year > 0) tm->tm_year = -(tm->tm_year - 1); else - elog(ERROR,"Inconsistant use of year %04d and 'BC'", tm->tm_year); + elog(ERROR, "Inconsistant use of year %04d and 'BC'", tm->tm_year); } else if (is2digits) { @@ -3039,18 +3049,22 @@ DecodeDateTime(char **field, int *ftype, int nf, if ((fmask & DTK_DATE_M) != DTK_DATE_M) return ((fmask & DTK_TIME_M) == DTK_TIME_M) ? 1 : -1; - /* check for valid day of month, now that we know for sure the month and year... */ + /* + * check for valid day of month, now that we know for sure the + * month and year... + */ if ((tm->tm_mday < 1) || (tm->tm_mday > day_tab[isleap(tm->tm_year)][tm->tm_mon - 1])) return -1; /* timezone not specified? then find local timezone if possible */ if (((fmask & DTK_DATE_M) == DTK_DATE_M) - && (tzp != NULL) && (!(fmask & DTK_M(TZ)))) + && (tzp != NULL) && (!(fmask & DTK_M(TZ)))) { + /* - * daylight savings time modifier but no standard timezone? then - * error + * daylight savings time modifier but no standard timezone? + * then error */ if (fmask & DTK_M(DTZMOD)) return -1; @@ -3066,7 +3080,8 @@ DecodeDateTime(char **field, int *ftype, int nf, tm->tm_mon += 1; #if defined(HAVE_TM_ZONE) - *tzp = -(tm->tm_gmtoff); /* tm_gmtoff is Sun/DEC-ism */ + *tzp = -(tm->tm_gmtoff); /* tm_gmtoff is + * Sun/DEC-ism */ #elif defined(HAVE_INT_TIMEZONE) #ifdef __CYGWIN__ *tzp = ((tm->tm_isdst > 0) ? (_timezone - 3600) : _timezone); @@ -3077,7 +3092,7 @@ DecodeDateTime(char **field, int *ftype, int nf, #error USE_POSIX_TIME is defined but neither HAVE_TM_ZONE or HAVE_INT_TIMEZONE are defined #endif -#else /* !USE_POSIX_TIME */ +#else /* !USE_POSIX_TIME */ *tzp = CTimeZone; #endif } @@ -3214,8 +3229,8 @@ DecodeTimeOnly(char **field, int *ftype, int nf, int *dtype, struct tm * tm, dou tm->tm_hour += 12; if (((tm->tm_hour < 0) || (tm->tm_hour > 23)) - || ((tm->tm_min < 0) || (tm->tm_min > 59)) - || ((tm->tm_sec < 0) || ((tm->tm_sec + *fsec) >= 60))) + || ((tm->tm_min < 0) || (tm->tm_min > 59)) + || ((tm->tm_sec < 0) || ((tm->tm_sec + *fsec) >= 60))) return -1; if ((fmask & DTK_TIME_M) != DTK_TIME_M) @@ -3344,7 +3359,7 @@ DecodeDate(char *str, int fmask, int *tmask, struct tm * tm) if (tm->tm_year > 0) tm->tm_year = -(tm->tm_year - 1); else - elog(ERROR,"Inconsistant use of year %04d and 'BC'", tm->tm_year); + elog(ERROR, "Inconsistant use of year %04d and 'BC'", tm->tm_year); } else if (is2digits) { @@ -3449,11 +3464,12 @@ DecodeNumber(int flen, char *str, int fmask, &tm->tm_year, &tm->tm_mon, &tm->tm_mday); } - /* Enough digits to be unequivocal year? - * Used to test for 4 digits or more, - * but we now test first for a three-digit doy - * so anything bigger than two digits had better be - * an explicit year. - thomas 1999-01-09 + + /* + * Enough digits to be unequivocal year? Used to test for 4 digits or + * more, but we now test first for a three-digit doy so anything + * bigger than two digits had better be an explicit year. - thomas + * 1999-01-09 */ else if (flen > 2) { @@ -3464,7 +3480,7 @@ DecodeNumber(int flen, char *str, int fmask, /* already have a year? then see if we can substitute... */ if ((fmask & DTK_M(YEAR)) && (!(fmask & DTK_M(DAY))) - && ((tm->tm_year >= 1) && (tm->tm_year <= 31))) + && ((tm->tm_year >= 1) && (tm->tm_year <= 31))) { tm->tm_mday = tm->tm_year; *tmask = DTK_M(DAY); @@ -3543,7 +3559,7 @@ DecodeNumber(int flen, char *str, int fmask, */ static int DecodeNumberField(int len, char *str, int fmask, - int *tmask, struct tm * tm, double *fsec, int *is2digits) + int *tmask, struct tm * tm, double *fsec, int *is2digits) { char *cp; diff --git a/src/backend/utils/adt/float.c b/src/backend/utils/adt/float.c index 5e4e20d257f..5f2a4f15232 100644 --- a/src/backend/utils/adt/float.c +++ b/src/backend/utils/adt/float.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/float.c,v 1.41 1999/04/20 00:26:32 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/float.c,v 1.42 1999/05/25 16:12:02 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -955,12 +955,12 @@ i2tof(int16 num) text * float8_text(float64 num) { - text *result; - int len; - char *str; + text *result; + int len; + char *str; str = float8out(num); - len = (strlen(str)+VARHDRSZ); + len = (strlen(str) + VARHDRSZ); result = palloc(len); @@ -978,9 +978,9 @@ float8_text(float64 num) float64 text_float8(text *string) { - float64 result; - int len; - char *str; + float64 result; + int len; + char *str; len = (VARSIZE(string) - VARHDRSZ); str = palloc(len + 1); @@ -1000,12 +1000,12 @@ text_float8(text *string) text * float4_text(float32 num) { - text *result; - int len; - char *str; + text *result; + int len; + char *str; str = float4out(num); - len = (strlen(str)+VARHDRSZ); + len = (strlen(str) + VARHDRSZ); result = palloc(len); @@ -1023,9 +1023,9 @@ float4_text(float32 num) float32 text_float4(text *string) { - float32 result; - int len; - char *str; + float32 result; + int len; + char *str; len = (VARSIZE(string) - VARHDRSZ); str = palloc(len + 1); @@ -1154,7 +1154,8 @@ dpow(float64 arg1, float64 arg2) #endif *result = (float64data) pow(tmp1, tmp2); #ifndef finite - if (errno != 0) /* on some machines both EDOM & ERANGE can occur */ + if (errno != 0) /* on some machines both EDOM & ERANGE can + * occur */ #else if (!finite(*result)) #endif diff --git a/src/backend/utils/adt/inet_net_ntop.c b/src/backend/utils/adt/inet_net_ntop.c index 8c185dc83ca..11a0cb9363a 100644 --- a/src/backend/utils/adt/inet_net_ntop.c +++ b/src/backend/utils/adt/inet_net_ntop.c @@ -16,7 +16,7 @@ */ #if defined(LIBC_SCCS) && !defined(lint) -static const char rcsid[] = "$Id: inet_net_ntop.c,v 1.5 1999/05/25 05:29:38 momjian Exp $"; +static const char rcsid[] = "$Id: inet_net_ntop.c,v 1.6 1999/05/25 16:12:04 momjian Exp $"; #endif @@ -40,9 +40,9 @@ static const char rcsid[] = "$Id: inet_net_ntop.c,v 1.5 1999/05/25 05:29:38 momj #endif static char *inet_net_ntop_ipv4(const u_char *src, int bits, - char *dst, size_t size); + char *dst, size_t size); static char *inet_cidr_ntop_ipv4(const u_char *src, int bits, - char *dst, size_t size); + char *dst, size_t size); /* * char * @@ -59,7 +59,7 @@ inet_cidr_ntop(int af, const void *src, int bits, char *dst, size_t size) { switch (af) { - case AF_INET: + case AF_INET: return (inet_cidr_ntop_ipv4(src, bits, dst, size)); default: errno = EAFNOSUPPORT; @@ -162,7 +162,7 @@ inet_net_ntop(int af, const void *src, int bits, char *dst, size_t size) { switch (af) { - case AF_INET: + case AF_INET: return (inet_net_ntop_ipv4(src, bits, dst, size)); default: errno = EAFNOSUPPORT; @@ -186,10 +186,11 @@ inet_net_ntop(int af, const void *src, int bits, char *dst, size_t size) static char * inet_net_ntop_ipv4(const u_char *src, int bits, char *dst, size_t size) { - char *odst = dst; - char *t; - size_t len = 4; - int b, tb; + char *odst = dst; + char *t; + size_t len = 4; + int b, + tb; if (bits < 0 || bits > 32) { @@ -218,7 +219,7 @@ inet_net_ntop_ipv4(const u_char *src, int bits, char *dst, size_t size) *dst++ = '.'; *dst = '\0'; } - size -= (size_t)(dst - t); + size -= (size_t) (dst - t); } /* don't print masklen if 32 bits */ @@ -232,7 +233,7 @@ inet_net_ntop_ipv4(const u_char *src, int bits, char *dst, size_t size) return (odst); - emsgsize: +emsgsize: errno = EMSGSIZE; return (NULL); } diff --git a/src/backend/utils/adt/inet_net_pton.c b/src/backend/utils/adt/inet_net_pton.c index ae3036c3ca6..bcc9ff681a2 100644 --- a/src/backend/utils/adt/inet_net_pton.c +++ b/src/backend/utils/adt/inet_net_pton.c @@ -16,7 +16,7 @@ */ #if defined(LIBC_SCCS) && !defined(lint) -static const char rcsid[] = "$Id: inet_net_pton.c,v 1.7 1999/02/03 21:17:27 momjian Exp $"; +static const char rcsid[] = "$Id: inet_net_pton.c,v 1.8 1999/05/25 16:12:05 momjian Exp $"; #endif @@ -58,8 +58,8 @@ static int inet_cidr_pton_ipv4(const char *src, u_char *dst, size_t size); * Paul Vixie (ISC), June 1996 * * Changes: - * I added the inet_cidr_pton function (also from Paul) and changed - * the names to reflect their current use. + * I added the inet_cidr_pton function (also from Paul) and changed + * the names to reflect their current use. * */ int @@ -67,10 +67,10 @@ inet_net_pton(int af, const char *src, void *dst, size_t size) { switch (af) { - case AF_INET: + case AF_INET: return size == -1 ? - inet_net_pton_ipv4(src, dst) : - inet_cidr_pton_ipv4(src, dst, size); + inet_net_pton_ipv4(src, dst) : + inet_cidr_pton_ipv4(src, dst, size); default: errno = EAFNOSUPPORT; return (-1); @@ -108,14 +108,16 @@ inet_cidr_pton_ipv4(const char *src, u_char *dst, size_t size) ch = *src++; if (ch == '0' && (src[0] == 'x' || src[0] == 'X') - && isascii(src[1]) && isxdigit(src[1])) { + && isascii(src[1]) && isxdigit(src[1])) + { /* Hexadecimal: Eat nybble string. */ if (size <= 0) goto emsgsize; dirty = 0; tmp = 0; - src++; /* skip x or X. */ - while ((ch = *src++) != '\0' && isascii(ch) && isxdigit(ch)) { + src++; /* skip x or X. */ + while ((ch = *src++) != '\0' && isascii(ch) && isxdigit(ch)) + { if (isupper(ch)) ch = tolower(ch); n = strchr(xdigits, ch) - xdigits; @@ -124,14 +126,16 @@ inet_cidr_pton_ipv4(const char *src, u_char *dst, size_t size) tmp = n; else tmp = (tmp << 4) | n; - if (++dirty == 2) { + if (++dirty == 2) + { if (size-- <= 0) goto emsgsize; *dst++ = (u_char) tmp; dirty = 0; } } - if (dirty) { /* Odd trailing nybble? */ + if (dirty) + { /* Odd trailing nybble? */ if (size-- <= 0) goto emsgsize; *dst++ = (u_char) (tmp << 4); @@ -234,27 +238,30 @@ emsgsize: /* * int * inet_net_pton(af, src, dst, *bits) - * convert network address from presentation to network format. - * accepts inet_pton()'s input for this "af" plus trailing "/CIDR". - * "dst" is assumed large enough for its "af". "bits" is set to the - * /CIDR prefix length, which can have defaults (like /32 for IPv4). + * convert network address from presentation to network format. + * accepts inet_pton()'s input for this "af" plus trailing "/CIDR". + * "dst" is assumed large enough for its "af". "bits" is set to the + * /CIDR prefix length, which can have defaults (like /32 for IPv4). * return: - * -1 if an error occurred (inspect errno; ENOENT means bad format). - * 0 if successful conversion occurred. - * note: - * 192.5.5.1/28 has a nonzero host part, which means it isn't a network - * as called for by inet_cidr_pton() but it can be a host address with - * an included netmask. + * -1 if an error occurred (inspect errno; ENOENT means bad format). + * 0 if successful conversion occurred. + * note: + * 192.5.5.1/28 has a nonzero host part, which means it isn't a network + * as called for by inet_cidr_pton() but it can be a host address with + * an included netmask. * author: - * Paul Vixie (ISC), October 1998 + * Paul Vixie (ISC), October 1998 */ static int inet_net_pton_ipv4(const char *src, u_char *dst) { static const char digits[] = "0123456789"; const u_char *odst = dst; - int n, ch, tmp, bits; - size_t size = 4; + int n, + ch, + tmp, + bits; + size_t size = 4; /* Get the mantissa. */ while (ch = *src++, (isascii(ch) && isdigit(ch))) @@ -283,7 +290,7 @@ inet_net_pton_ipv4(const char *src, u_char *dst) if (ch == '/' && isascii(src[0]) && isdigit(src[0]) && dst > odst) { /* CIDR width specifier. Nothing can follow it. */ - ch = *src++; /* Skip over the /. */ + ch = *src++; /* Skip over the /. */ bits = 0; do { @@ -325,11 +332,11 @@ inet_net_pton_ipv4(const char *src, u_char *dst) return bits; - enoent: +enoent: errno = ENOENT; return (-1); - emsgsize: +emsgsize: errno = EMSGSIZE; return (-1); } diff --git a/src/backend/utils/adt/int8.c b/src/backend/utils/adt/int8.c index 11363ba6459..289aed674ba 100644 --- a/src/backend/utils/adt/int8.c +++ b/src/backend/utils/adt/int8.c @@ -44,21 +44,22 @@ int8in(char *str) if (!PointerIsValid(str)) elog(ERROR, "Bad (null) int8 external representation", NULL); - /* Do our own scan, rather than relying on sscanf which might be + /* + * Do our own scan, rather than relying on sscanf which might be * broken for long long. NOTE: this will not detect int64 overflow... * but sscanf doesn't either... */ - while (*ptr && isspace(*ptr)) /* skip leading spaces */ + while (*ptr && isspace(*ptr)) /* skip leading spaces */ ptr++; - if (*ptr == '-') /* handle sign */ + if (*ptr == '-') /* handle sign */ sign = -1, ptr++; else if (*ptr == '+') ptr++; - if (! isdigit(*ptr)) /* require at least one digit */ + if (!isdigit(*ptr)) /* require at least one digit */ elog(ERROR, "Bad int8 external representation '%s'", str); - while (*ptr && isdigit(*ptr)) /* process digits */ + while (*ptr && isdigit(*ptr)) /* process digits */ tmp = tmp * 10 + (*ptr++ - '0'); - if (*ptr) /* trailing junk? */ + if (*ptr) /* trailing junk? */ elog(ERROR, "Bad int8 external representation '%s'", str); *result = (sign < 0) ? -tmp : tmp; @@ -70,7 +71,7 @@ int8in(char *str) /* int8out() */ char * -int8out(int64 *val) +int8out(int64 * val) { char *result; @@ -99,37 +100,37 @@ int8out(int64 *val) * Is val1 relop val2? */ bool -int8eq(int64 *val1, int64 *val2) +int8eq(int64 * val1, int64 * val2) { return *val1 == *val2; } /* int8eq() */ bool -int8ne(int64 *val1, int64 *val2) +int8ne(int64 * val1, int64 * val2) { return *val1 != *val2; } /* int8ne() */ bool -int8lt(int64 *val1, int64 *val2) +int8lt(int64 * val1, int64 * val2) { return *val1 < *val2; } /* int8lt() */ bool -int8gt(int64 *val1, int64 *val2) +int8gt(int64 * val1, int64 * val2) { return *val1 > *val2; } /* int8gt() */ bool -int8le(int64 *val1, int64 *val2) +int8le(int64 * val1, int64 * val2) { return *val1 <= *val2; } /* int8le() */ bool -int8ge(int64 *val1, int64 *val2) +int8ge(int64 * val1, int64 * val2) { return *val1 >= *val2; } /* int8ge() */ @@ -139,37 +140,37 @@ int8ge(int64 *val1, int64 *val2) * Is 64-bit val1 relop 32-bit val2? */ bool -int84eq(int64 *val1, int32 val2) +int84eq(int64 * val1, int32 val2) { return *val1 == val2; } /* int84eq() */ bool -int84ne(int64 *val1, int32 val2) +int84ne(int64 * val1, int32 val2) { return *val1 != val2; } /* int84ne() */ bool -int84lt(int64 *val1, int32 val2) +int84lt(int64 * val1, int32 val2) { return *val1 < val2; } /* int84lt() */ bool -int84gt(int64 *val1, int32 val2) +int84gt(int64 * val1, int32 val2) { return *val1 > val2; } /* int84gt() */ bool -int84le(int64 *val1, int32 val2) +int84le(int64 * val1, int32 val2) { return *val1 <= val2; } /* int84le() */ bool -int84ge(int64 *val1, int32 val2) +int84ge(int64 * val1, int32 val2) { return *val1 >= val2; } /* int84ge() */ @@ -179,37 +180,37 @@ int84ge(int64 *val1, int32 val2) * Is 32-bit val1 relop 64-bit val2? */ bool -int48eq(int32 val1, int64 *val2) +int48eq(int32 val1, int64 * val2) { return val1 == *val2; } /* int48eq() */ bool -int48ne(int32 val1, int64 *val2) +int48ne(int32 val1, int64 * val2) { return val1 != *val2; } /* int48ne() */ bool -int48lt(int32 val1, int64 *val2) +int48lt(int32 val1, int64 * val2) { return val1 < *val2; } /* int48lt() */ bool -int48gt(int32 val1, int64 *val2) +int48gt(int32 val1, int64 * val2) { return val1 > *val2; } /* int48gt() */ bool -int48le(int32 val1, int64 *val2) +int48le(int32 val1, int64 * val2) { return val1 <= *val2; } /* int48le() */ bool -int48ge(int32 val1, int64 *val2) +int48ge(int32 val1, int64 * val2) { return val1 >= *val2; } /* int48ge() */ @@ -220,7 +221,7 @@ int48ge(int32 val1, int64 *val2) *---------------------------------------------------------*/ int64 * -int8um(int64 *val) +int8um(int64 * val) { int64 temp = 0; int64 *result = palloc(sizeof(int64)); @@ -235,7 +236,7 @@ int8um(int64 *val) int64 * -int8pl(int64 *val1, int64 *val2) +int8pl(int64 * val1, int64 * val2) { int64 *result = palloc(sizeof(int64)); @@ -248,7 +249,7 @@ int8pl(int64 *val1, int64 *val2) } /* int8pl() */ int64 * -int8mi(int64 *val1, int64 *val2) +int8mi(int64 * val1, int64 * val2) { int64 *result = palloc(sizeof(int64)); @@ -261,7 +262,7 @@ int8mi(int64 *val1, int64 *val2) } /* int8mi() */ int64 * -int8mul(int64 *val1, int64 *val2) +int8mul(int64 * val1, int64 * val2) { int64 *result = palloc(sizeof(int64)); @@ -274,7 +275,7 @@ int8mul(int64 *val1, int64 *val2) } /* int8mul() */ int64 * -int8div(int64 *val1, int64 *val2) +int8div(int64 * val1, int64 * val2) { int64 *result = palloc(sizeof(int64)); @@ -287,7 +288,7 @@ int8div(int64 *val1, int64 *val2) } /* int8div() */ int64 * -int8larger(int64 *val1, int64 *val2) +int8larger(int64 * val1, int64 * val2) { int64 *result = palloc(sizeof(int64)); @@ -300,7 +301,7 @@ int8larger(int64 *val1, int64 *val2) } /* int8larger() */ int64 * -int8smaller(int64 *val1, int64 *val2) +int8smaller(int64 * val1, int64 * val2) { int64 *result = palloc(sizeof(int64)); @@ -314,7 +315,7 @@ int8smaller(int64 *val1, int64 *val2) int64 * -int84pl(int64 *val1, int32 val2) +int84pl(int64 * val1, int32 val2) { int64 *result = palloc(sizeof(int64)); @@ -327,7 +328,7 @@ int84pl(int64 *val1, int32 val2) } /* int84pl() */ int64 * -int84mi(int64 *val1, int32 val2) +int84mi(int64 * val1, int32 val2) { int64 *result = palloc(sizeof(int64)); @@ -340,7 +341,7 @@ int84mi(int64 *val1, int32 val2) } /* int84mi() */ int64 * -int84mul(int64 *val1, int32 val2) +int84mul(int64 * val1, int32 val2) { int64 *result = palloc(sizeof(int64)); @@ -353,7 +354,7 @@ int84mul(int64 *val1, int32 val2) } /* int84mul() */ int64 * -int84div(int64 *val1, int32 val2) +int84div(int64 * val1, int32 val2) { int64 *result = palloc(sizeof(int64)); @@ -367,7 +368,7 @@ int84div(int64 *val1, int32 val2) int64 * -int48pl(int32 val1, int64 *val2) +int48pl(int32 val1, int64 * val2) { int64 *result = palloc(sizeof(int64)); @@ -380,7 +381,7 @@ int48pl(int32 val1, int64 *val2) } /* int48pl() */ int64 * -int48mi(int32 val1, int64 *val2) +int48mi(int32 val1, int64 * val2) { int64 *result = palloc(sizeof(int64)); @@ -393,7 +394,7 @@ int48mi(int32 val1, int64 *val2) } /* int48mi() */ int64 * -int48mul(int32 val1, int64 *val2) +int48mul(int32 val1, int64 * val2) { int64 *result = palloc(sizeof(int64)); @@ -406,7 +407,7 @@ int48mul(int32 val1, int64 *val2) } /* int48mul() */ int64 * -int48div(int32 val1, int64 *val2) +int48div(int32 val1, int64 * val2) { int64 *result = palloc(sizeof(int64)); @@ -434,7 +435,7 @@ int48(int32 val) } /* int48() */ int32 -int84(int64 *val) +int84(int64 * val) { int32 result; @@ -442,6 +443,7 @@ int84(int64 *val) elog(ERROR, "Invalid (null) int64, can't convert int8 to int4", NULL); #if NOT_USED + /* * Hmm. This conditional always tests true on my i686/linux box. It's * a gcc compiler bug, or I'm missing something obvious, which is more @@ -449,8 +451,8 @@ int84(int64 *val) */ if ((*val < INT_MIN) || (*val > INT_MAX)) #endif - if ((*val < (-pow(2, 31) + 1)) || (*val > (pow(2, 31) - 1))) - elog(ERROR, "int8 conversion to int4 is out of range", NULL); + if ((*val < (-pow(2, 31) + 1)) || (*val > (pow(2, 31) - 1))) + elog(ERROR, "int8 conversion to int4 is out of range", NULL); result = *val; @@ -471,7 +473,7 @@ int28 (int16 val) } /* int28() */ int16 -int82(int64 *val) +int82(int64 * val) { int16 result; @@ -489,7 +491,7 @@ int82(int64 *val) #endif float64 -i8tod(int64 *val) +i8tod(int64 * val) { float64 result = palloc(sizeof(float64data)); @@ -533,9 +535,9 @@ text_int8(text *str) elog(ERROR, "Bad (null) int8 external representation", NULL); len = (VARSIZE(str) - VARHDRSZ); - s = palloc(len+1); + s = palloc(len + 1); memmove(s, VARDATA(str), len); - *(s+len) = '\0'; + *(s + len) = '\0'; return int8in(s); } /* text_int8() */ @@ -544,7 +546,7 @@ text_int8(text *str) /* int8_text() */ text * -int8_text(int64 *val) +int8_text(int64 * val) { text *result; @@ -564,4 +566,3 @@ int8_text(int64 *val) return result; } /* int8out() */ - diff --git a/src/backend/utils/adt/like.c b/src/backend/utils/adt/like.c index 6057fa2f154..14fc5314d0c 100644 --- a/src/backend/utils/adt/like.c +++ b/src/backend/utils/adt/like.c @@ -23,7 +23,7 @@ #include "utils/builtins.h" /* where the function declarations go */ #include "mb/pg_wchar.h" -static int like(pg_wchar *text, pg_wchar *p); +static int like(pg_wchar * text, pg_wchar * p); /* * interface routines called by the function manager @@ -38,7 +38,7 @@ static int like(pg_wchar *text, pg_wchar *p); charlen - the length of the string */ static bool -fixedlen_like(char *s, struct varlena *p, int charlen) +fixedlen_like(char *s, struct varlena * p, int charlen) { pg_wchar *sterm, *pterm; @@ -83,7 +83,7 @@ fixedlen_like(char *s, struct varlena *p, int charlen) } bool -namelike(NameData *n, struct varlena *p) +namelike(NameData *n, struct varlena * p) { if (!n) return FALSE; @@ -91,13 +91,13 @@ namelike(NameData *n, struct varlena *p) } bool -namenlike(NameData *s, struct varlena *p) +namenlike(NameData *s, struct varlena * p) { return !namelike(s, p); } bool -textlike(struct varlena *s, struct varlena *p) +textlike(struct varlena * s, struct varlena * p) { if (!s) return FALSE; @@ -105,13 +105,13 @@ textlike(struct varlena *s, struct varlena *p) } bool -textnlike(struct varlena *s, struct varlena *p) +textnlike(struct varlena * s, struct varlena * p) { return !textlike(s, p); } -/* $Revision: 1.23 $ +/* $Revision: 1.24 $ ** "like.c" A first attempt at a LIKE operator for Postgres95. ** ** Originally written by Rich $alz, mirror!rs, Wed Nov 26 19:03:17 EST 1986. @@ -146,11 +146,11 @@ textnlike(struct varlena *s, struct varlena *p) ** Match text and p, return LIKE_TRUE, LIKE_FALSE, or LIKE_ABORT. */ static int -DoMatch(pg_wchar *text, pg_wchar *p) +DoMatch(pg_wchar * text, pg_wchar * p) { int matched; - for (; *p && *text; text++, p++) + for (; *p && *text; text ++, p++) { switch (*p) { @@ -159,7 +159,7 @@ DoMatch(pg_wchar *text, pg_wchar *p) p++; /* FALLTHROUGH */ default: - if (*text != *p) + if (*text !=*p) return LIKE_FALSE; break; case '_': @@ -177,16 +177,16 @@ DoMatch(pg_wchar *text, pg_wchar *p) { /* Optimization to prevent most recursion */ if ((*text == *p || - *p == '\\' || *p == '%' || *p == '_') && + *p == '\\' || *p == '%' || *p == '_') && (matched = DoMatch(text, p)) != LIKE_FALSE) return matched; - text++; + text ++; } return LIKE_ABORT; } } - if (*text != '\0') + if (*text !='\0') return LIKE_ABORT; else { @@ -203,7 +203,7 @@ DoMatch(pg_wchar *text, pg_wchar *p) ** User-level routine. Returns TRUE or FALSE. */ static int -like(pg_wchar *text, pg_wchar *p) +like(pg_wchar * text, pg_wchar * p) { if (p[0] == '%' && p[1] == '\0') return TRUE; diff --git a/src/backend/utils/adt/mac.c b/src/backend/utils/adt/mac.c index 957292af8ea..48dd19db94b 100644 --- a/src/backend/utils/adt/mac.c +++ b/src/backend/utils/adt/mac.c @@ -1,7 +1,7 @@ /* * PostgreSQL type definitions for MAC addresses. * - * $Id: mac.c,v 1.7 1999/03/22 05:00:57 momjian Exp $ + * $Id: mac.c,v 1.8 1999/05/25 16:12:08 momjian Exp $ */ #include <stdio.h> @@ -13,119 +13,119 @@ #include <utils/inet.h> manufacturer manufacturers[] = { - {0x00, 0x00, 0x0C, "Cisco"}, - {0x00, 0x00, 0x0E, "Fujitsu"}, - {0x00, 0x00, 0x0F, "NeXT"}, - {0x00, 0x00, 0x10, "Sytek"}, - {0x00, 0x00, 0x1D, "Cabletron"}, - {0x00, 0x00, 0x20, "DIAB"}, - {0x00, 0x00, 0x22, "Visual Technology"}, - {0x00, 0x00, 0x2A, "TRW"}, - {0x00, 0x00, 0x32, "GPT Limited"}, - {0x00, 0x00, 0x5A, "S & Koch"}, - {0x00, 0x00, 0x5E, "IANA"}, - {0x00, 0x00, 0x65, "Network General"}, - {0x00, 0x00, 0x6B, "MIPS"}, - {0x00, 0x00, 0x77, "MIPS"}, - {0x00, 0x00, 0x7A, "Ardent"}, - {0x00, 0x00, 0x89, "Cayman Systems"}, - {0x00, 0x00, 0x93, "Proteon"}, - {0x00, 0x00, 0x9F, "Ameristar Technology"}, - {0x00, 0x00, 0xA2, "Wellfleet"}, - {0x00, 0x00, 0xA3, "Network Application Technology"}, - {0x00, 0x00, 0xA6, "Network General"}, - {0x00, 0x00, 0xA7, "NCD"}, - {0x00, 0x00, 0xA9, "Network Systems"}, - {0x00, 0x00, 0xAA, "Xerox"}, - {0x00, 0x00, 0xB3, "CIMLinc"}, - {0x00, 0x00, 0xB7, "Dove Fastnet"}, - {0x00, 0x00, 0xBC, "Allen-Bradley"}, - {0x00, 0x00, 0xC0, "Western Digital"}, - {0x00, 0x00, 0xC5, "Farallon"}, - {0x00, 0x00, 0xC6, "Hewlett-Packard"}, - {0x00, 0x00, 0xC8, "Altos"}, - {0x00, 0x00, 0xC9, "Emulex"}, - {0x00, 0x00, 0xD7, "Dartmouth College"}, - {0x00, 0x00, 0xD8, "3Com (?)"}, - {0x00, 0x00, 0xDD, "Gould"}, - {0x00, 0x00, 0xDE, "Unigraph"}, - {0x00, 0x00, 0xE2, "Acer Counterpoint"}, - {0x00, 0x00, 0xEF, "Alantec"}, - {0x00, 0x00, 0xFD, "High Level Hardware"}, - {0x00, 0x01, 0x02, "BBN internal usage"}, - {0x00, 0x20, 0xAF, "3Com"}, - {0x00, 0x17, 0x00, "Kabel"}, - {0x00, 0x80, 0x64, "Wyse Technology"}, - {0x00, 0x80, 0x2B, "IMAC (?)"}, - {0x00, 0x80, 0x2D, "Xylogics, Inc."}, - {0x00, 0x80, 0x8C, "Frontier Software Development"}, - {0x00, 0x80, 0xC2, "IEEE 802.1 Committee"}, - {0x00, 0x80, 0xD3, "Shiva"}, - {0x00, 0xAA, 0x00, "Intel"}, - {0x00, 0xDD, 0x00, "Ungermann-Bass"}, - {0x00, 0xDD, 0x01, "Ungermann-Bass"}, - {0x02, 0x07, 0x01, "Racal InterLan"}, - {0x02, 0x04, 0x06, "BBN internal usage"}, - {0x02, 0x60, 0x86, "Satelcom MegaPac"}, - {0x02, 0x60, 0x8C, "3Com"}, - {0x02, 0xCF, 0x1F, "CMC"}, - {0x08, 0x00, 0x02, "3Com"}, - {0x08, 0x00, 0x03, "ACC"}, - {0x08, 0x00, 0x05, "Symbolics"}, - {0x08, 0x00, 0x08, "BBN"}, - {0x08, 0x00, 0x09, "Hewlett-Packard"}, - {0x08, 0x00, 0x0A, "Nestar Systems"}, - {0x08, 0x00, 0x0B, "Unisys"}, - {0x08, 0x00, 0x11, "Tektronix"}, - {0x08, 0x00, 0x14, "Excelan"}, - {0x08, 0x00, 0x17, "NSC"}, - {0x08, 0x00, 0x1A, "Data General"}, - {0x08, 0x00, 0x1B, "Data General"}, - {0x08, 0x00, 0x1E, "Apollo"}, - {0x08, 0x00, 0x20, "Sun"}, - {0x08, 0x00, 0x22, "NBI"}, - {0x08, 0x00, 0x25, "CDC"}, - {0x08, 0x00, 0x26, "Norsk Data"}, - {0x08, 0x00, 0x27, "PCS Computer Systems GmbH"}, - {0x08, 0x00, 0x28, "Texas Instruments"}, - {0x08, 0x00, 0x2B, "DEC"}, - {0x08, 0x00, 0x2E, "Metaphor"}, - {0x08, 0x00, 0x2F, "Prime Computer"}, - {0x08, 0x00, 0x36, "Intergraph"}, - {0x08, 0x00, 0x37, "Fujitsu-Xerox"}, - {0x08, 0x00, 0x38, "Bull"}, - {0x08, 0x00, 0x39, "Spider Systems"}, - {0x08, 0x00, 0x41, "DCA Digital Comm. Assoc."}, - {0x08, 0x00, 0x45, "Xylogics (?)"}, - {0x08, 0x00, 0x46, "Sony"}, - {0x08, 0x00, 0x47, "Sequent"}, - {0x08, 0x00, 0x49, "Univation"}, - {0x08, 0x00, 0x4C, "Encore"}, - {0x08, 0x00, 0x4E, "BICC"}, - {0x08, 0x00, 0x56, "Stanford University"}, - {0x08, 0x00, 0x58, "DECsystem 20 (?)"}, - {0x08, 0x00, 0x5A, "IBM"}, - {0x08, 0x00, 0x67, "Comdesign"}, - {0x08, 0x00, 0x68, "Ridge"}, - {0x08, 0x00, 0x69, "Silicon Graphics"}, - {0x08, 0x00, 0x6E, "Concurrent"}, - {0x08, 0x00, 0x75, "DDE"}, - {0x08, 0x00, 0x7C, "Vitalink"}, - {0x08, 0x00, 0x80, "XIOS"}, - {0x08, 0x00, 0x86, "Imagen/QMS"}, - {0x08, 0x00, 0x87, "Xyplex"}, - {0x08, 0x00, 0x89, "Kinetics"}, - {0x08, 0x00, 0x8B, "Pyramid"}, - {0x08, 0x00, 0x8D, "XyVision"}, - {0x08, 0x00, 0x90, "Retix Inc"}, - {0x48, 0x44, 0x53, "HDS (?)"}, - {0x80, 0x00, 0x10, "AT&T"}, - {0xAA, 0x00, 0x00, "DEC"}, - {0xAA, 0x00, 0x01, "DEC"}, - {0xAA, 0x00, 0x02, "DEC"}, - {0xAA, 0x00, 0x03, "DEC"}, - {0xAA, 0x00, 0x04, "DEC"}, - {0x00, 0x00, 0x00, NULL} + {0x00, 0x00, 0x0C, "Cisco"}, + {0x00, 0x00, 0x0E, "Fujitsu"}, + {0x00, 0x00, 0x0F, "NeXT"}, + {0x00, 0x00, 0x10, "Sytek"}, + {0x00, 0x00, 0x1D, "Cabletron"}, + {0x00, 0x00, 0x20, "DIAB"}, + {0x00, 0x00, 0x22, "Visual Technology"}, + {0x00, 0x00, 0x2A, "TRW"}, + {0x00, 0x00, 0x32, "GPT Limited"}, + {0x00, 0x00, 0x5A, "S & Koch"}, + {0x00, 0x00, 0x5E, "IANA"}, + {0x00, 0x00, 0x65, "Network General"}, + {0x00, 0x00, 0x6B, "MIPS"}, + {0x00, 0x00, 0x77, "MIPS"}, + {0x00, 0x00, 0x7A, "Ardent"}, + {0x00, 0x00, 0x89, "Cayman Systems"}, + {0x00, 0x00, 0x93, "Proteon"}, + {0x00, 0x00, 0x9F, "Ameristar Technology"}, + {0x00, 0x00, 0xA2, "Wellfleet"}, + {0x00, 0x00, 0xA3, "Network Application Technology"}, + {0x00, 0x00, 0xA6, "Network General"}, + {0x00, 0x00, 0xA7, "NCD"}, + {0x00, 0x00, 0xA9, "Network Systems"}, + {0x00, 0x00, 0xAA, "Xerox"}, + {0x00, 0x00, 0xB3, "CIMLinc"}, + {0x00, 0x00, 0xB7, "Dove Fastnet"}, + {0x00, 0x00, 0xBC, "Allen-Bradley"}, + {0x00, 0x00, 0xC0, "Western Digital"}, + {0x00, 0x00, 0xC5, "Farallon"}, + {0x00, 0x00, 0xC6, "Hewlett-Packard"}, + {0x00, 0x00, 0xC8, "Altos"}, + {0x00, 0x00, 0xC9, "Emulex"}, + {0x00, 0x00, 0xD7, "Dartmouth College"}, + {0x00, 0x00, 0xD8, "3Com (?)"}, + {0x00, 0x00, 0xDD, "Gould"}, + {0x00, 0x00, 0xDE, "Unigraph"}, + {0x00, 0x00, 0xE2, "Acer Counterpoint"}, + {0x00, 0x00, 0xEF, "Alantec"}, + {0x00, 0x00, 0xFD, "High Level Hardware"}, + {0x00, 0x01, 0x02, "BBN internal usage"}, + {0x00, 0x20, 0xAF, "3Com"}, + {0x00, 0x17, 0x00, "Kabel"}, + {0x00, 0x80, 0x64, "Wyse Technology"}, + {0x00, 0x80, 0x2B, "IMAC (?)"}, + {0x00, 0x80, 0x2D, "Xylogics, Inc."}, + {0x00, 0x80, 0x8C, "Frontier Software Development"}, + {0x00, 0x80, 0xC2, "IEEE 802.1 Committee"}, + {0x00, 0x80, 0xD3, "Shiva"}, + {0x00, 0xAA, 0x00, "Intel"}, + {0x00, 0xDD, 0x00, "Ungermann-Bass"}, + {0x00, 0xDD, 0x01, "Ungermann-Bass"}, + {0x02, 0x07, 0x01, "Racal InterLan"}, + {0x02, 0x04, 0x06, "BBN internal usage"}, + {0x02, 0x60, 0x86, "Satelcom MegaPac"}, + {0x02, 0x60, 0x8C, "3Com"}, + {0x02, 0xCF, 0x1F, "CMC"}, + {0x08, 0x00, 0x02, "3Com"}, + {0x08, 0x00, 0x03, "ACC"}, + {0x08, 0x00, 0x05, "Symbolics"}, + {0x08, 0x00, 0x08, "BBN"}, + {0x08, 0x00, 0x09, "Hewlett-Packard"}, + {0x08, 0x00, 0x0A, "Nestar Systems"}, + {0x08, 0x00, 0x0B, "Unisys"}, + {0x08, 0x00, 0x11, "Tektronix"}, + {0x08, 0x00, 0x14, "Excelan"}, + {0x08, 0x00, 0x17, "NSC"}, + {0x08, 0x00, 0x1A, "Data General"}, + {0x08, 0x00, 0x1B, "Data General"}, + {0x08, 0x00, 0x1E, "Apollo"}, + {0x08, 0x00, 0x20, "Sun"}, + {0x08, 0x00, 0x22, "NBI"}, + {0x08, 0x00, 0x25, "CDC"}, + {0x08, 0x00, 0x26, "Norsk Data"}, + {0x08, 0x00, 0x27, "PCS Computer Systems GmbH"}, + {0x08, 0x00, 0x28, "Texas Instruments"}, + {0x08, 0x00, 0x2B, "DEC"}, + {0x08, 0x00, 0x2E, "Metaphor"}, + {0x08, 0x00, 0x2F, "Prime Computer"}, + {0x08, 0x00, 0x36, "Intergraph"}, + {0x08, 0x00, 0x37, "Fujitsu-Xerox"}, + {0x08, 0x00, 0x38, "Bull"}, + {0x08, 0x00, 0x39, "Spider Systems"}, + {0x08, 0x00, 0x41, "DCA Digital Comm. Assoc."}, + {0x08, 0x00, 0x45, "Xylogics (?)"}, + {0x08, 0x00, 0x46, "Sony"}, + {0x08, 0x00, 0x47, "Sequent"}, + {0x08, 0x00, 0x49, "Univation"}, + {0x08, 0x00, 0x4C, "Encore"}, + {0x08, 0x00, 0x4E, "BICC"}, + {0x08, 0x00, 0x56, "Stanford University"}, + {0x08, 0x00, 0x58, "DECsystem 20 (?)"}, + {0x08, 0x00, 0x5A, "IBM"}, + {0x08, 0x00, 0x67, "Comdesign"}, + {0x08, 0x00, 0x68, "Ridge"}, + {0x08, 0x00, 0x69, "Silicon Graphics"}, + {0x08, 0x00, 0x6E, "Concurrent"}, + {0x08, 0x00, 0x75, "DDE"}, + {0x08, 0x00, 0x7C, "Vitalink"}, + {0x08, 0x00, 0x80, "XIOS"}, + {0x08, 0x00, 0x86, "Imagen/QMS"}, + {0x08, 0x00, 0x87, "Xyplex"}, + {0x08, 0x00, 0x89, "Kinetics"}, + {0x08, 0x00, 0x8B, "Pyramid"}, + {0x08, 0x00, 0x8D, "XyVision"}, + {0x08, 0x00, 0x90, "Retix Inc"}, + {0x48, 0x44, 0x53, "HDS (?)"}, + {0x80, 0x00, 0x10, "AT&T"}, + {0xAA, 0x00, 0x00, "DEC"}, + {0xAA, 0x00, 0x01, "DEC"}, + {0xAA, 0x00, 0x02, "DEC"}, + {0xAA, 0x00, 0x03, "DEC"}, + {0xAA, 0x00, 0x04, "DEC"}, + {0x00, 0x00, 0x00, NULL} }; /* diff --git a/src/backend/utils/adt/nabstime.c b/src/backend/utils/adt/nabstime.c index 11f70819420..dbbc54c3f82 100644 --- a/src/backend/utils/adt/nabstime.c +++ b/src/backend/utils/adt/nabstime.c @@ -4,7 +4,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: nabstime.c,v 1.54 1999/04/26 04:42:49 ishii Exp $ + * $Id: nabstime.c,v 1.55 1999/05/25 16:12:09 momjian Exp $ * */ #include <stdio.h> @@ -64,13 +64,18 @@ GetCurrentAbsoluteTime(void) CDayLight = (tm->tm_isdst > 0); #ifdef NOT_USED + /* * XXX is there a better way to get local timezone string w/o * tzname? - tgl 97/03/18 */ strftime(CTZName, MAXTZLEN, "%Z", tm); #endif - /* XXX FreeBSD man pages indicate that this should work - thomas 1998-12-12 */ + + /* + * XXX FreeBSD man pages indicate that this should work - thomas + * 1998-12-12 + */ strcpy(CTZName, tm->tm_zone); #elif defined(HAVE_INT_TIMEZONE) @@ -79,10 +84,10 @@ GetCurrentAbsoluteTime(void) CDayLight = tm->tm_isdst; CTimeZone = #ifdef __CYGWIN32__ - (tm->tm_isdst ? (_timezone - 3600) : _timezone); + (tm->tm_isdst ? (_timezone - 3600) : _timezone); #else - (tm->tm_isdst ? (timezone - 3600) : timezone); -#endif + (tm->tm_isdst ? (timezone - 3600) : timezone); +#endif strcpy(CTZName, tzname[tm->tm_isdst]); #else #error USE_POSIX_TIME defined but no time zone available @@ -91,8 +96,9 @@ GetCurrentAbsoluteTime(void) CTimeZone = tb.timezone * 60; CDayLight = (tb.dstflag != 0); - /* XXX does this work to get the local timezone string in V7? - * - tgl 97/03/18 + /* + * XXX does this work to get the local timezone string in V7? - + * tgl 97/03/18 */ strftime(CTZName, MAXTZLEN, "%Z", localtime(&now)); #endif @@ -389,6 +395,7 @@ AbsoluteTimeIsAfter(AbsoluteTime time1, AbsoluteTime time2) return time1 > time2; } + #endif /* abstime_finite() diff --git a/src/backend/utils/adt/name.c b/src/backend/utils/adt/name.c index d49eb9cb23c..1780df2c427 100644 --- a/src/backend/utils/adt/name.c +++ b/src/backend/utils/adt/name.c @@ -11,7 +11,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/name.c,v 1.17 1999/02/13 23:19:25 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/name.c,v 1.18 1999/05/25 16:12:10 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -161,6 +161,7 @@ namecmp(Name n1, Name n2) { return strncmp(n1->data, n2->data, NAMEDATALEN); } + #endif int diff --git a/src/backend/utils/adt/network.c b/src/backend/utils/adt/network.c index 12f28ccce76..cd86ec6f3d5 100644 --- a/src/backend/utils/adt/network.c +++ b/src/backend/utils/adt/network.c @@ -3,7 +3,7 @@ * is for IP V4 CIDR notation, but prepared for V6: just * add the necessary bits where the comments indicate. * - * $Id: network.c,v 1.8 1999/04/15 02:20:50 thomas Exp $ + * $Id: network.c,v 1.9 1999/05/25 16:12:11 momjian Exp $ * Jon Postel RIP 16 Oct 1998 */ @@ -52,7 +52,7 @@ network_in(char *src, int type) if (!src) return NULL; - + dst = palloc(VARHDRSZ + sizeof(inet_struct)); if (dst == NULL) elog(ERROR, "unable to allocate memory in network_in()"); @@ -60,7 +60,7 @@ network_in(char *src, int type) /* First, try for an IP V4 address: */ ip_family(dst) = AF_INET; bits = inet_net_pton(ip_family(dst), src, &ip_v4addr(dst), - type ? ip_addrsize(dst) : -1); + type ? ip_addrsize(dst) : -1); if ((bits < 0) || (bits > 32)) /* Go for an IPV6 address here, before faulting out: */ elog(ERROR, "could not parse \"%s\"", src); @@ -102,10 +102,10 @@ inet_out(inet *src) /* It's an IP V4 address: */ if (ip_type(src)) dst = inet_cidr_ntop(AF_INET, &ip_v4addr(src), ip_bits(src), - tmp, sizeof(tmp)); + tmp, sizeof(tmp)); else dst = inet_net_ntop(AF_INET, &ip_v4addr(src), ip_bits(src), - tmp, sizeof(tmp)); + tmp, sizeof(tmp)); if (dst == NULL) elog(ERROR, "unable to print address (%s)", strerror(errno)); @@ -222,7 +222,7 @@ network_sub(inet *a1, inet *a2) { if (!PointerIsValid(a1) || !PointerIsValid(a2)) return FALSE; - + if ((ip_family(a1) == AF_INET) && (ip_family(a2) == AF_INET)) { return ((ip_bits(a1) > ip_bits(a2)) @@ -370,7 +370,7 @@ network_broadcast(inet *ip) if (ip_family(ip) == AF_INET) { /* It's an IP V4 address: */ - int addr; + int addr; unsigned long mask = 0xffffffff; if (ip_bits(ip) < 32) @@ -402,7 +402,7 @@ network_network(inet *ip) { text *ret; int len; - char tmp[sizeof("255.255.255.255/32")]; + char tmp[sizeof("255.255.255.255/32")]; if (!PointerIsValid(ip)) return NULL; @@ -410,8 +410,8 @@ network_network(inet *ip) if (ip_family(ip) == AF_INET) { /* It's an IP V4 address: */ - int addr = htonl(ntohl(ip_v4addr(ip)) & (0xffffffff << (32 - ip_bits(ip)))); - + int addr = htonl(ntohl(ip_v4addr(ip)) & (0xffffffff << (32 - ip_bits(ip)))); + if (inet_cidr_ntop(AF_INET, &addr, ip_bits(ip), tmp, sizeof(tmp)) == NULL) elog(ERROR, "unable to print network (%s)", strerror(errno)); diff --git a/src/backend/utils/adt/not_in.c b/src/backend/utils/adt/not_in.c index 62a76c83692..7082b0d007e 100644 --- a/src/backend/utils/adt/not_in.c +++ b/src/backend/utils/adt/not_in.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/not_in.c,v 1.15 1999/03/15 03:24:32 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/not_in.c,v 1.16 1999/05/25 16:12:12 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -47,18 +47,16 @@ int4notin(int32 not_in_arg, char *relation_and_attr) int attrid; char *relation, *attribute; - char my_copy[NAMEDATALEN*2+2]; + char my_copy[NAMEDATALEN * 2 + 2]; Datum value; strncpy(my_copy, relation_and_attr, sizeof(my_copy)); - my_copy[sizeof(my_copy)-1] = '\0'; + my_copy[sizeof(my_copy) - 1] = '\0'; relation = (char *) strtok(my_copy, "."); attribute = (char *) strtok(NULL, "."); if (attribute == NULL) - { elog(ERROR, "int4notin: must provide relationname.attributename"); - } /* Open the relation and get a relation descriptor */ diff --git a/src/backend/utils/adt/numeric.c b/src/backend/utils/adt/numeric.c index b1a86986ac0..e9e5a28c363 100644 --- a/src/backend/utils/adt/numeric.c +++ b/src/backend/utils/adt/numeric.c @@ -5,7 +5,7 @@ * * 1998 Jan Wieck * - * $Header: /cvsroot/pgsql/src/backend/utils/adt/numeric.c,v 1.13 1999/05/10 18:17:44 wieck Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/numeric.c,v 1.14 1999/05/25 16:12:14 momjian Exp $ * * ---------- */ @@ -41,10 +41,10 @@ #define NUMERIC_MAX_FREEBUFS 20 #ifndef MIN -# define MIN(a,b) (((a)<(b)) ? (a) : (b)) +#define MIN(a,b) (((a)<(b)) ? (a) : (b)) #endif #ifndef MAX -# define MAX(a,b) (((a)>(b)) ? (a) : (b)) +#define MAX(a,b) (((a)>(b)) ? (a) : (b)) #endif #ifndef NAN @@ -56,52 +56,54 @@ * Local data types * ---------- */ -typedef unsigned char NumericDigit; +typedef unsigned char NumericDigit; -typedef struct NumericDigitBuf { - struct NumericDigitBuf *prev; - struct NumericDigitBuf *next; - int size; -} NumericDigitBuf; +typedef struct NumericDigitBuf +{ + struct NumericDigitBuf *prev; + struct NumericDigitBuf *next; + int size; +} NumericDigitBuf; -typedef struct NumericVar { - int ndigits; - int weight; - int rscale; - int dscale; - int sign; - NumericDigitBuf *buf; - NumericDigit *digits; -} NumericVar; +typedef struct NumericVar +{ + int ndigits; + int weight; + int rscale; + int dscale; + int sign; + NumericDigitBuf *buf; + NumericDigit *digits; +} NumericVar; /* ---------- * Local data * ---------- */ -static NumericDigitBuf *digitbuf_freelist = NULL; -static NumericDigitBuf *digitbuf_usedlist = NULL; -static int digitbuf_nfree = 0; -static int global_rscale = NUMERIC_MIN_RESULT_SCALE; +static NumericDigitBuf *digitbuf_freelist = NULL; +static NumericDigitBuf *digitbuf_usedlist = NULL; +static int digitbuf_nfree = 0; +static int global_rscale = NUMERIC_MIN_RESULT_SCALE; /* ---------- * Some preinitialized variables we need often * ---------- */ -static NumericDigit const_zero_data[1] = {0}; -static NumericVar const_zero = - {0, 0, 0, 0, NUMERIC_POS, NULL, const_zero_data}; +static NumericDigit const_zero_data[1] = {0}; +static NumericVar const_zero = +{0, 0, 0, 0, NUMERIC_POS, NULL, const_zero_data}; -static NumericDigit const_one_data[1] = {1}; -static NumericVar const_one = - {1, 0, 0, 0, NUMERIC_POS, NULL, const_one_data}; +static NumericDigit const_one_data[1] = {1}; +static NumericVar const_one = +{1, 0, 0, 0, NUMERIC_POS, NULL, const_one_data}; -static NumericDigit const_two_data[1] = {2}; -static NumericVar const_two = - {1, 0, 0, 0, NUMERIC_POS, NULL, const_two_data}; +static NumericDigit const_two_data[1] = {2}; +static NumericVar const_two = +{1, 0, 0, 0, NUMERIC_POS, NULL, const_two_data}; -static NumericVar const_nan = - {0, 0, 0, 0, NUMERIC_NAN, NULL, NULL}; +static NumericVar const_nan = +{0, 0, 0, 0, NUMERIC_NAN, NULL, NULL}; @@ -112,44 +114,45 @@ static NumericVar const_nan = #ifdef NUMERIC_DEBUG static void dump_numeric(char *str, Numeric num); -static void dump_var(char *str, NumericVar *var); +static void dump_var(char *str, NumericVar * var); + #else #define dump_numeric(s,n) #define dump_var(s,v) #endif static NumericDigitBuf *digitbuf_alloc(int size); -static void digitbuf_free(NumericDigitBuf *buf); +static void digitbuf_free(NumericDigitBuf * buf); #define init_var(v) memset(v,0,sizeof(NumericVar)) -static void free_var(NumericVar *var); +static void free_var(NumericVar * var); static void free_allvars(void); -static void set_var_from_str(char *str, NumericVar *dest); -static void set_var_from_num(Numeric value, NumericVar *dest); -static void set_var_from_var(NumericVar *value, NumericVar *dest); -static Numeric make_result(NumericVar *var); +static void set_var_from_str(char *str, NumericVar * dest); +static void set_var_from_num(Numeric value, NumericVar * dest); +static void set_var_from_var(NumericVar * value, NumericVar * dest); +static Numeric make_result(NumericVar * var); -static void apply_typmod(NumericVar *var, int32 typmod); +static void apply_typmod(NumericVar * var, int32 typmod); -static int cmp_var(NumericVar *var1, NumericVar *var2); -static void add_var(NumericVar *var1, NumericVar *var2, NumericVar *result); -static void sub_var(NumericVar *var1, NumericVar *var2, NumericVar *result); -static void mul_var(NumericVar *var1, NumericVar *var2, NumericVar *result); -static void div_var(NumericVar *var1, NumericVar *var2, NumericVar *result); -static void mod_var(NumericVar *var1, NumericVar *var2, NumericVar *result); -static void ceil_var(NumericVar *var, NumericVar *result); -static void floor_var(NumericVar *var, NumericVar *result); +static int cmp_var(NumericVar * var1, NumericVar * var2); +static void add_var(NumericVar * var1, NumericVar * var2, NumericVar * result); +static void sub_var(NumericVar * var1, NumericVar * var2, NumericVar * result); +static void mul_var(NumericVar * var1, NumericVar * var2, NumericVar * result); +static void div_var(NumericVar * var1, NumericVar * var2, NumericVar * result); +static void mod_var(NumericVar * var1, NumericVar * var2, NumericVar * result); +static void ceil_var(NumericVar * var, NumericVar * result); +static void floor_var(NumericVar * var, NumericVar * result); -static void sqrt_var(NumericVar *arg, NumericVar *result); -static void exp_var(NumericVar *arg, NumericVar *result); -static void ln_var(NumericVar *arg, NumericVar *result); -static void log_var(NumericVar *base, NumericVar *num, NumericVar *result); -static void power_var(NumericVar *base, NumericVar *exp, NumericVar *result); +static void sqrt_var(NumericVar * arg, NumericVar * result); +static void exp_var(NumericVar * arg, NumericVar * result); +static void ln_var(NumericVar * arg, NumericVar * result); +static void log_var(NumericVar * base, NumericVar * num, NumericVar * result); +static void power_var(NumericVar * base, NumericVar * exp, NumericVar * result); -static int cmp_abs(NumericVar *var1, NumericVar *var2); -static void add_abs(NumericVar *var1, NumericVar *var2, NumericVar *result); -static void sub_abs(NumericVar *var1, NumericVar *var2, NumericVar *result); +static int cmp_abs(NumericVar * var1, NumericVar * var2); +static void add_abs(NumericVar * var1, NumericVar * var2, NumericVar * result); +static void sub_abs(NumericVar * var1, NumericVar * var2, NumericVar * result); @@ -216,8 +219,8 @@ numeric_in(char *str, int dummy, int32 typmod) char * numeric_out(Numeric num) { - char *str; - char *cp; + char *str; + char *cp; NumericVar x; int i; int d; @@ -257,7 +260,7 @@ numeric_out(Numeric num) */ str = palloc(x.dscale + MAX(0, x.weight) + 5); cp = str; - + /* ---------- * Output a dash for negative values * ---------- @@ -272,8 +275,8 @@ numeric_out(Numeric num) */ if (x.dscale < x.rscale && (x.dscale + x.weight + 1) < x.ndigits) { - int j; - int carry; + int j; + int carry; j = x.dscale + x.weight + 1; carry = (x.digits[j] > 4) ? 1 : 0; @@ -342,7 +345,7 @@ numeric_out(Numeric num) * * This is a special function called by the Postgres database system * before a value is stored in a tuples attribute. The precision and - * scale of the attribute have to be applied on the value. + * scale of the attribute have to be applied on the value. * ---------- */ Numeric @@ -374,9 +377,9 @@ numeric(Numeric num, int32 typmod) * copy of the input value * ---------- */ - if (typmod < (int32)(VARHDRSZ)) + if (typmod < (int32) (VARHDRSZ)) { - new = (Numeric)palloc(num->varlen); + new = (Numeric) palloc(num->varlen); memcpy(new, num, num->varlen); return new; } @@ -387,7 +390,7 @@ numeric(Numeric num, int32 typmod) */ tmp_typmod = typmod - VARHDRSZ; precision = (tmp_typmod >> 16) & 0xffff; - scale = tmp_typmod & 0xffff; + scale = tmp_typmod & 0xffff; maxweight = precision - scale; /* ---------- @@ -398,11 +401,11 @@ numeric(Numeric num, int32 typmod) */ if (num->n_weight < maxweight && scale >= num->n_rscale) { - new = (Numeric)palloc(num->varlen); + new = (Numeric) palloc(num->varlen); memcpy(new, num, num->varlen); new->n_rscale = scale; - new->n_sign_dscale = NUMERIC_SIGN(new) | - ((uint16)scale & ~NUMERIC_SIGN_MASK); + new->n_sign_dscale = NUMERIC_SIGN(new) | + ((uint16) scale & ~NUMERIC_SIGN_MASK); return new; } @@ -454,7 +457,7 @@ numeric_abs(Numeric num) * Do it the easy way directly on the packed format * ---------- */ - res = (Numeric)palloc(num->varlen); + res = (Numeric) palloc(num->varlen); memcpy(res, num, num->varlen); res->n_sign_dscale = NUMERIC_POS | NUMERIC_DSCALE(num); @@ -492,9 +495,7 @@ numeric_sign(Numeric num) * ---------- */ if (num->varlen == NUMERIC_HDRSZ) - { set_var_from_var(&const_zero, &result); - } else { /* ---------- @@ -523,7 +524,7 @@ Numeric numeric_round(Numeric num, int32 scale) { int32 typmod; - int precision; + int precision; /* ---------- * Handle NULL @@ -547,7 +548,7 @@ numeric_round(Numeric num, int32 scale) { free_allvars(); elog(ERROR, "illegal numeric scale %d - must be between 0 and %d", - scale, NUMERIC_MAX_DISPLAY_SCALE); + scale, NUMERIC_MAX_DISPLAY_SCALE); } /* ---------- @@ -569,8 +570,8 @@ numeric_round(Numeric num, int32 scale) Numeric numeric_trunc(Numeric num, int32 scale) { - Numeric res; - NumericVar arg; + Numeric res; + NumericVar arg; /* ---------- * Handle NULL @@ -594,7 +595,7 @@ numeric_trunc(Numeric num, int32 scale) { free_allvars(); elog(ERROR, "illegal numeric scale %d - must be between 0 and %d", - scale, NUMERIC_MAX_DISPLAY_SCALE); + scale, NUMERIC_MAX_DISPLAY_SCALE); } /* ---------- @@ -609,9 +610,7 @@ numeric_trunc(Numeric num, int32 scale) arg.ndigits = MIN(arg.ndigits, MAX(0, arg.weight + scale + 1)); while (arg.ndigits > 0 && arg.digits[arg.ndigits - 1] == 0) - { arg.ndigits--; - } /* ---------- * Return the truncated result @@ -1085,7 +1084,7 @@ numeric_div(Numeric num1, Numeric num2) * numeric.h): * * DR = MIN(MAX(D1 + D2, MIN_DISPLAY_SCALE)) - * SR = MIN(MAX(MAX(S1 + S2, MIN_RESULT_SCALE), DR + 4), MAX_RESULT_SCALE) + * SR = MIN(MAX(MAX(S1 + S2, MIN_RESULT_SCALE), DR + 4), MAX_RESULT_SCALE) * * By default, any result is computed with a minimum of 34 digits * after the decimal point or at least with 4 digits more than @@ -1094,7 +1093,7 @@ numeric_div(Numeric num1, Numeric num2) */ res_dscale = MAX(arg1.dscale + arg2.dscale, NUMERIC_MIN_DISPLAY_SCALE); res_dscale = MIN(res_dscale, NUMERIC_MAX_DISPLAY_SCALE); - global_rscale = MAX(arg1.rscale + arg2.rscale, + global_rscale = MAX(arg1.rscale + arg2.rscale, NUMERIC_MIN_RESULT_SCALE); global_rscale = MAX(global_rscale, res_dscale + 4); global_rscale = MIN(global_rscale, NUMERIC_MAX_RESULT_SCALE); @@ -1358,10 +1357,10 @@ numeric_larger(Numeric num1, Numeric num2) Numeric numeric_sqrt(Numeric num) { - Numeric res; - NumericVar arg; - NumericVar result; - int res_dscale; + Numeric res; + NumericVar arg; + NumericVar result; + int res_dscale; /* ---------- * Handle NULL @@ -1415,10 +1414,10 @@ numeric_sqrt(Numeric num) Numeric numeric_exp(Numeric num) { - Numeric res; - NumericVar arg; - NumericVar result; - int res_dscale; + Numeric res; + NumericVar arg; + NumericVar result; + int res_dscale; /* ---------- * Handle NULL @@ -1470,10 +1469,10 @@ numeric_exp(Numeric num) Numeric numeric_ln(Numeric num) { - Numeric res; - NumericVar arg; - NumericVar result; - int res_dscale; + Numeric res; + NumericVar arg; + NumericVar result; + int res_dscale; /* ---------- * Handle NULL @@ -1525,11 +1524,11 @@ numeric_ln(Numeric num) Numeric numeric_log(Numeric num1, Numeric num2) { - Numeric res; - NumericVar arg1; - NumericVar arg2; - NumericVar result; - int res_dscale; + Numeric res; + NumericVar arg1; + NumericVar arg2; + NumericVar result; + int res_dscale; /* ---------- * Handle NULL @@ -1588,11 +1587,11 @@ numeric_log(Numeric num1, Numeric num2) Numeric numeric_power(Numeric num1, Numeric num2) { - Numeric res; - NumericVar arg1; - NumericVar arg2; - NumericVar result; - int res_dscale; + Numeric res; + NumericVar arg1; + NumericVar arg2; + NumericVar result; + int res_dscale; /* ---------- * Handle NULL @@ -1653,7 +1652,7 @@ int4_numeric(int32 val) { Numeric res; NumericVar result; - char *tmp; + char *tmp; init_var(&result); @@ -1671,7 +1670,7 @@ int4_numeric(int32 val) int32 numeric_int4(Numeric num) { - char *tmp; + char *tmp; int32 result; if (num == NULL) @@ -1717,7 +1716,7 @@ float8_numeric(float64 val) float64 numeric_float8(Numeric num) { - char *tmp; + char *tmp; float64 result; if (num == NULL) @@ -1725,7 +1724,7 @@ numeric_float8(Numeric num) if (NUMERIC_IS_NAN(num)) { - result = (float64)palloc(sizeof(float64data)); + result = (float64) palloc(sizeof(float64data)); *result = NAN; return result; } @@ -1743,7 +1742,7 @@ float4_numeric(float32 val) { Numeric res; NumericVar result; - char *tmp; + char *tmp; if (val == NULL) return NULL; @@ -1767,7 +1766,7 @@ float4_numeric(float32 val) float32 numeric_float4(Numeric num) { - char *tmp; + char *tmp; float32 result; if (num == NULL) @@ -1775,7 +1774,7 @@ numeric_float4(Numeric num) if (NUMERIC_IS_NAN(num)) { - result = (float32)palloc(sizeof(float32data)); + result = (float32) palloc(sizeof(float32data)); *result = NAN; return result; } @@ -1805,26 +1804,28 @@ numeric_float4(Numeric num) static void dump_numeric(char *str, Numeric num) { - int i; + int i; printf("%s: NUMERIC w=%d r=%d d=%d ", str, num->n_weight, num->n_rscale, - NUMERIC_DSCALE(num)); + NUMERIC_DSCALE(num)); switch (NUMERIC_SIGN(num)) { - case NUMERIC_POS: printf("POS"); - break; - case NUMERIC_NEG: printf("NEG"); - break; - case NUMERIC_NAN: printf("NaN"); - break; - default: printf("SIGN=0x%x", NUMERIC_SIGN(num)); - break; + case NUMERIC_POS: + printf("POS"); + break; + case NUMERIC_NEG: + printf("NEG"); + break; + case NUMERIC_NAN: + printf("NaN"); + break; + default: + printf("SIGN=0x%x", NUMERIC_SIGN(num)); + break; } for (i = 0; i < num->varlen - NUMERIC_HDRSZ; i++) - { printf(" %d %d", (num->n_data[i] >> 4) & 0x0f, num->n_data[i] & 0x0f); - } printf("\n"); } @@ -1834,31 +1835,35 @@ dump_numeric(char *str, Numeric num) * ---------- */ static void -dump_var(char *str, NumericVar *var) +dump_var(char *str, NumericVar * var) { - int i; + int i; printf("%s: VAR w=%d r=%d d=%d ", str, var->weight, var->rscale, - var->dscale); + var->dscale); switch (var->sign) { - case NUMERIC_POS: printf("POS"); - break; - case NUMERIC_NEG: printf("NEG"); - break; - case NUMERIC_NAN: printf("NaN"); - break; - default: printf("SIGN=0x%x", var->sign); - break; + case NUMERIC_POS: + printf("POS"); + break; + case NUMERIC_NEG: + printf("NEG"); + break; + case NUMERIC_NAN: + printf("NaN"); + break; + default: + printf("SIGN=0x%x", var->sign); + break; } for (i = 0; i < var->ndigits; i++) printf(" %d", var->digits[i]); - + printf("\n"); } -#endif /* NUMERIC_DEBUG */ +#endif /* NUMERIC_DEBUG */ /* ---------- @@ -1868,7 +1873,7 @@ dump_var(char *str, NumericVar *var) * information (sign, scales etc.) and a digit buffer for the * value itself. All the variable level functions are written in * a style that makes it possible to give one and the same variable - * as argument and result destination. + * as argument and result destination. * * The two functions below manage unused buffers in a free list * as a try to reduce the number of malloc()/free() calls. @@ -1877,8 +1882,8 @@ dump_var(char *str, NumericVar *var) static NumericDigitBuf * digitbuf_alloc(int size) { - NumericDigitBuf *buf; - int asize; + NumericDigitBuf *buf; + int asize; /* ---------- * Lookup the free list if there is a digit buffer of @@ -1887,7 +1892,8 @@ digitbuf_alloc(int size) */ for (buf = digitbuf_freelist; buf != NULL; buf = buf->next) { - if (buf->size < size) continue; + if (buf->size < size) + continue; /* ---------- * We found a free buffer that is big enough - remove it from @@ -1930,7 +1936,7 @@ digitbuf_alloc(int size) * ---------- */ for (asize = NUMERIC_MIN_BUFSIZE; asize < size; asize *= 2); - buf = (NumericDigitBuf *)malloc(sizeof(NumericDigitBuf) + asize); + buf = (NumericDigitBuf *) malloc(sizeof(NumericDigitBuf) + asize); buf->size = asize; /* ---------- @@ -1956,9 +1962,9 @@ digitbuf_alloc(int size) * ---------- */ static void -digitbuf_free(NumericDigitBuf *buf) +digitbuf_free(NumericDigitBuf * buf) { - NumericDigitBuf *smallest; + NumericDigitBuf *smallest; if (buf == NULL) return; @@ -2042,12 +2048,12 @@ digitbuf_free(NumericDigitBuf *buf) * ---------- */ static void -free_var(NumericVar *var) +free_var(NumericVar * var) { if (var->buf != NULL) { digitbuf_free(var->buf); - var->buf = NULL; + var->buf = NULL; var->digits = NULL; } var->sign = NUMERIC_NAN; @@ -2070,8 +2076,8 @@ free_var(NumericVar *var) static void free_allvars(void) { - NumericDigitBuf *buf; - NumericDigitBuf *next; + NumericDigitBuf *buf; + NumericDigitBuf *next; buf = digitbuf_usedlist; while (buf != NULL) @@ -2090,25 +2096,26 @@ free_allvars(void) * ---------- */ static void -set_var_from_str(char *str, NumericVar *dest) +set_var_from_str(char *str, NumericVar * dest) { - char *cp = str; - bool have_dp = FALSE; - int i = 1; + char *cp = str; + bool have_dp = FALSE; + int i = 1; - while(*cp) + while (*cp) { - if (!isspace(*cp)) break; + if (!isspace(*cp)) + break; cp++; } digitbuf_free(dest->buf); - dest->buf = digitbuf_alloc(strlen(cp) + 2); - dest->digits = (NumericDigit *)(dest->buf) + sizeof(NumericDigitBuf); + dest->buf = digitbuf_alloc(strlen(cp) + 2); + dest->digits = (NumericDigit *) (dest->buf) + sizeof(NumericDigitBuf); dest->digits[0] = 0; - dest->weight = 0; - dest->dscale = 0; + dest->weight = 0; + dest->dscale = 0; switch (*cp) { @@ -2121,24 +2128,29 @@ set_var_from_str(char *str, NumericVar *dest) case '6': case '7': case '8': - case '9': dest->sign = NUMERIC_POS; - break; + case '9': + dest->sign = NUMERIC_POS; + break; - case '+': dest->sign = NUMERIC_POS; - cp++; - break; + case '+': + dest->sign = NUMERIC_POS; + cp++; + break; - case '-': dest->sign = NUMERIC_NEG; - cp++; - break; + case '-': + dest->sign = NUMERIC_NEG; + cp++; + break; - case '.': dest->sign = NUMERIC_POS; - have_dp = TRUE; - cp++; - break; + case '.': + dest->sign = NUMERIC_POS; + have_dp = TRUE; + cp++; + break; - default: free_allvars(); - elog(ERROR, "Bad numeric input format '%s'", str); + default: + free_allvars(); + elog(ERROR, "Bad numeric input format '%s'", str); } if (*cp == '.') @@ -2178,24 +2190,27 @@ set_var_from_str(char *str, NumericVar *dest) case '6': case '7': case '8': - case '9': dest->digits[i++] = *cp++ - '0'; - if (!have_dp) - dest->weight++; - else - dest->dscale++; - break; - - case '.': if (have_dp) - { - free_allvars(); - elog(ERROR, "Bad numeric input format '%s'", str); - } - have_dp = TRUE; - cp++; - break; - - default: free_allvars(); - elog(ERROR, "Bad numeric input format '%s'", str); + case '9': + dest->digits[i++] = *cp++ - '0'; + if (!have_dp) + dest->weight++; + else + dest->dscale++; + break; + + case '.': + if (have_dp) + { + free_allvars(); + elog(ERROR, "Bad numeric input format '%s'", str); + } + have_dp = TRUE; + cp++; + break; + + default: + free_allvars(); + elog(ERROR, "Bad numeric input format '%s'", str); } } dest->ndigits = i; @@ -2223,18 +2238,18 @@ set_var_from_str(char *str, NumericVar *dest) * */ static void -set_var_from_num(Numeric num, NumericVar *dest) +set_var_from_num(Numeric num, NumericVar * dest) { - NumericDigit *digit; - int i; - int n; + NumericDigit *digit; + int i; + int n; n = num->varlen - NUMERIC_HDRSZ; digitbuf_free(dest->buf); dest->buf = digitbuf_alloc(n * 2 + 2); - digit = ((NumericDigit *)(dest->buf)) + sizeof(NumericDigitBuf); + digit = ((NumericDigit *) (dest->buf)) + sizeof(NumericDigitBuf); *digit++ = 0; *digit++ = 0; dest->digits = digit; @@ -2243,7 +2258,7 @@ set_var_from_num(Numeric num, NumericVar *dest) dest->weight = num->n_weight; dest->rscale = num->n_rscale; dest->dscale = NUMERIC_DSCALE(num); - dest->sign = NUMERIC_SIGN(num); + dest->sign = NUMERIC_SIGN(num); for (i = 0; i < n; i++) { @@ -2260,18 +2275,18 @@ set_var_from_num(Numeric num, NumericVar *dest) * ---------- */ static void -set_var_from_var(NumericVar *value, NumericVar *dest) +set_var_from_var(NumericVar * value, NumericVar * dest) { - NumericDigitBuf *newbuf; - NumericDigit *newdigits; + NumericDigitBuf *newbuf; + NumericDigit *newdigits; newbuf = digitbuf_alloc(value->ndigits); - newdigits = ((NumericDigit *)newbuf) + sizeof(NumericDigitBuf); + newdigits = ((NumericDigit *) newbuf) + sizeof(NumericDigitBuf); memcpy(newdigits, value->digits, value->ndigits); digitbuf_free(dest->buf); memcpy(dest, value, sizeof(NumericVar)); - dest->buf = newbuf; + dest->buf = newbuf; dest->digits = newdigits; } @@ -2284,22 +2299,23 @@ set_var_from_var(NumericVar *value, NumericVar *dest) * ---------- */ static Numeric -make_result(NumericVar *var) +make_result(NumericVar * var) { - Numeric result; - NumericDigit *digit = var->digits; - int n; - int weight = var->weight; - int sign = var->sign; - int i, j; + Numeric result; + NumericDigit *digit = var->digits; + int n; + int weight = var->weight; + int sign = var->sign; + int i, + j; if (sign == NUMERIC_NAN) { - result = (Numeric)palloc(NUMERIC_HDRSZ); + result = (Numeric) palloc(NUMERIC_HDRSZ); - result->varlen = NUMERIC_HDRSZ; - result->n_weight = 0; - result->n_rscale = 0; + result->varlen = NUMERIC_HDRSZ; + result->n_weight = 0; + result->n_rscale = 0; result->n_sign_dscale = NUMERIC_NAN; dump_numeric("make_result()", result); @@ -2320,16 +2336,17 @@ make_result(NumericVar *var) if (n == 0) { weight = 0; - sign = NUMERIC_POS; + sign = NUMERIC_POS; } - result = (Numeric)palloc(NUMERIC_HDRSZ + (n + 1) / 2); + result = (Numeric) palloc(NUMERIC_HDRSZ + (n + 1) / 2); result->varlen = NUMERIC_HDRSZ + (n + 1) / 2; result->n_weight = weight; result->n_rscale = var->rscale; - result->n_sign_dscale = sign | ((uint16)(var->dscale) & ~NUMERIC_SIGN_MASK); + result->n_sign_dscale = sign | ((uint16) (var->dscale) & ~NUMERIC_SIGN_MASK); - i = 0; j = 0; + i = 0; + j = 0; while (j < n) { result->n_data[i] = digit[j++] << 4; @@ -2351,33 +2368,33 @@ make_result(NumericVar *var) * ---------- */ static void -apply_typmod(NumericVar *var, int32 typmod) +apply_typmod(NumericVar * var, int32 typmod) { int precision; int scale; int maxweight; int i; - if (typmod < (int32)(VARHDRSZ)) + if (typmod < (int32) (VARHDRSZ)) return; typmod -= VARHDRSZ; precision = (typmod >> 16) & 0xffff; - scale = typmod & 0xffff; + scale = typmod & 0xffff; maxweight = precision - scale; if (var->weight >= maxweight) { free_allvars(); elog(ERROR, "overflow on numeric " - "ABS(value) >= 10^%d for field with precision %d scale %d", - var->weight, precision, scale); + "ABS(value) >= 10^%d for field with precision %d scale %d", + var->weight, precision, scale); } i = scale + var->weight + 1; if (i >= 0 && var->ndigits > i) { - long carry = (var->digits[i] > 4) ? 1 : 0; + long carry = (var->digits[i] > 4) ? 1 : 0; var->ndigits = i; while (carry) @@ -2395,9 +2412,7 @@ apply_typmod(NumericVar *var, int32 typmod) } } else - { var->ndigits = MAX(0, MIN(i, var->ndigits)); - } /* ---------- * Check for overflow again - rounding could have raised the @@ -2408,8 +2423,8 @@ apply_typmod(NumericVar *var, int32 typmod) { free_allvars(); elog(ERROR, "overflow on numeric " - "ABS(value) >= 10^%d for field with precision %d scale %d", - var->weight, precision, scale); + "ABS(value) >= 10^%d for field with precision %d scale %d", + var->weight, precision, scale); } var->rscale = scale; @@ -2424,7 +2439,7 @@ apply_typmod(NumericVar *var, int32 typmod) * ---------- */ static int -cmp_var(NumericVar *var1, NumericVar *var2) +cmp_var(NumericVar * var1, NumericVar * var2) { if (var1->ndigits == 0) { @@ -2463,7 +2478,7 @@ cmp_var(NumericVar *var1, NumericVar *var2) * ---------- */ static void -add_var(NumericVar *var1, NumericVar *var2, NumericVar *result) +add_var(NumericVar * var1, NumericVar * var2, NumericVar * result) { /* ---------- * Decide on the signs of the two variables what to do @@ -2474,7 +2489,7 @@ add_var(NumericVar *var1, NumericVar *var2, NumericVar *result) if (var2->sign == NUMERIC_POS) { /* ---------- - * Both are positive + * Both are positive * result = +(ABS(var1) + ABS(var2)) * ---------- */ @@ -2490,39 +2505,39 @@ add_var(NumericVar *var1, NumericVar *var2, NumericVar *result) */ switch (cmp_abs(var1, var2)) { - case 0: /* ---------- - * ABS(var1) == ABS(var2) - * result = ZERO - * ---------- - */ - digitbuf_free(result->buf); - result->buf = digitbuf_alloc(0); - result->ndigits = 0; - result->digits = ((NumericDigit *)(result->buf)) + - sizeof(NumericDigitBuf); - result->weight = 0; - result->rscale = MAX(var1->rscale, var2->rscale); - result->dscale = MAX(var1->dscale, var2->dscale); - result->sign = NUMERIC_POS; - break; - - case 1: /* ---------- - * ABS(var1) > ABS(var2) - * result = +(ABS(var1) - ABS(var2)) - * ---------- - */ - sub_abs(var1, var2, result); - result->sign = NUMERIC_POS; - break; - - case -1: /* ---------- - * ABS(var1) < ABS(var2) - * result = -(ABS(var2) - ABS(var1)) - * ---------- - */ - sub_abs(var2, var1, result); - result->sign = NUMERIC_NEG; - break; + case 0: /* ---------- + * ABS(var1) == ABS(var2) + * result = ZERO + * ---------- + */ + digitbuf_free(result->buf); + result->buf = digitbuf_alloc(0); + result->ndigits = 0; + result->digits = ((NumericDigit *) (result->buf)) + + sizeof(NumericDigitBuf); + result->weight = 0; + result->rscale = MAX(var1->rscale, var2->rscale); + result->dscale = MAX(var1->dscale, var2->dscale); + result->sign = NUMERIC_POS; + break; + + case 1: /* ---------- + * ABS(var1) > ABS(var2) + * result = +(ABS(var1) - ABS(var2)) + * ---------- + */ + sub_abs(var1, var2, result); + result->sign = NUMERIC_POS; + break; + + case -1: /* ---------- + * ABS(var1) < ABS(var2) + * result = -(ABS(var2) - ABS(var1)) + * ---------- + */ + sub_abs(var2, var1, result); + result->sign = NUMERIC_NEG; + break; } } } @@ -2537,39 +2552,39 @@ add_var(NumericVar *var1, NumericVar *var2, NumericVar *result) */ switch (cmp_abs(var1, var2)) { - case 0: /* ---------- - * ABS(var1) == ABS(var2) - * result = ZERO - * ---------- - */ - digitbuf_free(result->buf); - result->buf = digitbuf_alloc(0); - result->ndigits = 0; - result->digits = ((NumericDigit *)(result->buf)) + - sizeof(NumericDigitBuf); - result->weight = 0; - result->rscale = MAX(var1->rscale, var2->rscale); - result->dscale = MAX(var1->dscale, var2->dscale); - result->sign = NUMERIC_POS; - break; - - case 1: /* ---------- - * ABS(var1) > ABS(var2) - * result = -(ABS(var1) - ABS(var2)) - * ---------- - */ - sub_abs(var1, var2, result); - result->sign = NUMERIC_NEG; - break; - - case -1: /* ---------- - * ABS(var1) < ABS(var2) - * result = +(ABS(var2) - ABS(var1)) - * ---------- - */ - sub_abs(var2, var1, result); - result->sign = NUMERIC_POS; - break; + case 0: /* ---------- + * ABS(var1) == ABS(var2) + * result = ZERO + * ---------- + */ + digitbuf_free(result->buf); + result->buf = digitbuf_alloc(0); + result->ndigits = 0; + result->digits = ((NumericDigit *) (result->buf)) + + sizeof(NumericDigitBuf); + result->weight = 0; + result->rscale = MAX(var1->rscale, var2->rscale); + result->dscale = MAX(var1->dscale, var2->dscale); + result->sign = NUMERIC_POS; + break; + + case 1: /* ---------- + * ABS(var1) > ABS(var2) + * result = -(ABS(var1) - ABS(var2)) + * ---------- + */ + sub_abs(var1, var2, result); + result->sign = NUMERIC_NEG; + break; + + case -1: /* ---------- + * ABS(var1) < ABS(var2) + * result = +(ABS(var2) - ABS(var1)) + * ---------- + */ + sub_abs(var2, var1, result); + result->sign = NUMERIC_POS; + break; } } else @@ -2594,7 +2609,7 @@ add_var(NumericVar *var1, NumericVar *var2, NumericVar *result) * ---------- */ static void -sub_var(NumericVar *var1, NumericVar *var2, NumericVar *result) +sub_var(NumericVar * var1, NumericVar * var2, NumericVar * result) { /* ---------- * Decide on the signs of the two variables what to do @@ -2621,39 +2636,39 @@ sub_var(NumericVar *var1, NumericVar *var2, NumericVar *result) */ switch (cmp_abs(var1, var2)) { - case 0: /* ---------- - * ABS(var1) == ABS(var2) - * result = ZERO - * ---------- - */ - digitbuf_free(result->buf); - result->buf = digitbuf_alloc(0); - result->ndigits = 0; - result->digits = ((NumericDigit *)(result->buf)) + - sizeof(NumericDigitBuf); - result->weight = 0; - result->rscale = MAX(var1->rscale, var2->rscale); - result->dscale = MAX(var1->dscale, var2->dscale); - result->sign = NUMERIC_POS; - break; - - case 1: /* ---------- - * ABS(var1) > ABS(var2) - * result = +(ABS(var1) - ABS(var2)) - * ---------- - */ - sub_abs(var1, var2, result); - result->sign = NUMERIC_POS; - break; - - case -1: /* ---------- - * ABS(var1) < ABS(var2) - * result = -(ABS(var2) - ABS(var1)) - * ---------- - */ - sub_abs(var2, var1, result); - result->sign = NUMERIC_NEG; - break; + case 0: /* ---------- + * ABS(var1) == ABS(var2) + * result = ZERO + * ---------- + */ + digitbuf_free(result->buf); + result->buf = digitbuf_alloc(0); + result->ndigits = 0; + result->digits = ((NumericDigit *) (result->buf)) + + sizeof(NumericDigitBuf); + result->weight = 0; + result->rscale = MAX(var1->rscale, var2->rscale); + result->dscale = MAX(var1->dscale, var2->dscale); + result->sign = NUMERIC_POS; + break; + + case 1: /* ---------- + * ABS(var1) > ABS(var2) + * result = +(ABS(var1) - ABS(var2)) + * ---------- + */ + sub_abs(var1, var2, result); + result->sign = NUMERIC_POS; + break; + + case -1: /* ---------- + * ABS(var1) < ABS(var2) + * result = -(ABS(var2) - ABS(var1)) + * ---------- + */ + sub_abs(var2, var1, result); + result->sign = NUMERIC_NEG; + break; } } } @@ -2668,39 +2683,39 @@ sub_var(NumericVar *var1, NumericVar *var2, NumericVar *result) */ switch (cmp_abs(var1, var2)) { - case 0: /* ---------- - * ABS(var1) == ABS(var2) - * result = ZERO - * ---------- - */ - digitbuf_free(result->buf); - result->buf = digitbuf_alloc(0); - result->ndigits = 0; - result->digits = ((NumericDigit *)(result->buf)) + - sizeof(NumericDigitBuf); - result->weight = 0; - result->rscale = MAX(var1->rscale, var2->rscale); - result->dscale = MAX(var1->dscale, var2->dscale); - result->sign = NUMERIC_POS; - break; - - case 1: /* ---------- - * ABS(var1) > ABS(var2) - * result = -(ABS(var1) - ABS(var2)) - * ---------- - */ - sub_abs(var1, var2, result); - result->sign = NUMERIC_NEG; - break; - - case -1: /* ---------- - * ABS(var1) < ABS(var2) - * result = +(ABS(var2) - ABS(var1)) - * ---------- - */ - sub_abs(var2, var1, result); - result->sign = NUMERIC_POS; - break; + case 0: /* ---------- + * ABS(var1) == ABS(var2) + * result = ZERO + * ---------- + */ + digitbuf_free(result->buf); + result->buf = digitbuf_alloc(0); + result->ndigits = 0; + result->digits = ((NumericDigit *) (result->buf)) + + sizeof(NumericDigitBuf); + result->weight = 0; + result->rscale = MAX(var1->rscale, var2->rscale); + result->dscale = MAX(var1->dscale, var2->dscale); + result->sign = NUMERIC_POS; + break; + + case 1: /* ---------- + * ABS(var1) > ABS(var2) + * result = -(ABS(var1) - ABS(var2)) + * ---------- + */ + sub_abs(var1, var2, result); + result->sign = NUMERIC_NEG; + break; + + case -1: /* ---------- + * ABS(var1) < ABS(var2) + * result = +(ABS(var2) - ABS(var1)) + * ---------- + */ + sub_abs(var2, var1, result); + result->sign = NUMERIC_POS; + break; } } else @@ -2725,17 +2740,20 @@ sub_var(NumericVar *var1, NumericVar *var2, NumericVar *result) * ---------- */ static void -mul_var(NumericVar *var1, NumericVar *var2, NumericVar *result) +mul_var(NumericVar * var1, NumericVar * var2, NumericVar * result) { - NumericDigitBuf *res_buf; - NumericDigit *res_digits; - int res_ndigits; - int res_weight; - int res_sign; - int i, ri, i1, i2; - long sum = 0; - - res_weight = var1->weight + var2->weight + 2; + NumericDigitBuf *res_buf; + NumericDigit *res_digits; + int res_ndigits; + int res_weight; + int res_sign; + int i, + ri, + i1, + i2; + long sum = 0; + + res_weight = var1->weight + var2->weight + 2; res_ndigits = var1->ndigits + var2->ndigits + 1; if (var1->sign == var2->sign) res_sign = NUMERIC_POS; @@ -2743,7 +2761,7 @@ mul_var(NumericVar *var1, NumericVar *var2, NumericVar *result) res_sign = NUMERIC_NEG; res_buf = digitbuf_alloc(res_ndigits); - res_digits = ((NumericDigit *)res_buf) + sizeof(NumericDigitBuf); + res_digits = ((NumericDigit *) res_buf) + sizeof(NumericDigitBuf); memset(res_digits, 0, res_ndigits); ri = res_ndigits; @@ -2782,23 +2800,21 @@ mul_var(NumericVar *var1, NumericVar *var2, NumericVar *result) res_ndigits--; } while (res_ndigits > 0 && res_digits[res_ndigits - 1] == 0) - { res_ndigits--; - } if (res_ndigits == 0) { - res_sign = NUMERIC_POS; + res_sign = NUMERIC_POS; res_weight = 0; } digitbuf_free(result->buf); - result->buf = res_buf; - result->digits = res_digits; + result->buf = res_buf; + result->digits = res_digits; result->ndigits = res_ndigits; - result->weight = res_weight; - result->rscale = global_rscale; - result->sign = res_sign; + result->weight = res_weight; + result->rscale = global_rscale; + result->sign = res_sign; } @@ -2809,24 +2825,24 @@ mul_var(NumericVar *var1, NumericVar *var2, NumericVar *result) * ---------- */ static void -div_var(NumericVar *var1, NumericVar *var2, NumericVar *result) -{ - NumericDigit *res_digits; - int res_ndigits; - int res_sign; - int res_weight; - NumericVar dividend; - NumericVar divisor[10]; - int ndigits_tmp; - int weight_tmp; - int rscale_tmp; - int ri; - int i; - long guess; - long first_have; - long first_div; - int first_nextdigit; - int stat = 0; +div_var(NumericVar * var1, NumericVar * var2, NumericVar * result) +{ + NumericDigit *res_digits; + int res_ndigits; + int res_sign; + int res_weight; + NumericVar dividend; + NumericVar divisor[10]; + int ndigits_tmp; + int weight_tmp; + int rscale_tmp; + int ri; + int i; + long guess; + long first_have; + long first_div; + int first_nextdigit; + int stat = 0; /* ---------- * First of all division by zero check @@ -2858,11 +2874,11 @@ div_var(NumericVar *var1, NumericVar *var2, NumericVar *result) { digitbuf_free(result->buf); result->buf = digitbuf_alloc(0); - result->digits = ((NumericDigit *)(result->buf)) + sizeof(NumericDigitBuf); + result->digits = ((NumericDigit *) (result->buf)) + sizeof(NumericDigitBuf); result->ndigits = 0; - result->weight = 0; - result->rscale = global_rscale; - result->sign = NUMERIC_POS; + result->weight = 0; + result->rscale = global_rscale; + result->sign = NUMERIC_POS; return; } @@ -2872,21 +2888,19 @@ div_var(NumericVar *var1, NumericVar *var2, NumericVar *result) */ init_var(÷nd); for (i = 1; i < 10; i++) - { init_var(&divisor[i]); - } /* ---------- * Make a copy of the divisor which has one leading zero digit * ---------- */ - divisor[1].ndigits = ndigits_tmp; - divisor[1].rscale = var2->ndigits; - divisor[1].sign = NUMERIC_POS; - divisor[1].buf = digitbuf_alloc(ndigits_tmp); - divisor[1].digits = ((NumericDigit *)(divisor[1].buf)) + - sizeof(NumericDigitBuf); + divisor[1].ndigits = ndigits_tmp; + divisor[1].rscale = var2->ndigits; + divisor[1].sign = NUMERIC_POS; + divisor[1].buf = digitbuf_alloc(ndigits_tmp); + divisor[1].digits = ((NumericDigit *) (divisor[1].buf)) + + sizeof(NumericDigitBuf); divisor[1].digits[0] = 0; memcpy(&(divisor[1].digits[1]), var2->digits, ndigits_tmp - 1); @@ -2895,11 +2909,11 @@ div_var(NumericVar *var1, NumericVar *var2, NumericVar *result) * ---------- */ dividend.ndigits = var1->ndigits; - dividend.weight = 0; - dividend.rscale = var1->ndigits; - dividend.sign = NUMERIC_POS; - dividend.buf = digitbuf_alloc(var1->ndigits); - dividend.digits = ((NumericDigit *)(dividend.buf)) + sizeof(NumericDigitBuf); + dividend.weight = 0; + dividend.rscale = var1->ndigits; + dividend.sign = NUMERIC_POS; + dividend.buf = digitbuf_alloc(var1->ndigits); + dividend.digits = ((NumericDigit *) (dividend.buf)) + sizeof(NumericDigitBuf); memcpy(dividend.digits, var1->digits, var1->ndigits); /* ---------- @@ -2908,18 +2922,18 @@ div_var(NumericVar *var1, NumericVar *var2, NumericVar *result) */ digitbuf_free(result->buf); result->buf = digitbuf_alloc(res_ndigits + 2); - res_digits = ((NumericDigit *)(result->buf)) + sizeof(NumericDigitBuf); + res_digits = ((NumericDigit *) (result->buf)) + sizeof(NumericDigitBuf); result->digits = res_digits; result->ndigits = res_ndigits; - result->weight = res_weight; - result->rscale = global_rscale; - result->sign = res_sign; + result->weight = res_weight; + result->rscale = global_rscale; + result->sign = res_sign; res_digits[0] = 0; first_div = divisor[1].digits[1] * 10; if (ndigits_tmp > 2) first_div += divisor[1].digits[2]; - + first_have = 0; first_nextdigit = 0; @@ -2941,13 +2955,13 @@ div_var(NumericVar *var1, NumericVar *var2, NumericVar *result) { if (divisor[guess].buf == NULL) { - int i; - long sum = 0; + int i; + long sum = 0; memcpy(&divisor[guess], &divisor[1], sizeof(NumericVar)); divisor[guess].buf = digitbuf_alloc(divisor[guess].ndigits); - divisor[guess].digits = ((NumericDigit *)(divisor[guess].buf) + - sizeof(NumericDigitBuf)); + divisor[guess].digits = ((NumericDigit *) (divisor[guess].buf) + + sizeof(NumericDigitBuf)); for (i = divisor[1].ndigits - 1; i >= 0; i--) { sum += divisor[1].digits[i] * guess; @@ -2960,7 +2974,8 @@ div_var(NumericVar *var1, NumericVar *var2, NumericVar *result) divisor[guess].rscale = rscale_tmp; stat = cmp_abs(÷nd, &divisor[guess]); - if (stat >= 0) break; + if (stat >= 0) + break; guess--; } @@ -2990,12 +3005,12 @@ div_var(NumericVar *var1, NumericVar *var2, NumericVar *result) result->ndigits = ri + 1; if (ri == res_ndigits + 1) { - long carry = (res_digits[ri] > 4) ? 1 : 0; + long carry = (res_digits[ri] > 4) ? 1 : 0; result->ndigits = ri; res_digits[ri] = 0; - while(carry && ri > 0) + while (carry && ri > 0) { carry += res_digits[--ri]; res_digits[ri] = carry % 10; @@ -3010,9 +3025,7 @@ div_var(NumericVar *var1, NumericVar *var2, NumericVar *result) (result->ndigits)--; } while (result->ndigits > 0 && result->digits[result->ndigits - 1] == 0) - { (result->ndigits)--; - } if (result->ndigits == 0) result->sign = NUMERIC_POS; @@ -3033,10 +3046,10 @@ div_var(NumericVar *var1, NumericVar *var2, NumericVar *result) * ---------- */ static void -mod_var(NumericVar *var1, NumericVar *var2, NumericVar *result) +mod_var(NumericVar * var1, NumericVar * var2, NumericVar * result) { - NumericVar tmp; - int save_global_rscale; + NumericVar tmp; + int save_global_rscale; init_var(&tmp); @@ -3070,9 +3083,9 @@ mod_var(NumericVar *var1, NumericVar *var2, NumericVar *result) * ---------- */ static void -ceil_var(NumericVar *var, NumericVar *result) +ceil_var(NumericVar * var, NumericVar * result) { - NumericVar tmp; + NumericVar tmp; init_var(&tmp); set_var_from_var(var, &tmp); @@ -3095,9 +3108,9 @@ ceil_var(NumericVar *var, NumericVar *result) * ---------- */ static void -floor_var(NumericVar *var, NumericVar *result) +floor_var(NumericVar * var, NumericVar * result) { - NumericVar tmp; + NumericVar tmp; init_var(&tmp); set_var_from_var(var, &tmp); @@ -3119,14 +3132,14 @@ floor_var(NumericVar *var, NumericVar *result) * ---------- */ static void -sqrt_var(NumericVar *arg, NumericVar *result) +sqrt_var(NumericVar * arg, NumericVar * result) { - NumericVar tmp_arg; - NumericVar tmp_val; - NumericVar last_val; - int res_rscale; - int save_global_rscale; - int stat; + NumericVar tmp_arg; + NumericVar tmp_val; + NumericVar last_val; + int res_rscale; + int save_global_rscale; + int stat; save_global_rscale = global_rscale; global_rscale += 8; @@ -3137,7 +3150,7 @@ sqrt_var(NumericVar *arg, NumericVar *result) { set_var_from_var(&const_zero, result); result->rscale = res_rscale; - result->sign = NUMERIC_POS; + result->sign = NUMERIC_POS; return; } @@ -3160,14 +3173,14 @@ sqrt_var(NumericVar *arg, NumericVar *result) */ digitbuf_free(result->buf); result->buf = digitbuf_alloc(1); - result->digits = ((NumericDigit *)(result->buf)) + sizeof(NumericDigitBuf); + result->digits = ((NumericDigit *) (result->buf)) + sizeof(NumericDigitBuf); result->digits[0] = tmp_arg.digits[0] / 2; if (result->digits[0] == 0) result->digits[0] = 1; result->ndigits = 1; result->weight = tmp_arg.weight / 2; result->rscale = res_rscale; - result->sign = NUMERIC_POS; + result->sign = NUMERIC_POS; for (;;) { @@ -3176,7 +3189,8 @@ sqrt_var(NumericVar *arg, NumericVar *result) add_var(result, &tmp_val, result); div_var(result, &const_two, result); - if (cmp_var(&last_val, result) == 0) break; + if (cmp_var(&last_val, result) == 0) + break; set_var_from_var(result, &last_val); } @@ -3196,18 +3210,18 @@ sqrt_var(NumericVar *arg, NumericVar *result) * ---------- */ static void -exp_var(NumericVar *arg, NumericVar *result) -{ - NumericVar x; - NumericVar xpow; - NumericVar ifac; - NumericVar elem; - NumericVar ni; - int d; - int i; - int ndiv2 = 0; - bool xneg = FALSE; - int save_global_rscale; +exp_var(NumericVar * arg, NumericVar * result) +{ + NumericVar x; + NumericVar xpow; + NumericVar ifac; + NumericVar elem; + NumericVar ni; + int d; + int i; + int ndiv2 = 0; + bool xneg = FALSE; + int save_global_rscale; init_var(&x); init_var(&xpow); @@ -3239,7 +3253,7 @@ exp_var(NumericVar *arg, NumericVar *result) global_rscale = global_rscale / 2 + save_global_rscale + 8; - while(cmp_var(&x, &const_one) > 0) + while (cmp_var(&x, &const_one) > 0) { ndiv2++; global_rscale++; @@ -3290,15 +3304,15 @@ exp_var(NumericVar *arg, NumericVar *result) * ---------- */ static void -ln_var(NumericVar *arg, NumericVar *result) +ln_var(NumericVar * arg, NumericVar * result) { - NumericVar x; - NumericVar xx; - NumericVar ni; - NumericVar elem; - NumericVar fact; - int i; - int save_global_rscale; + NumericVar x; + NumericVar xx; + NumericVar ni; + NumericVar elem; + NumericVar fact; + int i; + int save_global_rscale; if (cmp_var(arg, &const_zero) <= 0) { @@ -3368,7 +3382,7 @@ ln_var(NumericVar *arg, NumericVar *result) * ---------- */ static void -log_var(NumericVar *base, NumericVar *num, NumericVar *result) +log_var(NumericVar * base, NumericVar * num, NumericVar * result) { NumericVar ln_base; NumericVar ln_num; @@ -3379,10 +3393,10 @@ log_var(NumericVar *base, NumericVar *num, NumericVar *result) init_var(&ln_num); ln_var(base, &ln_base); - ln_var(num, &ln_num); + ln_var(num, &ln_num); global_rscale -= 8; - + div_var(&ln_num, &ln_base, result); free_var(&ln_num); @@ -3397,7 +3411,7 @@ log_var(NumericVar *base, NumericVar *num, NumericVar *result) * ---------- */ static void -power_var(NumericVar *base, NumericVar *exp, NumericVar *result) +power_var(NumericVar * base, NumericVar * exp, NumericVar * result) { NumericVar ln_base; NumericVar ln_num; @@ -3415,7 +3429,7 @@ power_var(NumericVar *base, NumericVar *exp, NumericVar *result) global_rscale = save_global_rscale; exp_var(&ln_num, result); - + free_var(&ln_num); free_var(&ln_base); @@ -3441,22 +3455,24 @@ power_var(NumericVar *base, NumericVar *exp, NumericVar *result) * ---------- */ static int -cmp_abs(NumericVar *var1, NumericVar *var2) +cmp_abs(NumericVar * var1, NumericVar * var2) { - int i1 = 0; - int i2 = 0; - int w1 = var1->weight; - int w2 = var2->weight; - int stat; + int i1 = 0; + int i2 = 0; + int w1 = var1->weight; + int w2 = var2->weight; + int stat; while (w1 > w2 && i1 < var1->ndigits) { - if (var1->digits[i1++] != 0) return 1; + if (var1->digits[i1++] != 0) + return 1; w1--; } while (w2 > w1 && i2 < var2->ndigits) { - if (var2->digits[i2++] != 0) return -1; + if (var2->digits[i2++] != 0) + return -1; w2--; } @@ -3497,16 +3513,18 @@ cmp_abs(NumericVar *var1, NumericVar *var2) * ---------- */ static void -add_abs(NumericVar *var1, NumericVar *var2, NumericVar *result) +add_abs(NumericVar * var1, NumericVar * var2, NumericVar * result) { - NumericDigitBuf *res_buf; - NumericDigit *res_digits; - int res_ndigits; - int res_weight; - int res_rscale; - int res_dscale; - int i, i1, i2; - int carry = 0; + NumericDigitBuf *res_buf; + NumericDigit *res_digits; + int res_ndigits; + int res_weight; + int res_rscale; + int res_dscale; + int i, + i1, + i2; + int carry = 0; res_weight = MAX(var1->weight, var2->weight) + 1; res_rscale = MAX(var1->rscale, var2->rscale); @@ -3514,7 +3532,7 @@ add_abs(NumericVar *var1, NumericVar *var2, NumericVar *result) res_ndigits = res_rscale + res_weight + 1; res_buf = digitbuf_alloc(res_ndigits); - res_digits = ((NumericDigit *)res_buf) + sizeof(NumericDigitBuf); + res_digits = ((NumericDigit *) res_buf) + sizeof(NumericDigitBuf); i1 = res_rscale + var1->weight + 1; i2 = res_rscale + var2->weight + 1; @@ -3538,20 +3556,18 @@ add_abs(NumericVar *var1, NumericVar *var2, NumericVar *result) res_ndigits--; } while (res_ndigits > 0 && res_digits[res_ndigits - 1] == 0) - { res_ndigits--; - } if (res_ndigits == 0) res_weight = 0; digitbuf_free(result->buf); result->ndigits = res_ndigits; - result->buf = res_buf; - result->digits = res_digits; - result->weight = res_weight; - result->rscale = res_rscale; - result->dscale = res_dscale; + result->buf = res_buf; + result->digits = res_digits; + result->weight = res_weight; + result->rscale = res_rscale; + result->dscale = res_dscale; } @@ -3566,16 +3582,18 @@ add_abs(NumericVar *var1, NumericVar *var2, NumericVar *result) * ---------- */ static void -sub_abs(NumericVar *var1, NumericVar *var2, NumericVar *result) +sub_abs(NumericVar * var1, NumericVar * var2, NumericVar * result) { - NumericDigitBuf *res_buf; - NumericDigit *res_digits; - int res_ndigits; - int res_weight; - int res_rscale; - int res_dscale; - int i, i1, i2; - int borrow = 0; + NumericDigitBuf *res_buf; + NumericDigit *res_digits; + int res_ndigits; + int res_weight; + int res_rscale; + int res_dscale; + int i, + i1, + i2; + int borrow = 0; res_weight = var1->weight; res_rscale = MAX(var1->rscale, var2->rscale); @@ -3583,7 +3601,7 @@ sub_abs(NumericVar *var1, NumericVar *var2, NumericVar *result) res_ndigits = res_rscale + res_weight + 1; res_buf = digitbuf_alloc(res_ndigits); - res_digits = ((NumericDigit *)res_buf) + sizeof(NumericDigitBuf); + res_digits = ((NumericDigit *) res_buf) + sizeof(NumericDigitBuf); i1 = res_rscale + var1->weight + 1; i2 = res_rscale + var2->weight + 1; @@ -3615,20 +3633,16 @@ sub_abs(NumericVar *var1, NumericVar *var2, NumericVar *result) res_ndigits--; } while (res_ndigits > 0 && res_digits[res_ndigits - 1] == 0) - { res_ndigits--; - } if (res_ndigits == 0) res_weight = 0; digitbuf_free(result->buf); result->ndigits = res_ndigits; - result->buf = res_buf; - result->digits = res_digits; - result->weight = res_weight; - result->rscale = res_rscale; - result->dscale = res_dscale; + result->buf = res_buf; + result->digits = res_digits; + result->weight = res_weight; + result->rscale = res_rscale; + result->dscale = res_dscale; } - - diff --git a/src/backend/utils/adt/numutils.c b/src/backend/utils/adt/numutils.c index 19a0f2d385b..413d0fadd88 100644 --- a/src/backend/utils/adt/numutils.c +++ b/src/backend/utils/adt/numutils.c @@ -10,7 +10,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/numutils.c,v 1.29 1999/02/13 23:19:29 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/numutils.c,v 1.30 1999/05/25 16:12:14 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -55,17 +55,17 @@ pg_atoi(char *s, int size, int c) Assert(s); - errno = 0; + errno = 0; /* - * Some versions of strtol treat the empty string as an error. This + * Some versions of strtol treat the empty string as an error. This * code will explicitly return 0 for an empty string. */ - if (s == (char *)NULL) + if (s == (char *) NULL) elog(ERROR, "pg_atoi: NULL pointer!"); else if (*s == 0) - l = (long)0; + l = (long) 0; else l = strtol(s, &badp, 10); if (errno) /* strtol must set ERANGE */ diff --git a/src/backend/utils/adt/regproc.c b/src/backend/utils/adt/regproc.c index 2e6276f4e2f..1db8ddcc057 100644 --- a/src/backend/utils/adt/regproc.c +++ b/src/backend/utils/adt/regproc.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/regproc.c,v 1.36 1999/05/10 00:45:59 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/regproc.c,v 1.37 1999/05/25 16:12:17 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -41,9 +41,9 @@ int32 regprocin(char *pro_name_or_oid) { - HeapTuple proctup = NULL; - HeapTupleData tuple; - RegProcedure result = InvalidOid; + HeapTuple proctup = NULL; + HeapTupleData tuple; + RegProcedure result = InvalidOid; if (pro_name_or_oid == NULL) return InvalidOid; @@ -52,6 +52,7 @@ regprocin(char *pro_name_or_oid) if (!IsBootstrapProcessingMode()) { + /* * we need to use the oid because there can be multiple entries * with the same name. We accept int4eq_1323 and 1323. @@ -76,23 +77,23 @@ regprocin(char *pro_name_or_oid) RetrieveIndexResult indexRes; Buffer buffer; int matches = 0; - + ScanKeyEntryInitialize(&skey[0], (bits16) 0x0, (AttrNumber) 1, (RegProcedure) F_NAMEEQ, PointerGetDatum(pro_name_or_oid)); - + hdesc = heap_openr(ProcedureRelationName); idesc = index_openr(ProcedureNameIndex); - + sd = index_beginscan(idesc, false, 1, skey); while ((indexRes = index_getnext(sd, ForwardScanDirection))) { tuple.t_self = indexRes->heap_iptr; heap_fetch(hdesc, SnapshotNow, - &tuple, - &buffer); + &tuple, + &buffer); pfree(indexRes); if (tuple.t_data != NULL) { diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c index b953567ad9c..62aab389012 100644 --- a/src/backend/utils/adt/ruleutils.c +++ b/src/backend/utils/adt/ruleutils.c @@ -3,7 +3,7 @@ * out of it's tuple * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/ruleutils.c,v 1.14 1999/05/25 08:49:33 wieck Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/ruleutils.c,v 1.15 1999/05/25 16:12:19 momjian Exp $ * * This software is copyrighted by Jan Wieck - Hamburg. * @@ -57,16 +57,17 @@ #include "catalog/pg_opclass.h" #include "fmgr.h" -#define BUFSIZE 8192 +#define BUFSIZE 8192 /* ---------- * Local data types * ---------- */ -typedef struct QryHier { - struct QryHier *parent; - Query *query; -} QryHier; +typedef struct QryHier +{ + struct QryHier *parent; + Query *query; +} QryHier; /* ---------- @@ -90,7 +91,7 @@ static char *query_getopclass = "SELECT * FROM pg_opclass WHERE oid = $1"; */ text *pg_get_ruledef(NameData *rname); text *pg_get_viewdef(NameData *rname); -text *pg_get_indexdef(Oid indexrelid); +text *pg_get_indexdef(Oid indexrelid); NameData *pg_get_userbyid(int4 uid); @@ -100,16 +101,16 @@ NameData *pg_get_userbyid(int4 uid); */ static char *make_ruledef(HeapTuple ruletup, TupleDesc rulettc); static char *make_viewdef(HeapTuple ruletup, TupleDesc rulettc); -static char *get_query_def(Query *query, QryHier *parentqh); -static char *get_select_query_def(Query *query, QryHier *qh); -static char *get_insert_query_def(Query *query, QryHier *qh); -static char *get_update_query_def(Query *query, QryHier *qh); -static char *get_delete_query_def(Query *query, QryHier *qh); -static char *get_rule_expr(QryHier *qh, int rt_index, Node *node, bool varprefix); -static char *get_func_expr(QryHier *qh, int rt_index, Expr *expr, bool varprefix); -static char *get_tle_expr(QryHier *qh, int rt_index, TargetEntry *tle, bool varprefix); +static char *get_query_def(Query *query, QryHier * parentqh); +static char *get_select_query_def(Query *query, QryHier * qh); +static char *get_insert_query_def(Query *query, QryHier * qh); +static char *get_update_query_def(Query *query, QryHier * qh); +static char *get_delete_query_def(Query *query, QryHier * qh); +static char *get_rule_expr(QryHier * qh, int rt_index, Node *node, bool varprefix); +static char *get_func_expr(QryHier * qh, int rt_index, Expr *expr, bool varprefix); +static char *get_tle_expr(QryHier * qh, int rt_index, TargetEntry *tle, bool varprefix); static char *get_const_expr(Const *constval); -static char *get_sublink_expr(QryHier *qh, int rt_index, Node *node, bool varprefix); +static char *get_sublink_expr(QryHier * qh, int rt_index, Node *node, bool varprefix); static char *get_relation_name(Oid relid); static char *get_attribute_name(Oid relid, int2 attnum); static bool check_if_rte_used(int rt_index, Node *node, int sup); @@ -314,27 +315,27 @@ pg_get_viewdef(NameData *rname) * only return the SELECT part of a view * ---------- */ -text * +text * pg_get_indexdef(Oid indexrelid) { - text *indexdef; + text *indexdef; HeapTuple ht_idx; HeapTuple ht_idxrel; HeapTuple ht_indrel; HeapTuple spi_tup; TupleDesc spi_ttc; - int spi_fno; - Form_pg_index idxrec; - Form_pg_class idxrelrec; - Form_pg_class indrelrec; + int spi_fno; + Form_pg_index idxrec; + Form_pg_class idxrelrec; + Form_pg_class indrelrec; Datum spi_args[1]; char spi_nulls[2]; - int spirc; - int len; - int keyno; + int spirc; + int len; + int keyno; char buf[BUFSIZE]; char keybuf[BUFSIZE]; - char *sep; + char *sep; /* ---------- * Connect to SPI manager @@ -371,30 +372,30 @@ pg_get_indexdef(Oid indexrelid) * ---------- */ ht_idx = SearchSysCacheTuple(INDEXRELID, - ObjectIdGetDatum(indexrelid), 0, 0, 0); + ObjectIdGetDatum(indexrelid), 0, 0, 0); if (!HeapTupleIsValid(ht_idx)) elog(ERROR, "syscache lookup for index %u failed", indexrelid); - idxrec = (Form_pg_index)GETSTRUCT(ht_idx); + idxrec = (Form_pg_index) GETSTRUCT(ht_idx); /* ---------- * Fetch the pg_class tuple of the index relation * ---------- */ ht_idxrel = SearchSysCacheTuple(RELOID, - ObjectIdGetDatum(idxrec->indexrelid), 0, 0, 0); + ObjectIdGetDatum(idxrec->indexrelid), 0, 0, 0); if (!HeapTupleIsValid(ht_idxrel)) elog(ERROR, "syscache lookup for relid %u failed", idxrec->indexrelid); - idxrelrec = (Form_pg_class)GETSTRUCT(ht_idxrel); + idxrelrec = (Form_pg_class) GETSTRUCT(ht_idxrel); /* ---------- * Fetch the pg_class tuple of the indexed relation * ---------- */ ht_indrel = SearchSysCacheTuple(RELOID, - ObjectIdGetDatum(idxrec->indrelid), 0, 0, 0); + ObjectIdGetDatum(idxrec->indrelid), 0, 0, 0); if (!HeapTupleIsValid(ht_indrel)) elog(ERROR, "syscache lookup for relid %u failed", idxrec->indrelid); - indrelrec = (Form_pg_class)GETSTRUCT(ht_indrel); + indrelrec = (Form_pg_class) GETSTRUCT(ht_indrel); /* ---------- * Get the am name for the index relation @@ -417,11 +418,11 @@ pg_get_indexdef(Oid indexrelid) * ---------- */ sprintf(buf, "CREATE %sINDEX \"%s\" ON \"%s\" USING %s (", - idxrec->indisunique ? "UNIQUE " : "", - nameout(&(idxrelrec->relname)), - nameout(&(indrelrec->relname)), - SPI_getvalue(spi_tup, spi_ttc, spi_fno)); - + idxrec->indisunique ? "UNIQUE " : "", + nameout(&(idxrelrec->relname)), + nameout(&(indrelrec->relname)), + SPI_getvalue(spi_tup, spi_ttc, spi_fno)); + /* ---------- * Collect the indexed attributes * ---------- @@ -445,7 +446,7 @@ pg_get_indexdef(Oid indexrelid) strcat(keybuf, "oid"); else strcat(keybuf, get_attribute_name(idxrec->indrelid, - idxrec->indkey[keyno])); + idxrec->indkey[keyno])); strcat(keybuf, "\""); /* ---------- @@ -478,10 +479,10 @@ pg_get_indexdef(Oid indexrelid) if (idxrec->indproc != InvalidOid) { HeapTuple proctup; - Form_pg_proc procStruct; + Form_pg_proc procStruct; proctup = SearchSysCacheTuple(PROOID, - ObjectIdGetDatum(idxrec->indproc), 0, 0, 0); + ObjectIdGetDatum(idxrec->indproc), 0, 0, 0); if (!HeapTupleIsValid(proctup)) elog(ERROR, "cache lookup for proc %u failed", idxrec->indproc); @@ -508,13 +509,11 @@ pg_get_indexdef(Oid indexrelid) strcat(buf, "\""); } else - /* ---------- - * For the others say 'attr opclass [, ...]' - * ---------- - */ - { + /* ---------- + * For the others say 'attr opclass [, ...]' + * ---------- + */ strcat(buf, keybuf); - } /* ---------- * Finish @@ -551,8 +550,8 @@ NameData * pg_get_userbyid(int4 uid) { HeapTuple usertup; - Form_pg_shadow user_rec; - NameData *result; + Form_pg_shadow user_rec; + NameData *result; /* ---------- * Allocate space for the result @@ -566,16 +565,14 @@ pg_get_userbyid(int4 uid) * ---------- */ usertup = SearchSysCacheTuple(USESYSID, - ObjectIdGetDatum(uid), 0, 0, 0); + ObjectIdGetDatum(uid), 0, 0, 0); if (HeapTupleIsValid(usertup)) { - user_rec = (Form_pg_shadow)GETSTRUCT(usertup); + user_rec = (Form_pg_shadow) GETSTRUCT(usertup); StrNCpy(result->data, (&(user_rec->usename))->data, NAMEDATALEN); } else - { - sprintf((char *)result, "unknown (UID=%d)", uid); - } + sprintf((char *) result, "unknown (UID=%d)", uid); return result; } @@ -683,12 +680,12 @@ make_ruledef(HeapTuple ruletup, TupleDesc rulettc) { Node *qual; Query *query; - QryHier qh; + QryHier qh; qual = stringToNode(ev_qual); query = (Query *) lfirst(actions); qh.parent = NULL; - qh.query = query; + qh.query = query; strcat(buf, " WHERE "); strcat(buf, get_rule_expr(&qh, 0, qual, TRUE)); @@ -809,16 +806,16 @@ make_viewdef(HeapTuple ruletup, TupleDesc rulettc) * ---------- */ static char * -get_query_def(Query *query, QryHier *parentqh) +get_query_def(Query *query, QryHier * parentqh) { QryHier qh; qh.parent = parentqh; - qh.query = query; + qh.query = query; switch (query->commandType) { - case CMD_SELECT: + case CMD_SELECT: return get_select_query_def(query, &qh); break; @@ -853,7 +850,7 @@ get_query_def(Query *query, QryHier *parentqh) * ---------- */ static char * -get_select_query_def(Query *query, QryHier *qh) +get_select_query_def(Query *query, QryHier * qh) { char buf[BUFSIZE]; char *sep; @@ -1023,7 +1020,7 @@ get_select_query_def(Query *query, QryHier *qh) * ---------- */ static char * -get_insert_query_def(Query *query, QryHier *qh) +get_insert_query_def(Query *query, QryHier * qh) { char buf[BUFSIZE]; char *sep; @@ -1133,7 +1130,7 @@ get_insert_query_def(Query *query, QryHier *qh) * ---------- */ static char * -get_update_query_def(Query *query, QryHier *qh) +get_update_query_def(Query *query, QryHier * qh) { char buf[BUFSIZE]; char *sep; @@ -1186,7 +1183,7 @@ get_update_query_def(Query *query, QryHier *qh) * ---------- */ static char * -get_delete_query_def(Query *query, QryHier *qh) +get_delete_query_def(Query *query, QryHier * qh) { char buf[BUFSIZE]; RangeTblEntry *rte; @@ -1220,7 +1217,7 @@ get_delete_query_def(Query *query, QryHier *qh) * ---------- */ static char * -get_rule_expr(QryHier *qh, int rt_index, Node *node, bool varprefix) +get_rule_expr(QryHier * qh, int rt_index, Node *node, bool varprefix) { char buf[BUFSIZE]; @@ -1254,7 +1251,7 @@ get_rule_expr(QryHier *qh, int rt_index, Node *node, bool varprefix) strcat(buf, aggref->aggname); strcat(buf, "\"("); strcat(buf, get_rule_expr(qh, rt_index, - (Node *) (aggref->target), varprefix)); + (Node *) (aggref->target), varprefix)); strcat(buf, ")"); return pstrdup(buf); } @@ -1263,15 +1260,15 @@ get_rule_expr(QryHier *qh, int rt_index, Node *node, bool varprefix) case T_GroupClause: { GroupClause *grp = (GroupClause *) node; - List *l; - TargetEntry *tle = NULL; + List *l; + TargetEntry *tle = NULL; foreach(l, qh->query->targetList) { - if (((TargetEntry *)lfirst(l))->resdom->resgroupref == - grp->tleGroupref) + if (((TargetEntry *) lfirst(l))->resdom->resgroupref == + grp->tleGroupref) { - tle = (TargetEntry *)lfirst(l); + tle = (TargetEntry *) lfirst(l); break; } } @@ -1279,7 +1276,7 @@ get_rule_expr(QryHier *qh, int rt_index, Node *node, bool varprefix) if (tle == NULL) elog(ERROR, "GROUP BY expression not found in targetlist"); - return get_rule_expr(qh, rt_index, (Node *)tle, varprefix); + return get_rule_expr(qh, rt_index, (Node *) tle, varprefix); } break; @@ -1358,9 +1355,10 @@ get_rule_expr(QryHier *qh, int rt_index, Node *node, bool varprefix) { Var *var = (Var *) node; RangeTblEntry *rte; - int sup = var->varlevelsup; + int sup = var->varlevelsup; - while(sup-- > 0) qh = qh->parent; + while (sup-- > 0) + qh = qh->parent; rte = (RangeTblEntry *) nth(var->varno - 1, qh->query->rtable); @@ -1396,9 +1394,7 @@ get_rule_expr(QryHier *qh, int rt_index, Node *node, bool varprefix) break; case T_SubLink: - { return get_sublink_expr(qh, rt_index, node, varprefix); - } break; case T_Const: @@ -1421,7 +1417,7 @@ get_rule_expr(QryHier *qh, int rt_index, Node *node, bool varprefix) * ---------- */ static char * -get_func_expr(QryHier *qh, int rt_index, Expr *expr, bool varprefix) +get_func_expr(QryHier * qh, int rt_index, Expr *expr, bool varprefix) { char buf[BUFSIZE]; HeapTuple proctup; @@ -1500,7 +1496,7 @@ get_func_expr(QryHier *qh, int rt_index, Expr *expr, bool varprefix) * ---------- */ static char * -get_tle_expr(QryHier *qh, int rt_index, TargetEntry *tle, bool varprefix) +get_tle_expr(QryHier * qh, int rt_index, TargetEntry *tle, bool varprefix) { HeapTuple proctup; Form_pg_proc procStruct; @@ -1609,14 +1605,14 @@ get_const_expr(Const *constval) * ---------- */ static char * -get_sublink_expr(QryHier *qh, int rt_index, Node *node, bool varprefix) +get_sublink_expr(QryHier * qh, int rt_index, Node *node, bool varprefix) { SubLink *sublink = (SubLink *) node; Query *query = (Query *) (sublink->subselect); - Expr *expr; + Expr *expr; List *l; char *sep; - char buf[BUFSIZE]; + char buf[BUFSIZE]; buf[0] = '\0'; @@ -1640,32 +1636,33 @@ get_sublink_expr(QryHier *qh, int rt_index, Node *node, bool varprefix) strcat(buf, " "); } - switch (sublink->subLinkType) { + switch (sublink->subLinkType) + { case EXISTS_SUBLINK: strcat(buf, "EXISTS "); break; case ANY_SUBLINK: - expr = (Expr *)lfirst(sublink->oper); + expr = (Expr *) lfirst(sublink->oper); strcat(buf, get_opname(((Oper *) (expr->oper))->opno)); strcat(buf, " ANY "); break; case ALL_SUBLINK: - expr = (Expr *)lfirst(sublink->oper); + expr = (Expr *) lfirst(sublink->oper); strcat(buf, get_opname(((Oper *) (expr->oper))->opno)); strcat(buf, " ALL "); break; case EXPR_SUBLINK: - expr = (Expr *)lfirst(sublink->oper); + expr = (Expr *) lfirst(sublink->oper); strcat(buf, get_opname(((Oper *) (expr->oper))->opno)); strcat(buf, " "); break; default: elog(ERROR, "unupported sublink type %d", - sublink->subLinkType); + sublink->subLinkType); break; } diff --git a/src/backend/utils/adt/selfuncs.c b/src/backend/utils/adt/selfuncs.c index 53310bf1b3e..fc65ddc3f97 100644 --- a/src/backend/utils/adt/selfuncs.c +++ b/src/backend/utils/adt/selfuncs.c @@ -12,7 +12,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/selfuncs.c,v 1.27 1999/05/10 00:46:00 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/selfuncs.c,v 1.28 1999/05/25 16:12:20 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -393,6 +393,7 @@ btreesel(Oid operatorObjectId, if (FunctionalSelectivity(nIndexKeys, attributeNumber)) { + /* * Need to call the functions selectivity function here. For now * simply assume it's 1/3 since functions don't currently have @@ -437,6 +438,7 @@ btreenpage(Oid operatorObjectId, if (FunctionalSelectivity(nIndexKeys, attributeNumber)) { + /* * Need to call the functions selectivity function here. For now * simply assume it's 1/3 since functions don't currently have diff --git a/src/backend/utils/adt/varchar.c b/src/backend/utils/adt/varchar.c index 1233955c4fd..cb0982a52d8 100644 --- a/src/backend/utils/adt/varchar.c +++ b/src/backend/utils/adt/varchar.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/varchar.c,v 1.45 1999/05/19 17:53:11 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/varchar.c,v 1.46 1999/05/25 16:12:21 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -82,7 +82,7 @@ bpcharin(char *s, int dummy, int32 atttypmod) len = atttypmod - VARHDRSZ; if (len > BLCKSZ - 128) - elog(ERROR, "bpcharin: length of char() must be less than %d",BLCKSZ-128); + elog(ERROR, "bpcharin: length of char() must be less than %d", BLCKSZ - 128); result = (char *) palloc(atttypmod); VARSIZE(result) = atttypmod; @@ -152,7 +152,7 @@ bpchar(char *s, int32 len) rlen = len - VARHDRSZ; if (rlen > BLCKSZ - 128) - elog(ERROR, "bpchar: length of char() must be less than %d",BLCKSZ-128); + elog(ERROR, "bpchar: length of char() must be less than %d", BLCKSZ - 128); #ifdef STRINGDEBUG printf("bpchar- convert string length %d (%d) ->%d (%d)\n", @@ -163,13 +163,15 @@ bpchar(char *s, int32 len) VARSIZE(result) = len; r = VARDATA(result); #ifdef MULTIBYTE - /* truncate multi-byte string in a way not to break - multi-byte boundary */ - if (VARSIZE(s) > len) { - slen = pg_mbcliplen(VARDATA(s), VARSIZE(s)-VARHDRSZ, rlen); - } else { + + /* + * truncate multi-byte string in a way not to break multi-byte + * boundary + */ + if (VARSIZE(s) > len) + slen = pg_mbcliplen(VARDATA(s), VARSIZE(s) - VARHDRSZ, rlen); + else slen = VARSIZE(s) - VARHDRSZ; - } #else slen = VARSIZE(s) - VARHDRSZ; #endif @@ -206,7 +208,7 @@ bpchar(char *s, int32 len) * Converts an array of char() type to a specific internal length. * len is the length specified in () plus VARHDRSZ bytes. */ -ArrayType * +ArrayType * _bpchar(ArrayType *v, int32 len) { return array_map(v, BPCHAROID, bpchar, BPCHAROID, 1, len); @@ -331,7 +333,7 @@ varcharin(char *s, int dummy, int32 atttypmod) len = atttypmod; /* clip the string at max length */ if (len > BLCKSZ - 128) - elog(ERROR, "varcharin: length of char() must be less than %d",BLCKSZ-128); + elog(ERROR, "varcharin: length of char() must be less than %d", BLCKSZ - 128); result = (char *) palloc(len); VARSIZE(result) = len; @@ -390,15 +392,18 @@ varchar(char *s, int32 slen) /* only reach here if we need to truncate string... */ #ifdef MULTIBYTE - /* truncate multi-byte string in a way not to break - multi-byte boundary */ + + /* + * truncate multi-byte string in a way not to break multi-byte + * boundary + */ len = pg_mbcliplen(VARDATA(s), slen - VARHDRSZ, slen - VARHDRSZ); slen = len + VARHDRSZ; #else len = slen - VARHDRSZ; #endif - if (len > BLCKSZ-128) + if (len > BLCKSZ - 128) elog(ERROR, "varchar: length of varchar() must be less than BLCKSZ-128"); result = (char *) palloc(slen); @@ -412,7 +417,7 @@ varchar(char *s, int32 slen) * Converts an array of varchar() type to the specified size. * len is the length specified in () plus VARHDRSZ bytes. */ -ArrayType * +ArrayType * _varchar(ArrayType *v, int32 len) { return array_map(v, VARCHAROID, varchar, VARCHAROID, 1, len); diff --git a/src/backend/utils/adt/varlena.c b/src/backend/utils/adt/varlena.c index 12095816fa1..b649ef225a3 100644 --- a/src/backend/utils/adt/varlena.c +++ b/src/backend/utils/adt/varlena.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/varlena.c,v 1.47 1999/02/13 23:19:36 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/varlena.c,v 1.48 1999/05/25 16:12:21 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -314,7 +314,7 @@ textcat(text *t1, text *t2) * - string length * * If the starting position is zero or less, then return from the start of the string - * adjusting the length to be consistant with the "negative start" per SQL92. + * adjusting the length to be consistant with the "negative start" per SQL92. * If the length is less than zero, return the remaining string. * * Note that the arguments operate on octet length, @@ -352,11 +352,14 @@ text_substr(text *string, int32 m, int32 n) m = 1; n = 0; } - /* starting position before the start of the string? - * then offset into the string per SQL92 spec... */ + + /* + * starting position before the start of the string? then offset into + * the string per SQL92 spec... + */ else if (m < 1) { - n += (m-1); + n += (m - 1); m = 1; } @@ -588,10 +591,10 @@ text_ge(text *arg1, text *arg2) text * text_larger(text *arg1, text *arg2) { - text *result; - text *temp; + text *result; + text *temp; - temp = ((text_cmp(arg1, arg2) <= 0)? arg2: arg1); + temp = ((text_cmp(arg1, arg2) <= 0) ? arg2 : arg1); /* Make a copy */ @@ -604,10 +607,10 @@ text_larger(text *arg1, text *arg2) text * text_smaller(text *arg1, text *arg2) { - text *result; - text *temp; + text *result; + text *temp; - temp = ((text_cmp(arg1, arg2) > 0)? arg2: arg1); + temp = ((text_cmp(arg1, arg2) > 0) ? arg2 : arg1); /* Make a copy */ diff --git a/src/backend/utils/cache/catcache.c b/src/backend/utils/cache/catcache.c index 869df05df7c..80444d0a143 100644 --- a/src/backend/utils/cache/catcache.c +++ b/src/backend/utils/cache/catcache.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/cache/catcache.c,v 1.40 1999/05/10 00:46:03 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/cache/catcache.c,v 1.41 1999/05/25 16:12:22 momjian Exp $ * * Notes: * XXX This needs to use exception.h to handle recovery when @@ -196,6 +196,7 @@ CatalogCacheInitializeCache(struct catcache * cache, if (cache->cc_key[i] > 0) { + /* * Yoiks. The implementation of the hashing code and the * implementation of int28's are at loggerheads. The right @@ -277,7 +278,7 @@ CatalogCacheSetId(CatCache *cacheInOutP, int id) #endif /* ---------------- - * comphash + * comphash * Compute a hash value, somehow. * * XXX explain algorithm here. diff --git a/src/backend/utils/cache/inval.c b/src/backend/utils/cache/inval.c index 40155b36aa1..7cf66e22808 100644 --- a/src/backend/utils/cache/inval.c +++ b/src/backend/utils/cache/inval.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/cache/inval.c,v 1.22 1999/05/10 00:46:07 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/cache/inval.c,v 1.23 1999/05/25 16:12:23 momjian Exp $ * * Note - this code is real crufty... * @@ -106,7 +106,7 @@ InvalidationEntryAllocate(uint16 size) } /* -------------------------------- - * LocalInvalidRegister + * LocalInvalidRegister * Returns a new local cache invalidation state containing a new entry. * -------------------------------- */ @@ -117,7 +117,7 @@ LocalInvalidRegister(LocalInvalid invalid, Assert(PointerIsValid(entry)); ((InvalidationUserData *) entry)->dataP[-1] = - (InvalidationUserData *) invalid; + (InvalidationUserData *) invalid; return entry; } @@ -504,7 +504,7 @@ InitLocalInvalidateData() /* - * DiscardInvalid + * DiscardInvalid * Causes the invalidated cache state to be discarded. * * Note: @@ -527,7 +527,7 @@ DiscardInvalid() } /* - * RegisterInvalid + * RegisterInvalid * Causes registration of invalidated state with other backends iff true. * * Note: @@ -559,7 +559,7 @@ RegisterInvalid(bool send) } /* - * RelationIdInvalidateHeapTuple + * RelationIdInvalidateHeapTuple * Causes the given tuple in a relation to be invalidated. * * Note: diff --git a/src/backend/utils/cache/rel.c b/src/backend/utils/cache/rel.c index 0603f675520..f37a97b34f6 100644 --- a/src/backend/utils/cache/rel.c +++ b/src/backend/utils/cache/rel.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/cache/Attic/rel.c,v 1.4 1999/02/13 23:19:43 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/cache/Attic/rel.c,v 1.5 1999/05/25 16:12:23 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -29,7 +29,7 @@ */ /* - * RelationGetIndexStrategy + * RelationGetIndexStrategy * Returns index strategy for a relation. * * Note: @@ -43,7 +43,7 @@ RelationGetIndexStrategy(Relation relation) } /* - * RelationSetIndexSupport + * RelationSetIndexSupport * Sets index strategy and support info for a relation. * * Note: diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c index 4affb0f6aec..f8c73b7b22c 100644 --- a/src/backend/utils/cache/relcache.c +++ b/src/backend/utils/cache/relcache.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/cache/relcache.c,v 1.61 1999/05/10 00:46:08 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/cache/relcache.c,v 1.62 1999/05/25 16:12:23 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -396,7 +396,7 @@ scan_pg_rel_ind(RelationBuildDescInfo buildinfo) switch (buildinfo.infotype) { case INFO_RELID: - return_tuple = ClassOidIndexScan(pg_class_desc,buildinfo.i.info_id); + return_tuple = ClassOidIndexScan(pg_class_desc, buildinfo.i.info_id); break; case INFO_RELNAME: @@ -707,20 +707,20 @@ RelationBuildRuleLock(Relation relation) rule->event = (int) heap_getattr(pg_rewrite_tuple, Anum_pg_rewrite_ev_type, pg_rewrite_tupdesc, - &isnull) - 48; + &isnull) - 48; rule->attrno = (int) heap_getattr(pg_rewrite_tuple, Anum_pg_rewrite_ev_attr, pg_rewrite_tupdesc, - &isnull); + &isnull); rule->isInstead = !!heap_getattr(pg_rewrite_tuple, - Anum_pg_rewrite_is_instead, pg_rewrite_tupdesc, - &isnull); + Anum_pg_rewrite_is_instead, pg_rewrite_tupdesc, + &isnull); ruleaction = heap_getattr(pg_rewrite_tuple, - Anum_pg_rewrite_ev_action, pg_rewrite_tupdesc, - &isnull); + Anum_pg_rewrite_ev_action, pg_rewrite_tupdesc, + &isnull); rule_evqual_string = heap_getattr(pg_rewrite_tuple, - Anum_pg_rewrite_ev_qual, pg_rewrite_tupdesc, - &isnull); + Anum_pg_rewrite_ev_qual, pg_rewrite_tupdesc, + &isnull); ruleaction = PointerGetDatum(textout((struct varlena *) DatumGetPointer(ruleaction))); rule_evqual_string = PointerGetDatum(textout((struct varlena *) DatumGetPointer(rule_evqual_string))); @@ -851,9 +851,7 @@ RelationBuildDesc(RelationBuildDescInfo buildinfo) * ---------------- */ if (OidIsValid(relam)) - { relation->rd_am = (Form_pg_am) AccessMethodObjectIdGetForm(relam); - } /* ---------------- * initialize the tuple descriptor (relation->rd_att). @@ -1331,13 +1329,13 @@ RelationForgetRelation(Oid rid) MemoryContext oldcxt; List *curr; List *prev = NIL; - + oldcxt = MemoryContextSwitchTo((MemoryContext) CacheCxt); - + foreach(curr, newlyCreatedRelns) { Relation reln = lfirst(curr); - + Assert(reln != NULL && reln->rd_myxactonly); if (RelationGetRelid(reln) == rid) break; @@ -1353,7 +1351,7 @@ RelationForgetRelation(Oid rid) pfree(curr); MemoryContextSwitchTo(oldcxt); } - + RelationFlushRelation(&relation, false); } } @@ -1378,6 +1376,7 @@ RelationIdInvalidateRelationCacheByRelationId(Oid relationId) */ if (PointerIsValid(relation) && !relation->rd_myxactonly) { + /* * The boolean onlyFlushReferenceCountZero in RelationFlushReln() * should be set to true when we are incrementing the command @@ -1484,8 +1483,8 @@ RelationRegisterRelation(Relation relation) /* * we've just created the relation. It is invisible to anyone else - * before the transaction is committed. Setting rd_myxactonly allows us - * to use the local buffer manager for select/insert/etc before the + * before the transaction is committed. Setting rd_myxactonly allows + * us to use the local buffer manager for select/insert/etc before the * end of transaction. (We also need to keep track of relations * created during a transaction and does the necessary clean up at the * end of the transaction.) - ay 3/95 @@ -1634,7 +1633,7 @@ AttrDefaultFetch(Relation relation) Relation adrel; Relation irel; ScanKeyData skey; - HeapTupleData tuple; + HeapTupleData tuple; Form_pg_attrdef adform; IndexScanDesc sd; RetrieveIndexResult indexRes; @@ -1722,7 +1721,7 @@ RelCheckFetch(Relation relation) Relation rcrel; Relation irel; ScanKeyData skey; - HeapTupleData tuple; + HeapTupleData tuple; IndexScanDesc sd; RetrieveIndexResult indexRes; Name rcname; diff --git a/src/backend/utils/cache/syscache.c b/src/backend/utils/cache/syscache.c index bd583ac0ce6..6eb0ed3527d 100644 --- a/src/backend/utils/cache/syscache.c +++ b/src/backend/utils/cache/syscache.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/cache/syscache.c,v 1.24 1999/02/13 23:19:45 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/cache/syscache.c,v 1.25 1999/05/25 16:12:23 momjian Exp $ * * NOTES * These routines allow the parser/planner/executor to perform @@ -421,11 +421,11 @@ InitCatalogCache() Assert(!PointerIsValid((Pointer) SysCache[cacheId])); SysCache[cacheId] = InitSysCache(cacheinfo[cacheId].name, - cacheinfo[cacheId].indname, - cacheId, - cacheinfo[cacheId].nkeys, - cacheinfo[cacheId].key, - cacheinfo[cacheId].iScanFunc); + cacheinfo[cacheId].indname, + cacheId, + cacheinfo[cacheId].nkeys, + cacheinfo[cacheId].key, + cacheinfo[cacheId].iScanFunc); if (!PointerIsValid((char *) SysCache[cacheId])) { elog(ERROR, @@ -492,11 +492,11 @@ SearchSysCacheTuple(int cacheId,/* cache selection code */ if (!PointerIsValid(SysCache[cacheId])) { SysCache[cacheId] = InitSysCache(cacheinfo[cacheId].name, - cacheinfo[cacheId].indname, - cacheId, - cacheinfo[cacheId].nkeys, - cacheinfo[cacheId].key, - cacheinfo[cacheId].iScanFunc); + cacheinfo[cacheId].indname, + cacheId, + cacheinfo[cacheId].nkeys, + cacheinfo[cacheId].key, + cacheinfo[cacheId].iScanFunc); if (!PointerIsValid(SysCache[cacheId])) elog(ERROR, "InitCatalogCache: Can't init cache %s(%d)", diff --git a/src/backend/utils/cache/temprel.c b/src/backend/utils/cache/temprel.c index 60c949fa434..9e9faaf8ab2 100644 --- a/src/backend/utils/cache/temprel.c +++ b/src/backend/utils/cache/temprel.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/cache/Attic/temprel.c,v 1.2 1999/02/13 23:19:45 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/cache/Attic/temprel.c,v 1.3 1999/05/25 16:12:24 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -47,16 +47,16 @@ static List *temp_rels = NIL; typedef struct TempTable { - char *user_relname; + char *user_relname; HeapTuple pg_class_tuple; -} TempTable; +} TempTable; void create_temp_relation(char *relname, HeapTuple pg_class_tuple) { MemoryContext oldcxt; - TempTable *temp_rel; + TempTable *temp_rel; oldcxt = MemoryContextSwitchTo((MemoryContext) CacheCxt); @@ -65,7 +65,7 @@ create_temp_relation(char *relname, HeapTuple pg_class_tuple) /* save user-supplied name */ strcpy(temp_rel->user_relname, relname); - + temp_rel->pg_class_tuple = heap_copytuple(pg_class_tuple); temp_rels = lcons(temp_rel, temp_rels); @@ -76,24 +76,25 @@ create_temp_relation(char *relname, HeapTuple pg_class_tuple) void remove_all_temp_relations(void) { - List *l, *next; + List *l, + *next; l = temp_rels; while (l != NIL) { - TempTable *temp_rel = lfirst(l); + TempTable *temp_rel = lfirst(l); Form_pg_class classtuple; - classtuple = (Form_pg_class)GETSTRUCT(temp_rel->pg_class_tuple); + classtuple = (Form_pg_class) GETSTRUCT(temp_rel->pg_class_tuple); - next = lnext(l); /* do this first, l is deallocated */ + next = lnext(l); /* do this first, l is deallocated */ if (classtuple->relkind != RELKIND_INDEX) { - char relname[NAMEDATALEN]; + char relname[NAMEDATALEN]; /* safe from deallocation */ - strcpy(relname, temp_rel->user_relname); + strcpy(relname, temp_rel->user_relname); heap_destroy_with_catalog(relname); } else @@ -109,15 +110,16 @@ remove_temp_relation(Oid relid) { MemoryContext oldcxt; - List *l, *prev; - + List *l, + *prev; + oldcxt = MemoryContextSwitchTo((MemoryContext) CacheCxt); prev = NIL; l = temp_rels; while (l != NIL) { - TempTable *temp_rel = lfirst(l); + TempTable *temp_rel = lfirst(l); if (temp_rel->pg_class_tuple->t_data->t_oid == relid) { @@ -152,11 +154,11 @@ remove_temp_relation(Oid relid) HeapTuple get_temp_rel_by_name(char *user_relname) { - List *l; + List *l; foreach(l, temp_rels) { - TempTable *temp_rel = lfirst(l); + TempTable *temp_rel = lfirst(l); if (strcmp(temp_rel->user_relname, user_relname) == 0) return temp_rel->pg_class_tuple; diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c index 588f378b5de..283cb01b1f9 100644 --- a/src/backend/utils/error/elog.c +++ b/src/backend/utils/error/elog.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/error/elog.c,v 1.44 1999/05/10 00:46:11 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/error/elog.c,v 1.45 1999/05/25 16:12:24 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -55,7 +55,7 @@ static int Err_file = -1; static int ElogDebugIndentLevel = 0; /* - * elog + * elog * Old error logging function. */ void @@ -167,7 +167,7 @@ elog(int lev, const char *fmt,...) * front-end program, write to it first. This is important because * there's a bug in the socket code on ultrix. If the front end has * gone away (so the channel to it has been closed at the other end), - * then writing here can cause this backend to exit without warning + * then writing here can cause this backend to exit without warning * that is, write() does an exit(). In this case, our only hope of * finding out what's going on is if Err_file was set to some disk * log. This is a major pain. @@ -190,26 +190,32 @@ elog(int lev, const char *fmt,...) if (IsUnderPostmaster && lev > DEBUG) { /* notices are not errors, handle 'em differently */ - char msgtype; + char msgtype; + if (lev == NOTICE) msgtype = 'N'; else { - /* Abort any COPY OUT in progress when an error is detected. - * This hack is necessary because of poor design of copy protocol. + + /* + * Abort any COPY OUT in progress when an error is detected. + * This hack is necessary because of poor design of copy + * protocol. */ pq_endcopyout(true); msgtype = 'E'; } /* exclude the timestamp from msg sent to frontend */ pq_puttextmessage(msgtype, line + TIMESTAMP_SIZE); + /* * This flush is normally not necessary, since postgres.c will * flush out waiting data when control returns to the main loop. * But it seems best to leave it here, so that the client has some - * clue what happened if the backend dies before getting back to the - * main loop ... error/notice messages should not be a performance- - * critical path anyway, so an extra flush won't hurt much ... + * clue what happened if the backend dies before getting back to + * the main loop ... error/notice messages should not be a + * performance- critical path anyway, so an extra flush won't hurt + * much ... */ pq_flush(); } diff --git a/src/backend/utils/error/exc.c b/src/backend/utils/error/exc.c index aa556a62471..7384847d18e 100644 --- a/src/backend/utils/error/exc.c +++ b/src/backend/utils/error/exc.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/error/Attic/exc.c,v 1.24 1999/02/13 23:19:48 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/error/Attic/exc.c,v 1.25 1999/05/25 16:12:26 momjian Exp $ * * NOTE * XXX this code needs improvement--check for state violations and @@ -48,7 +48,7 @@ extern char *ProgramName; */ /* - * EnableExceptionHandling + * EnableExceptionHandling * Enables/disables the exception handling system. * * Note: diff --git a/src/backend/utils/error/excid.c b/src/backend/utils/error/excid.c index bc92609e2b4..70842f3b565 100644 --- a/src/backend/utils/error/excid.c +++ b/src/backend/utils/error/excid.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/error/Attic/excid.c,v 1.5 1999/02/13 23:19:48 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/error/Attic/excid.c,v 1.6 1999/05/25 16:12:26 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -22,19 +22,19 @@ /* - * FailedAssertion + * FailedAssertion * Indicates an Assert(...) failed. */ Exception FailedAssertion = {"Failed Assertion"}; /* - * BadState + * BadState * Indicates a function call request is inconsistent with module state. */ Exception BadState = {"Bad State for Function Call"}; /* - * BadArg + * BadArg * Indicates a function call argument or arguments is out-of-bounds. */ Exception BadArg = {"Bad Argument to Function Call"}; @@ -44,19 +44,19 @@ Exception BadArg = {"Bad Argument to Function Call"}; *****************************************************************************/ /* - * BadAllocSize + * BadAllocSize * Indicates that an allocation request is of unreasonable size. */ Exception BadAllocSize = {"Too Large Allocation Request"}; /* - * ExhaustedMemory + * ExhaustedMemory * Indicates an dynamic memory allocation failed. */ Exception ExhaustedMemory = {"Memory Allocation Failed"}; /* - * Unimplemented + * Unimplemented * Indicates a function call request requires unimplemented code. */ Exception Unimplemented = {"Unimplemented Functionality"}; diff --git a/src/backend/utils/error/format.c b/src/backend/utils/error/format.c index dcc27cec024..f56e3f05b31 100644 --- a/src/backend/utils/error/format.c +++ b/src/backend/utils/error/format.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/error/Attic/format.c,v 1.10 1999/02/13 23:19:49 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/error/Attic/format.c,v 1.11 1999/05/25 16:12:26 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -29,6 +29,7 @@ char * form(const char *fmt,...) { va_list args; + va_start(args, fmt); vsnprintf(FormBuf, FormMaxSize - 1, fmt, args); va_end(args); diff --git a/src/backend/utils/fmgr/dfmgr.c b/src/backend/utils/fmgr/dfmgr.c index 4b625bfc7c5..7d9b79575fd 100644 --- a/src/backend/utils/fmgr/dfmgr.c +++ b/src/backend/utils/fmgr/dfmgr.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/fmgr/dfmgr.c,v 1.25 1999/05/22 19:49:41 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/fmgr/dfmgr.c,v 1.26 1999/05/25 16:12:27 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -237,14 +237,14 @@ void load_file(char *filename) { DynamicFileList *file_scanner, - *p; + *p; struct stat stat_buf; int done = 0; /* - * We need to do stat() in order to determine whether this is the - * same file as a previously loaded file; it's also handy so as to - * give a good error message if bogus file name given. + * We need to do stat() in order to determine whether this is the same + * file as a previously loaded file; it's also handy so as to give a + * good error message if bogus file name given. */ if (stat(filename, &stat_buf) == -1) elog(ERROR, "LOAD: could not open file '%s': %m", filename); @@ -292,4 +292,5 @@ trigger_dynamic(char *filename, char *funcname) return trigger_fn; } + #endif diff --git a/src/backend/utils/fmgr/fmgr.c b/src/backend/utils/fmgr/fmgr.c index 09f9a161138..d5b24cf3410 100644 --- a/src/backend/utils/fmgr/fmgr.c +++ b/src/backend/utils/fmgr/fmgr.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/fmgr/fmgr.c,v 1.27 1999/05/10 04:02:05 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/fmgr/fmgr.c,v 1.28 1999/05/25 16:12:28 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -81,8 +81,10 @@ fmgr_pl(char *arg0,...) static char * fmgr_untrusted(char *arg0,...) { - /* Currently these are unsupported. Someday we might do something like - * forking a subprocess to execute 'em. + + /* + * Currently these are unsupported. Someday we might do something + * like forking a subprocess to execute 'em. */ elog(ERROR, "Untrusted functions not supported."); return NULL; /* keep compiler happy */ @@ -96,9 +98,11 @@ fmgr_untrusted(char *arg0,...) static char * fmgr_sql(char *arg0,...) { + /* - * XXX It'd be really nice to support SQL functions anywhere that builtins - * are supported. What would we have to do? What pitfalls are there? + * XXX It'd be really nice to support SQL functions anywhere that + * builtins are supported. What would we have to do? What pitfalls + * are there? */ elog(ERROR, "SQL-language function not supported in this context."); return NULL; /* keep compiler happy */ @@ -215,14 +219,18 @@ fmgr_info(Oid procedureId, FmgrInfo *finfo) if ((fcp = fmgr_isbuiltin(procedureId)) != NULL) { - /* Fast path for builtin functions: don't bother consulting pg_proc */ + + /* + * Fast path for builtin functions: don't bother consulting + * pg_proc + */ finfo->fn_addr = fcp->func; finfo->fn_nargs = fcp->nargs; } else { procedureTuple = SearchSysCacheTuple(PROOID, - ObjectIdGetDatum(procedureId), + ObjectIdGetDatum(procedureId), 0, 0, 0); if (!HeapTupleIsValid(procedureTuple)) { @@ -240,14 +248,16 @@ fmgr_info(Oid procedureId, FmgrInfo *finfo) switch (language) { case INTERNALlanguageId: + /* - * For an ordinary builtin function, we should never get here - * because the isbuiltin() search above will have succeeded. - * However, if the user has done a CREATE FUNCTION to create - * an alias for a builtin function, we end up here. In that - * case we have to look up the function by name. The name - * of the internal function is stored in prosrc (it doesn't - * have to be the same as the name of the alias!) + * For an ordinary builtin function, we should never get + * here because the isbuiltin() search above will have + * succeeded. However, if the user has done a CREATE + * FUNCTION to create an alias for a builtin function, we + * end up here. In that case we have to look up the + * function by name. The name of the internal function is + * stored in prosrc (it doesn't have to be the same as the + * name of the alias!) */ prosrc = textout(&(procedureStruct->prosrc)); finfo->fn_addr = fmgr_lookupByName(prosrc); diff --git a/src/backend/utils/hash/dynahash.c b/src/backend/utils/hash/dynahash.c index dd601bee742..933533b7549 100644 --- a/src/backend/utils/hash/dynahash.c +++ b/src/backend/utils/hash/dynahash.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/hash/dynahash.c,v 1.21 1999/03/07 23:03:32 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/hash/dynahash.c,v 1.22 1999/05/25 16:12:28 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -175,8 +175,10 @@ hash_create(int nelem, HASHCTL *info, int flags) if (flags & HASH_SHARED_MEM) { - /* ctl structure is preallocated for shared memory tables. - * Note that HASH_DIRSIZE had better be set as well. + + /* + * ctl structure is preallocated for shared memory tables. Note + * that HASH_DIRSIZE had better be set as well. */ hashp->hctl = (HHDR *) info->hctl; @@ -296,9 +298,9 @@ init_htab(HTAB *hashp, int nelem) hctl = hashp->hctl; /* - * Divide number of elements by the fill factor to determine a - * desired number of buckets. Allocate space for the next greater - * power of two number of buckets + * Divide number of elements by the fill factor to determine a desired + * number of buckets. Allocate space for the next greater power of + * two number of buckets */ nelem = (nelem - 1) / hctl->ffactor + 1; @@ -308,14 +310,15 @@ init_htab(HTAB *hashp, int nelem) hctl->high_mask = (nbuckets << 1) - 1; /* - * Figure number of directory segments needed, round up to a power of 2 + * Figure number of directory segments needed, round up to a power of + * 2 */ nsegs = (nbuckets - 1) / hctl->ssize + 1; nsegs = 1 << my_log2(nsegs); /* - * Make sure directory is big enough. - * If pre-allocated directory is too small, choke (caller screwed up). + * Make sure directory is big enough. If pre-allocated directory is + * too small, choke (caller screwed up). */ if (nsegs > hctl->dsize) { @@ -371,12 +374,12 @@ init_htab(HTAB *hashp, int nelem) long hash_estimate_size(long num_entries, long keysize, long datasize) { - long size = 0; - long nBuckets, - nSegments, - nDirEntries, - nRecordAllocs, - recordSize; + long size = 0; + long nBuckets, + nSegments, + nDirEntries, + nRecordAllocs, + recordSize; /* estimate number of buckets wanted */ nBuckets = 1L << my_log2((num_entries - 1) / DEF_FFACTOR + 1); @@ -388,7 +391,7 @@ hash_estimate_size(long num_entries, long keysize, long datasize) nDirEntries <<= 1; /* dir_alloc doubles dsize at each call */ /* fixed control info */ - size += MAXALIGN(sizeof(HHDR)); /* but not HTAB, per above */ + size += MAXALIGN(sizeof(HHDR)); /* but not HTAB, per above */ /* directory */ size += MAXALIGN(nDirEntries * sizeof(SEG_OFFSET)); /* segments */ @@ -665,8 +668,10 @@ hash_search(HTAB *hashp, */ if (++hctl->nkeys / (hctl->max_bucket + 1) > hctl->ffactor) { - /* NOTE: failure to expand table is not a fatal error, - * it just means we have to run at higher fill factor than we wanted. + + /* + * NOTE: failure to expand table is not a fatal error, it just + * means we have to run at higher fill factor than we wanted. */ expand_table(hashp); } @@ -778,7 +783,7 @@ expand_table(HTAB *hashp) { /* Allocate new segment if necessary -- could fail if dir full */ if (new_segnum >= hctl->dsize) - if (! dir_realloc(hashp)) + if (!dir_realloc(hashp)) return 0; if (!(hashp->dir[new_segnum] = seg_alloc(hashp))) return 0; @@ -872,7 +877,7 @@ seg_alloc(HTAB *hashp) SEG_OFFSET segOffset; segp = (SEGMENT) hashp->alloc((unsigned long) - sizeof(BUCKET_INDEX) * hashp->hctl->ssize); + sizeof(BUCKET_INDEX) * hashp->hctl->ssize); if (!segp) return 0; @@ -917,8 +922,9 @@ bucket_alloc(HTAB *hashp) lastIndex = hashp->hctl->freeBucketIndex; hashp->hctl->freeBucketIndex = tmpIndex; - /* initialize each bucket to point to the one behind it. - * NOTE: loop sets last bucket incorrectly; we fix below. + /* + * initialize each bucket to point to the one behind it. NOTE: loop + * sets last bucket incorrectly; we fix below. */ for (i = 0; i < BUCKET_ALLOC_INCR; i++) { diff --git a/src/backend/utils/init/enbl.c b/src/backend/utils/init/enbl.c index b772ba0d105..78c5ab10403 100644 --- a/src/backend/utils/init/enbl.c +++ b/src/backend/utils/init/enbl.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/init/Attic/enbl.c,v 1.6 1999/02/13 23:19:59 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/init/Attic/enbl.c,v 1.7 1999/05/25 16:12:33 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -15,7 +15,7 @@ #include "utils/module.h" /* where the declarations go */ /* - * BypassEnable + * BypassEnable * False iff enable/disable processing is required given on and "*countP." * * Note: diff --git a/src/backend/utils/init/findbe.c b/src/backend/utils/init/findbe.c index ada3f65c412..783f8ac1b95 100644 --- a/src/backend/utils/init/findbe.c +++ b/src/backend/utils/init/findbe.c @@ -1,12 +1,12 @@ /*------------------------------------------------------------------------- * - * findbe.c + * findbe.c * * Copyright (c) 1994, Regents of the University of California * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/init/Attic/findbe.c,v 1.13 1999/02/13 23:20:00 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/init/Attic/findbe.c,v 1.14 1999/05/25 16:12:33 momjian Exp $ * *------------------------------------------------------------------------- */ diff --git a/src/backend/utils/init/globals.c b/src/backend/utils/init/globals.c index 588cb060fdf..1d4225e5821 100644 --- a/src/backend/utils/init/globals.c +++ b/src/backend/utils/init/globals.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/init/globals.c,v 1.29 1999/05/22 17:47:46 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/init/globals.c,v 1.30 1999/05/25 16:12:34 momjian Exp $ * * NOTES * Globals used all over the place should be declared here and not @@ -46,6 +46,7 @@ struct Port *MyProcPort; long MyCancelKey; char *DataDir = NULL; + /* * The PGDATA directory user says to use, or defaults to via environment * variable. NULL if no option given and no environment variable set diff --git a/src/backend/utils/init/miscinit.c b/src/backend/utils/init/miscinit.c index ce6c4ca3210..86328bbd56e 100644 --- a/src/backend/utils/init/miscinit.c +++ b/src/backend/utils/init/miscinit.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/init/miscinit.c,v 1.28 1999/05/22 17:47:46 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/init/miscinit.c,v 1.29 1999/05/25 16:12:35 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -40,7 +40,7 @@ #include "storage/ipc.h" /* for proc_exit */ /* - * EnableAbortEnvVarName + * EnableAbortEnvVarName * Enables system abort iff set to a non-empty string in environment. */ #define EnableAbortEnvVarName "POSTGRESABORT" @@ -69,7 +69,7 @@ unsigned char RecodeBackTable[128]; */ /* - * ExitPostgres + * ExitPostgres * Exit POSTGRES with a status code. * * Note: @@ -89,7 +89,7 @@ ExitPostgres(ExitStatus status) } /* - * AbortPostgres + * AbortPostgres * Abort POSTGRES dumping core. * * Note: @@ -138,6 +138,7 @@ StatusPostmasterExit(int status) /* someday, do some real cleanup and then call the LISP exit */ proc_exit(status); } + #endif @@ -149,7 +150,7 @@ static ProcessingMode Mode = NoProcessing; #ifdef NOT_USED /* - * IsNoProcessingMode + * IsNoProcessingMode * True iff processing mode is NoProcessing. */ bool @@ -157,10 +158,11 @@ IsNoProcessingMode() { return (bool) (Mode == NoProcessing); } + #endif /* - * IsBootstrapProcessingMode + * IsBootstrapProcessingMode * True iff processing mode is BootstrapProcessing. */ bool @@ -170,7 +172,7 @@ IsBootstrapProcessingMode() } /* - * IsInitProcessingMode + * IsInitProcessingMode * True iff processing mode is InitProcessing. */ bool @@ -180,7 +182,7 @@ IsInitProcessingMode() } /* - * IsNormalProcessingMode + * IsNormalProcessingMode * True iff processing mode is NormalProcessing. */ bool @@ -190,7 +192,7 @@ IsNormalProcessingMode() } /* - * SetProcessingMode + * SetProcessingMode * Sets mode of processing as specified. * * Exceptions: diff --git a/src/backend/utils/init/postinit.c b/src/backend/utils/init/postinit.c index e93480da1db..0c2711483fb 100644 --- a/src/backend/utils/init/postinit.c +++ b/src/backend/utils/init/postinit.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/init/postinit.c,v 1.39 1999/02/22 19:55:43 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/init/postinit.c,v 1.40 1999/05/25 16:12:36 momjian Exp $ * * NOTES * InitPostgres() is the function called from PostgresMain @@ -143,7 +143,7 @@ InitMyDatabaseInfo(char *name) /* - * DoChdirAndInitDatabaseNameAndPath + * DoChdirAndInitDatabaseNameAndPath * Set current directory to the database directory for the database * named <name>. * Also set global variables DatabasePath and DatabaseName to those @@ -415,7 +415,7 @@ InitStdio() } /* -------------------------------- - * InitPostgres + * InitPostgres * Initialize POSTGRES. * * Note: diff --git a/src/backend/utils/mb/alt.c b/src/backend/utils/mb/alt.c index 54f69cc594b..3d1439a5a3a 100644 --- a/src/backend/utils/mb/alt.c +++ b/src/backend/utils/mb/alt.c @@ -4,63 +4,69 @@ * * Tatsuo Ishii * - * $Id: alt.c,v 1.1 1999/03/24 07:01:36 ishii Exp $ + * $Id: alt.c,v 1.2 1999/05/25 16:12:38 momjian Exp $ */ #include <stdio.h> main() { - int i; - char koitab[128],alttab[128]; - char buf[4096]; - int koi,alt; + int i; + char koitab[128], + alttab[128]; + char buf[4096]; + int koi, + alt; - for (i=0;i<128;i++) { - koitab[i] = alttab[i] = 0; - } + for (i = 0; i < 128; i++) + koitab[i] = alttab[i] = 0; - while (fgets(buf,sizeof(buf),stdin) != NULL) { - if (*buf == '#') { - continue; - } - sscanf(buf,"%d %d",&koi,&alt); - if (koi < 128 || koi > 255 || alt < 128 || alt > 255) { - fprintf(stderr,"invalid value %d\n",koi); - exit(1); - } - koitab[koi-128] = alt; - alttab[alt-128] = koi; - } + while (fgets(buf, sizeof(buf), stdin) != NULL) + { + if (*buf == '#') + continue; + sscanf(buf, "%d %d", &koi, &alt); + if (koi < 128 || koi > 255 || alt < 128 || alt > 255) + { + fprintf(stderr, "invalid value %d\n", koi); + exit(1); + } + koitab[koi - 128] = alt; + alttab[alt - 128] = koi; + } - i = 0; - printf("static char koi2alt[] = {\n"); - while (i < 128) { - int j = 0; - while (j < 8) { - printf("0x%02x",koitab[i++]); - j++; - if (i >= 128) { - break; - } - printf(", "); - } - printf("\n"); - } - printf("};\n"); + i = 0; + printf("static char koi2alt[] = {\n"); + while (i < 128) + { + int j = 0; - i = 0; - printf("static char alt2koi[] = {\n"); - while (i < 128) { - int j = 0; - while (j < 8) { - printf("0x%02x",alttab[i++]); - j++; - if (i >= 128) { - break; - } - printf(", "); - } - printf("\n"); - } - printf("};\n"); + while (j < 8) + { + printf("0x%02x", koitab[i++]); + j++; + if (i >= 128) + break; + printf(", "); + } + printf("\n"); + } + printf("};\n"); + + i = 0; + printf("static char alt2koi[] = {\n"); + while (i < 128) + { + int j = 0; + + while (j < 8) + { + printf("0x%02x", alttab[i++]); + j++; + if (i >= 128) + break; + printf(", "); + } + printf("\n"); + } + printf("};\n"); } diff --git a/src/backend/utils/mb/big5.c b/src/backend/utils/mb/big5.c index 105854d2479..d35ee71b9ff 100644 --- a/src/backend/utils/mb/big5.c +++ b/src/backend/utils/mb/big5.c @@ -4,344 +4,372 @@ * This program is partially copied from lv(Multilingual file viewer) * and slightly modified. lv is written and copyrighted by NARITA Tomio * (nrt@web.ad.jp). - * + * * 1999/1/15 Tatsuo Ishii * - * $Id: big5.c,v 1.1 1999/02/02 18:51:22 momjian Exp $ + * $Id: big5.c,v 1.2 1999/05/25 16:12:40 momjian Exp $ */ #include "mb/pg_wchar.h" -typedef struct { - unsigned short code, peer; -} codes_t; +typedef struct +{ + unsigned short code, + peer; +} codes_t; /* map Big5 Level 1 to CNS 11643-1992 Plane 1 */ -static codes_t big5Level1ToCnsPlane1[ 25 ] = { /* range */ - { 0xA140, 0x2121 }, - { 0xA1F6, 0x2258 }, - { 0xA1F7, 0x2257 }, - { 0xA1F8, 0x2259 }, - { 0xA2AF, 0x2421 }, - { 0xA3C0, 0x4221 }, - { 0xa3e1, 0x0000 }, - { 0xA440, 0x4421 }, - { 0xACFE, 0x5753 }, - { 0xacff, 0x0000 }, - { 0xAD40, 0x5323 }, - { 0xAFD0, 0x5754 }, - { 0xBBC8, 0x6B51 }, - { 0xBE52, 0x6B50 }, - { 0xBE53, 0x6F5C }, - { 0xC1AB, 0x7536 }, - { 0xC2CB, 0x7535 }, - { 0xC2CC, 0x7737 }, - { 0xC361, 0x782E }, - { 0xC3B9, 0x7865 }, - { 0xC3BA, 0x7864 }, - { 0xC3BB, 0x7866 }, - { 0xC456, 0x782D }, - { 0xC457, 0x7962 }, - { 0xc67f, 0x0000 } +static codes_t big5Level1ToCnsPlane1[25] = { /* range */ + {0xA140, 0x2121}, + {0xA1F6, 0x2258}, + {0xA1F7, 0x2257}, + {0xA1F8, 0x2259}, + {0xA2AF, 0x2421}, + {0xA3C0, 0x4221}, + {0xa3e1, 0x0000}, + {0xA440, 0x4421}, + {0xACFE, 0x5753}, + {0xacff, 0x0000}, + {0xAD40, 0x5323}, + {0xAFD0, 0x5754}, + {0xBBC8, 0x6B51}, + {0xBE52, 0x6B50}, + {0xBE53, 0x6F5C}, + {0xC1AB, 0x7536}, + {0xC2CB, 0x7535}, + {0xC2CC, 0x7737}, + {0xC361, 0x782E}, + {0xC3B9, 0x7865}, + {0xC3BA, 0x7864}, + {0xC3BB, 0x7866}, + {0xC456, 0x782D}, + {0xC457, 0x7962}, + {0xc67f, 0x0000} }; /* map CNS 11643-1992 Plane 1 to Big5 Level 1 */ -static codes_t cnsPlane1ToBig5Level1[ 26 ] = { /* range */ - { 0x2121, 0xA140 }, - { 0x2257, 0xA1F7 }, - { 0x2258, 0xA1F6 }, - { 0x2259, 0xA1F8 }, - { 0x234f, 0x0000 }, - { 0x2421, 0xA2AF }, - { 0x2571, 0x0000 }, - { 0x4221, 0xA3C0 }, - { 0x4242, 0x0000 }, - { 0x4421, 0xA440 }, - { 0x5323, 0xAD40 }, - { 0x5753, 0xACFE }, - { 0x5754, 0xAFD0 }, - { 0x6B50, 0xBE52 }, - { 0x6B51, 0xBBC8 }, - { 0x6F5C, 0xBE53 }, - { 0x7535, 0xC2CB }, - { 0x7536, 0xC1AB }, - { 0x7737, 0xC2CC }, - { 0x782D, 0xC456 }, - { 0x782E, 0xC361 }, - { 0x7864, 0xC3BA }, - { 0x7865, 0xC3B9 }, - { 0x7866, 0xC3BB }, - { 0x7962, 0xC457 }, - { 0x7d4c, 0x0000 } +static codes_t cnsPlane1ToBig5Level1[26] = { /* range */ + {0x2121, 0xA140}, + {0x2257, 0xA1F7}, + {0x2258, 0xA1F6}, + {0x2259, 0xA1F8}, + {0x234f, 0x0000}, + {0x2421, 0xA2AF}, + {0x2571, 0x0000}, + {0x4221, 0xA3C0}, + {0x4242, 0x0000}, + {0x4421, 0xA440}, + {0x5323, 0xAD40}, + {0x5753, 0xACFE}, + {0x5754, 0xAFD0}, + {0x6B50, 0xBE52}, + {0x6B51, 0xBBC8}, + {0x6F5C, 0xBE53}, + {0x7535, 0xC2CB}, + {0x7536, 0xC1AB}, + {0x7737, 0xC2CC}, + {0x782D, 0xC456}, + {0x782E, 0xC361}, + {0x7864, 0xC3BA}, + {0x7865, 0xC3B9}, + {0x7866, 0xC3BB}, + {0x7962, 0xC457}, + {0x7d4c, 0x0000} }; /* map Big5 Level 2 to CNS 11643-1992 Plane 2 */ -static codes_t big5Level2ToCnsPlane2[ 48 ] = { /* range */ - { 0xC940, 0x2121 }, - { 0xc94a, 0x0000 }, - { 0xC94B, 0x212B }, - { 0xC96C, 0x214D }, - { 0xC9BE, 0x214C }, - { 0xC9BF, 0x217D }, - { 0xC9ED, 0x224E }, - { 0xCAF7, 0x224D }, - { 0xCAF8, 0x2439 }, - { 0xD77A, 0x3F6A }, - { 0xD77B, 0x387E }, - { 0xDBA7, 0x3F6B }, - { 0xDDFC, 0x4176 }, - { 0xDDFD, 0x4424 }, - { 0xE8A3, 0x554C }, - { 0xE976, 0x5723 }, - { 0xEB5B, 0x5A29 }, - { 0xEBF1, 0x554B }, - { 0xEBF2, 0x5B3F }, - { 0xECDE, 0x5722 }, - { 0xECDF, 0x5C6A }, - { 0xEDAA, 0x5D75 }, - { 0xEEEB, 0x642F }, - { 0xEEEC, 0x6039 }, - { 0xF056, 0x5D74 }, - { 0xF057, 0x6243 }, - { 0xF0CB, 0x5A28 }, - { 0xF0CC, 0x6337 }, - { 0xF163, 0x6430 }, - { 0xF16B, 0x6761 }, - { 0xF16C, 0x6438 }, - { 0xF268, 0x6934 }, - { 0xF269, 0x6573 }, - { 0xF2C3, 0x664E }, - { 0xF375, 0x6762 }, - { 0xF466, 0x6935 }, - { 0xF4B5, 0x664D }, - { 0xF4B6, 0x6962 }, - { 0xF4FD, 0x6A4C }, - { 0xF663, 0x6A4B }, - { 0xF664, 0x6C52 }, - { 0xF977, 0x7167 }, - { 0xF9C4, 0x7166 }, - { 0xF9C5, 0x7234 }, - { 0xF9C6, 0x7240 }, - { 0xF9C7, 0x7235 }, - { 0xF9D2, 0x7241 }, - { 0xf9d6, 0x0000 } +static codes_t big5Level2ToCnsPlane2[48] = { /* range */ + {0xC940, 0x2121}, + {0xc94a, 0x0000}, + {0xC94B, 0x212B}, + {0xC96C, 0x214D}, + {0xC9BE, 0x214C}, + {0xC9BF, 0x217D}, + {0xC9ED, 0x224E}, + {0xCAF7, 0x224D}, + {0xCAF8, 0x2439}, + {0xD77A, 0x3F6A}, + {0xD77B, 0x387E}, + {0xDBA7, 0x3F6B}, + {0xDDFC, 0x4176}, + {0xDDFD, 0x4424}, + {0xE8A3, 0x554C}, + {0xE976, 0x5723}, + {0xEB5B, 0x5A29}, + {0xEBF1, 0x554B}, + {0xEBF2, 0x5B3F}, + {0xECDE, 0x5722}, + {0xECDF, 0x5C6A}, + {0xEDAA, 0x5D75}, + {0xEEEB, 0x642F}, + {0xEEEC, 0x6039}, + {0xF056, 0x5D74}, + {0xF057, 0x6243}, + {0xF0CB, 0x5A28}, + {0xF0CC, 0x6337}, + {0xF163, 0x6430}, + {0xF16B, 0x6761}, + {0xF16C, 0x6438}, + {0xF268, 0x6934}, + {0xF269, 0x6573}, + {0xF2C3, 0x664E}, + {0xF375, 0x6762}, + {0xF466, 0x6935}, + {0xF4B5, 0x664D}, + {0xF4B6, 0x6962}, + {0xF4FD, 0x6A4C}, + {0xF663, 0x6A4B}, + {0xF664, 0x6C52}, + {0xF977, 0x7167}, + {0xF9C4, 0x7166}, + {0xF9C5, 0x7234}, + {0xF9C6, 0x7240}, + {0xF9C7, 0x7235}, + {0xF9D2, 0x7241}, + {0xf9d6, 0x0000} }; /* map CNS 11643-1992 Plane 2 to Big5 Level 2 */ -static codes_t cnsPlane2ToBig5Level2[ 49 ] = { /* range */ - { 0x2121, 0xC940 }, - { 0x212B, 0xC94B }, - { 0x214C, 0xC9BE }, - { 0x214D, 0xC96C }, - { 0x217D, 0xC9BF }, - { 0x224D, 0xCAF7 }, - { 0x224E, 0xC9ED }, - { 0x2439, 0xCAF8 }, - { 0x387E, 0xD77B }, - { 0x3F6A, 0xD77A }, - { 0x3F6B, 0xDBA7 }, - { 0x4424, 0x0000 }, - { 0x4176, 0xDDFC }, - { 0x4177, 0x0000 }, - { 0x4424, 0xDDFD }, - { 0x554B, 0xEBF1 }, - { 0x554C, 0xE8A3 }, - { 0x5722, 0xECDE }, - { 0x5723, 0xE976 }, - { 0x5A28, 0xF0CB }, - { 0x5A29, 0xEB5B }, - { 0x5B3F, 0xEBF2 }, - { 0x5C6A, 0xECDF }, - { 0x5D74, 0xF056 }, - { 0x5D75, 0xEDAA }, - { 0x6039, 0xEEEC }, - { 0x6243, 0xF057 }, - { 0x6337, 0xF0CC }, - { 0x642F, 0xEEEB }, - { 0x6430, 0xF163 }, - { 0x6438, 0xF16C }, - { 0x6573, 0xF269 }, - { 0x664D, 0xF4B5 }, - { 0x664E, 0xF2C3 }, - { 0x6761, 0xF16B }, - { 0x6762, 0xF375 }, - { 0x6934, 0xF268 }, - { 0x6935, 0xF466 }, - { 0x6962, 0xF4B6 }, - { 0x6A4B, 0xF663 }, - { 0x6A4C, 0xF4FD }, - { 0x6C52, 0xF664 }, - { 0x7166, 0xF9C4 }, - { 0x7167, 0xF977 }, - { 0x7234, 0xF9C5 }, - { 0x7235, 0xF9C7 }, - { 0x7240, 0xF9C6 }, - { 0x7241, 0xF9D2 }, - { 0x7245, 0x0000 } +static codes_t cnsPlane2ToBig5Level2[49] = { /* range */ + {0x2121, 0xC940}, + {0x212B, 0xC94B}, + {0x214C, 0xC9BE}, + {0x214D, 0xC96C}, + {0x217D, 0xC9BF}, + {0x224D, 0xCAF7}, + {0x224E, 0xC9ED}, + {0x2439, 0xCAF8}, + {0x387E, 0xD77B}, + {0x3F6A, 0xD77A}, + {0x3F6B, 0xDBA7}, + {0x4424, 0x0000}, + {0x4176, 0xDDFC}, + {0x4177, 0x0000}, + {0x4424, 0xDDFD}, + {0x554B, 0xEBF1}, + {0x554C, 0xE8A3}, + {0x5722, 0xECDE}, + {0x5723, 0xE976}, + {0x5A28, 0xF0CB}, + {0x5A29, 0xEB5B}, + {0x5B3F, 0xEBF2}, + {0x5C6A, 0xECDF}, + {0x5D74, 0xF056}, + {0x5D75, 0xEDAA}, + {0x6039, 0xEEEC}, + {0x6243, 0xF057}, + {0x6337, 0xF0CC}, + {0x642F, 0xEEEB}, + {0x6430, 0xF163}, + {0x6438, 0xF16C}, + {0x6573, 0xF269}, + {0x664D, 0xF4B5}, + {0x664E, 0xF2C3}, + {0x6761, 0xF16B}, + {0x6762, 0xF375}, + {0x6934, 0xF268}, + {0x6935, 0xF466}, + {0x6962, 0xF4B6}, + {0x6A4B, 0xF663}, + {0x6A4C, 0xF4FD}, + {0x6C52, 0xF664}, + {0x7166, 0xF9C4}, + {0x7167, 0xF977}, + {0x7234, 0xF9C5}, + {0x7235, 0xF9C7}, + {0x7240, 0xF9C6}, + {0x7241, 0xF9D2}, + {0x7245, 0x0000} }; /* Big Five Level 1 Correspondence to CNS 11643-1992 Plane 4 */ static unsigned short b1c4[][2] = { - {0xC879, 0x2123}, - {0xC87B, 0x2124}, - {0xC87D, 0x212A}, - {0xC8A2, 0x2152} + {0xC879, 0x2123}, + {0xC87B, 0x2124}, + {0xC87D, 0x212A}, + {0xC8A2, 0x2152} }; /* Big Five Level 2 Correspondence to CNS 11643-1992 Plane 3 */ static unsigned short b2c3[][2] = { - {0xF9D6, 0x4337}, - {0xF9D7, 0x4F50}, - {0xF9D8, 0x444E}, - {0xF9D9, 0x504A}, - {0xF9DA, 0x2C5D}, - {0xF9DB, 0x3D7E}, - {0xF9DC, 0x4B5C} + {0xF9D6, 0x4337}, + {0xF9D7, 0x4F50}, + {0xF9D8, 0x444E}, + {0xF9D9, 0x504A}, + {0xF9DA, 0x2C5D}, + {0xF9DB, 0x3D7E}, + {0xF9DC, 0x4B5C} }; static unsigned short BinarySearchRange -(codes_t *array, int high, unsigned short code ) + (codes_t * array, int high, unsigned short code) { - int low, mid, distance, tmp; + int low, + mid, + distance, + tmp; - low = 0; - mid = high >> 1; + low = 0; + mid = high >> 1; - for( ; low <= high ; mid = ( low + high ) >> 1 ){ - if( ( array[ mid ].code <= code ) && ( array[ mid + 1 ].code > code ) ){ - if( 0 == array[ mid ].peer ) - return 0; - if( code >= 0xa140U ){ - /* big5 to cns */ - tmp = ( ( code & 0xff00 ) - ( array[ mid ].code & 0xff00 ) ) >> 8; - high = code & 0x00ff; - low = array[ mid ].code & 0x00ff; - /* - * NOTE: big5 high_byte: 0xa1-0xfe, low_byte: 0x40-0x7e, 0xa1-0xfe - * (radicals: 0x00-0x3e, 0x3f-0x9c) - * big5 radix is 0x9d. [region_low, region_high] - * We should remember big5 has two different regions (above). - * There is a bias for the distance between these regions. - * 0xa1 - 0x7e + bias = 1 (Distance between 0xa1 and 0x7e is 1.) - * bias = - 0x22. - */ - distance = tmp * 0x9d + high - low + - ( high >= 0xa1 ? ( low >= 0xa1 ? 0 : - 0x22 ) - : ( low >= 0xa1 ? + 0x22 : 0 ) ); - /* - * NOTE: we have to convert the distance into a code point. - * The code point's low_byte is 0x21 plus mod_0x5e. - * In the first, we extract the mod_0x5e of the starting - * code point, subtracting 0x21, and add distance to it. - * Then we calculate again mod_0x5e of them, and restore - * the final codepoint, adding 0x21. - */ - tmp = ( array[ mid ].peer & 0x00ff ) + distance - 0x21; - tmp = ( array[ mid ].peer & 0xff00 ) + ( ( tmp / 0x5e ) << 8 ) - + 0x21 + tmp % 0x5e; - return tmp; - } else { - /* cns to big5 */ - tmp = ( ( code & 0xff00 ) - ( array[ mid ].code & 0xff00 ) ) >> 8; - /* - * NOTE: ISO charsets ranges between 0x21-0xfe (94charset). - * Its radix is 0x5e. But there is no distance bias like big5. - */ - distance = tmp * 0x5e - + ( (int)( code & 0x00ff ) - (int)( array[ mid ].code & 0x00ff ) ); - /* - * NOTE: Similar to big5 to cns conversion, we extract mod_0x9d and - * restore mod_0x9d into a code point. - */ - low = array[ mid ].peer & 0x00ff; - tmp = low + distance - ( low >= 0xa1 ? 0x62 : 0x40 ); - low = tmp % 0x9d; - tmp = ( array[ mid ].peer & 0xff00 ) + ( ( tmp / 0x9d ) << 8 ) - + ( low > 0x3e ? 0x62 : 0x40 ) + low; - return tmp; - } - } else if( array[ mid ].code > code ){ - high = mid - 1; - } else { - low = mid + 1; - } - } + for (; low <= high; mid = (low + high) >> 1) + { + if ((array[mid].code <= code) && (array[mid + 1].code > code)) + { + if (0 == array[mid].peer) + return 0; + if (code >= 0xa140 U) + { + /* big5 to cns */ + tmp = ((code & 0xff00) - (array[mid].code & 0xff00)) >> 8; + high = code & 0x00ff; + low = array[mid].code & 0x00ff; + + /* + * NOTE: big5 high_byte: 0xa1-0xfe, low_byte: 0x40-0x7e, + * 0xa1-0xfe (radicals: 0x00-0x3e, 0x3f-0x9c) big5 radix + * is 0x9d. [region_low, region_high] + * We should remember big5 has two different regions + * (above). There is a bias for the distance between these + * regions. 0xa1 - 0x7e + bias = 1 (Distance between 0xa1 + * and 0x7e is 1.) bias = - 0x22. + */ + distance = tmp * 0x9d + high - low + + (high >= 0xa1 ? (low >= 0xa1 ? 0 : -0x22) + : (low >= 0xa1 ? +0x22 : 0)); - return 0; + /* + * NOTE: we have to convert the distance into a code + * point. The code point's low_byte is 0x21 plus mod_0x5e. + * In the first, we extract the mod_0x5e of the starting + * code point, subtracting 0x21, and add distance to it. + * Then we calculate again mod_0x5e of them, and restore + * the final codepoint, adding 0x21. + */ + tmp = (array[mid].peer & 0x00ff) + distance - 0x21; + tmp = (array[mid].peer & 0xff00) + ((tmp / 0x5e) << 8) + + 0x21 + tmp % 0x5e; + return tmp; + } + else + { + /* cns to big5 */ + tmp = ((code & 0xff00) - (array[mid].code & 0xff00)) >> 8; + + /* + * NOTE: ISO charsets ranges between 0x21-0xfe + * (94charset). Its radix is 0x5e. But there is no + * distance bias like big5. + */ + distance = tmp * 0x5e + + ((int) (code & 0x00ff) - (int) (array[mid].code & 0x00ff)); + + /* + * NOTE: Similar to big5 to cns conversion, we extract + * mod_0x9d and restore mod_0x9d into a code point. + */ + low = array[mid].peer & 0x00ff; + tmp = low + distance - (low >= 0xa1 ? 0x62 : 0x40); + low = tmp % 0x9d; + tmp = (array[mid].peer & 0xff00) + ((tmp / 0x9d) << 8) + + (low > 0x3e ? 0x62 : 0x40) + low; + return tmp; + } + } + else if (array[mid].code > code) + high = mid - 1; + else + low = mid + 1; + } + + return 0; } -unsigned short BIG5toCNS(unsigned short big5, unsigned char *lc ) +unsigned short +BIG5toCNS(unsigned short big5, unsigned char *lc) { - unsigned short cns = 0; - int i; + unsigned short cns = 0; + int i; - if( big5 < 0xc940U ){ - /* level 1 */ + if (big5 < 0xc940 U) + { + /* level 1 */ - for (i=0;i<sizeof(b1c4)/sizeof(unsigned short);i++) { - if (b1c4[i][0] == big5) { - *lc = LC_CNS11643_4; - return(b1c4[i][1] | 0x8080U); - } - } + for (i = 0; i < sizeof(b1c4) / sizeof(unsigned short); i++) + { + if (b1c4[i][0] == big5) + { + *lc = LC_CNS11643_4; + return (b1c4[i][1] | 0x8080 U); + } + } - if( 0 < (cns = BinarySearchRange( big5Level1ToCnsPlane1, 23, big5 )) ) - *lc = LC_CNS11643_1; - } else if( big5 == 0xc94aU ){ - /* level 2 */ - *lc = LC_CNS11643_1; - cns = 0x4442; - } else { - /* level 2 */ - for (i=0;i<sizeof(b2c3)/sizeof(unsigned short);i++) { - if (b2c3[i][0] == big5) { - *lc = LC_CNS11643_3; - return(b2c3[i][1]); - } - } + if (0 < (cns = BinarySearchRange(big5Level1ToCnsPlane1, 23, big5))) + *lc = LC_CNS11643_1; + } + else if (big5 == 0xc94a U) + { + /* level 2 */ + *lc = LC_CNS11643_1; + cns = 0x4442; + } + else + { + /* level 2 */ + for (i = 0; i < sizeof(b2c3) / sizeof(unsigned short); i++) + { + if (b2c3[i][0] == big5) + { + *lc = LC_CNS11643_3; + return (b2c3[i][1]); + } + } - if( 0 < (cns = BinarySearchRange( big5Level2ToCnsPlane2, 46, big5 )) ) - *lc = LC_CNS11643_2; - } + if (0 < (cns = BinarySearchRange(big5Level2ToCnsPlane2, 46, big5))) + *lc = LC_CNS11643_2; + } - if( 0 == cns ){ /* no mapping Big5 to CNS 11643-1992 */ - *lc = 0; - return (unsigned short)'?'; - } + if (0 == cns) + { /* no mapping Big5 to CNS 11643-1992 */ + *lc = 0; + return (unsigned short) '?'; + } - return cns | 0x8080; + return cns | 0x8080; } -unsigned short CNStoBIG5( unsigned short cns, unsigned char lc ) +unsigned short +CNStoBIG5(unsigned short cns, unsigned char lc) { - int i; - unsigned int big5 = 0; + int i; + unsigned int big5 = 0; - cns &= 0x7f7f; + cns &= 0x7f7f; - switch( lc ){ - case LC_CNS11643_1: - big5 = BinarySearchRange( cnsPlane1ToBig5Level1, 24, cns ); - break; - case LC_CNS11643_2: - big5 = BinarySearchRange( cnsPlane2ToBig5Level2, 47, cns ); - break; - case LC_CNS11643_3: - for (i=0;i<sizeof(b2c3)/sizeof(unsigned short);i++) { - if (b2c3[i][1] == cns) { - return(b2c3[i][0]); - } - } - break; - case LC_CNS11643_4: - for (i=0;i<sizeof(b1c4)/sizeof(unsigned short);i++) { - if (b1c4[i][1] == cns) { - return(b1c4[i][0]); - } - } - default: - break; - } - return big5; + switch (lc) + { + case LC_CNS11643_1: + big5 = BinarySearchRange(cnsPlane1ToBig5Level1, 24, cns); + break; + case LC_CNS11643_2: + big5 = BinarySearchRange(cnsPlane2ToBig5Level2, 47, cns); + break; + case LC_CNS11643_3: + for (i = 0; i < sizeof(b2c3) / sizeof(unsigned short); i++) + { + if (b2c3[i][1] == cns) + return (b2c3[i][0]); + } + break; + case LC_CNS11643_4: + for (i = 0; i < sizeof(b1c4) / sizeof(unsigned short); i++) + { + if (b1c4[i][1] == cns) + return (b1c4[i][0]); + } + default: + break; + } + return big5; } diff --git a/src/backend/utils/mb/common.c b/src/backend/utils/mb/common.c index 6d90c734454..cab36c7b4c6 100644 --- a/src/backend/utils/mb/common.c +++ b/src/backend/utils/mb/common.c @@ -2,7 +2,7 @@ * This file contains some public functions * usable for both the backend and the frontend. * Tatsuo Ishii - * $Id: common.c,v 1.4 1999/05/13 10:28:25 ishii Exp $ */ + * $Id: common.c,v 1.5 1999/05/25 16:12:41 momjian Exp $ */ #include <stdlib.h> @@ -28,9 +28,8 @@ pg_char_to_encoding(const char *s) { pg_encoding_conv_tbl *p = pg_conv_tbl; - if (!s) { + if (!s) return (-1); - } for (; p->encoding >= 0; p++) { diff --git a/src/backend/utils/mb/conv.c b/src/backend/utils/mb/conv.c index ca79706bd5f..002a4845454 100644 --- a/src/backend/utils/mb/conv.c +++ b/src/backend/utils/mb/conv.c @@ -2,7 +2,7 @@ * conversion between client encoding and server internal encoding * (currently mule internal code (mic) is used) * Tatsuo Ishii - * $Id: conv.c,v 1.7 1999/04/25 18:09:54 tgl Exp $ + * $Id: conv.c,v 1.8 1999/05/25 16:12:41 momjian Exp $ */ #include <stdio.h> #include <string.h> @@ -375,43 +375,52 @@ mic2euc_tw(unsigned char *mic, unsigned char *p, int len) static void big52mic(unsigned char *big5, unsigned char *p, int len) { - unsigned short c1; - unsigned short big5buf, cnsBuf; - unsigned char lc; - char bogusBuf[2]; - int i; - - while (len > 0 && (c1 = *big5++)) - { - if (c1 <= 0x007fU) { /* ASCII */ - len--; - *p++ = c1; - } else { - len -= 2; - big5buf = c1 << 8; - c1 = *big5++; - big5buf |= c1; - cnsBuf = BIG5toCNS(big5buf, &lc); - if (lc != 0) { - if (lc == LC_CNS11643_3 || lc == LC_CNS11643_4) { - *p++ = 0x9d; /* LCPRV2 */ - } - *p++ = lc; /* Plane No. */ - *p++ = (cnsBuf >> 8) & 0x00ff; - *p++ = cnsBuf & 0x00ff; - } else { /* cannot convert */ - big5 -= 2; - *p++ = '('; - for (i=0;i<2;i++) { - sprintf(bogusBuf,"%02x",*big5++); - *p++ = bogusBuf[0]; - *p++ = bogusBuf[1]; - } - *p++ = ')'; + unsigned short c1; + unsigned short big5buf, + cnsBuf; + unsigned char lc; + char bogusBuf[2]; + int i; + + while (len > 0 && (c1 = *big5++)) + { + if (c1 <= 0x007f U) + { /* ASCII */ + len--; + *p++ = c1; + } + else + { + len -= 2; + big5buf = c1 << 8; + c1 = *big5++; + big5buf |= c1; + cnsBuf = BIG5toCNS(big5buf, &lc); + if (lc != 0) + { + if (lc == LC_CNS11643_3 || lc == LC_CNS11643_4) + { + *p++ = 0x9d;/* LCPRV2 */ + } + *p++ = lc; /* Plane No. */ + *p++ = (cnsBuf >> 8) & 0x00ff; + *p++ = cnsBuf & 0x00ff; + } + else + { /* cannot convert */ + big5 -= 2; + *p++ = '('; + for (i = 0; i < 2; i++) + { + sprintf(bogusBuf, "%02x", *big5++); + *p++ = bogusBuf[0]; + *p++ = bogusBuf[1]; + } + *p++ = ')'; + } + } } - } - } - *p = '\0'; + *p = '\0'; } /* @@ -420,41 +429,46 @@ big52mic(unsigned char *big5, unsigned char *p, int len) static void mic2big5(unsigned char *mic, unsigned char *p, int len) { - int l; - unsigned short c1; - unsigned short big5buf, cnsBuf; + int l; + unsigned short c1; + unsigned short big5buf, + cnsBuf; - while (len > 0 && (c1 = *mic)) - { - l = pg_mic_mblen(mic++); - len -= l; - - /* 0x9d means LCPRV2 */ - if (c1 == LC_CNS11643_1 || c1 == LC_CNS11643_2 || c1 == 0x9d) - { - if (c1 == 0x9d) { - c1 = *mic++; /* get plane no. */ - } - cnsBuf = (*mic++)<<8; - cnsBuf |= (*mic++) & 0x00ff; - big5buf = CNStoBIG5(cnsBuf, c1); - if (big5buf == 0) { /* cannot convert to Big5! */ - mic -= l; - printBogusChar(&mic, &p); - } else { - *p++ = (big5buf >> 8) & 0x00ff; - *p++ = big5buf & 0x00ff; - } - } - else if (c1 <= 0x7f) /* ASCII */ + while (len > 0 && (c1 = *mic)) { - *p++ = c1; - } else { /* cannot convert to Big5! */ - mic--; - printBogusChar(&mic, &p); + l = pg_mic_mblen(mic++); + len -= l; + + /* 0x9d means LCPRV2 */ + if (c1 == LC_CNS11643_1 || c1 == LC_CNS11643_2 || c1 == 0x9d) + { + if (c1 == 0x9d) + { + c1 = *mic++; /* get plane no. */ + } + cnsBuf = (*mic++) << 8; + cnsBuf |= (*mic++) & 0x00ff; + big5buf = CNStoBIG5(cnsBuf, c1); + if (big5buf == 0) + { /* cannot convert to Big5! */ + mic -= l; + printBogusChar(&mic, &p); + } + else + { + *p++ = (big5buf >> 8) & 0x00ff; + *p++ = big5buf & 0x00ff; + } + } + else if (c1 <= 0x7f) /* ASCII */ + *p++ = c1; + else + { /* cannot convert to Big5! */ + mic--; + printBogusChar(&mic, &p); + } } - } - *p = '\0'; + *p = '\0'; } /* @@ -543,6 +557,7 @@ mic2latin4(unsigned char *mic, unsigned char *p, int len) { mic2latin(mic, p, len, LC_ISO8859_4); } + #ifdef NOT_USED static void latin52mic(unsigned char *l, unsigned char *p, int len) @@ -554,6 +569,7 @@ mic2latin5(unsigned char *mic, unsigned char *p, int len) { mic2latin(mic, p, len, LC_ISO8859_5); } + #endif /* @@ -590,7 +606,7 @@ mic2ascii(unsigned char *mic, unsigned char *p, int len) *p = '\0'; } -/* +/* * Cyrillic support * currently supported Cyrillic encodings: * @@ -601,18 +617,18 @@ mic2ascii(unsigned char *mic, unsigned char *p, int len) * Alternativny Variant (MS-DOS CP866) */ -/* koi2mic: KOI8-R to Mule internal code */ +/* koi2mic: KOI8-R to Mule internal code */ static void koi2mic(unsigned char *l, unsigned char *p, int len) { - latin2mic(l, p, len, LC_KOI8_R); + latin2mic(l, p, len, LC_KOI8_R); } /* mic2koi: Mule internal code to KOI8-R */ static void mic2koi(unsigned char *mic, unsigned char *p, int len) { - mic2latin(mic, p, len, LC_KOI8_R); + mic2latin(mic, p, len, LC_KOI8_R); } /* @@ -625,30 +641,36 @@ mic2koi(unsigned char *mic, unsigned char *p, int len) */ static void latin2mic_with_table( - unsigned char *l, /* local charset string (source) */ - unsigned char *p, /* pointer to store mule internal code - (destination) */ - int len, /* length of l */ - int lc, /* leading character of p */ - unsigned char *tab /* code conversion table */ - ) -{ - unsigned char c1,c2; - - while (len-- > 0 && (c1 = *l++)) { - if (c1 < 128) { - *p++ = c1; - } else { - c2 = tab[c1 - 128]; - if (c2) { - *p++ = lc; - *p++ = c2; - } else { - *p++ = ' '; /* cannot convert */ - } - } - } - *p = '\0'; + unsigned char *l, /* local charset string (source) */ + unsigned char *p, /* pointer to store mule internal + * code (destination) */ + int len, /* length of l */ + int lc, /* leading character of p */ + unsigned char *tab /* code conversion table */ +) +{ + unsigned char c1, + c2; + + while (len-- > 0 && (c1 = *l++)) + { + if (c1 < 128) + *p++ = c1; + else + { + c2 = tab[c1 - 128]; + if (c2) + { + *p++ = lc; + *p++ = c2; + } + else + { + *p++ = ' '; /* cannot convert */ + } + } + } + *p = '\0'; } /* @@ -656,190 +678,202 @@ latin2mic_with_table( * conversion from the mule internal code to a local charset * with a encoding conversion table. * the table is ordered according to the second byte of the mule - * internal code starting from 128 (0x80). + * internal code starting from 128 (0x80). * each entry in the table * holds the corresponding code point for the local code. */ static void mic2latin_with_table( - unsigned char *mic, /* mule internal code (source) */ - unsigned char *p, /* local code (destination) */ - int len, /* length of p */ - int lc, /* leading character */ - unsigned char *tab /* code conversion table */ - ) -{ - - unsigned char c1,c2; - - while (len-- > 0 && (c1 = *mic++)) { - if (c1 < 128) { - *p++ = c1; - } else if (c1 == lc) { - c1 = *mic++; - len--; - c2 = tab[c1 - 128]; - if (c2) { - *p++ = c2; - } else { - *p++ = ' '; /* cannot convert */ - } - } else { - *p++ = ' '; /* bogus character */ - } - } - *p = '\0'; -} - -/* iso2mic: ISO-8859-5 to Mule internal code */ + unsigned char *mic, /* mule internal code + * (source) */ + unsigned char *p, /* local code (destination) */ + int len, /* length of p */ + int lc, /* leading character */ + unsigned char *tab /* code conversion table */ +) +{ + + unsigned char c1, + c2; + + while (len-- > 0 && (c1 = *mic++)) + { + if (c1 < 128) + *p++ = c1; + else if (c1 == lc) + { + c1 = *mic++; + len--; + c2 = tab[c1 - 128]; + if (c2) + *p++ = c2; + else + { + *p++ = ' '; /* cannot convert */ + } + } + else + { + *p++ = ' '; /* bogus character */ + } + } + *p = '\0'; +} + +/* iso2mic: ISO-8859-5 to Mule internal code */ static void iso2mic(unsigned char *l, unsigned char *p, int len) { - static char iso2koi[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xe1, 0xe2, 0xf7, 0xe7, 0xe4, 0xe5, 0xf6, 0xfa, - 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, - 0xf2, 0xf3, 0xf4, 0xf5, 0xe6, 0xe8, 0xe3, 0xfe, - 0xfb, 0xfd, 0xff, 0xf9, 0xf8, 0xfc, 0xe0, 0xf1, - 0xc1, 0xc2, 0xd7, 0xc7, 0xc4, 0xc5, 0xd6, 0xda, - 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, - 0xd2, 0xd3, 0xd4, 0xd5, 0xc6, 0xc8, 0xc3, 0xde, - 0xdb, 0xdd, 0xdf, 0xd9, 0xd8, 0xdc, 0xc0, 0xd1, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - }; - latin2mic_with_table(l, p, len, LC_KOI8_R, iso2koi); + static char iso2koi[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xe1, 0xe2, 0xf7, 0xe7, 0xe4, 0xe5, 0xf6, 0xfa, + 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, + 0xf2, 0xf3, 0xf4, 0xf5, 0xe6, 0xe8, 0xe3, 0xfe, + 0xfb, 0xfd, 0xff, 0xf9, 0xf8, 0xfc, 0xe0, 0xf1, + 0xc1, 0xc2, 0xd7, 0xc7, 0xc4, 0xc5, 0xd6, 0xda, + 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, + 0xd2, 0xd3, 0xd4, 0xd5, 0xc6, 0xc8, 0xc3, 0xde, + 0xdb, 0xdd, 0xdf, 0xd9, 0xd8, 0xdc, 0xc0, 0xd1, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }; + + latin2mic_with_table(l, p, len, LC_KOI8_R, iso2koi); } /* mic2iso: Mule internal code to ISO8859-5 */ static void mic2iso(unsigned char *mic, unsigned char *p, int len) { - static char koi2iso[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xee, 0xd0, 0xd1, 0xe6, 0xd4, 0xd5, 0xe4, 0xd3, - 0xe5, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, - 0xdf, 0xef, 0xe0, 0xe1, 0xe2, 0xe3, 0xd6, 0xd2, - 0xec, 0xeb, 0xd7, 0xe8, 0xed, 0xe9, 0xe7, 0xea, - 0xce, 0xb0, 0xb1, 0xc6, 0xb4, 0xb5, 0xc4, 0xb3, - 0xc5, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, - 0xbf, 0xcf, 0xc0, 0xc1, 0xc2, 0xc3, 0xb6, 0xb2, - 0xcc, 0xcb, 0xb7, 0xc8, 0xcd, 0xc9, 0xc7, 0xca - }; - - mic2latin_with_table(mic, p, len, LC_KOI8_R, koi2iso); -} - -/* win2mic: CP1251 to Mule internal code */ + static char koi2iso[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xee, 0xd0, 0xd1, 0xe6, 0xd4, 0xd5, 0xe4, 0xd3, + 0xe5, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, + 0xdf, 0xef, 0xe0, 0xe1, 0xe2, 0xe3, 0xd6, 0xd2, + 0xec, 0xeb, 0xd7, 0xe8, 0xed, 0xe9, 0xe7, 0xea, + 0xce, 0xb0, 0xb1, 0xc6, 0xb4, 0xb5, 0xc4, 0xb3, + 0xc5, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, + 0xbf, 0xcf, 0xc0, 0xc1, 0xc2, 0xc3, 0xb6, 0xb2, + 0xcc, 0xcb, 0xb7, 0xc8, 0xcd, 0xc9, 0xc7, 0xca + }; + + mic2latin_with_table(mic, p, len, LC_KOI8_R, koi2iso); +} + +/* win2mic: CP1251 to Mule internal code */ static void win2mic(unsigned char *l, unsigned char *p, int len) { - static char win2koi[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xbd, 0x00, 0x00, - 0xb3, 0x00, 0xb4, 0x00, 0x00, 0x00, 0x00, 0xb7, - 0x00, 0x00, 0xb6, 0xa6, 0xad, 0x00, 0x00, 0x00, - 0xa3, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x00, 0xa7, - 0xe1, 0xe2, 0xf7, 0xe7, 0xe4, 0xe5, 0xf6, 0xfa, - 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, - 0xf2, 0xf3, 0xf4, 0xf5, 0xe6, 0xe8, 0xe3, 0xfe, - 0xfb, 0xfd, 0xff, 0xf9, 0xf8, 0xfc, 0xe0, 0xf1, - 0xc1, 0xc2, 0xd7, 0xc7, 0xc4, 0xc5, 0xd6, 0xda, - 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, - 0xd2, 0xd3, 0xd4, 0xd5, 0xc6, 0xc8, 0xc3, 0xde, - 0xdb, 0xdd, 0xdf, 0xd9, 0xd8, 0xdc, 0xc0, 0xd1 - }; - latin2mic_with_table(l, p, len, LC_KOI8_R, win2koi); + static char win2koi[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xbd, 0x00, 0x00, + 0xb3, 0x00, 0xb4, 0x00, 0x00, 0x00, 0x00, 0xb7, + 0x00, 0x00, 0xb6, 0xa6, 0xad, 0x00, 0x00, 0x00, + 0xa3, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x00, 0xa7, + 0xe1, 0xe2, 0xf7, 0xe7, 0xe4, 0xe5, 0xf6, 0xfa, + 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, + 0xf2, 0xf3, 0xf4, 0xf5, 0xe6, 0xe8, 0xe3, 0xfe, + 0xfb, 0xfd, 0xff, 0xf9, 0xf8, 0xfc, 0xe0, 0xf1, + 0xc1, 0xc2, 0xd7, 0xc7, 0xc4, 0xc5, 0xd6, 0xda, + 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, + 0xd2, 0xd3, 0xd4, 0xd5, 0xc6, 0xc8, 0xc3, 0xde, + 0xdb, 0xdd, 0xdf, 0xd9, 0xd8, 0xdc, 0xc0, 0xd1 + }; + + latin2mic_with_table(l, p, len, LC_KOI8_R, win2koi); } /* mic2win: Mule internal code to CP1251 */ static void mic2win(unsigned char *mic, unsigned char *p, int len) { - static char koi2win[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xb8, 0xba, 0x00, 0xb3, 0xbf, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xa8, 0xaa, 0x00, 0xb2, 0xaf, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xa5, 0x00, 0x00, - 0xfe, 0xe0, 0xe1, 0xf6, 0xe4, 0xe5, 0xf4, 0xe3, - 0xf5, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, - 0xef, 0xff, 0xf0, 0xf1, 0xf2, 0xf3, 0xe6, 0xe2, - 0xfc, 0xfb, 0xe7, 0xf8, 0xfd, 0xf9, 0xf7, 0xfa, - 0xde, 0xc0, 0xc1, 0xd6, 0xc4, 0xc5, 0xd4, 0xc3, - 0xd5, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, - 0xcf, 0xdf, 0xd0, 0xd1, 0xd2, 0xd3, 0xc6, 0xc2, - 0xdc, 0xdb, 0xc7, 0xd8, 0xdd, 0xd9, 0xd7, 0xda - }; - mic2latin_with_table(mic, p, len, LC_KOI8_R, koi2win); -} - -/* alt2mic: CP866 to Mule internal code */ + static char koi2win[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xb8, 0xba, 0x00, 0xb3, 0xbf, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xa8, 0xaa, 0x00, 0xb2, 0xaf, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xa5, 0x00, 0x00, + 0xfe, 0xe0, 0xe1, 0xf6, 0xe4, 0xe5, 0xf4, 0xe3, + 0xf5, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, + 0xef, 0xff, 0xf0, 0xf1, 0xf2, 0xf3, 0xe6, 0xe2, + 0xfc, 0xfb, 0xe7, 0xf8, 0xfd, 0xf9, 0xf7, 0xfa, + 0xde, 0xc0, 0xc1, 0xd6, 0xc4, 0xc5, 0xd4, 0xc3, + 0xd5, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, + 0xcf, 0xdf, 0xd0, 0xd1, 0xd2, 0xd3, 0xc6, 0xc2, + 0xdc, 0xdb, 0xc7, 0xd8, 0xdd, 0xd9, 0xd7, 0xda + }; + + mic2latin_with_table(mic, p, len, LC_KOI8_R, koi2win); +} + +/* alt2mic: CP866 to Mule internal code */ static void alt2mic(unsigned char *l, unsigned char *p, int len) { - static char alt2koi[] = { - 0xe1, 0xe2, 0xf7, 0xe7, 0xe4, 0xe5, 0xf6, 0xfa, - 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, - 0xf2, 0xf3, 0xf4, 0xf5, 0xe6, 0xe8, 0xe3, 0xfe, - 0xfb, 0xfd, 0xff, 0xf9, 0xf8, 0xfc, 0xe0, 0xf1, - 0xc1, 0xc2, 0xd7, 0xc7, 0xc4, 0xc5, 0xd6, 0xda, - 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xbd, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xd2, 0xd3, 0xd4, 0xd5, 0xc6, 0xc8, 0xc3, 0xde, - 0xdb, 0xdd, 0xdf, 0xd9, 0xd8, 0xdc, 0xc0, 0xd1, - 0xb3, 0xa3, 0xb4, 0xa4, 0xb7, 0xa7, 0x00, 0x00, - 0xb6, 0xa6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - }; - latin2mic_with_table(l, p, len, LC_KOI8_R, alt2koi); + static char alt2koi[] = { + 0xe1, 0xe2, 0xf7, 0xe7, 0xe4, 0xe5, 0xf6, 0xfa, + 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, + 0xf2, 0xf3, 0xf4, 0xf5, 0xe6, 0xe8, 0xe3, 0xfe, + 0xfb, 0xfd, 0xff, 0xf9, 0xf8, 0xfc, 0xe0, 0xf1, + 0xc1, 0xc2, 0xd7, 0xc7, 0xc4, 0xc5, 0xd6, 0xda, + 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xbd, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xd2, 0xd3, 0xd4, 0xd5, 0xc6, 0xc8, 0xc3, 0xde, + 0xdb, 0xdd, 0xdf, 0xd9, 0xd8, 0xdc, 0xc0, 0xd1, + 0xb3, 0xa3, 0xb4, 0xa4, 0xb7, 0xa7, 0x00, 0x00, + 0xb6, 0xa6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }; + + latin2mic_with_table(l, p, len, LC_KOI8_R, alt2koi); } /* mic2alt: Mule internal code to CP866 */ static void mic2alt(unsigned char *mic, unsigned char *p, int len) { - static char koi2alt[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xf1, 0xf3, 0x00, 0xf9, 0xf5, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xf0, 0xf2, 0x00, 0xf8, 0xf4, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xbd, 0x00, 0x00, - 0xee, 0xa0, 0xa1, 0xe6, 0xa4, 0xa5, 0xe4, 0xa3, - 0xe5, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, - 0xaf, 0xef, 0xe0, 0xe1, 0xe2, 0xe3, 0xa6, 0xa2, - 0xec, 0xeb, 0xa7, 0xe8, 0xed, 0xe9, 0xe7, 0xea, - 0x9e, 0x80, 0x81, 0x96, 0x84, 0x85, 0x94, 0x83, - 0x95, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, - 0x8f, 0x9f, 0x90, 0x91, 0x92, 0x93, 0x86, 0x82, - 0x9c, 0x9b, 0x87, 0x98, 0x9d, 0x99, 0x97, 0x9a - }; - mic2latin_with_table(mic, p, len, LC_KOI8_R, koi2alt); + static char koi2alt[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xf1, 0xf3, 0x00, 0xf9, 0xf5, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xf0, 0xf2, 0x00, 0xf8, 0xf4, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xbd, 0x00, 0x00, + 0xee, 0xa0, 0xa1, 0xe6, 0xa4, 0xa5, 0xe4, 0xa3, + 0xe5, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, + 0xaf, 0xef, 0xe0, 0xe1, 0xe2, 0xe3, 0xa6, 0xa2, + 0xec, 0xeb, 0xa7, 0xe8, 0xed, 0xe9, 0xe7, 0xea, + 0x9e, 0x80, 0x81, 0x96, 0x84, 0x85, 0x94, 0x83, + 0x95, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, + 0x8f, 0x9f, 0x90, 0x91, 0x92, 0x93, 0x86, 0x82, + 0x9c, 0x9b, 0x87, 0x98, 0x9d, 0x99, 0x97, 0x9a + }; + + mic2latin_with_table(mic, p, len, LC_KOI8_R, koi2alt); } /* @@ -858,8 +892,8 @@ pg_encoding_conv_tbl pg_conv_tbl[] = { {LATIN2, "LATIN2", 0, latin22mic, mic2latin2}, /* ISO 8859 Latin 2 */ {LATIN3, "LATIN3", 0, latin32mic, mic2latin3}, /* ISO 8859 Latin 3 */ {LATIN4, "LATIN4", 0, latin42mic, mic2latin4}, /* ISO 8859 Latin 4 */ - {LATIN5, "LATIN5", 0, iso2mic, mic2iso}, /* ISO 8859 Latin 5 */ - {KOI8, "KOI8", 0, koi2mic, mic2koi}, /* KOI8-R */ + {LATIN5, "LATIN5", 0, iso2mic, mic2iso}, /* ISO 8859 Latin 5 */ + {KOI8, "KOI8", 0, koi2mic, mic2koi}, /* KOI8-R */ {WIN, "WIN", 0, win2mic, mic2win}, /* CP1251 */ {ALT, "ALT", 0, alt2mic, mic2alt}, /* CP866 */ {SJIS, "SJIS", 1, sjis2mic, mic2sjis}, /* SJIS */ diff --git a/src/backend/utils/mb/iso.c b/src/backend/utils/mb/iso.c index 4141578a3b8..a2903895b0c 100644 --- a/src/backend/utils/mb/iso.c +++ b/src/backend/utils/mb/iso.c @@ -4,63 +4,69 @@ * * Tatsuo Ishii * - * $Id: iso.c,v 1.1 1999/03/24 07:01:37 ishii Exp $ + * $Id: iso.c,v 1.2 1999/05/25 16:12:42 momjian Exp $ */ #include <stdio.h> main() { - int i; - char koitab[128],isotab[128]; - char buf[4096]; - int koi,iso; + int i; + char koitab[128], + isotab[128]; + char buf[4096]; + int koi, + iso; - for (i=0;i<128;i++) { - koitab[i] = isotab[i] = 0; - } + for (i = 0; i < 128; i++) + koitab[i] = isotab[i] = 0; - while (fgets(buf,sizeof(buf),stdin) != NULL) { - if (*buf == '#') { - continue; - } - sscanf(buf,"%d %x",&koi,&iso); - if (koi < 128 || koi > 255 || iso < 128 || iso > 255) { - fprintf(stderr,"invalid value %d\n",koi); - exit(1); - } - koitab[koi-128] = iso; - isotab[iso-128] = koi; - } + while (fgets(buf, sizeof(buf), stdin) != NULL) + { + if (*buf == '#') + continue; + sscanf(buf, "%d %x", &koi, &iso); + if (koi < 128 || koi > 255 || iso < 128 || iso > 255) + { + fprintf(stderr, "invalid value %d\n", koi); + exit(1); + } + koitab[koi - 128] = iso; + isotab[iso - 128] = koi; + } - i = 0; - printf("static char koi2iso[] = {\n"); - while (i < 128) { - int j = 0; - while (j < 8) { - printf("0x%02x",koitab[i++]); - j++; - if (i >= 128) { - break; - } - printf(", "); - } - printf("\n"); - } - printf("};\n"); + i = 0; + printf("static char koi2iso[] = {\n"); + while (i < 128) + { + int j = 0; - i = 0; - printf("static char iso2koi[] = {\n"); - while (i < 128) { - int j = 0; - while (j < 8) { - printf("0x%02x",isotab[i++]); - j++; - if (i >= 128) { - break; - } - printf(", "); - } - printf("\n"); - } - printf("};\n"); + while (j < 8) + { + printf("0x%02x", koitab[i++]); + j++; + if (i >= 128) + break; + printf(", "); + } + printf("\n"); + } + printf("};\n"); + + i = 0; + printf("static char iso2koi[] = {\n"); + while (i < 128) + { + int j = 0; + + while (j < 8) + { + printf("0x%02x", isotab[i++]); + j++; + if (i >= 128) + break; + printf(", "); + } + printf("\n"); + } + printf("};\n"); } diff --git a/src/backend/utils/mb/mbutils.c b/src/backend/utils/mb/mbutils.c index f354ccc96a2..d5831b14e6a 100644 --- a/src/backend/utils/mb/mbutils.c +++ b/src/backend/utils/mb/mbutils.c @@ -3,14 +3,14 @@ * client encoding and server internal encoding. * (currently mule internal code (mic) is used) * Tatsuo Ishii - * $Id: mbutils.c,v 1.5 1999/02/02 18:51:23 momjian Exp $ */ + * $Id: mbutils.c,v 1.6 1999/05/25 16:12:43 momjian Exp $ */ #include <stdio.h> #include <string.h> #include "mb/pg_wchar.h" -static int client_encoding = -1; +static int client_encoding = -1; static void (*client_to_mic) ();/* something to MIC */ static void (*client_from_mic) (); /* MIC to something */ static void (*server_to_mic) ();/* something to MIC */ @@ -213,16 +213,14 @@ pg_mbcliplen(const unsigned char *mbstr, int len, int limit) int clen = 0; int l; - while (*mbstr && len > 0) + while (*mbstr && len > 0) { l = pg_mblen(mbstr); - if ((clen + l) > limit) { + if ((clen + l) > limit) break; - } clen += l; - if (clen == limit) { + if (clen == limit) break; - } len -= l; mbstr += l; } diff --git a/src/backend/utils/mb/variable.c b/src/backend/utils/mb/variable.c index 0b2ffacd644..2452518e12d 100644 --- a/src/backend/utils/mb/variable.c +++ b/src/backend/utils/mb/variable.c @@ -2,7 +2,7 @@ * This file contains some public functions * related to show/set/reset variable commands. * Tatsuo Ishii - * $Id: variable.c,v 1.3 1999/05/13 10:28:26 ishii Exp $ + * $Id: variable.c,v 1.4 1999/05/25 16:12:44 momjian Exp $ */ #include "mb/pg_wchar.h" @@ -13,12 +13,12 @@ parse_client_encoding(const char *value) int encoding; encoding = pg_valid_client_encoding(value); - if (encoding < 0) { - if (value) { + if (encoding < 0) + { + if (value) elog(ERROR, "Client encoding %s is not supported", value); - } else { + else elog(ERROR, "No client encoding is specified"); - } } else { diff --git a/src/backend/utils/mb/wchar.c b/src/backend/utils/mb/wchar.c index 2fc856d1b5d..0d557e30f6f 100644 --- a/src/backend/utils/mb/wchar.c +++ b/src/backend/utils/mb/wchar.c @@ -1,7 +1,7 @@ /* * conversion functions between pg_wchar and multi-byte streams. * Tatsuo Ishii - * $Id: wchar.c,v 1.7 1999/04/25 20:35:51 tgl Exp $ + * $Id: wchar.c,v 1.8 1999/05/25 16:12:45 momjian Exp $ */ #include "mb/pg_wchar.h" @@ -428,33 +428,33 @@ pg_wchar_tbl pg_wchar_table[] = { {pg_euctw2wchar_with_len, pg_euctw_mblen}, /* 4 */ {pg_utf2wchar_with_len, pg_utf_mblen}, /* 5 */ {pg_mule2wchar_with_len, pg_mule_mblen}, /* 6 */ - {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 7 */ - {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 8 */ - {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 9 */ - {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 10 */ - {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 11 */ - {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 12 */ - {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 13 */ - {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 14 */ - {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 15 */ - {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 16 */ - {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 17 */ - {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 18 */ - {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 19 */ - {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 20 */ - {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 21 */ - {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 22 */ - {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 23 */ - {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 24 */ - {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 25 */ - {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 26 */ - {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 27 */ - {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 28 */ - {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 29 */ - {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 30 */ - {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 31 */ - {0, pg_sjis_mblen}, /* 32 */ - {0, pg_big5_mblen} /* 33 */ + {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 7 */ + {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 8 */ + {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 9 */ + {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 10 */ + {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 11 */ + {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 12 */ + {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 13 */ + {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 14 */ + {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 15 */ + {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 16 */ + {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 17 */ + {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 18 */ + {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 19 */ + {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 20 */ + {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 21 */ + {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 22 */ + {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 23 */ + {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 24 */ + {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 25 */ + {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 26 */ + {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 27 */ + {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 28 */ + {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 29 */ + {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 30 */ + {pg_latin12wchar_with_len, pg_latin1_mblen}, /* 31 */ + {0, pg_sjis_mblen}, /* 32 */ + {0, pg_big5_mblen} /* 33 */ }; /* returns the byte length of a word for mule internal code */ diff --git a/src/backend/utils/mb/win.c b/src/backend/utils/mb/win.c index 272c6a638c1..8db62b49b3c 100644 --- a/src/backend/utils/mb/win.c +++ b/src/backend/utils/mb/win.c @@ -4,63 +4,69 @@ * * Tatsuo Ishii * - * $Id: win.c,v 1.1 1999/03/24 07:01:37 ishii Exp $ + * $Id: win.c,v 1.2 1999/05/25 16:12:45 momjian Exp $ */ #include <stdio.h> main() { - int i; - char koitab[128],wintab[128]; - char buf[4096]; - int koi,win; + int i; + char koitab[128], + wintab[128]; + char buf[4096]; + int koi, + win; - for (i=0;i<128;i++) { - koitab[i] = wintab[i] = 0; - } + for (i = 0; i < 128; i++) + koitab[i] = wintab[i] = 0; - while (fgets(buf,sizeof(buf),stdin) != NULL) { - if (*buf == '#') { - continue; - } - sscanf(buf,"%d %d",&koi,&win); - if (koi < 128 || koi > 255 || win < 128 || win > 255) { - fprintf(stderr,"invalid value %d\n",koi); - exit(1); - } - koitab[koi-128] = win; - wintab[win-128] = koi; - } + while (fgets(buf, sizeof(buf), stdin) != NULL) + { + if (*buf == '#') + continue; + sscanf(buf, "%d %d", &koi, &win); + if (koi < 128 || koi > 255 || win < 128 || win > 255) + { + fprintf(stderr, "invalid value %d\n", koi); + exit(1); + } + koitab[koi - 128] = win; + wintab[win - 128] = koi; + } - i = 0; - printf("static char koi2win[] = {\n"); - while (i < 128) { - int j = 0; - while (j < 8) { - printf("0x%02x",koitab[i++]); - j++; - if (i >= 128) { - break; - } - printf(", "); - } - printf("\n"); - } - printf("};\n"); + i = 0; + printf("static char koi2win[] = {\n"); + while (i < 128) + { + int j = 0; - i = 0; - printf("static char win2koi[] = {\n"); - while (i < 128) { - int j = 0; - while (j < 8) { - printf("0x%02x",wintab[i++]); - j++; - if (i >= 128) { - break; - } - printf(", "); - } - printf("\n"); - } - printf("};\n"); + while (j < 8) + { + printf("0x%02x", koitab[i++]); + j++; + if (i >= 128) + break; + printf(", "); + } + printf("\n"); + } + printf("};\n"); + + i = 0; + printf("static char win2koi[] = {\n"); + while (i < 128) + { + int j = 0; + + while (j < 8) + { + printf("0x%02x", wintab[i++]); + j++; + if (i >= 128) + break; + printf(", "); + } + printf("\n"); + } + printf("};\n"); } diff --git a/src/backend/utils/misc/database.c b/src/backend/utils/misc/database.c index d72ebd347b5..e9ea6193492 100644 --- a/src/backend/utils/misc/database.c +++ b/src/backend/utils/misc/database.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/misc/Attic/database.c,v 1.23 1999/02/13 23:20:03 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/misc/Attic/database.c,v 1.24 1999/05/25 16:12:47 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -188,7 +188,7 @@ GetRawDatabaseInfo(char *name, int4 *owner, Oid *db_id, char *path, int *encodin int nbytes; int max, i; - HeapTupleData tup; + HeapTupleData tup; Page pg; PageHeader ph; char *dbfname; diff --git a/src/backend/utils/misc/trace.c b/src/backend/utils/misc/trace.c index 871e1d436a0..3ba1626c03d 100644 --- a/src/backend/utils/misc/trace.c +++ b/src/backend/utils/misc/trace.c @@ -132,10 +132,10 @@ tprintf(int flag, const char *fmt,...) * Print a timestamp and a message to stdout or to syslog. */ int -tprintf1(const char *fmt, ... ) +tprintf1(const char *fmt,...) { va_list ap; - char line[ELOG_MAXLEN+TIMESTAMP_SIZE+1]; + char line[ELOG_MAXLEN + TIMESTAMP_SIZE + 1]; va_start(ap, fmt); #ifdef ELOG_TIMESTAMPS @@ -145,10 +145,11 @@ tprintf1(const char *fmt, ... ) va_end(ap); #ifdef USE_SYSLOG - write_syslog(LOG_INFO, line+TIMESTAMP_SIZE); + write_syslog(LOG_INFO, line + TIMESTAMP_SIZE); #endif - if (UseSyslog <= 1) { + if (UseSyslog <= 1) + { puts(line); fflush(stdout); } @@ -193,7 +194,7 @@ eprintf(const char *fmt,...) void write_syslog(int level, char *line) { - static int openlog_done = 0; + static int openlog_done = 0; if (UseSyslog >= 1) { @@ -348,9 +349,10 @@ read_pg_options(SIGNAL_ARGS) char *s, *p; - if (!DataDir) { - fprintf(stderr, "read_pg_options: DataDir not defined\n"); - return; + if (!DataDir) + { + fprintf(stderr, "read_pg_options: DataDir not defined\n"); + return; } snprintf(buffer, BUF_SIZE - 1, "%s/%s", DataDir, "pg_options"); diff --git a/src/backend/utils/mmgr/aset.c b/src/backend/utils/mmgr/aset.c index 04bdba93292..1060f7b6def 100644 --- a/src/backend/utils/mmgr/aset.c +++ b/src/backend/utils/mmgr/aset.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/mmgr/aset.c,v 1.15 1999/05/22 23:19:37 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/mmgr/aset.c,v 1.16 1999/05/25 16:12:51 momjian Exp $ * * NOTE: * This is a new (Feb. 05, 1999) implementation of the allocation set @@ -51,7 +51,7 @@ */ #define ALLOC_MINBITS 4 /* smallest chunk size is 16 bytes */ -#define ALLOC_SMALLCHUNK_LIMIT (1 << (ALLOCSET_NUM_FREELISTS-2+ALLOC_MINBITS)) +#define ALLOC_SMALLCHUNK_LIMIT (1 << (ALLOCSET_NUM_FREELISTS-2+ALLOC_MINBITS)) /* Size of largest chunk that we use a fixed size for */ /*-------------------- @@ -65,8 +65,8 @@ *-------------------- */ -#define ALLOC_MIN_BLOCK_SIZE 8192 -#define ALLOC_MAX_BLOCK_SIZE (8 * 1024 * 1024) +#define ALLOC_MIN_BLOCK_SIZE 8192 +#define ALLOC_MAX_BLOCK_SIZE (8 * 1024 * 1024) #define ALLOC_BLOCKHDRSZ MAXALIGN(sizeof(AllocBlockData)) @@ -91,12 +91,12 @@ static inline int AllocSetFreeIndex(Size size) { - int idx = 0; + int idx = 0; if (size > 0) { size = (size - 1) >> ALLOC_MINBITS; - while (size != 0 && idx < ALLOCSET_NUM_FREELISTS-1) + while (size != 0 && idx < ALLOCSET_NUM_FREELISTS - 1) { idx++; size >>= 1; @@ -105,7 +105,7 @@ AllocSetFreeIndex(Size size) return idx; } - + /* * Public routines @@ -119,7 +119,7 @@ AllocSetFreeIndex(Size size) */ /* - * AllocSetInit + * AllocSetInit * Initializes given allocation set. * * Note: @@ -147,7 +147,7 @@ AllocSetInit(AllocSet set, AllocMode mode, Size limit) /* - * AllocSetReset + * AllocSetReset * Frees memory which is allocated in the given set. * * Exceptions: @@ -156,8 +156,8 @@ AllocSetInit(AllocSet set, AllocMode mode, Size limit) void AllocSetReset(AllocSet set) { - AllocBlock block = set->blocks; - AllocBlock next; + AllocBlock block = set->blocks; + AllocBlock next; AssertArg(AllocSetIsValid(set)); @@ -172,7 +172,7 @@ AllocSetReset(AllocSet set) } /* - * AllocSetContains + * AllocSetContains * True iff allocation set contains given allocation element. * * Exceptions: @@ -189,7 +189,7 @@ AllocSetContains(AllocSet set, AllocPointer pointer) } /* - * AllocSetAlloc + * AllocSetAlloc * Returns pointer to allocated memory of given size; memory is added * to the set. * @@ -200,22 +200,22 @@ AllocSetContains(AllocSet set, AllocPointer pointer) AllocPointer AllocSetAlloc(AllocSet set, Size size) { - AllocBlock block; - AllocChunk chunk; - AllocChunk freeref = NULL; - int fidx; - Size chunk_size; - Size blksize; + AllocBlock block; + AllocChunk chunk; + AllocChunk freeref = NULL; + int fidx; + Size chunk_size; + Size blksize; AssertArg(AllocSetIsValid(set)); /* - * Lookup in the corresponding free list if there is a - * free chunk we could reuse + * Lookup in the corresponding free list if there is a free chunk we + * could reuse * */ fidx = AllocSetFreeIndex(size); - for (chunk = set->freelist[fidx]; chunk; chunk = (AllocChunk)chunk->aset) + for (chunk = set->freelist[fidx]; chunk; chunk = (AllocChunk) chunk->aset) { if (chunk->size >= size) break; @@ -223,18 +223,18 @@ AllocSetAlloc(AllocSet set, Size size) } /* - * If one is found, remove it from the free list, make it again - * a member of the alloc set and return it's data address. + * If one is found, remove it from the free list, make it again a + * member of the alloc set and return it's data address. * */ if (chunk != NULL) { if (freeref == NULL) - set->freelist[fidx] = (AllocChunk)chunk->aset; + set->freelist[fidx] = (AllocChunk) chunk->aset; else freeref->aset = chunk->aset; - chunk->aset = (void *)set; + chunk->aset = (void *) set; return AllocChunkGetPointer(chunk); } @@ -248,8 +248,8 @@ AllocSetAlloc(AllocSet set, Size size) Assert(chunk_size >= size); /* - * If there is enough room in the active allocation block, - * always allocate the chunk there. + * If there is enough room in the active allocation block, always + * allocate the chunk there. */ if ((block = set->blocks) != NULL) @@ -261,8 +261,8 @@ AllocSetAlloc(AllocSet set, Size size) } /* - * Otherwise, if requested size exceeds smallchunk limit, - * allocate an entire separate block for this allocation + * Otherwise, if requested size exceeds smallchunk limit, allocate an + * entire separate block for this allocation * */ if (block == NULL && size > ALLOC_SMALLCHUNK_LIMIT) @@ -272,9 +272,9 @@ AllocSetAlloc(AllocSet set, Size size) if (block == NULL) elog(FATAL, "Memory exhausted in AllocSetAlloc()"); block->aset = set; - block->freeptr = block->endptr = ((char *)block) + blksize; + block->freeptr = block->endptr = ((char *) block) + blksize; - chunk = (AllocChunk) (((char *)block) + ALLOC_BLOCKHDRSZ); + chunk = (AllocChunk) (((char *) block) + ALLOC_BLOCKHDRSZ); chunk->aset = set; chunk->size = chunk_size; @@ -310,8 +310,11 @@ AllocSetAlloc(AllocSet set, Size size) { /* Get size of prior block */ blksize = set->blocks->endptr - ((char *) set->blocks); - /* Special case: if very first allocation was for a large chunk, - * could have a funny-sized top block. Do something reasonable. + + /* + * Special case: if very first allocation was for a large + * chunk, could have a funny-sized top block. Do something + * reasonable. */ if (blksize < ALLOC_MIN_BLOCK_SIZE) blksize = ALLOC_MIN_BLOCK_SIZE; @@ -321,12 +324,13 @@ AllocSetAlloc(AllocSet set, Size size) blksize = ALLOC_MAX_BLOCK_SIZE; /* Try to allocate it */ block = (AllocBlock) malloc(blksize); + /* * We could be asking for pretty big blocks here, so cope if * malloc fails. But give up if there's less than a meg or so * available... */ - while (block == NULL && blksize > 1024*1024) + while (block == NULL && blksize > 1024 * 1024) { blksize >>= 1; block = (AllocBlock) malloc(blksize); @@ -336,8 +340,8 @@ AllocSetAlloc(AllocSet set, Size size) if (block == NULL) elog(FATAL, "Memory exhausted in AllocSetAlloc()"); block->aset = set; - block->freeptr = ((char *)block) + ALLOC_BLOCKHDRSZ; - block->endptr = ((char *)block) + blksize; + block->freeptr = ((char *) block) + ALLOC_BLOCKHDRSZ; + block->endptr = ((char *) block) + blksize; block->next = set->blocks; set->blocks = block; @@ -346,8 +350,8 @@ AllocSetAlloc(AllocSet set, Size size) /* * OK, do the allocation */ - chunk = (AllocChunk)(block->freeptr); - chunk->aset = (void *)set; + chunk = (AllocChunk) (block->freeptr); + chunk->aset = (void *) set; chunk->size = chunk_size; block->freeptr += (chunk_size + ALLOC_CHUNKHDRSZ); Assert(block->freeptr <= block->endptr); @@ -356,7 +360,7 @@ AllocSetAlloc(AllocSet set, Size size) } /* - * AllocSetFree + * AllocSetFree * Frees allocated memory; memory is removed from the set. * * Exceptions: @@ -367,8 +371,8 @@ AllocSetAlloc(AllocSet set, Size size) void AllocSetFree(AllocSet set, AllocPointer pointer) { - int fidx; - AllocChunk chunk; + int fidx; + AllocChunk chunk; /* AssertArg(AllocSetIsValid(set)); */ /* AssertArg(AllocPointerIsValid(pointer)); */ @@ -377,12 +381,12 @@ AllocSetFree(AllocSet set, AllocPointer pointer) chunk = AllocPointerGetChunk(pointer); fidx = AllocSetFreeIndex(chunk->size); - chunk->aset = (void *)set->freelist[fidx]; + chunk->aset = (void *) set->freelist[fidx]; set->freelist[fidx] = chunk; } /* - * AllocSetRealloc + * AllocSetRealloc * Returns new pointer to allocated memory of given size; this memory * is added to the set. Memory associated with given pointer is copied * into the new memory, and the old memory is freed. @@ -404,8 +408,8 @@ AllocSetRealloc(AllocSet set, AllocPointer pointer, Size size) AssertArg(AllocSetContains(set, pointer)); /* - * Chunk sizes are aligned to power of 2 on AllocSetAlloc(). - * Maybe the allocated area already is >= the new size. + * Chunk sizes are aligned to power of 2 on AllocSetAlloc(). Maybe the + * allocated area already is >= the new size. * */ oldsize = AllocPointerGetSize(pointer); @@ -425,7 +429,7 @@ AllocSetRealloc(AllocSet set, AllocPointer pointer, Size size) } /* - * AllocSetDump + * AllocSetDump * Displays allocated set. */ void diff --git a/src/backend/utils/mmgr/mcxt.c b/src/backend/utils/mmgr/mcxt.c index 401ef7c6c0b..98cd5b6f161 100644 --- a/src/backend/utils/mmgr/mcxt.c +++ b/src/backend/utils/mmgr/mcxt.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/mmgr/mcxt.c,v 1.13 1999/03/22 16:45:27 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/mmgr/mcxt.c,v 1.14 1999/05/25 16:12:53 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -54,7 +54,7 @@ static OrderedSetData ActiveGlobalMemorySetData; /* uninitialized */ #define PSIZESPACE(LEN) ((LEN) + sizeof (int32)) /* - * AllocSizeIsValid + * AllocSizeIsValid * True iff 0 < size and size <= MaxAllocSize. */ #define AllocSizeIsValid(size) (0 < (size) && (size) <= MaxAllocSize) @@ -64,7 +64,7 @@ static OrderedSetData ActiveGlobalMemorySetData; /* uninitialized */ *****************************************************************************/ /* - * CurrentMemoryContext + * CurrentMemoryContext * Memory context for general global allocations. */ DLLIMPORT MemoryContext CurrentMemoryContext = NULL; @@ -106,14 +106,14 @@ static struct MemoryContextMethodsData GlobalContextMethodsData = { static struct GlobalMemoryData TopGlobalMemoryData = { T_GlobalMemory, /* NodeTag tag */ &GlobalContextMethodsData, /* ContextMethods method */ - { NULL, { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }}, - /* free AllocSet */ + {NULL, {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}}, + /* free AllocSet */ "TopGlobal", /* char* name */ {0} /* uninitialized OrderedElemData elemD */ }; /* - * TopMemoryContext + * TopMemoryContext * Memory context for general global allocations. * * Note: @@ -131,7 +131,7 @@ MemoryContext TopMemoryContext = (MemoryContext) &TopGlobalMemoryData; */ /* - * EnableMemoryContext + * EnableMemoryContext * Enables/disables memory management and global contexts. * * Note: @@ -207,7 +207,7 @@ EnableMemoryContext(bool on) } /* - * MemoryContextAlloc + * MemoryContextAlloc * Returns pointer to aligned allocated memory in the given context. * * Note: @@ -231,7 +231,7 @@ MemoryContextAlloc(MemoryContext context, Size size) } /* - * MemoryContextFree + * MemoryContextFree * Frees allocated memory referenced by pointer in the given context. * * Note: @@ -252,7 +252,7 @@ MemoryContextFree(MemoryContext context, Pointer pointer) } /* - * MemoryContextRelloc + * MemoryContextRelloc * Returns pointer to aligned allocated memory in the given context. * * Note: @@ -278,7 +278,7 @@ MemoryContextRealloc(MemoryContext context, } /* - * MemoryContextGetName + * MemoryContextGetName * Returns pointer to aligned allocated memory in the given context. * * Note: @@ -301,7 +301,7 @@ MemoryContextGetName(MemoryContext context) #endif /* - * PointerGetAllocSize + * PointerGetAllocSize * Returns size of aligned allocated memory given pointer to it. * * Note: @@ -324,7 +324,7 @@ PointerGetAllocSize(Pointer pointer) #endif /* - * MemoryContextSwitchTo + * MemoryContextSwitchTo * Returns the current context; installs the given context. * * Note: @@ -351,7 +351,7 @@ MemoryContextSwitchTo(MemoryContext context) * External Functions */ /* - * CreateGlobalMemory + * CreateGlobalMemory * Returns new global memory context. * * Note: @@ -385,7 +385,7 @@ CreateGlobalMemory(char *name) /* XXX MemoryContextName */ } /* - * GlobalMemoryDestroy + * GlobalMemoryDestroy * Destroys given global memory context. * * Exceptions: @@ -413,7 +413,7 @@ GlobalMemoryDestroy(GlobalMemory context) *****************************************************************************/ /* - * GlobalMemoryAlloc + * GlobalMemoryAlloc * Returns pointer to aligned space in the global context. * * Exceptions: @@ -426,7 +426,7 @@ GlobalMemoryAlloc(GlobalMemory this, Size size) } /* - * GlobalMemoryFree + * GlobalMemoryFree * Frees allocated memory in the global context. * * Exceptions: @@ -441,7 +441,7 @@ GlobalMemoryFree(GlobalMemory this, } /* - * GlobalMemoryRealloc + * GlobalMemoryRealloc * Returns pointer to aligned space in the global context. * * Note: @@ -461,7 +461,7 @@ GlobalMemoryRealloc(GlobalMemory this, } /* - * GlobalMemoryGetName + * GlobalMemoryGetName * Returns name string for context. * * Exceptions: @@ -474,7 +474,7 @@ GlobalMemoryGetName(GlobalMemory this) } /* - * GlobalMemoryDump + * GlobalMemoryDump * Dumps global memory context for debugging. * * Exceptions: @@ -499,7 +499,7 @@ GlobalMemoryDump(GlobalMemory this) } /* - * DumpGlobalMemories + * DumpGlobalMemories * Dumps all global memory contexts for debugging. * * Exceptions: diff --git a/src/backend/utils/mmgr/oset.c b/src/backend/utils/mmgr/oset.c index 493197e8ea9..8aca4a2ec01 100644 --- a/src/backend/utils/mmgr/oset.c +++ b/src/backend/utils/mmgr/oset.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/mmgr/Attic/oset.c,v 1.11 1999/02/13 23:20:10 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/mmgr/Attic/oset.c,v 1.12 1999/05/25 16:12:54 momjian Exp $ * * NOTE * XXX This is a preliminary implementation which lacks fail-fast @@ -24,7 +24,7 @@ static void OrderedElemPush(OrderedElem elem); static void OrderedElemPushHead(OrderedElem elem); /* - * OrderedElemGetBase + * OrderedElemGetBase * Returns base of enclosing structure. */ static Pointer @@ -37,7 +37,7 @@ OrderedElemGetBase(OrderedElem elem) } /* - * OrderedSetInit + * OrderedSetInit */ void OrderedSetInit(OrderedSet set, Offset offset) @@ -49,7 +49,7 @@ OrderedSetInit(OrderedSet set, Offset offset) } /* - * OrderedSetContains + * OrderedSetContains * True iff ordered set contains given element. */ bool @@ -59,7 +59,7 @@ OrderedSetContains(OrderedSet set, OrderedElem elem) } /* - * OrderedSetGetHead + * OrderedSetGetHead */ Pointer OrderedSetGetHead(OrderedSet set) @@ -73,7 +73,7 @@ OrderedSetGetHead(OrderedSet set) } /* - * OrderedSetGetTail + * OrderedSetGetTail */ #ifdef NOT_USED Pointer @@ -90,7 +90,7 @@ OrderedSetGetTail(OrderedSet set) #endif /* - * OrderedElemGetPredecessor + * OrderedElemGetPredecessor */ Pointer OrderedElemGetPredecessor(OrderedElem elem) @@ -102,7 +102,7 @@ OrderedElemGetPredecessor(OrderedElem elem) } /* - * OrderedElemGetSuccessor + * OrderedElemGetSuccessor */ Pointer OrderedElemGetSuccessor(OrderedElem elem) @@ -114,7 +114,7 @@ OrderedElemGetSuccessor(OrderedElem elem) } /* - * OrderedElemPop + * OrderedElemPop */ void OrderedElemPop(OrderedElem elem) @@ -127,7 +127,7 @@ OrderedElemPop(OrderedElem elem) } /* - * OrderedElemPushInto + * OrderedElemPushInto */ void OrderedElemPushInto(OrderedElem elem, OrderedSet set) @@ -140,7 +140,7 @@ OrderedElemPushInto(OrderedElem elem, OrderedSet set) } /* - * OrderedElemPush + * OrderedElemPush */ static void OrderedElemPush(OrderedElem elem) @@ -149,7 +149,7 @@ OrderedElemPush(OrderedElem elem) } /* - * OrderedElemPushHead + * OrderedElemPushHead */ static void OrderedElemPushHead(OrderedElem elem) diff --git a/src/backend/utils/mmgr/palloc.c b/src/backend/utils/mmgr/palloc.c index 2653401b2a9..bf36908973a 100644 --- a/src/backend/utils/mmgr/palloc.c +++ b/src/backend/utils/mmgr/palloc.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/mmgr/Attic/palloc.c,v 1.11 1999/02/13 23:20:11 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/mmgr/Attic/palloc.c,v 1.12 1999/05/25 16:12:54 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -36,7 +36,7 @@ char * pstrdup(char *string) { - char *nstr; + char *nstr; int len; nstr = palloc(len = strlen(string) + 1); @@ -44,4 +44,3 @@ pstrdup(char *string) return nstr; } - diff --git a/src/backend/utils/mmgr/portalmem.c b/src/backend/utils/mmgr/portalmem.c index 4068b13467a..d4cc93482f8 100644 --- a/src/backend/utils/mmgr/portalmem.c +++ b/src/backend/utils/mmgr/portalmem.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/mmgr/portalmem.c,v 1.18 1999/02/13 23:20:12 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/mmgr/portalmem.c,v 1.19 1999/05/25 16:12:55 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -50,7 +50,7 @@ * * Here is an old comment taken from nodes/memnodes.h * - * MemoryContext + * MemoryContext * A logical context in which memory allocations occur. * * The types of memory contexts can be thought of as members of the @@ -517,7 +517,7 @@ DumpPortals() * ---------------------------------------------------------------- */ /* - * EnablePortalManager + * EnablePortalManager * Enables/disables the portal management module. */ void @@ -579,7 +579,7 @@ EnablePortalManager(bool on) } /* - * GetPortalByName + * GetPortalByName * Returns a portal given a portal name; returns blank portal given * NULL; returns invalid portal if portal not found. * @@ -606,7 +606,7 @@ GetPortalByName(char *name) } /* - * BlankPortalAssignName + * BlankPortalAssignName * Returns former blank portal as portal with given name. * * Side effect: @@ -659,7 +659,7 @@ BlankPortalAssignName(char *name) /* XXX PortalName */ } /* - * PortalSetQuery + * PortalSetQuery * Attaches a "query" to portal. * * Exceptions: @@ -686,7 +686,7 @@ PortalSetQuery(Portal portal, } /* - * PortalGetQueryDesc + * PortalGetQueryDesc * Returns query attached to portal. * * Exceptions: @@ -703,7 +703,7 @@ PortalGetQueryDesc(Portal portal) } /* - * PortalGetState + * PortalGetState * Returns state attached to portal. * * Exceptions: @@ -720,7 +720,7 @@ PortalGetState(Portal portal) } /* - * CreatePortal + * CreatePortal * Returns a new portal given a name. * * Note: @@ -784,7 +784,7 @@ CreatePortal(char *name) /* XXX PortalName */ } /* - * PortalDestroy + * PortalDestroy * Destroys portal. * * Exceptions: @@ -813,22 +813,22 @@ PortalDestroy(Portal *portalP) AllocSetReset(&portal->variable.setData); /* XXX log */ /* - * In the case of a transaction abort it is possible that - * we get called while one of the memory contexts of the portal - * we're destroying is the current memory context. - * - * Don't know how to handle that cleanly because it is required - * to be in that context right now. This portal struct remains - * allocated in the PortalMemory context until backend dies. + * In the case of a transaction abort it is possible that we get + * called while one of the memory contexts of the portal we're + * destroying is the current memory context. * - * Not happy with that, but it's better to loose some bytes of - * memory than to have the backend dump core. + * Don't know how to handle that cleanly because it is required to be in + * that context right now. This portal struct remains allocated in the + * PortalMemory context until backend dies. + * + * Not happy with that, but it's better to loose some bytes of memory + * than to have the backend dump core. * * --- Feb. 04, 1999 Jan Wieck */ - if (CurrentMemoryContext == (MemoryContext)PortalGetHeapMemory(portal)) + if (CurrentMemoryContext == (MemoryContext) PortalGetHeapMemory(portal)) return; - if (CurrentMemoryContext == (MemoryContext)PortalGetVariableMemory(portal)) + if (CurrentMemoryContext == (MemoryContext) PortalGetVariableMemory(portal)) return; if (portal != BlankPortal) @@ -836,7 +836,7 @@ PortalDestroy(Portal *portalP) } /* ---------------- - * PortalResetHeapMemory + * PortalResetHeapMemory * Resets portal's heap memory context. * * Someday, Reset, Start, and End can be optimized by keeping a global @@ -873,7 +873,7 @@ PortalResetHeapMemory(Portal portal) } /* - * StartPortalAllocMode + * StartPortalAllocMode * Starts a new block of portal heap allocation using mode and limit; * the current block is disabled until EndPortalAllocMode is called. * @@ -904,7 +904,7 @@ StartPortalAllocMode(AllocMode mode, Size limit) /* allocate and initialize new block */ context->block = MemoryContextAlloc( (MemoryContext) PortalHeapMemoryGetVariableMemory(context), - sizeof(HeapMemoryBlockData)); + sizeof(HeapMemoryBlockData)); /* XXX careful, context->block has never been stacked => bad state */ @@ -912,7 +912,7 @@ StartPortalAllocMode(AllocMode mode, Size limit) } /* - * EndPortalAllocMode + * EndPortalAllocMode * Ends current block of portal heap allocation; previous block is * reenabled. * @@ -944,7 +944,7 @@ EndPortalAllocMode() } /* - * PortalGetVariableMemory + * PortalGetVariableMemory * Returns variable memory context for a given portal. * * Exceptions: @@ -958,7 +958,7 @@ PortalGetVariableMemory(Portal portal) } /* - * PortalGetHeapMemory + * PortalGetHeapMemory * Returns heap memory context for a given portal. * * Exceptions: @@ -972,7 +972,7 @@ PortalGetHeapMemory(Portal portal) } /* - * PortalVariableMemoryGetPortal + * PortalVariableMemoryGetPortal * Returns portal containing given variable memory context. * * Exceptions: @@ -986,7 +986,7 @@ PortalVariableMemoryGetPortal(PortalVariableMemory context) } /* - * PortalHeapMemoryGetPortal + * PortalHeapMemoryGetPortal * Returns portal containing given heap memory context. * * Exceptions: @@ -1000,7 +1000,7 @@ PortalHeapMemoryGetPortal(PortalHeapMemory context) } /* - * PortalVariableMemoryGetHeapMemory + * PortalVariableMemoryGetHeapMemory * Returns heap memory context associated with given variable memory. * * Exceptions: @@ -1019,7 +1019,7 @@ PortalVariableMemoryGetHeapMemory(PortalVariableMemory context) #endif /* - * PortalHeapMemoryGetVariableMemory + * PortalHeapMemoryGetVariableMemory * Returns variable memory context associated with given heap memory. * * Exceptions: diff --git a/src/backend/utils/sort/psort.c b/src/backend/utils/sort/psort.c index d35141ad77b..497dceff07e 100644 --- a/src/backend/utils/sort/psort.c +++ b/src/backend/utils/sort/psort.c @@ -4,7 +4,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: psort.c,v 1.51 1999/05/09 00:53:22 tgl Exp $ + * $Id: psort.c,v 1.52 1999/05/25 16:12:59 momjian Exp $ * * NOTES * Sorts the first relation into the second relation. @@ -55,9 +55,9 @@ #include "utils/rel.h" static bool createfirstrun(Sort *node); -static bool createrun(Sort *node, BufFile *file); -static void destroytape(BufFile *file); -static void dumptuples(BufFile *file, Sort *node); +static bool createrun(Sort *node, BufFile * file); +static void destroytape(BufFile * file); +static void dumptuples(BufFile * file, Sort *node); static BufFile *gettape(void); static void initialrun(Sort *node); static void inittapes(Sort *node); @@ -320,15 +320,11 @@ initialrun(Sort *node) tp->tp_dummy--; PS(node)->TotalDummy--; if (tp->tp_dummy < (tp + 1)->tp_dummy) - { tp++; - } - else + else { if (tp->tp_dummy != 0) - { tp = PS(node)->Tape; - } else { PS(node)->Level++; @@ -337,13 +333,13 @@ initialrun(Sort *node) tp - PS(node)->Tape < PS(node)->TapeRange; tp++) { PS(node)->TotalDummy += (tp->tp_dummy = baseruns - + (tp + 1)->tp_fib - - tp->tp_fib); + + (tp + 1)->tp_fib + - tp->tp_fib); tp->tp_fib = baseruns + (tp + 1)->tp_fib; } - tp = PS(node)->Tape;/* D4 */ - } /* D3 */ + tp = PS(node)->Tape; /* D4 */ + } /* D3 */ } if (extrapasses) { @@ -354,9 +350,7 @@ initialrun(Sort *node) continue; } else - { break; - } } if ((bool) createrun(node, tp->tp_file) == false) extrapasses = 1 + (PS(node)->Tuples != NULL); @@ -479,7 +473,7 @@ createfirstrun(Sort *node) * Tuples contains the tuples for the following run upon exit */ static bool -createrun(Sort *node, BufFile *file) +createrun(Sort *node, BufFile * file) { HeapTuple lasttuple; HeapTuple tup; @@ -554,9 +548,7 @@ createrun(Sort *node, BufFile *file) memtuples[t_last] = tup; } else - { puttuple(&PS(node)->Tuples, tup, 0, &PS(node)->treeContext); - } } if (lasttuple != NULL) { @@ -627,7 +619,7 @@ merge(Sort *node, struct tape * dest) struct tape *lasttp; /* (TAPE[P]) */ struct tape *tp; struct leftist *tuples; - BufFile *destfile; + BufFile *destfile; int times; /* runs left to merge */ int outdummy; /* complete dummy runs */ short fromtape; @@ -644,10 +636,9 @@ merge(Sort *node, struct tape * dest) tp->tp_fib += times; /* Tape[].tp_fib (A[]) is set to proper exit values */ - if (PS(node)->TotalDummy < PS(node)->TapeRange) /* no complete dummy runs */ - { + if (PS(node)->TotalDummy < PS(node)->TapeRange) /* no complete dummy + * runs */ outdummy = 0; - } else { outdummy = PS(node)->TotalDummy; /* a large positive number */ @@ -729,7 +720,7 @@ merge(Sort *node, struct tape * dest) * dumptuples - stores all the tuples in tree into file */ static void -dumptuples(BufFile *file, Sort *node) +dumptuples(BufFile * file, Sort *node) { struct leftist *tp; struct leftist *newp; @@ -812,7 +803,7 @@ psort_grabtuple(Sort *node, bool *should_free) * file */ BufFileSeek(PS(node)->psort_grab_file, - PS(node)->psort_current - sizeof(tlendummy), SEEK_SET); + PS(node)->psort_current - sizeof(tlendummy), SEEK_SET); GETLEN(tuplen, PS(node)->psort_grab_file); if (PS(node)->psort_current < tuplen) elog(ERROR, "psort_grabtuple: too big last tuple len in backward scan"); @@ -845,7 +836,7 @@ psort_grabtuple(Sort *node, bool *should_free) PS(node)->psort_current -= tuplen; /* move to position of end tlen of prev tuple */ BufFileSeek(PS(node)->psort_grab_file, - PS(node)->psort_current - sizeof(tlendummy), SEEK_SET); + PS(node)->psort_current - sizeof(tlendummy), SEEK_SET); GETLEN(tuplen, PS(node)->psort_grab_file); if (PS(node)->psort_current < tuplen + sizeof(tlendummy)) elog(ERROR, "psort_grabtuple: too big tuple len in backward scan"); @@ -1005,7 +996,7 @@ gettape() * destroytape - unlinks the tape */ static void -destroytape(BufFile *file) +destroytape(BufFile * file) { BufFileClose(file); } diff --git a/src/backend/utils/time/tqual.c b/src/backend/utils/time/tqual.c index bdcd1afdba8..104e57b9194 100644 --- a/src/backend/utils/time/tqual.c +++ b/src/backend/utils/time/tqual.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/time/tqual.c,v 1.28 1999/04/12 16:57:27 vadim Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/time/tqual.c,v 1.29 1999/05/25 16:13:02 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -26,11 +26,11 @@ extern bool PostgresIsInitialized; -SnapshotData SnapshotDirtyData; -Snapshot SnapshotDirty = &SnapshotDirtyData; +SnapshotData SnapshotDirtyData; +Snapshot SnapshotDirty = &SnapshotDirtyData; -Snapshot QuerySnapshot = NULL; -Snapshot SerializableSnapshot = NULL; +Snapshot QuerySnapshot = NULL; +Snapshot SerializableSnapshot = NULL; /* * XXX Transaction system override hacks start here @@ -59,7 +59,7 @@ setheapoverride(bool on) */ /* - * HeapTupleSatisfiesItself + * HeapTupleSatisfiesItself * True iff heap tuple is valid for "itself." * "{it}self" means valid as of everything that's happened * in the current transaction, _including_ the current command. @@ -91,7 +91,7 @@ HeapTupleSatisfiesItself(HeapTupleHeader tuple) if (tuple->t_infomask & HEAP_MOVED_OFF) { - if (TransactionIdDidCommit((TransactionId)tuple->t_cmin)) + if (TransactionIdDidCommit((TransactionId) tuple->t_cmin)) { tuple->t_infomask |= HEAP_XMIN_INVALID; return false; @@ -99,7 +99,7 @@ HeapTupleSatisfiesItself(HeapTupleHeader tuple) } else if (tuple->t_infomask & HEAP_MOVED_IN) { - if (!TransactionIdDidCommit((TransactionId)tuple->t_cmin)) + if (!TransactionIdDidCommit((TransactionId) tuple->t_cmin)) { tuple->t_infomask |= HEAP_XMIN_INVALID; return false; @@ -130,7 +130,7 @@ HeapTupleSatisfiesItself(HeapTupleHeader tuple) { if (tuple->t_infomask & HEAP_MARKED_FOR_UPDATE) return true; - return false; /* updated by other */ + return false; /* updated by other */ } if (TransactionIdIsCurrentTransactionId(tuple->t_xmax)) @@ -157,7 +157,7 @@ HeapTupleSatisfiesItself(HeapTupleHeader tuple) } /* - * HeapTupleSatisfiesNow + * HeapTupleSatisfiesNow * True iff heap tuple is valid "now." * "now" means valid including everything that's happened * in the current transaction _up to, but not including,_ @@ -218,7 +218,7 @@ HeapTupleSatisfiesNow(HeapTupleHeader tuple) if (tuple->t_infomask & HEAP_MOVED_OFF) { - if (TransactionIdDidCommit((TransactionId)tuple->t_cmin)) + if (TransactionIdDidCommit((TransactionId) tuple->t_cmin)) { tuple->t_infomask |= HEAP_XMIN_INVALID; return false; @@ -226,7 +226,7 @@ HeapTupleSatisfiesNow(HeapTupleHeader tuple) } else if (tuple->t_infomask & HEAP_MOVED_IN) { - if (!TransactionIdDidCommit((TransactionId)tuple->t_cmin)) + if (!TransactionIdDidCommit((TransactionId) tuple->t_cmin)) { tuple->t_infomask |= HEAP_XMIN_INVALID; return false; @@ -300,19 +300,19 @@ HeapTupleSatisfiesNow(HeapTupleHeader tuple) int HeapTupleSatisfiesUpdate(HeapTuple tuple) { - HeapTupleHeader th = tuple->t_data; + HeapTupleHeader th = tuple->t_data; if (AMI_OVERRIDE) return HeapTupleMayBeUpdated; if (!(th->t_infomask & HEAP_XMIN_COMMITTED)) { - if (th->t_infomask & HEAP_XMIN_INVALID) /* xid invalid or aborted */ + if (th->t_infomask & HEAP_XMIN_INVALID) /* xid invalid or aborted */ return HeapTupleInvisible; if (th->t_infomask & HEAP_MOVED_OFF) { - if (TransactionIdDidCommit((TransactionId)th->t_cmin)) + if (TransactionIdDidCommit((TransactionId) th->t_cmin)) { th->t_infomask |= HEAP_XMIN_INVALID; return HeapTupleInvisible; @@ -320,7 +320,7 @@ HeapTupleSatisfiesUpdate(HeapTuple tuple) } else if (th->t_infomask & HEAP_MOVED_IN) { - if (!TransactionIdDidCommit((TransactionId)th->t_cmin)) + if (!TransactionIdDidCommit((TransactionId) th->t_cmin)) { th->t_infomask |= HEAP_XMIN_INVALID; return HeapTupleInvisible; @@ -329,9 +329,10 @@ HeapTupleSatisfiesUpdate(HeapTuple tuple) else if (TransactionIdIsCurrentTransactionId(th->t_xmin)) { if (CommandIdGEScanCommandId(th->t_cmin) && !heapisoverride()) - return HeapTupleInvisible; /* inserted after scan started */ + return HeapTupleInvisible; /* inserted after scan + * started */ - if (th->t_infomask & HEAP_XMAX_INVALID) /* xid invalid */ + if (th->t_infomask & HEAP_XMAX_INVALID) /* xid invalid */ return HeapTupleMayBeUpdated; Assert(TransactionIdIsCurrentTransactionId(th->t_xmax)); @@ -340,14 +341,16 @@ HeapTupleSatisfiesUpdate(HeapTuple tuple) return HeapTupleMayBeUpdated; if (CommandIdGEScanCommandId(th->t_cmax)) - return HeapTupleSelfUpdated;/* updated after scan started */ + return HeapTupleSelfUpdated; /* updated after scan + * started */ else - return HeapTupleInvisible; /* updated before scan started */ + return HeapTupleInvisible; /* updated before scan + * started */ } else if (!TransactionIdDidCommit(th->t_xmin)) { if (TransactionIdDidAbort(th->t_xmin)) - th->t_infomask |= HEAP_XMIN_INVALID; /* aborted */ + th->t_infomask |= HEAP_XMIN_INVALID; /* aborted */ return HeapTupleInvisible; } th->t_infomask |= HEAP_XMIN_COMMITTED; @@ -355,14 +358,14 @@ HeapTupleSatisfiesUpdate(HeapTuple tuple) /* by here, the inserting transaction has committed */ - if (th->t_infomask & HEAP_XMAX_INVALID) /* xid invalid or aborted */ + if (th->t_infomask & HEAP_XMAX_INVALID) /* xid invalid or aborted */ return HeapTupleMayBeUpdated; if (th->t_infomask & HEAP_XMAX_COMMITTED) { if (th->t_infomask & HEAP_MARKED_FOR_UPDATE) return HeapTupleMayBeUpdated; - return HeapTupleUpdated; /* updated by other */ + return HeapTupleUpdated;/* updated by other */ } if (TransactionIdIsCurrentTransactionId(th->t_xmax)) @@ -370,7 +373,8 @@ HeapTupleSatisfiesUpdate(HeapTuple tuple) if (th->t_infomask & HEAP_MARKED_FOR_UPDATE) return HeapTupleMayBeUpdated; if (CommandIdGEScanCommandId(th->t_cmax)) - return HeapTupleSelfUpdated;/* updated after scan started */ + return HeapTupleSelfUpdated; /* updated after scan + * started */ else return HeapTupleInvisible; /* updated before scan started */ } @@ -392,7 +396,7 @@ HeapTupleSatisfiesUpdate(HeapTuple tuple) if (th->t_infomask & HEAP_MARKED_FOR_UPDATE) return HeapTupleMayBeUpdated; - return HeapTupleUpdated; /* updated by other */ + return HeapTupleUpdated; /* updated by other */ } bool @@ -411,13 +415,14 @@ HeapTupleSatisfiesDirty(HeapTupleHeader tuple) if (tuple->t_infomask & HEAP_MOVED_OFF) { + /* * HeapTupleSatisfiesDirty is used by unique btree-s and so * may be used while vacuuming. */ - if (TransactionIdIsCurrentTransactionId((TransactionId)tuple->t_cmin)) + if (TransactionIdIsCurrentTransactionId((TransactionId) tuple->t_cmin)) return false; - if (TransactionIdDidCommit((TransactionId)tuple->t_cmin)) + if (TransactionIdDidCommit((TransactionId) tuple->t_cmin)) { tuple->t_infomask |= HEAP_XMIN_INVALID; return false; @@ -426,9 +431,9 @@ HeapTupleSatisfiesDirty(HeapTupleHeader tuple) } else if (tuple->t_infomask & HEAP_MOVED_IN) { - if (!TransactionIdIsCurrentTransactionId((TransactionId)tuple->t_cmin)) + if (!TransactionIdIsCurrentTransactionId((TransactionId) tuple->t_cmin)) { - if (TransactionIdDidCommit((TransactionId)tuple->t_cmin)) + if (TransactionIdDidCommit((TransactionId) tuple->t_cmin)) tuple->t_infomask |= HEAP_XMIN_COMMITTED; else { @@ -457,7 +462,7 @@ HeapTupleSatisfiesDirty(HeapTupleHeader tuple) return false; } SnapshotDirty->xmin = tuple->t_xmin; - return true; /* in insertion by other */ + return true; /* in insertion by other */ } else tuple->t_infomask |= HEAP_XMIN_COMMITTED; @@ -473,7 +478,7 @@ HeapTupleSatisfiesDirty(HeapTupleHeader tuple) if (tuple->t_infomask & HEAP_MARKED_FOR_UPDATE) return true; SnapshotDirty->tid = tuple->t_ctid; - return false; /* updated by other */ + return false; /* updated by other */ } if (TransactionIdIsCurrentTransactionId(tuple->t_xmax)) @@ -488,7 +493,7 @@ HeapTupleSatisfiesDirty(HeapTupleHeader tuple) } /* running xact */ SnapshotDirty->xmax = tuple->t_xmax; - return true; /* in updation by other */ + return true; /* in updation by other */ } /* xmax transaction committed */ @@ -498,7 +503,7 @@ HeapTupleSatisfiesDirty(HeapTupleHeader tuple) return true; SnapshotDirty->tid = tuple->t_ctid; - return false; /* updated by other */ + return false; /* updated by other */ } bool @@ -514,7 +519,7 @@ HeapTupleSatisfiesSnapshot(HeapTupleHeader tuple, Snapshot snapshot) if (tuple->t_infomask & HEAP_MOVED_OFF) { - if (TransactionIdDidCommit((TransactionId)tuple->t_cmin)) + if (TransactionIdDidCommit((TransactionId) tuple->t_cmin)) { tuple->t_infomask |= HEAP_XMIN_INVALID; return false; @@ -522,7 +527,7 @@ HeapTupleSatisfiesSnapshot(HeapTupleHeader tuple, Snapshot snapshot) } else if (tuple->t_infomask & HEAP_MOVED_IN) { - if (!TransactionIdDidCommit((TransactionId)tuple->t_cmin)) + if (!TransactionIdDidCommit((TransactionId) tuple->t_cmin)) { tuple->t_infomask |= HEAP_XMIN_INVALID; return false; @@ -555,17 +560,17 @@ HeapTupleSatisfiesSnapshot(HeapTupleHeader tuple, Snapshot snapshot) tuple->t_infomask |= HEAP_XMIN_COMMITTED; } - /* - * By here, the inserting transaction has committed - - * have to check when... + /* + * By here, the inserting transaction has committed - have to check + * when... */ if (tuple->t_xmin >= snapshot->xmax) return false; if (tuple->t_xmin >= snapshot->xmin) { - uint32 i; - + uint32 i; + for (i = 0; i < snapshot->xcnt; i++) { if (tuple->t_xmin == snapshot->xip[i]) @@ -584,15 +589,15 @@ HeapTupleSatisfiesSnapshot(HeapTupleHeader tuple, Snapshot snapshot) if (TransactionIdIsCurrentTransactionId(tuple->t_xmax)) { if (CommandIdGEScanCommandId(tuple->t_cmax)) - return true; /* deleted after scan started */ + return true; /* deleted after scan started */ else - return false; /* deleted before scan started */ + return false; /* deleted before scan started */ } if (!TransactionIdDidCommit(tuple->t_xmax)) { if (TransactionIdDidAbort(tuple->t_xmax)) - tuple->t_infomask |= HEAP_XMAX_INVALID; /* aborted */ + tuple->t_infomask |= HEAP_XMAX_INVALID; /* aborted */ return true; } @@ -604,8 +609,8 @@ HeapTupleSatisfiesSnapshot(HeapTupleHeader tuple, Snapshot snapshot) return true; if (tuple->t_xmax >= snapshot->xmin) { - uint32 i; - + uint32 i; + for (i = 0; i < snapshot->xcnt; i++) { if (tuple->t_xmax == snapshot->xip[i]) |