diff options
574 files changed, 26547 insertions, 24071 deletions
diff --git a/src/backend/access/common/heaptuple.c b/src/backend/access/common/heaptuple.c index 432bfe02ab..20b075d99b 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.40 1998/09/01 03:20:41 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/common/heaptuple.c,v 1.41 1998/09/01 04:26:39 momjian Exp $ * * NOTES * The old interface functions have been converted to macros @@ -935,7 +935,8 @@ heap_modifytuple(HeapTuple tuple, (char *) &tuple->t_oid, ((char *) &tuple->t_hoff - (char *) &tuple->t_oid)); /* XXX */ newTuple->t_infomask = infomask; - newTuple->t_natts = numberOfAttributes; /* fix t_natts just in case */ + newTuple->t_natts = numberOfAttributes; /* fix t_natts just in + * case */ return newTuple; } diff --git a/src/backend/access/common/printtup.c b/src/backend/access/common/printtup.c index d9b37bcf87..68459beb01 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.34 1998/09/01 03:20:45 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/common/printtup.c,v 1.35 1998/09/01 04:26:40 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -82,8 +82,10 @@ printtup(HeapTuple tuple, TupleDesc typeinfo) Datum attr; bool isnull; Oid typoutput; + #ifdef MULTIBYTE unsigned char *p; + #endif /* ---------------- @@ -147,7 +149,7 @@ printtup(HeapTuple tuple, TupleDesc typeinfo) outputstr = "<unprintable>"; pq_putint(strlen(outputstr) + VARHDRSZ, VARHDRSZ); pq_putnchar(outputstr, strlen(outputstr)); - } + } } } diff --git a/src/backend/access/common/tupdesc.c b/src/backend/access/common/tupdesc.c index df51228305..4e33e362a1 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.43 1998/09/01 03:20:46 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/common/tupdesc.c,v 1.44 1998/09/01 04:26:41 momjian Exp $ * * NOTES * some of the executor utility code such as "ExecTypeFromTL" should be @@ -75,7 +75,7 @@ CreateTemplateTupleDesc(int natts) * ---------------------------------------------------------------- */ TupleDesc -CreateTupleDesc(int natts, Form_pg_attribute *attrs) +CreateTupleDesc(int natts, Form_pg_attribute * attrs) { TupleDesc desc; diff --git a/src/backend/access/gist/gist.c b/src/backend/access/gist/gist.c index f316ba2b3c..cb5917b206 100644 --- a/src/backend/access/gist/gist.c +++ b/src/backend/access/gist/gist.c @@ -33,42 +33,32 @@ #endif /* non-export function prototypes */ -static InsertIndexResult -gistdoinsert(Relation r, IndexTuple itup, +static InsertIndexResult gistdoinsert(Relation r, IndexTuple itup, GISTSTATE *GISTstate); -static InsertIndexResult -gistentryinsert(Relation r, GISTSTACK *stk, +static InsertIndexResult gistentryinsert(Relation r, GISTSTACK *stk, IndexTuple tup, GISTSTATE *giststate); -static void -gistentryinserttwo(Relation r, GISTSTACK *stk, IndexTuple ltup, +static void gistentryinserttwo(Relation r, GISTSTACK *stk, IndexTuple ltup, IndexTuple rtup, GISTSTATE *giststate); -static void -gistAdjustKeys(Relation r, GISTSTACK *stk, BlockNumber blk, +static void gistAdjustKeys(Relation r, GISTSTACK *stk, BlockNumber blk, char *datum, int att_size, GISTSTATE *giststate); -static void -gistintinsert(Relation r, GISTSTACK *stk, IndexTuple ltup, +static void gistintinsert(Relation r, GISTSTACK *stk, IndexTuple ltup, IndexTuple rtup, GISTSTATE *giststate); -static InsertIndexResult -gistSplit(Relation r, Buffer buffer, +static InsertIndexResult gistSplit(Relation r, Buffer buffer, GISTSTACK *stack, IndexTuple itup, GISTSTATE *giststate); -static void -gistnewroot(GISTSTATE *giststate, Relation r, IndexTuple lt, +static void gistnewroot(GISTSTATE *giststate, Relation r, IndexTuple lt, IndexTuple rt); static void GISTInitBuffer(Buffer b, uint32 f); -static BlockNumber -gistChooseSubtree(Relation r, IndexTuple itup, int level, +static BlockNumber gistChooseSubtree(Relation r, IndexTuple itup, int level, GISTSTATE *giststate, GISTSTACK **retstack, Buffer *leafbuf); -static OffsetNumber -gistchoose(Relation r, Page p, IndexTuple it, +static OffsetNumber gistchoose(Relation r, Page p, IndexTuple it, GISTSTATE *giststate); static int gistnospace(Page p, IndexTuple it); void gistdelete(Relation r, ItemPointer tid); static IndexTuple gist_tuple_replacekey(Relation r, GISTENTRY entry, IndexTuple t); -static void -gistcentryinit(GISTSTATE *giststate, GISTENTRY *e, char *pr, +static void gistcentryinit(GISTSTATE *giststate, GISTENTRY *e, char *pr, Relation r, Page pg, OffsetNumber o, int b, bool l); static char *int_range_out(INTRANGE *r); @@ -169,7 +159,7 @@ gistbuild(Relation heap, slot = NULL; econtext = NULL; } -#endif /* OMIT_PARTIAL_INDEX */ +#endif /* OMIT_PARTIAL_INDEX */ /* int the tuples as we insert them */ nh = ni = 0; @@ -193,7 +183,7 @@ gistbuild(Relation heap, ni++; continue; } -#endif /* OMIT_PARTIAL_INDEX */ +#endif /* OMIT_PARTIAL_INDEX */ } /* @@ -207,7 +197,7 @@ gistbuild(Relation heap, slot->val = htup; if (ExecQual((List *) pred, econtext) == false) continue; -#endif /* OMIT_PARTIAL_INDEX */ +#endif /* OMIT_PARTIAL_INDEX */ } ni++; @@ -286,7 +276,7 @@ gistbuild(Relation heap, #ifndef OMIT_PARTIAL_INDEX ExecDestroyTupleTable(tupleTable, true); pfree(econtext); -#endif /* OMIT_PARTIAL_INDEX */ +#endif /* OMIT_PARTIAL_INDEX */ } /* @@ -1168,7 +1158,7 @@ initGISTstate(GISTSTATE *giststate, Relation index) itupform = (Form_pg_index) GETSTRUCT(htup); if (!HeapTupleIsValid(htup)) elog(ERROR, "initGISTstate: index %d not found", - RelationGetRelid(index)); + RelationGetRelid(index)); giststate->haskeytype = itupform->indhaskeytype; if (giststate->haskeytype) { @@ -1377,4 +1367,4 @@ int_range_out(INTRANGE *r) return result; } -#endif /* defined GISTDEBUG */ +#endif /* defined GISTDEBUG */ diff --git a/src/backend/access/gist/gistget.c b/src/backend/access/gist/gistget.c index d34ee84d76..35708bf653 100644 --- a/src/backend/access/gist/gistget.c +++ b/src/backend/access/gist/gistget.c @@ -28,15 +28,13 @@ #endif -static OffsetNumber -gistfindnext(IndexScanDesc s, Page p, OffsetNumber n, +static OffsetNumber gistfindnext(IndexScanDesc s, Page p, OffsetNumber n, ScanDirection dir); static RetrieveIndexResult gistscancache(IndexScanDesc s, ScanDirection dir); static RetrieveIndexResult gistfirst(IndexScanDesc s, ScanDirection dir); static RetrieveIndexResult gistnext(IndexScanDesc s, ScanDirection dir); static ItemPointer gistheapptr(Relation r, ItemPointer itemp); -static bool -gistindex_keytest(IndexTuple tuple, TupleDesc tupdesc, +static bool gistindex_keytest(IndexTuple tuple, TupleDesc tupdesc, int scanKeySize, ScanKey key, GISTSTATE *giststate, Relation r, Page p, OffsetNumber offset); diff --git a/src/backend/access/gist/gistscan.c b/src/backend/access/gist/gistscan.c index b440cbc5e9..f74316cb33 100644 --- a/src/backend/access/gist/gistscan.c +++ b/src/backend/access/gist/gistscan.c @@ -29,14 +29,11 @@ /* routines defined and used here */ static void gistregscan(IndexScanDesc s); static void gistdropscan(IndexScanDesc s); -static void -gistadjone(IndexScanDesc s, int op, BlockNumber blkno, +static void gistadjone(IndexScanDesc s, int op, BlockNumber blkno, OffsetNumber offnum); -static void -adjuststack(GISTSTACK *stk, BlockNumber blkno, +static void adjuststack(GISTSTACK *stk, BlockNumber blkno, OffsetNumber offnum); -static void -adjustiptr(IndexScanDesc s, ItemPointer iptr, +static void adjustiptr(IndexScanDesc s, ItemPointer iptr, int op, BlockNumber blkno, OffsetNumber offnum); /* diff --git a/src/backend/access/hash/hash.c b/src/backend/access/hash/hash.c index 2a12171d0b..e6ca98c709 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.21 1998/09/01 03:20:53 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/hash/hash.c,v 1.22 1998/09/01 04:26:48 momjian Exp $ * * NOTES * This file contains only the public interface routines. @@ -118,7 +118,7 @@ hashbuild(Relation heap, tupleTable = 0; slot = 0; } -#endif /* OMIT_PARTIAL_INDEX */ +#endif /* OMIT_PARTIAL_INDEX */ /* build the index */ nhtups = nitups = 0; @@ -145,7 +145,7 @@ hashbuild(Relation heap, nitups++; continue; } -#endif /* OMIT_PARTIAL_INDEX */ +#endif /* OMIT_PARTIAL_INDEX */ } /* @@ -159,7 +159,7 @@ hashbuild(Relation heap, slot->val = htup; if (ExecQual((List *) pred, econtext) == false) continue; -#endif /* OMIT_PARTIAL_INDEX */ +#endif /* OMIT_PARTIAL_INDEX */ } nitups++; @@ -232,7 +232,7 @@ hashbuild(Relation heap, #ifndef OMIT_PARTIAL_INDEX ExecDestroyTupleTable(tupleTable, true); pfree(econtext); -#endif /* OMIT_PARTIAL_INDEX */ +#endif /* OMIT_PARTIAL_INDEX */ } /* diff --git a/src/backend/access/hash/hashfunc.c b/src/backend/access/hash/hashfunc.c index 9376ad2e57..c2f928161a 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.11 1998/09/01 03:20:54 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/hash/hashfunc.c,v 1.12 1998/09/01 04:26:49 momjian Exp $ * * NOTES * These functions are stored in pg_amproc. For each operator class @@ -136,11 +136,11 @@ hashoid(Oid key) uint32 hashoid8(Oid *key) { - int i; - uint32 result = 0; + int i; + uint32 result = 0; - for (i=0; i < 8; i++) - result = result ^ (~(uint32)key[i]); + for (i = 0; i < 8; i++) + result = result ^ (~(uint32) key[i]); return result; } diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c index bb98e2800c..3b66dd57b2 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.34 1998/09/01 03:21:05 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/heap/heapam.c,v 1.35 1998/09/01 04:26:51 momjian Exp $ * * * INTERFACE ROUTINES @@ -109,10 +109,10 @@ static bool ImmediateInvalidation; */ static void initscan(HeapScanDesc scan, - Relation relation, - int atend, - unsigned nkeys, - ScanKey key) + Relation relation, + int atend, + unsigned nkeys, + ScanKey key) { if (!RelationGetNumberOfBlocks(relation)) { @@ -258,7 +258,7 @@ heapgettup(Relation relation, elog(DEBUG, "heapgettup: relation(%c)=`%s', %p", relation->rd_rel->relkind, &relation->rd_rel->relname, snapshot); -#endif /* !defined(HEAPDEBUGALL) */ +#endif /* !defined(HEAPDEBUGALL) */ if (!ItemPointerIsValid(tid)) Assert(!PointerIsValid(tid)); @@ -283,12 +283,12 @@ heapgettup(Relation relation, /* assume it is a valid TID XXX */ if (ItemPointerIsValid(tid) == false) { - *buf= InvalidBuffer; + *buf = InvalidBuffer; return NULL; } *buf = RelationGetBufferWithBuffer(relation, - ItemPointerGetBlockNumber(tid), - *buf); + ItemPointerGetBlockNumber(tid), + *buf); #ifndef NO_BUFFERISVALID if (!BufferIsValid(*buf)) @@ -414,6 +414,7 @@ heapgettup(Relation relation, if (ItemPointerGetBlockNumber(iptr) != page) { + /* * set block id to the correct page number --- this is * a hack to support the virtual fragment concept @@ -762,7 +763,7 @@ elog(DEBUG, "heap_getnext([%s,nkeys=%d],backw=%d) called", \ #define HEAPDEBUG_5 #define HEAPDEBUG_6 #define HEAPDEBUG_7 -#endif /* !defined(HEAPDEBUGALL) */ +#endif /* !defined(HEAPDEBUGALL) */ HeapTuple @@ -990,7 +991,7 @@ heap_getnext(HeapScanDesc scandesc, int backw) * value, and they are required to BuffferRelease() it when they * are done. If they want to make a copy of it before releasing it, * they can call heap_copytyple(). - + * ---------------- */ HeapTuple @@ -1005,8 +1006,8 @@ heap_fetch(Relation relation, HeapTuple tuple; OffsetNumber offnum; - AssertMacro(PointerIsValid(userbuf)); /* see comments above */ - + AssertMacro(PointerIsValid(userbuf)); /* see comments above */ + /* ---------------- * increment access statistics * ---------------- @@ -1074,7 +1075,8 @@ heap_fetch(Relation relation, * ---------------- */ - *userbuf = buffer; /* user is required to ReleaseBuffer() this */ + *userbuf = buffer; /* user is required to ReleaseBuffer() + * this */ return tuple; } @@ -1193,7 +1195,7 @@ heap_delete(Relation relation, ItemPointer tid) { /* XXX L_SH better ??? */ elog(ERROR, "heap_delete: failed ReadBuffer"); } -#endif /* NO_BUFFERISVALID */ +#endif /* NO_BUFFERISVALID */ dp = (PageHeader) BufferGetPage(buf); lp = PageGetItemId(dp, ItemPointerGetOffsetNumber(tid)); @@ -1206,10 +1208,11 @@ heap_delete(Relation relation, ItemPointer tid) Assert(HeapTupleIsValid(tp)); if (TupleUpdatedByCurXactAndCmd(tp)) { + /* - Vadim says this is no longer needed 1998/6/15 - elog(NOTICE, "Non-functional delete, tuple already deleted"); - */ + * Vadim says this is no longer needed 1998/6/15 elog(NOTICE, + * "Non-functional delete, tuple already deleted"); + */ if (IsSystemRelationName(RelationGetRelationName(relation)->data)) RelationUnsetLockForWrite(relation); ReleaseBuffer(buf); @@ -1309,7 +1312,7 @@ heap_replace(Relation relation, ItemPointer otid, HeapTuple replace_tuple) /* XXX L_SH better ??? */ elog(ERROR, "amreplace: failed ReadBuffer"); } -#endif /* NO_BUFFERISVALID */ +#endif /* NO_BUFFERISVALID */ dp = (Page) BufferGetPage(buffer); lp = PageGetItemId(dp, ItemPointerGetOffsetNumber(otid)); diff --git a/src/backend/access/index/indexam.c b/src/backend/access/index/indexam.c index fdfbddde91..4c2289ce16 100644 --- a/src/backend/access/index/indexam.c +++ b/src/backend/access/index/indexam.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/index/indexam.c,v 1.24 1998/09/01 03:21:09 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/index/indexam.c,v 1.25 1998/09/01 04:26:55 momjian Exp $ * * INTERFACE ROUTINES * index_open - open an index relation by relationId @@ -112,7 +112,7 @@ CppAsString(x), CppAsString(y)) \ : (void)NULL \ ) - + #define GET_SCAN_PROCEDURE(x,y) \ ( \ procedure = scan->relation->rd_am->y, \ @@ -331,7 +331,7 @@ index_getnext(IndexScanDesc scan, * have the am's gettuple proc do all the work. * ---------------- */ - result = (RetrieveIndexResult)fmgr(procedure, scan, direction); + result = (RetrieveIndexResult) fmgr(procedure, scan, direction); return result; } diff --git a/src/backend/access/index/istrat.c b/src/backend/access/index/istrat.c index b92faa655f..403a51f3ba 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.27 1998/09/01 03:21:10 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/index/Attic/istrat.c,v 1.28 1998/09/01 04:26:56 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -29,16 +29,13 @@ #ifdef USE_ASSERT_CHECKING static bool StrategyEvaluationIsValid(StrategyEvaluation evaluation); -static bool -StrategyExpressionIsValid(StrategyExpression expression, +static bool StrategyExpressionIsValid(StrategyExpression expression, StrategyNumber maxStrategy); static ScanKey StrategyMapGetScanKeyEntry(StrategyMap map, StrategyNumber strategyNumber); -static bool -StrategyOperatorIsValid(StrategyOperator operator, +static bool StrategyOperatorIsValid(StrategyOperator operator, StrategyNumber maxStrategy); -static bool -StrategyTermIsValid(StrategyTerm term, +static bool StrategyTermIsValid(StrategyTerm term, StrategyNumber maxStrategy); #endif @@ -378,8 +375,8 @@ RelationInvokeStrategy(Relation relation, termData.degree = 1; strategyMap = IndexStrategyGetStrategyMap(RelationGetIndexStrategy(relation), - evaluation->maxStrategy, - attributeNumber); + evaluation->maxStrategy, + attributeNumber); entry = StrategyMapGetScanKeyEntry(strategyMap, strategy); @@ -456,9 +453,7 @@ RelationInvokeStrategy(Relation relation, } if (index == (*termP)->degree) - { return StrategyTermEvaluate(*termP, strategyMap, left, right); - } termP += 1; } @@ -494,7 +489,7 @@ OperatorRelationFillScanKeyEntry(Relation operatorRelation, else { ScanKeyData scanKeyData; - + ScanKeyEntryInitialize(&scanKeyData, 0, ObjectIdAttributeNumber, F_OIDEQ, @@ -502,7 +497,7 @@ OperatorRelationFillScanKeyEntry(Relation operatorRelation, scan = heap_beginscan(operatorRelation, false, SnapshotNow, 1, &scanKeyData); - + tuple = heap_getnext(scan, 0); } @@ -521,7 +516,7 @@ OperatorRelationFillScanKeyEntry(Relation operatorRelation, if (IsBootstrapProcessingMode()) heap_endscan(scan); - + if (!RegProcedureIsValid(entry->sk_procedure)) { elog(ERROR, @@ -565,7 +560,7 @@ IndexSupportInitialize(IndexStrategy indexStrategy, ScanKeyEntryInitialize(&entry[0], 0, Anum_pg_index_indexrelid, F_OIDEQ, ObjectIdGetDatum(indexObjectId)); - + relation = heap_openr(IndexRelationName); scan = heap_beginscan(relation, false, SnapshotNow, 1, entry); tuple = heap_getnext(scan, 0); @@ -601,7 +596,7 @@ IndexSupportInitialize(IndexStrategy indexStrategy, heap_endscan(scan); heap_close(relation); } - + /* if support routines exist for this access method, load them */ if (maxSupportNumber > 0) { @@ -615,7 +610,7 @@ IndexSupportInitialize(IndexStrategy indexStrategy, relation = heap_openr(AccessMethodProcedureRelationName); for (attributeNumber = 1; attributeNumber <= maxAttributeNumber; - attributeNumber++) + attributeNumber++) { int16 support; Form_pg_amproc form; @@ -723,4 +718,4 @@ IndexStrategyDisplay(IndexStrategy indexStrategy, } } -#endif /* defined(ISTRATDEBUG) */ +#endif /* defined(ISTRATDEBUG) */ diff --git a/src/backend/access/nbtree/nbtcompare.c b/src/backend/access/nbtree/nbtcompare.c index 65db2d3e1a..b4b3156593 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.18 1998/09/01 03:21:12 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtcompare.c,v 1.19 1998/09/01 04:26:59 momjian Exp $ * * NOTES * These functions are stored in pg_amproc. For each operator class @@ -87,10 +87,11 @@ btoidcmp(Oid a, Oid b) int32 btoid8cmp(Oid *a, Oid *b) { - int i; - for (i=0; i < 8; i++) + int i; + + for (i = 0; i < 8; i++) /* we use this because we need the int4gt, etc */ - if (!int4eq(a[i], b[i])) + if (!int4eq(a[i], b[i])) if (int4gt(a[i], b[i])) return 1; else diff --git a/src/backend/access/nbtree/nbtinsert.c b/src/backend/access/nbtree/nbtinsert.c index f6a34e97ac..c2fa05eb22 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.29 1998/09/01 03:21:13 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtinsert.c,v 1.30 1998/09/01 04:27:01 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -54,7 +54,7 @@ _bt_doinsert(Relation rel, BTItem btitem, bool index_is_unique, Relation heapRel int natts = rel->rd_rel->relnatts; InsertIndexResult res; Buffer buffer; - + itup = &(btitem->bti_itup); /* we need a scan key to do our search, so build one */ diff --git a/src/backend/access/nbtree/nbtree.c b/src/backend/access/nbtree/nbtree.c index 082cfe3628..d486bb432d 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.31 1998/09/01 03:21:16 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtree.c,v 1.32 1998/09/01 04:27:03 momjian Exp $ * * NOTES * This file contains only the public interface routines. @@ -44,7 +44,7 @@ bool BuildingBtree = false; /* see comment in btbuild() */ bool FastBuild = true; /* use sort/build instead of insertion * build */ -static void _bt_restscan(IndexScanDesc scan); +static void _bt_restscan(IndexScanDesc scan); /* * btbuild() -- build a new btree index. @@ -151,7 +151,7 @@ btbuild(Relation heap, */ usefast = false; } -#endif /* OMIT_PARTIAL_INDEX */ +#endif /* OMIT_PARTIAL_INDEX */ /* start a heap scan */ /* build the index */ @@ -184,7 +184,7 @@ btbuild(Relation heap, nitups++; continue; } -#endif /* OMIT_PARTIAL_INDEX */ +#endif /* OMIT_PARTIAL_INDEX */ } /* @@ -198,7 +198,7 @@ btbuild(Relation heap, slot->val = htup; if (ExecQual((List *) pred, econtext) == false) continue; -#endif /* OMIT_PARTIAL_INDEX */ +#endif /* OMIT_PARTIAL_INDEX */ } nitups++; @@ -283,7 +283,7 @@ btbuild(Relation heap, #ifndef OMIT_PARTIAL_INDEX ExecDestroyTupleTable(tupleTable, true); pfree(econtext); -#endif /* OMIT_PARTIAL_INDEX */ +#endif /* OMIT_PARTIAL_INDEX */ } /* @@ -361,14 +361,13 @@ btinsert(Relation rel, Datum *datum, char *nulls, ItemPointer ht_ctid, Relation /* * See comments in btbuild. * - * if (itup->t_info & INDEX_NULL_MASK) - return (InsertIndexResult) NULL; + * if (itup->t_info & INDEX_NULL_MASK) return (InsertIndexResult) NULL; */ btitem = _bt_formitem(itup); res = _bt_doinsert(rel, btitem, - IndexIsUnique(RelationGetRelid(rel)), heapRel); + IndexIsUnique(RelationGetRelid(rel)), heapRel); pfree(btitem); pfree(itup); @@ -397,27 +396,26 @@ btgettuple(IndexScanDesc scan, ScanDirection dir) if (ItemPointerIsValid(&(scan->currentItemData))) { + /* * Now we don't adjust scans on insertion (comments in - * nbtscan.c:_bt_scandel()) and I hope that we will unlock - * current index page before leaving index in LLL: this - * means that current index tuple could be moved right - * before we get here and we have to restore our scan - * position. We save heap TID pointed by current index - * tuple and use it. This will work untill we start - * to re-use (move heap tuples) without vacuum... - * - vadim 07/29/98 + * nbtscan.c:_bt_scandel()) and I hope that we will unlock current + * index page before leaving index in LLL: this means that current + * index tuple could be moved right before we get here and we have + * to restore our scan position. We save heap TID pointed by + * current index tuple and use it. This will work untill we start + * to re-use (move heap tuples) without vacuum... - vadim 07/29/98 */ _bt_restscan(scan); res = _bt_next(scan, dir); } else res = _bt_first(scan, dir); - + /* Save heap TID to use it in _bt_restscan */ if (res) - ((BTScanOpaque)scan->opaque)->curHeapIptr = res->heap_iptr; - + ((BTScanOpaque) scan->opaque)->curHeapIptr = res->heap_iptr; + return (char *) res; } @@ -627,33 +625,34 @@ btdelete(Relation rel, ItemPointer tid) static void _bt_restscan(IndexScanDesc scan) { - Relation rel = scan->relation; - BTScanOpaque so = (BTScanOpaque) scan->opaque; - Buffer buf = so->btso_curbuf; - Page page = BufferGetPage(buf); - ItemPointer current = &(scan->currentItemData); - OffsetNumber offnum = ItemPointerGetOffsetNumber(current), - maxoff = PageGetMaxOffsetNumber(page); - BTPageOpaque opaque = (BTPageOpaque) PageGetSpecialPointer(page); - ItemPointerData target = so->curHeapIptr; - BTItem item; - BlockNumber blkno; + Relation rel = scan->relation; + BTScanOpaque so = (BTScanOpaque) scan->opaque; + Buffer buf = so->btso_curbuf; + Page page = BufferGetPage(buf); + ItemPointer current = &(scan->currentItemData); + OffsetNumber offnum = ItemPointerGetOffsetNumber(current), + maxoff = PageGetMaxOffsetNumber(page); + BTPageOpaque opaque = (BTPageOpaque) PageGetSpecialPointer(page); + ItemPointerData target = so->curHeapIptr; + BTItem item; + BlockNumber blkno; if (maxoff >= offnum) { - /* - * if the item is where we left it or has just moved right - * on this page, we're done + + /* + * if the item is where we left it or has just moved right on this + * page, we're done */ - for ( ; + for (; offnum <= maxoff; offnum = OffsetNumberNext(offnum)) { item = (BTItem) PageGetItem(page, PageGetItemId(page, offnum)); if (item->bti_itup.t_tid.ip_blkid.bi_hi == \ - target.ip_blkid.bi_hi && \ + target.ip_blkid.bi_hi && \ item->bti_itup.t_tid.ip_blkid.bi_lo == \ - target.ip_blkid.bi_lo && \ + target.ip_blkid.bi_lo && \ item->bti_itup.t_tid.ip_posid == target.ip_posid) { current->ip_posid = offnum; @@ -662,8 +661,8 @@ _bt_restscan(IndexScanDesc scan) } } - /* - * By here, the item we're looking for moved right at least one page + /* + * By here, the item we're looking for moved right at least one page */ for (;;) { @@ -678,15 +677,15 @@ _bt_restscan(IndexScanDesc scan) opaque = (BTPageOpaque) PageGetSpecialPointer(page); /* see if it's on this page */ - for (offnum = P_RIGHTMOST(opaque) ? P_HIKEY : P_FIRSTKEY ; + for (offnum = P_RIGHTMOST(opaque) ? P_HIKEY : P_FIRSTKEY; offnum <= maxoff; offnum = OffsetNumberNext(offnum)) { item = (BTItem) PageGetItem(page, PageGetItemId(page, offnum)); if (item->bti_itup.t_tid.ip_blkid.bi_hi == \ - target.ip_blkid.bi_hi && \ + target.ip_blkid.bi_hi && \ item->bti_itup.t_tid.ip_blkid.bi_lo == \ - target.ip_blkid.bi_lo && \ + target.ip_blkid.bi_lo && \ item->bti_itup.t_tid.ip_posid == target.ip_posid) { ItemPointerSet(current, blkno, offnum); diff --git a/src/backend/access/nbtree/nbtscan.c b/src/backend/access/nbtree/nbtscan.c index 11b7659376..55869592e4 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.17 1998/09/01 03:21:17 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/nbtree/Attic/nbtscan.c,v 1.18 1998/09/01 04:27:04 momjian Exp $ * * * NOTES @@ -166,10 +166,10 @@ _bt_scandel(IndexScanDesc scan, int op, BlockNumber blkno, OffsetNumber offno) so->btso_curbuf = buf; if (ItemPointerIsValid(current)) { - Page page = BufferGetPage(buf); - BTItem btitem = (BTItem) PageGetItem(page, - PageGetItemId(page, ItemPointerGetOffsetNumber(current))); - + Page page = BufferGetPage(buf); + BTItem btitem = (BTItem) PageGetItem(page, + PageGetItemId(page, ItemPointerGetOffsetNumber(current))); + so->curHeapIptr = btitem->bti_itup.t_tid; } } @@ -209,10 +209,10 @@ _bt_scandel(IndexScanDesc scan, int op, BlockNumber blkno, OffsetNumber offno) scan->currentItemData = tmp; if (ItemPointerIsValid(current)) { - Page page = BufferGetPage(buf); - BTItem btitem = (BTItem) PageGetItem(page, - PageGetItemId(page, ItemPointerGetOffsetNumber(current))); - + Page page = BufferGetPage(buf); + BTItem btitem = (BTItem) PageGetItem(page, + PageGetItemId(page, 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 8584f20587..6e6732010d 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.37 1998/09/01 03:21:18 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtsearch.c,v 1.38 1998/09/01 04:27:06 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -28,14 +28,11 @@ #endif -static BTStack -_bt_searchr(Relation rel, int keysz, ScanKey scankey, +static BTStack _bt_searchr(Relation rel, int keysz, ScanKey scankey, Buffer *bufP, BTStack stack_in); -static OffsetNumber -_bt_firsteq(Relation rel, TupleDesc itupdesc, Page page, +static OffsetNumber _bt_firsteq(Relation rel, TupleDesc itupdesc, Page page, Size keysz, ScanKey scankey, OffsetNumber offnum); -static int -_bt_compare(Relation rel, TupleDesc itupdesc, Page page, +static int _bt_compare(Relation rel, TupleDesc itupdesc, Page page, int keysz, ScanKey scankey, OffsetNumber offnum); static bool _bt_twostep(IndexScanDesc scan, Buffer *bufP, ScanDirection dir); @@ -219,8 +216,8 @@ _bt_moveright(Relation rel, if (_bt_skeycmp(rel, keysz, scankey, page, PageGetItemId(page, P_FIRSTKEY), BTEqualStrategyNumber)) - elog(FATAL, "btree: BTP_CHAIN flag was expected in %s (access = %s)", - rel->rd_rel->relname, access ? "bt_write" : "bt_read"); + elog(FATAL, "btree: BTP_CHAIN flag was expected in %s (access = %s)", + rel->rd_rel->relname, access ? "bt_write" : "bt_read"); if (_bt_skeycmp(rel, keysz, scankey, page, PageGetItemId(page, offmax), BTEqualStrategyNumber)) diff --git a/src/backend/access/nbtree/nbtsort.c b/src/backend/access/nbtree/nbtsort.c index 5fb3145c36..30d74ced97 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.32 1998/09/01 03:21:19 momjian Exp $ + * $Id: nbtsort.c,v 1.33 1998/09/01 04:27:07 momjian Exp $ * * NOTES * @@ -184,7 +184,7 @@ _bt_isortcmp(BTSortKey *k1, BTSortKey *k2) return 1; /* 1 > 2 */ } else if (k2->btsk_item == (BTItem) NULL) - return -1; /* 1 < 2 */ + return -1; /* 1 < 2 */ for (i = 0; i < _bt_nattr; i++) { @@ -198,14 +198,14 @@ _bt_isortcmp(BTSortKey *k1, BTSortKey *k2) return 1; /* NULL ">" NOT_NULL */ } else if (k2_nulls[i] != ' ') /* k2 attr is NULL */ - return -1; /* NOT_NULL "<" NULL */ + return -1; /* NOT_NULL "<" NULL */ if (_bt_invokestrat(_bt_sortrel, i + 1, BTGreaterStrategyNumber, k1_datum[i], k2_datum[i])) return 1; /* 1 > 2 */ else if (_bt_invokestrat(_bt_sortrel, i + 1, BTGreaterStrategyNumber, k2_datum[i], k1_datum[i])) - return -1; /* 1 < 2 */ + return -1; /* 1 < 2 */ } if (_bt_inspool->isunique && !equal_isnull) @@ -731,7 +731,7 @@ _bt_spool(Relation index, BTItem btitem, void *spool) printf("_bt_spool: inserted <%x> into output tape %d\n", d, btspool->bts_tape); } -#endif /* FASTBUILD_DEBUG && FASTBUILD_SPOOL */ +#endif /* FASTBUILD_DEBUG && FASTBUILD_SPOOL */ } /* @@ -975,7 +975,7 @@ _bt_buildadd(Relation index, void *pstate, BTItem bti, int flags) printf("_bt_buildadd: moved <%x> to offset %d at level %d\n", d, n, state->btps_level); } -#endif /* FASTBUILD_DEBUG && FASTBUILD_MERGE */ +#endif /* FASTBUILD_DEBUG && FASTBUILD_MERGE */ #endif } @@ -1058,7 +1058,7 @@ _bt_buildadd(Relation index, void *pstate, BTItem bti, int flags) printf("_bt_buildadd: inserted <%x> at offset %d at level %d\n", d, off, state->btps_level); } -#endif /* FASTBUILD_DEBUG && FASTBUILD_MERGE */ +#endif /* FASTBUILD_DEBUG && FASTBUILD_MERGE */ #endif if (last_bti == (BTItem) NULL) first_off = P_FIRSTKEY; @@ -1254,7 +1254,7 @@ _bt_merge(Relation index, BTSpool *btspool) npass, nruns, d, t, BufferGetBlockNumber(state->btps_buf)); } -#endif /* FASTBUILD_DEBUG && FASTBUILD_MERGE */ +#endif /* FASTBUILD_DEBUG && FASTBUILD_MERGE */ } else { @@ -1283,7 +1283,7 @@ _bt_merge(Relation index, BTSpool *btspool) npass, nruns, d, t, btspool->bts_tape); } -#endif /* FASTBUILD_DEBUG && FASTBUILD_MERGE */ +#endif /* FASTBUILD_DEBUG && FASTBUILD_MERGE */ } if (btsk.btsk_datum != (Datum *) NULL) @@ -1408,7 +1408,7 @@ _bt_upperbuild(Relation index) printf("_bt_upperbuild: inserting <%x> at %d\n", d, state->btps_level); } -#endif /* FASTBUILD_DEBUG && FASTBUILD_MERGE */ +#endif /* FASTBUILD_DEBUG && FASTBUILD_MERGE */ _bt_buildadd(index, state, nbti, 0); pfree((void *) nbti); } diff --git a/src/backend/access/rtree/rtget.c b/src/backend/access/rtree/rtget.c index 644240e650..4df0adf5c4 100644 --- a/src/backend/access/rtree/rtget.c +++ b/src/backend/access/rtree/rtget.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/rtree/Attic/rtget.c,v 1.11 1998/09/01 03:21:24 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/rtree/Attic/rtget.c,v 1.12 1998/09/01 04:27:09 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -27,8 +27,7 @@ #endif -static OffsetNumber -findnext(IndexScanDesc s, Page p, OffsetNumber n, +static OffsetNumber findnext(IndexScanDesc s, Page p, OffsetNumber n, ScanDirection dir); static RetrieveIndexResult rtscancache(IndexScanDesc s, ScanDirection dir); static RetrieveIndexResult rtfirst(IndexScanDesc s, ScanDirection dir); diff --git a/src/backend/access/rtree/rtree.c b/src/backend/access/rtree/rtree.c index 2352b9b7e7..a9b2eff681 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.27 1998/09/01 03:21:27 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/rtree/Attic/rtree.c,v 1.28 1998/09/01 04:27:10 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -50,25 +50,19 @@ typedef struct RTSTATE } RTSTATE; /* non-export function prototypes */ -static InsertIndexResult -rtdoinsert(Relation r, IndexTuple itup, +static InsertIndexResult rtdoinsert(Relation r, IndexTuple itup, RTSTATE *rtstate); -static void -rttighten(Relation r, RTSTACK *stk, char *datum, int att_size, +static void rttighten(Relation r, RTSTACK *stk, char *datum, int att_size, RTSTATE *rtstate); -static InsertIndexResult -dosplit(Relation r, Buffer buffer, RTSTACK *stack, +static InsertIndexResult dosplit(Relation r, Buffer buffer, RTSTACK *stack, IndexTuple itup, RTSTATE *rtstate); -static void -rtintinsert(Relation r, RTSTACK *stk, IndexTuple ltup, +static void rtintinsert(Relation r, RTSTACK *stk, IndexTuple ltup, IndexTuple rtup, RTSTATE *rtstate); static void rtnewroot(Relation r, IndexTuple lt, IndexTuple rt); -static void -picksplit(Relation r, Page page, SPLITVEC *v, IndexTuple itup, +static void picksplit(Relation r, Page page, SPLITVEC *v, IndexTuple itup, RTSTATE *rtstate); static void RTInitBuffer(Buffer b, uint32 f); -static OffsetNumber -choose(Relation r, Page p, IndexTuple it, +static OffsetNumber choose(Relation r, Page p, IndexTuple it, RTSTATE *rtstate); static int nospace(Page p, IndexTuple it); static void initRtstate(RTSTATE *rtstate, Relation index); @@ -163,12 +157,12 @@ rtbuild(Relation heap, tupleTable = NULL; slot = NULL; } -#endif /* OMIT_PARTIAL_INDEX */ +#endif /* OMIT_PARTIAL_INDEX */ /* count the tuples as we insert them */ nh = ni = 0; - scan = heap_beginscan(heap, 0, SnapshotNow, 0, (ScanKey) NULL); + scan = heap_beginscan(heap, 0, SnapshotNow, 0, (ScanKey) NULL); while (HeapTupleIsValid(htup = heap_getnext(scan, 0))) { @@ -188,7 +182,7 @@ rtbuild(Relation heap, ni++; continue; } -#endif /* OMIT_PARTIAL_INDEX */ +#endif /* OMIT_PARTIAL_INDEX */ } /* @@ -202,7 +196,7 @@ rtbuild(Relation heap, slot->val = htup; if (ExecQual((List *) pred, econtext) == false) continue; -#endif /* OMIT_PARTIAL_INDEX */ +#endif /* OMIT_PARTIAL_INDEX */ } ni++; @@ -263,7 +257,7 @@ rtbuild(Relation heap, #ifndef OMIT_PARTIAL_INDEX ExecDestroyTupleTable(tupleTable, true); pfree(econtext); -#endif /* OMIT_PARTIAL_INDEX */ +#endif /* OMIT_PARTIAL_INDEX */ } /* @@ -1042,4 +1036,4 @@ _rtdump(Relation r) } } -#endif /* defined RTDEBUG */ +#endif /* defined RTDEBUG */ diff --git a/src/backend/access/rtree/rtscan.c b/src/backend/access/rtree/rtscan.c index 21e1f1c311..6d0bb632e7 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.18 1998/09/01 03:21:28 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/rtree/Attic/rtscan.c,v 1.19 1998/09/01 04:27:12 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -30,14 +30,11 @@ /* routines defined and used here */ static void rtregscan(IndexScanDesc s); static void rtdropscan(IndexScanDesc s); -static void -rtadjone(IndexScanDesc s, int op, BlockNumber blkno, +static void rtadjone(IndexScanDesc s, int op, BlockNumber blkno, OffsetNumber offnum); -static void -adjuststack(RTSTACK *stk, BlockNumber blkno, +static void adjuststack(RTSTACK *stk, BlockNumber blkno, OffsetNumber offnum); -static void -adjustiptr(IndexScanDesc s, ItemPointer iptr, +static void adjustiptr(IndexScanDesc s, ItemPointer iptr, int op, BlockNumber blkno, OffsetNumber offnum); /* diff --git a/src/backend/access/rtree/rtstrat.c b/src/backend/access/rtree/rtstrat.c index 04c5728888..f610bfc2ed 100644 --- a/src/backend/access/rtree/rtstrat.c +++ b/src/backend/access/rtree/rtstrat.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/rtree/Attic/rtstrat.c,v 1.9 1998/09/01 03:21:30 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/rtree/Attic/rtstrat.c,v 1.10 1998/09/01 04:27:13 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -18,8 +18,7 @@ #include <access/rtree.h> #include <access/istrat.h> -static StrategyNumber -RelationGetRTStrategy(Relation r, +static StrategyNumber RelationGetRTStrategy(Relation r, AttrNumber attnum, RegProcedure proc); /* diff --git a/src/backend/access/transam/transam.c b/src/backend/access/transam/transam.c index 284400116d..5bcce3c2d7 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.18 1998/09/01 03:21:31 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/transam/transam.c,v 1.19 1998/09/01 04:27:15 momjian Exp $ * * NOTES * This file contains the high level access-method interface to the @@ -29,8 +29,7 @@ static int RecoveryCheckingEnabled(void); static void TransRecover(Relation logRelation); static bool TransactionLogTest(TransactionId transactionId, XidStatus status); -static void -TransactionLogUpdate(TransactionId transactionId, +static void TransactionLogUpdate(TransactionId transactionId, XidStatus status); /* ---------------- diff --git a/src/backend/access/transam/transsup.c b/src/backend/access/transam/transsup.c index 51879019c8..6f1b09b577 100644 --- a/src/backend/access/transam/transsup.c +++ b/src/backend/access/transam/transsup.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/access/transam/Attic/transsup.c,v 1.16 1998/01/07 21:02:19 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/transam/Attic/transsup.c,v 1.17 1998/09/01 04:27:16 momjian Exp $ * * NOTES * This file contains support functions for the high @@ -23,11 +23,9 @@ #include <access/xact.h> #include <storage/lmgr.h> -static XidStatus -TransBlockGetXidStatus(Block tblock, +static XidStatus TransBlockGetXidStatus(Block tblock, TransactionId transactionId); -static void -TransBlockSetXidStatus(Block tblock, +static void TransBlockSetXidStatus(Block tblock, TransactionId transactionId, XidStatus xstatus); /* ---------------------------------------------------------------- diff --git a/src/backend/access/transam/varsup.c b/src/backend/access/transam/varsup.c index ef669df70e..2c49c05c12 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.16 1998/07/21 06:17:13 vadim Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/transam/varsup.c,v 1.17 1998/09/01 04:27:18 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -31,7 +31,7 @@ static void VariableRelationPutNextOid(Oid *oidP); */ int OidGenLockId; -VariableCache ShmemVariableCache = NULL; +VariableCache ShmemVariableCache = NULL; /* ---------------------------------------------------------------- * variable relation query/update routines @@ -292,11 +292,11 @@ GetNewTransactionId(TransactionId *xid) } SpinAcquire(OidGenLockId); /* not good for concurrency... */ - + if (ShmemVariableCache->xid_count == 0) { TransactionId nextid; - + VariableRelationGetNextXid(&nextid); TransactionIdStore(nextid, &(ShmemVariableCache->nextXid)); ShmemVariableCache->xid_count = VAR_XID_PREFETCH; @@ -307,7 +307,7 @@ GetNewTransactionId(TransactionId *xid) TransactionIdStore(ShmemVariableCache->nextXid, xid); TransactionIdAdd(&(ShmemVariableCache->nextXid), 1); (ShmemVariableCache->xid_count)--; - + SpinRelease(OidGenLockId); } diff --git a/src/backend/access/transam/xact.c b/src/backend/access/transam/xact.c index e40f49fc87..d082c805cd 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.22 1998/09/01 03:21:33 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/access/transam/xact.c,v 1.23 1998/09/01 04:27:19 momjian Exp $ * * NOTES * Transaction aborts can now occur two ways: @@ -898,7 +898,7 @@ CommitTransaction() * ---------------- */ - /* handle commit for large objects [ PA, 7/17/98 ] */ + /* handle commit for large objects [ PA, 7/17/98 ] */ _lo_commit(); CloseSequences(); diff --git a/src/backend/bootstrap/bootstrap.c b/src/backend/bootstrap/bootstrap.c index 18497cb2f2..2f8fd05310 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.50 1998/09/01 03:21:36 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/bootstrap/bootstrap.c,v 1.51 1998/09/01 04:27:21 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -325,7 +325,8 @@ BootstrapMain(int argc, char *argv[]) DataDir = optarg; break; case 'd': - DebugMode = true; /* print out debugging info while parsing */ + DebugMode = true; /* print out debugging info while + * parsing */ break; case 'C': Noversion = true; @@ -601,7 +602,7 @@ 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; - attrtypes[attnum]->attbyval = (attlen == 1) || (attlen == 2) ||(attlen == 4); + attrtypes[attnum]->attbyval = (attlen == 1) || (attlen == 2) || (attlen == 4); attrtypes[attnum]->attalign = 'i'; } attrtypes[attnum]->attcacheoff = -1; diff --git a/src/backend/catalog/aclchk.c b/src/backend/catalog/aclchk.c index 3d778d2609..d432269a36 100644 --- a/src/backend/catalog/aclchk.c +++ b/src/backend/catalog/aclchk.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/catalog/aclchk.c,v 1.15 1998/09/01 03:21:38 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/catalog/aclchk.c,v 1.16 1998/09/01 04:27:27 momjian Exp $ * * NOTES * See acl.h. @@ -185,7 +185,7 @@ get_grosysid(char *groname) tuple = SearchSysCacheTuple(GRONAME, PointerGetDatum(groname), - 0, 0, 0); + 0, 0, 0); if (HeapTupleIsValid(tuple)) id = ((Form_pg_group) GETSTRUCT(tuple))->grosysid; else @@ -201,7 +201,7 @@ get_groname(AclId grosysid) tuple = SearchSysCacheTuple(GROSYSID, ObjectIdGetDatum(grosysid), - 0, 0, 0); + 0, 0, 0); if (HeapTupleIsValid(tuple)) name = (((Form_pg_group) GETSTRUCT(tuple))->groname).data; else @@ -229,13 +229,13 @@ in_group(AclId uid, AclId gid) } tuple = SearchSysCacheTuple(GROSYSID, ObjectIdGetDatum(gid), - 0, 0, 0); + 0, 0, 0); if (HeapTupleIsValid(tuple) && !heap_attisnull(tuple, Anum_pg_group_grolist)) { tmp = (IdList *) heap_getattr(tuple, Anum_pg_group_grolist, - RelationGetDescr(relation), + RelationGetDescr(relation), (bool *) NULL); /* XXX make me a function */ num = IDLIST_NUM(tmp); @@ -369,7 +369,7 @@ pg_aclcheck(char *relname, char *usename, AclMode mode) tuple = SearchSysCacheTuple(USENAME, PointerGetDatum(usename), - 0, 0, 0); + 0, 0, 0); if (!HeapTupleIsValid(tuple)) elog(ERROR, "pg_aclcheck: user \"%s\" not found", usename); @@ -420,8 +420,8 @@ pg_aclcheck(char *relname, char *usename, AclMode mode) #ifndef ACLDEBUG tuple = SearchSysCacheTuple(RELNAME, - PointerGetDatum(relname), - 0, 0, 0); + PointerGetDatum(relname), + 0, 0, 0); if (!HeapTupleIsValid(tuple)) { elog(ERROR, "pg_aclcheck: class \"%s\" not found", @@ -450,10 +450,10 @@ pg_aclcheck(char *relname, char *usename, AclMode mode) relation = heap_openr(RelationRelationName); ownerId = (int4) heap_getattr(tuple, - Anum_pg_class_relowner, - RelationGetDescr(relation), - (bool *) NULL); - acl = aclownerdefault(relname, (AclId)ownerId); + Anum_pg_class_relowner, + RelationGetDescr(relation), + (bool *) NULL); + acl = aclownerdefault(relname, (AclId) ownerId); } #else { /* This is why the syscache is great... */ @@ -469,14 +469,14 @@ pg_aclcheck(char *relname, char *usename, AclMode mode) return ACLCHECK_NO_CLASS; } tuple = SearchSysCacheTuple(RELNAME, - PointerGetDatum(relname), - 0, 0, 0); + PointerGetDatum(relname), + 0, 0, 0); if (HeapTupleIsValid(tuple) && !heap_attisnull(tuple, Anum_pg_class_relacl)) { tmp = (Acl *) heap_getattr(tuple, Anum_pg_class_relacl, - RelationGetDescr(relation), + RelationGetDescr(relation), (bool *) NULL); acl = makeacl(ACL_NUM(tmp)); memmove((char *) acl, (char *) tmp, ACL_SIZE(tmp)); @@ -501,7 +501,7 @@ pg_ownercheck(char *usename, tuple = SearchSysCacheTuple(USENAME, PointerGetDatum(usename), - 0, 0, 0); + 0, 0, 0); if (!HeapTupleIsValid(tuple)) elog(ERROR, "pg_ownercheck: user \"%s\" not found", usename); @@ -520,7 +520,7 @@ pg_ownercheck(char *usename, } tuple = SearchSysCacheTuple(cacheid, PointerGetDatum(value), - 0, 0, 0); + 0, 0, 0); switch (cacheid) { case OPROID: @@ -568,7 +568,7 @@ pg_func_ownercheck(char *usename, tuple = SearchSysCacheTuple(USENAME, PointerGetDatum(usename), - 0, 0, 0); + 0, 0, 0); if (!HeapTupleIsValid(tuple)) elog(ERROR, "pg_func_ownercheck: user \"%s\" not found", usename); @@ -587,10 +587,10 @@ pg_func_ownercheck(char *usename, } tuple = SearchSysCacheTuple(PRONAME, - PointerGetDatum(funcname), - Int32GetDatum(nargs), - PointerGetDatum(arglist), - 0); + PointerGetDatum(funcname), + Int32GetDatum(nargs), + PointerGetDatum(arglist), + 0); if (!HeapTupleIsValid(tuple)) func_error("pg_func_ownercheck", funcname, nargs, arglist, NULL); @@ -610,7 +610,7 @@ pg_aggr_ownercheck(char *usename, tuple = SearchSysCacheTuple(USENAME, PointerGetDatum(usename), - 0, 0, 0); + 0, 0, 0); if (!HeapTupleIsValid(tuple)) elog(ERROR, "pg_aggr_ownercheck: user \"%s\" not found", usename); @@ -629,9 +629,9 @@ pg_aggr_ownercheck(char *usename, } tuple = SearchSysCacheTuple(AGGNAME, - PointerGetDatum(aggname), - ObjectIdGetDatum(basetypeID), - 0, 0); + PointerGetDatum(aggname), + ObjectIdGetDatum(basetypeID), + 0, 0); if (!HeapTupleIsValid(tuple)) agg_error("pg_aggr_ownercheck", aggname, basetypeID); diff --git a/src/backend/catalog/catalog.c b/src/backend/catalog/catalog.c index 5db4be0310..cb9d5ff836 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.17 1998/09/01 03:21:40 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/catalog/catalog.c,v 1.18 1998/09/01 04:27:28 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -174,7 +174,7 @@ fillatt(TupleDesc tupleDesc) for (i = 0; i < natts;) { tuple = SearchSysCacheTuple(TYPOID, - ObjectIdGetDatum((*attributeP)->atttypid), + ObjectIdGetDatum((*attributeP)->atttypid), 0, 0, 0); if (!HeapTupleIsValid(tuple)) { @@ -193,7 +193,7 @@ fillatt(TupleDesc tupleDesc) */ if (!(*attributeP)->attisset) { - typp = (Form_pg_type) GETSTRUCT(tuple); /* XXX */ + typp = (Form_pg_type) GETSTRUCT(tuple); /* XXX */ (*attributeP)->attlen = typp->typlen; (*attributeP)->attbyval = typp->typbyval; } diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c index d6c252f7ba..bcac947978 100644 --- a/src/backend/catalog/heap.c +++ b/src/backend/catalog/heap.c @@ -7,12 +7,12 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.63 1998/09/01 03:21:41 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.64 1998/09/01 04:27:29 momjian Exp $ * * INTERFACE ROUTINES * heap_create() - Create an uncataloged heap relation * heap_create_with_catalog() - Create a cataloged relation - * heap_destroy_with_catalog() - Removes named relation from catalogs + * heap_destroy_with_catalog() - Removes named relation from catalogs * * NOTES * this code taken from access/heap/create.c, which contains @@ -65,10 +65,9 @@ #include <string.h> #endif -static void -AddPgRelationTuple(Relation pg_class_desc, - Relation new_rel_desc, Oid new_rel_oid, unsigned natts, - char relkind); +static void AddPgRelationTuple(Relation pg_class_desc, + Relation new_rel_desc, Oid new_rel_oid, unsigned natts, + char relkind); static void AddToTempRelList(Relation r); static void DeletePgAttributeTuples(Relation rel); static void DeletePgRelationTuple(Relation rel); @@ -317,7 +316,7 @@ heap_create(char *name, * ---------------- */ - rel->rd_tmpunlinked = TRUE; /* change once table is created */ + rel->rd_tmpunlinked = TRUE; /* change once table is created */ rel->rd_fd = (File) smgrcreate(DEFAULT_SMGR, rel); rel->rd_tmpunlinked = FALSE; @@ -479,8 +478,8 @@ RelationAlreadyExists(Relation pg_class_desc, char *relname) if (!IsBootstrapProcessingMode()) { tup = SearchSysCacheTuple(RELNAME, - PointerGetDatum(relname), - 0, 0, 0); + PointerGetDatum(relname), + 0, 0, 0); if (HeapTupleIsValid(tup)) return true; else @@ -878,7 +877,7 @@ RelationRemoveInheritance(Relation relation) HeapScanDesc scan; ScanKeyData entry; bool found = false; - + /* ---------------- * open pg_inherits * ---------------- @@ -892,7 +891,7 @@ RelationRemoveInheritance(Relation relation) */ ScanKeyEntryInitialize(&entry, 0x0, Anum_pg_inherits_inhparent, F_OIDEQ, - ObjectIdGetDatum(RelationGetRelid(relation))); + ObjectIdGetDatum(RelationGetRelid(relation))); scan = heap_beginscan(catalogRelation, false, @@ -972,10 +971,10 @@ RelationRemoveIndexes(Relation relation) ScanKeyData entry; indexRelation = heap_openr(IndexRelationName); - + ScanKeyEntryInitialize(&entry, 0x0, Anum_pg_index_indrelid, F_OIDEQ, - ObjectIdGetDatum(RelationGetRelid(relation))); + ObjectIdGetDatum(RelationGetRelid(relation))); scan = heap_beginscan(indexRelation, false, @@ -1008,8 +1007,8 @@ DeletePgRelationTuple(Relation rel) pg_class_desc = heap_openr(RelationRelationName); tup = SearchSysCacheTupleCopy(RELOID, - ObjectIdGetDatum(rel->rd_att->attrs[0]->attrelid), - 0, 0, 0); + ObjectIdGetDatum(rel->rd_att->attrs[0]->attrelid), + 0, 0, 0); if (!HeapTupleIsValid(tup)) { heap_close(pg_class_desc); @@ -1023,7 +1022,7 @@ DeletePgRelationTuple(Relation rel) */ heap_delete(pg_class_desc, &tup->t_ctid); pfree(tup); - + heap_close(pg_class_desc); } @@ -1038,7 +1037,7 @@ DeletePgAttributeTuples(Relation rel) Relation pg_attribute_desc; HeapTuple tup; int2 attnum; - + /* ---------------- * open pg_attribute * ---------------- @@ -1052,19 +1051,19 @@ DeletePgAttributeTuples(Relation rel) RelationSetLockForWrite(pg_attribute_desc); for (attnum = FirstLowInvalidHeapAttributeNumber + 1; - attnum <= rel->rd_att->natts; - attnum++) + attnum <= rel->rd_att->natts; + attnum++) { if (HeapTupleIsValid(tup = SearchSysCacheTupleCopy(ATTNUM, - ObjectIdGetDatum(RelationGetRelid(rel)), - Int16GetDatum(attnum), - 0, 0))) + ObjectIdGetDatum(RelationGetRelid(rel)), + Int16GetDatum(attnum), + 0, 0))) { heap_delete(pg_attribute_desc, &tup->t_ctid); pfree(tup); } } - + /* ---------------- * Release the write lock * ---------------- @@ -1107,9 +1106,9 @@ DeletePgTypeTuple(Relation rel) * ---------------- */ ScanKeyEntryInitialize(&key, 0, - Anum_pg_type_typrelid, - F_OIDEQ, - ObjectIdGetDatum(RelationGetRelid(rel))); + Anum_pg_type_typrelid, + F_OIDEQ, + ObjectIdGetDatum(RelationGetRelid(rel))); pg_type_scan = heap_beginscan(pg_type_desc, 0, @@ -1470,7 +1469,7 @@ start:; } } else if ((exprType(expr) != atp->atttypid) - && !IS_BINARY_COMPATIBLE(exprType(expr), atp->atttypid)) + && !IS_BINARY_COMPATIBLE(exprType(expr), atp->atttypid)) elog(ERROR, "DEFAULT: type mismatched"); adbin = nodeToString(expr); diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c index ad8725a254..7d98a51bc5 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.59 1998/09/01 03:21:43 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/catalog/index.c,v 1.60 1998/09/01 04:27:31 momjian Exp $ * * * INTERFACE ROUTINES @@ -65,32 +65,28 @@ /* non-export function prototypes */ static Oid -RelationNameGetObjectId(char *relationName, Relation pg_class); + RelationNameGetObjectId(char *relationName, Relation pg_class); static Oid GetHeapRelationOid(char *heapRelationName, char *indexRelationName); static TupleDesc BuildFuncTupleDesc(FuncIndexInfo *funcInfo); -static TupleDesc -ConstructTupleDescriptor(Oid heapoid, Relation heapRelation, +static TupleDesc ConstructTupleDescriptor(Oid heapoid, Relation heapRelation, List *attributeList, int numatts, AttrNumber *attNums); static void ConstructIndexReldesc(Relation indexRelation, Oid amoid); static Oid UpdateRelationRelation(Relation indexRelation); -static void -InitializeAttributeOids(Relation indexRelation, +static void InitializeAttributeOids(Relation indexRelation, int numatts, Oid indexoid); static void AppendAttributeTuples(Relation indexRelation, int numatts); -static void -UpdateIndexRelation(Oid indexoid, Oid heapoid, +static void UpdateIndexRelation(Oid indexoid, Oid heapoid, FuncIndexInfo *funcInfo, int natts, - AttrNumber *attNums, Oid *classOids, Node *predicate, + AttrNumber *attNums, Oid *classOids, Node *predicate, List *attributeList, bool islossy, bool unique); -static void -DefaultBuild(Relation heapRelation, Relation indexRelation, +static void DefaultBuild(Relation heapRelation, Relation indexRelation, int numberOfAttributes, AttrNumber *attributeNumber, IndexStrategy indexStrategy, uint16 parameterCount, - Datum *parameter, FuncIndexInfoPtr funcInfo, PredInfo *predInfo); + Datum *parameter, FuncIndexInfoPtr funcInfo, PredInfo *predInfo); /* ---------------------------------------------------------------- * sysatts is a structure containing attribute tuple forms @@ -147,12 +143,12 @@ RelationNameGetObjectId(char *relationName, if (!IsBootstrapProcessingMode()) { - HeapTuple tuple; - + HeapTuple tuple; + tuple = SearchSysCacheTuple(RELNAME, PointerGetDatum(relationName), 0, 0, 0); - + if (HeapTupleIsValid(tuple)) return tuple->t_oid; else @@ -614,7 +610,9 @@ static void AppendAttributeTuples(Relation indexRelation, int numatts) { Relation pg_attribute; - HeapTuple init_tuple, cur_tuple = NULL, new_tuple; + HeapTuple init_tuple, + cur_tuple = NULL, + new_tuple; bool hasind; Relation idescs[Num_pg_attr_indices]; @@ -651,8 +649,8 @@ AppendAttributeTuples(Relation indexRelation, int numatts) value[Anum_pg_attribute_attcacheoff - 1] = Int32GetDatum(-1); init_tuple = heap_addheader(Natts_pg_attribute, - sizeof *(indexRelation->rd_att->attrs[0]), - (char *) (indexRelation->rd_att->attrs[0])); + sizeof *(indexRelation->rd_att->attrs[0]), + (char *) (indexRelation->rd_att->attrs[0])); hasind = false; if (!IsBootstrapProcessingMode() && pg_attribute->rd_rel->relhasindex) @@ -666,12 +664,12 @@ AppendAttributeTuples(Relation indexRelation, int numatts) * ---------------- */ cur_tuple = heap_modifytuple(init_tuple, - pg_attribute, - value, - nullv, - replace); + pg_attribute, + value, + nullv, + replace); pfree(init_tuple); - + heap_insert(pg_attribute, cur_tuple); if (hasind) CatalogIndexInsert(idescs, Num_pg_attr_indices, pg_attribute, cur_tuple); @@ -696,13 +694,13 @@ AppendAttributeTuples(Relation indexRelation, int numatts) value[Anum_pg_attribute_attnum - 1] = Int16GetDatum(i + 1); new_tuple = heap_modifytuple(cur_tuple, - pg_attribute, - value, - nullv, - replace); + pg_attribute, + value, + nullv, + replace); pfree(cur_tuple); - heap_insert(pg_attribute,new_tuple); + heap_insert(pg_attribute, new_tuple); if (hasind) CatalogIndexInsert(idescs, Num_pg_attr_indices, pg_attribute, new_tuple); @@ -711,7 +709,7 @@ AppendAttributeTuples(Relation indexRelation, int numatts) * so we free the original and use the copy.. * ---------------- */ - cur_tuple = new_tuple; + cur_tuple = new_tuple; } if (cur_tuple) @@ -898,10 +896,10 @@ UpdateIndexPredicate(Oid indexoid, Node *oldPred, Node *predicate) pg_index = heap_openr(IndexRelationName); tuple = SearchSysCacheTuple(INDEXRELID, - ObjectIdGetDatum(indexoid), - 0, 0, 0); + ObjectIdGetDatum(indexoid), + 0, 0, 0); Assert(HeapTupleIsValid(tuple)); - + for (i = 0; i < Natts_pg_index; i++) { nulls[i] = heap_attisnull(tuple, i + 1) ? 'n' : ' '; @@ -1103,7 +1101,7 @@ index_create(char *heapRelationName, if (!HeapTupleIsValid(proc_tup)) { func_error("index_create", FIgetname(funcInfo), - FIgetnArgs(funcInfo), FIgetArglist(funcInfo), NULL); + FIgetnArgs(funcInfo), FIgetArglist(funcInfo), NULL); } FIgetProcOid(funcInfo) = proc_tup->t_oid; } @@ -1178,7 +1176,7 @@ index_destroy(Oid indexId) Relation attributeRelation; HeapTuple tuple; int16 attnum; - + Assert(OidIsValid(indexId)); /* why open it here? bjm 1998/08/20 */ @@ -1206,12 +1204,12 @@ index_destroy(Oid indexId) */ attributeRelation = heap_openr(AttributeRelationName); - attnum = 1; /* indexes start at 1 */ + attnum = 1; /* indexes start at 1 */ while (HeapTupleIsValid(tuple = SearchSysCacheTupleCopy(ATTNUM, - ObjectIdGetDatum(indexId), - Int16GetDatum(attnum), - 0, 0))) + ObjectIdGetDatum(indexId), + Int16GetDatum(attnum), + 0, 0))) { heap_delete(attributeRelation, &tuple->t_ctid); pfree(tuple); @@ -1224,15 +1222,15 @@ index_destroy(Oid indexId) * ---------------- */ tuple = SearchSysCacheTupleCopy(INDEXRELID, - ObjectIdGetDatum(indexId), - 0, 0, 0); + ObjectIdGetDatum(indexId), + 0, 0, 0); if (!HeapTupleIsValid(tuple)) elog(NOTICE, "IndexRelationDestroy: %s's INDEX tuple missing", RelationGetRelationName(userindexRelation)); indexRelation = heap_openr(IndexRelationName); - + heap_delete(indexRelation, &tuple->t_ctid); pfree(tuple); heap_close(indexRelation); @@ -1281,12 +1279,12 @@ FormIndexDatum(int numberOfAttributes, { offset = AttrNumberGetAttrOffset(i); - datum[offset] = PointerGetDatum(GetIndexValue(heapTuple, - heapDescriptor, - offset, - attributeNumber, - fInfo, - &isNull)); + datum[offset] = PointerGetDatum(GetIndexValue(heapTuple, + heapDescriptor, + offset, + attributeNumber, + fInfo, + &isNull)); nullv[offset] = (isNull) ? 'n' : ' '; } @@ -1311,7 +1309,7 @@ UpdateStats(Oid relid, long reltuples, bool hasindex) Datum values[Natts_pg_class]; char nulls[Natts_pg_class]; char replace[Natts_pg_class]; - HeapScanDesc pg_class_scan = NULL; + HeapScanDesc pg_class_scan = NULL; /* ---------------- * This routine handles updates for both the heap and index relation @@ -1356,14 +1354,14 @@ UpdateStats(Oid relid, long reltuples, bool hasindex) ScanKeyData key[1]; ScanKeyEntryInitialize(&key[0], 0, - ObjectIdAttributeNumber, - F_OIDEQ, - ObjectIdGetDatum(relid)); + ObjectIdAttributeNumber, + F_OIDEQ, + ObjectIdGetDatum(relid)); pg_class_scan = heap_beginscan(pg_class, 0, SnapshotNow, 1, key); tuple = heap_getnext(pg_class_scan, 0); } - + if (!HeapTupleIsValid(tuple)) { if (IsBootstrapProcessingMode()) @@ -1436,7 +1434,7 @@ UpdateStats(Oid relid, long reltuples, bool hasindex) pfree(tuple); else heap_endscan(pg_class_scan); - + heap_close(pg_class); heap_close(whichRel); } @@ -1478,7 +1476,7 @@ DefaultBuild(Relation heapRelation, AttrNumber *attributeNumber, IndexStrategy indexStrategy, /* not used */ uint16 parameterCount, /* not used */ - Datum *parameter, /* not used */ + Datum *parameter, /* not used */ FuncIndexInfoPtr funcInfo, PredInfo *predInfo) { @@ -1543,7 +1541,7 @@ DefaultBuild(Relation heapRelation, tupleTable = ExecCreateTupleTable(1); slot = ExecAllocTableSlot(tupleTable); econtext = makeNode(ExprContext); - /* last parameter was junk being sent bjm 1998/08/17 */ + /* last parameter was junk being sent bjm 1998/08/17 */ FillDummyExprContext(econtext, slot, heapDescriptor, InvalidBuffer); } else @@ -1552,7 +1550,7 @@ DefaultBuild(Relation heapRelation, tupleTable = 0; slot = NULL; } -#endif /* OMIT_PARTIAL_INDEX */ +#endif /* OMIT_PARTIAL_INDEX */ /* ---------------- * Ok, begin our scan of the base relation. @@ -1560,7 +1558,7 @@ DefaultBuild(Relation heapRelation, */ scan = heap_beginscan(heapRelation, /* relation */ 0, /* start at end */ - SnapshotNow,/* seeself */ + SnapshotNow, /* seeself */ 0, /* number of keys */ (ScanKey) NULL); /* scan key */ @@ -1591,7 +1589,7 @@ DefaultBuild(Relation heapRelation, indtuples++; continue; } -#endif /* OMIT_PARTIAL_INDEX */ +#endif /* OMIT_PARTIAL_INDEX */ } /* @@ -1605,7 +1603,7 @@ DefaultBuild(Relation heapRelation, slot->val = heapTuple; if (ExecQual((List *) predicate, econtext) == false) continue; -#endif /* OMIT_PARTIAL_INDEX */ +#endif /* OMIT_PARTIAL_INDEX */ } indtuples++; @@ -1643,7 +1641,7 @@ DefaultBuild(Relation heapRelation, { #ifndef OMIT_PARTIAL_INDEX ExecDestroyTupleTable(tupleTable, false); -#endif /* OMIT_PARTIAL_INDEX */ +#endif /* OMIT_PARTIAL_INDEX */ } pfree(nullv); diff --git a/src/backend/catalog/indexing.c b/src/backend/catalog/indexing.c index 8fa94148c0..ad66f89269 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.25 1998/09/01 03:21:44 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/catalog/indexing.c,v 1.26 1998/09/01 04:27:33 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -126,8 +126,8 @@ CatalogIndexInsert(Relation *idescs, indexDescriptor = RelationGetDescr(idescs[i]); pgIndexTup = SearchSysCacheTupleCopy(INDEXRELID, - ObjectIdGetDatum(idescs[i]->rd_id), - 0, 0, 0); + ObjectIdGetDatum(idescs[i]->rd_id), + 0, 0, 0); Assert(pgIndexTup); pgIndexP = (Form_pg_index) GETSTRUCT(pgIndexTup); @@ -228,7 +228,7 @@ CatalogIndexFetchTuple(Relation heapRelation, RetrieveIndexResult indexRes; HeapTuple tuple = NULL; Buffer buffer; - + sd = index_beginscan(idesc, false, num_keys, skey); while ((indexRes = index_getnext(sd, ForwardScanDirection))) { @@ -239,7 +239,7 @@ CatalogIndexFetchTuple(Relation heapRelation, pfree(indexRes); if (HeapTupleIsValid(tuple)) break; - } + } if (HeapTupleIsValid(tuple)) { @@ -270,13 +270,13 @@ AttributeNameIndexScan(Relation heapRelation, ScanKeyEntryInitialize(&skey[0], (bits16) 0x0, (AttrNumber) 1, - (RegProcedure)F_OIDEQ, + (RegProcedure) F_OIDEQ, ObjectIdGetDatum(relid)); ScanKeyEntryInitialize(&skey[1], (bits16) 0x0, (AttrNumber) 2, - (RegProcedure)F_NAMEEQ, + (RegProcedure) F_NAMEEQ, NameGetDatum(attname)); idesc = index_openr(AttributeNameIndex); @@ -299,13 +299,13 @@ AttributeNumIndexScan(Relation heapRelation, ScanKeyEntryInitialize(&skey[0], (bits16) 0x0, (AttrNumber) 1, - (RegProcedure)F_OIDEQ, + (RegProcedure) F_OIDEQ, ObjectIdGetDatum(relid)); ScanKeyEntryInitialize(&skey[1], (bits16) 0x0, (AttrNumber) 2, - (RegProcedure)F_INT2EQ, + (RegProcedure) F_INT2EQ, Int16GetDatum(attnum)); idesc = index_openr(AttributeNumIndex); diff --git a/src/backend/catalog/pg_aggregate.c b/src/backend/catalog/pg_aggregate.c index c9370df540..00b16c20f6 100644 --- a/src/backend/catalog/pg_aggregate.c +++ b/src/backend/catalog/pg_aggregate.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/catalog/pg_aggregate.c,v 1.16 1998/09/01 03:21:45 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/catalog/pg_aggregate.c,v 1.17 1998/09/01 04:27:34 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -78,7 +78,7 @@ AggregateCreate(char *aggName, Oid xret2 = InvalidOid; Oid fret = InvalidOid; Oid fnArgs[8]; - NameData aname; + NameData aname; TupleDesc tupDesc; MemSet(fnArgs, 0, 8 * sizeof(Oid)); diff --git a/src/backend/catalog/pg_operator.c b/src/backend/catalog/pg_operator.c index a2123fc7c5..a296c9057c 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.28 1998/09/01 03:21:47 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/catalog/pg_operator.c,v 1.29 1998/09/01 04:27:36 momjian Exp $ * * NOTES * these routines moved here from commands/define.c and somewhat cleaned up. @@ -35,28 +35,23 @@ #include <string.h> #endif -static Oid -OperatorGetWithOpenRelation(Relation pg_operator_desc, +static Oid OperatorGetWithOpenRelation(Relation pg_operator_desc, const char *operatorName, Oid leftObjectId, Oid rightObjectId); -static Oid -OperatorGet(char *operatorName, +static Oid OperatorGet(char *operatorName, char *leftTypeName, char *rightTypeName); -static Oid -OperatorShellMakeWithOpenRelation(Relation pg_operator_desc, +static Oid OperatorShellMakeWithOpenRelation(Relation pg_operator_desc, char *operatorName, Oid leftObjectId, Oid rightObjectId); -static Oid -OperatorShellMake(char *operatorName, +static Oid OperatorShellMake(char *operatorName, char *leftTypeName, char *rightTypeName); -static void -OperatorDef(char *operatorName, +static void OperatorDef(char *operatorName, int definedOK, char *leftTypeName, char *rightTypeName, @@ -120,7 +115,7 @@ OperatorGetWithOpenRelation(Relation pg_operator_desc, */ pg_operator_scan = heap_beginscan(pg_operator_desc, 0, - SnapshotSelf, /* no cache? */ + SnapshotSelf, /* no cache? */ 3, opKey); @@ -475,7 +470,7 @@ OperatorDef(char *operatorName, char *name[4]; Oid typeId[8]; int nargs; - NameData oname; + NameData oname; TupleDesc tupDesc; static ScanKeyData opKey[3] = { @@ -796,7 +791,7 @@ OperatorUpd(Oid baseId, Oid commId, Oid negId) pg_operator_scan = heap_beginscan(pg_operator_desc, 0, - SnapshotSelf, /* no cache? */ + SnapshotSelf, /* no cache? */ 1, opKey); @@ -872,7 +867,7 @@ OperatorUpd(Oid baseId, Oid commId, Oid negId) pg_operator_scan = heap_beginscan(pg_operator_desc, 0, - SnapshotSelf, /* no cache? */ + SnapshotSelf, /* no cache? */ 1, opKey); diff --git a/src/backend/catalog/pg_proc.c b/src/backend/catalog/pg_proc.c index 006286f6f7..074bda3876 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.22 1998/09/01 03:21:48 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/catalog/pg_proc.c,v 1.23 1998/09/01 04:27:37 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -129,6 +129,7 @@ ProcedureCreate(char *procedureName, if (!strcmp(languageName, "sql")) { + /* * If this call is defining a set, check if the set is already * defined by looking to see whether this call's function text diff --git a/src/backend/catalog/pg_type.c b/src/backend/catalog/pg_type.c index 3375cfe591..d9f9023f31 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.29 1998/09/01 03:21:49 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/catalog/pg_type.c,v 1.30 1998/09/01 04:27:39 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -33,8 +33,7 @@ #include <string.h> #endif -static Oid -TypeShellMakeWithOpenRelation(Relation pg_type_desc, +static Oid TypeShellMakeWithOpenRelation(Relation pg_type_desc, char *typeName); /* ---------------------------------------------------------------- @@ -178,7 +177,7 @@ TypeShellMakeWithOpenRelation(Relation pg_type_desc, char *typeName) */ i = 0; namestrcpy(&name, typeName); - values[i++] = NameGetDatum(&name); /* 1 */ + values[i++] = NameGetDatum(&name); /* 1 */ values[i++] = (Datum) InvalidOid; /* 2 */ values[i++] = (Datum) (int16) 0; /* 3 */ values[i++] = (Datum) (int16) 0; /* 4 */ @@ -379,17 +378,17 @@ TypeCreate(char *typeName, * ---------------- */ i = 0; - namestrcpy(&name,typeName); + namestrcpy(&name, typeName); values[i++] = NameGetDatum(&name); /* 1 */ values[i++] = (Datum) GetUserId(); /* 2 */ values[i++] = (Datum) internalSize; /* 3 */ values[i++] = (Datum) externalSize; /* 4 */ - values[i++] = (Datum) passedByValue;/* 5 */ + values[i++] = (Datum) passedByValue; /* 5 */ values[i++] = (Datum) typeType; /* 6 */ values[i++] = (Datum) (bool) 1; /* 7 */ values[i++] = (Datum) typDelim; /* 8 */ values[i++] = (Datum) (typeType == 'c' ? relationOid : InvalidOid); /* 9 */ - values[i++] = (Datum) elementObjectId;/* 10 */ + values[i++] = (Datum) elementObjectId; /* 10 */ /* * arguments to type input and output functions must be 0 @@ -431,7 +430,7 @@ TypeCreate(char *typeName, func_error("TypeCreate", procname, 1, argList, NULL); } - values[i++] = (Datum) tup->t_oid; /* 11 - 14 */ + values[i++] = (Datum) tup->t_oid; /* 11 - 14 */ } /* ---------------- @@ -444,7 +443,7 @@ TypeCreate(char *typeName, * initialize the default value for this type. * ---------------- */ - values[i] = (Datum) fmgr(F_TEXTIN, /* 16 */ + values[i] = (Datum) fmgr(F_TEXTIN, /* 16 */ PointerIsValid(defaultTypeValue) ? defaultTypeValue : "-"); /* XXX default * typdefault */ @@ -534,8 +533,9 @@ TypeRename(char *oldTypeName, char *newTypeName) { Relation pg_type_desc; Relation idescs[Num_pg_type_indices]; - HeapTuple oldtup, newtup; - + HeapTuple oldtup, + newtup; + pg_type_desc = heap_openr(TypeRelationName); oldtup = SearchSysCacheTupleCopy(TYPNAME, @@ -547,7 +547,7 @@ TypeRename(char *oldTypeName, char *newTypeName) heap_close(pg_type_desc); elog(ERROR, "TypeRename: type %s not defined", oldTypeName); } - + newtup = SearchSysCacheTuple(TYPNAME, PointerGetDatum(newTypeName), 0, 0, 0); @@ -557,7 +557,7 @@ TypeRename(char *oldTypeName, char *newTypeName) heap_close(pg_type_desc); elog(ERROR, "TypeRename: type %s already defined", newTypeName); } - + namestrcpy(&(((Form_pg_type) GETSTRUCT(oldtup))->typname), newTypeName); setheapoverride(true); diff --git a/src/backend/commands/_deadcode/version.c b/src/backend/commands/_deadcode/version.c index 063b8f2f63..fc7d5dbc4f 100644 --- a/src/backend/commands/_deadcode/version.c +++ b/src/backend/commands/_deadcode/version.c @@ -10,7 +10,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/_deadcode/Attic/version.c,v 1.14 1998/08/19 02:01:58 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/_deadcode/Attic/version.c,v 1.15 1998/09/01 04:28:09 momjian Exp $ * * NOTES * At the point the version is defined, 2 physical relations are created @@ -303,7 +303,7 @@ VersionDelete(char *vname, char *bname, char *snapshot) vname, vname, vname, bname, bname, snapshot, bname); eval_as_new_xact(rule_buf); -#endif /* OLD_REWRITE */ +#endif /* OLD_REWRITE */ } #endif @@ -355,7 +355,7 @@ VersionReplace(char *vname, char *bname, char *snapshot) vname, vname, vname, attr_list, bname, bname, snapshot, vname, bname); eval_as_new_xact(rule_buf); -#endif /* OLD_REWRITE */ +#endif /* OLD_REWRITE */ /* printf("%s\n",rule_buf); */ } diff --git a/src/backend/commands/async.c b/src/backend/commands/async.c index b057455923..1212197717 100644 --- a/src/backend/commands/async.c +++ b/src/backend/commands/async.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/async.c,v 1.39 1998/09/01 03:21:50 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/async.c,v 1.40 1998/09/01 04:27:42 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -64,10 +64,10 @@ #include <utils/ps_status.h> #define NotifyUnlock pg_options[OPT_NOTIFYUNLOCK] -#define NotifyHack pg_options[OPT_NOTIFYHACK] +#define NotifyHack pg_options[OPT_NOTIFYHACK] extern TransactionState CurrentTransactionState; -extern CommandDest whereToSendOutput; +extern CommandDest whereToSendOutput; GlobalMemory notifyContext = NULL; @@ -119,7 +119,7 @@ Async_NotifyHandler(SIGNAL_ARGS) else { TPRINTF(TRACE_NOTIFY, "Async_NotifyHandler: " - "process in middle of transaction, state=%d, blockstate=%d", + "process in middle of transaction, state=%d, blockstate=%d", CurrentTransactionState->state, CurrentTransactionState->blockState); notifyFrontEndPending = 1; @@ -213,13 +213,12 @@ Async_Notify(char *relname) heap_endscan(sRel); /* - * Note: if the write lock is unset we can get multiple tuples - * with same oid if other backends notify the same relation. - * Use this option at your own risk. + * Note: if the write lock is unset we can get multiple tuples with + * same oid if other backends notify the same relation. Use this + * option at your own risk. */ - if (NotifyUnlock) { + if (NotifyUnlock) RelationUnsetLockForWrite(lRel); - } heap_close(lRel); @@ -318,12 +317,13 @@ Async_NotifyAtCommit() heap_close(lRel); /* - * Notify the frontend inside the current transaction while - * we still have a valid write lock on pg_listeners. This - * avoid waiting until all other backends have finished - * with pg_listener. + * Notify the frontend inside the current transaction while we + * still have a valid write lock on pg_listeners. This avoid + * waiting until all other backends have finished with + * pg_listener. */ - if (notifyFrontEndPending) { + if (notifyFrontEndPending) + { /* The aux version is called inside transaction */ Async_NotifyFrontEnd_Aux(); } @@ -333,14 +333,14 @@ Async_NotifyAtCommit() } else { + /* - * No notifies issued by us. If notifyFrontEndPending has been set - * by Async_NotifyHandler notify the frontend of pending notifies - * from other backends. + * No notifies issued by us. If notifyFrontEndPending has been + * set by Async_NotifyHandler notify the frontend of pending + * notifies from other backends. */ - if (notifyFrontEndPending) { + if (notifyFrontEndPending) Async_NotifyFrontEnd(); - } } ClearPendingNotify(); @@ -368,7 +368,8 @@ Async_NotifyAtCommit() void Async_NotifyAtAbort() { - if (pendingNotifies) { + if (pendingNotifies) + { ClearPendingNotify(); DLFreeList(pendingNotifies); } @@ -380,9 +381,7 @@ Async_NotifyAtAbort() { /* don't forget to notify front end */ if (notifyFrontEndPending) - { Async_NotifyFrontEnd(); - } } } @@ -423,7 +422,8 @@ Async_Listen(char *relname, int pid) char *relnamei; TupleDesc tupDesc; - if (whereToSendOutput != Remote) { + if (whereToSendOutput != Remote) + { elog(NOTICE, "Async_Listen: " "listen not available on interactive sessions"); return; @@ -459,7 +459,8 @@ Async_Listen(char *relname, int pid) if (pid == MyProcPid) alreadyListener = 1; } - if (alreadyListener) { + if (alreadyListener) + { /* No need to scan the rest of the table */ break; } @@ -521,7 +522,8 @@ Async_Unlisten(char *relname, int pid) HeapTuple lTuple; /* Handle specially the `unlisten "*"' command */ - if ((!relname) || (*relname == '\0') || (strcmp(relname,"*")==0)) { + if ((!relname) || (*relname == '\0') || (strcmp(relname, "*") == 0)) + { Async_UnlistenAll(); return; } @@ -575,15 +577,13 @@ Async_UnlistenAll() sRel = heap_beginscan(lRel, 0, SnapshotNow, 1, key); while (HeapTupleIsValid(lTuple = heap_getnext(sRel, 0))) - { heap_delete(lRel, &lTuple->t_ctid); - } heap_endscan(sRel); RelationUnsetLockForWrite(lRel); heap_close(lRel); TPRINTF(TRACE_NOTIFY, "Async_UnlistenAll: done"); } - + /* * -------------------------------------------------------------- * Async_UnlistenOnExit -- @@ -654,7 +654,7 @@ Async_NotifyFrontEnd_Aux() #define MAX_DONE 64 - char *done[MAX_DONE]; + char *done[MAX_DONE]; int ndone = 0; int i; @@ -687,13 +687,16 @@ Async_NotifyFrontEnd_Aux() &isnull); /* - * This hack deletes duplicate tuples which can be left - * in the table if the NotifyUnlock option is set. - * I'm further investigating this. -- dz + * This hack deletes duplicate tuples which can be left in the + * table if the NotifyUnlock option is set. I'm further + * investigating this. -- dz */ - if (NotifyHack) { - for (i=0; i<ndone; i++) { - if (strcmp(DatumGetName(d)->data, done[i]) == 0) { + if (NotifyHack) + { + for (i = 0; i < ndone; i++) + { + if (strcmp(DatumGetName(d)->data, done[i]) == 0) + { TPRINTF(TRACE_NOTIFY, "Async_NotifyFrontEnd: duplicate %s", DatumGetName(d)->data); @@ -701,9 +704,8 @@ Async_NotifyFrontEnd_Aux() continue; } } - if (ndone < MAX_DONE) { + if (ndone < MAX_DONE) done[ndone++] = pstrdup(DatumGetName(d)->data); - } } rTuple = heap_modifytuple(lTuple, lRel, value, nulls, repl); diff --git a/src/backend/commands/cluster.c b/src/backend/commands/cluster.c index 928a6b5f6d..415ad4a8df 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.30 1998/09/01 03:21:52 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/cluster.c,v 1.31 1998/09/01 04:27:44 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -47,7 +47,7 @@ #include <optimizer/internal.h> #ifndef NO_SECURITY #include <utils/acl.h> -#endif /* !NO_SECURITY */ +#endif /* !NO_SECURITY */ static Relation copy_heap(Oid OIDOldHeap); static void copy_index(Oid OIDOldIndex, Oid OIDNewHeap); @@ -128,7 +128,8 @@ cluster(char *oldrelname, char *oldindexname) elog(ERROR, "cluster: unknown relation: \"%s\"", oldrelname); } - OIDOldHeap = RelationGetRelid(OldHeap);/* Get OID for the index scan */ + OIDOldHeap = RelationGetRelid(OldHeap); /* Get OID for the index + * scan */ OldIndex = index_openr(oldindexname); /* Open old index relation */ if (!RelationIsValid(OldIndex)) @@ -136,7 +137,7 @@ cluster(char *oldrelname, char *oldindexname) elog(ERROR, "cluster: unknown index: \"%s\"", oldindexname); } - OIDOldIndex = RelationGetRelid(OldIndex); /* OID for the index scan */ + OIDOldIndex = RelationGetRelid(OldIndex); /* OID for the index scan */ heap_close(OldHeap); index_close(OldIndex); diff --git a/src/backend/commands/command.c b/src/backend/commands/command.c index 5fdc9fd0c7..47f6e8ae3c 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.31 1998/09/01 03:21:53 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/Attic/command.c,v 1.32 1998/09/01 04:27:46 momjian Exp $ * * NOTES * The PortalExecutorHeapMemory crap needs to be eliminated @@ -422,16 +422,16 @@ PerformAddAttribute(char *relationName, int attnelems; tup = SearchSysCacheTuple(ATTNAME, - ObjectIdGetDatum(reltup->t_oid), - PointerGetDatum(colDef->colname), - 0, 0); + ObjectIdGetDatum(reltup->t_oid), + PointerGetDatum(colDef->colname), + 0, 0); if (HeapTupleIsValid(tup)) { heap_close(attrdesc); heap_close(rel); elog(ERROR, "PerformAddAttribute: attribute \"%s\" already exists in class \"%s\"", - colDef->colname, relationName); + colDef->colname, relationName); } /* diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c index f13a0ece82..2f0b6d2833 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.58 1998/09/01 03:21:55 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/copy.c,v 1.59 1998/09/01 04:27:47 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -52,8 +52,7 @@ static Oid GetOutputFunction(Oid type); static Oid GetTypeElement(Oid type); static Oid GetInputFunction(Oid type); static Oid IsTypeByVal(Oid type); -static void -GetIndexRelations(Oid main_relation_oid, +static void GetIndexRelations(Oid main_relation_oid, int *n_indices, Relation **index_rels); @@ -108,17 +107,17 @@ DoCopy(char *relname, bool binary, bool oids, bool from, bool pipe, the class. ----------------------------------------------------------------------------*/ - static FILE *fp; /* static for cleanup */ - static bool file_opened = false; /* static for cleanup */ + static FILE *fp; /* static for cleanup */ + static bool file_opened = false; /* static for cleanup */ Relation rel; extern char *UserName; /* defined in global.c */ const AclMode required_access = from ? ACL_WR : ACL_RD; int result; /* - * Close previous file opened for COPY but failed with elog(). - * There should be a better way, but would not be modular. - * Prevents file descriptor leak. bjm 1998/08/29 + * Close previous file opened for COPY but failed with elog(). There + * should be a better way, but would not be modular. Prevents file + * descriptor leak. bjm 1998/08/29 */ if (file_opened) FreeFile(fp); @@ -449,7 +448,7 @@ 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])), + ObjectIdGetDatum(RelationGetRelid(index_rels[i])), 0, 0, 0); Assert(pgIndexTup); pgIndexP[i] = (Form_pg_index) GETSTRUCT(pgIndexTup); @@ -500,7 +499,7 @@ CopyFrom(Relation rel, bool binary, bool oids, FILE *fp, char *delim) /* SetSlotShouldFree(slot, false); */ slot->ttc_buffer = (Buffer) NULL; slot->ttc_shouldFree = false; -#endif /* OMIT_PARTIAL_INDEX */ +#endif /* OMIT_PARTIAL_INDEX */ } } else @@ -766,7 +765,7 @@ CopyFrom(Relation rel, bool binary, bool oids, FILE *fp, char *delim) /* SetSlotContents(slot, tuple); */ if (ExecQual((List *) indexPred[i], econtext) == false) continue; -#endif /* OMIT_PARTIAL_INDEX */ +#endif /* OMIT_PARTIAL_INDEX */ } FormIndexDatum(indexNatts[i], (AttrNumber *) &(pgIndexP[i]->indkey[0]), @@ -1022,11 +1021,13 @@ CopyReadAttribute(FILE *fp, bool *isnull, char *delim) char c; int done = 0; int i = 0; + #ifdef MULTIBYTE - int mblen; - int encoding; - unsigned char s[2]; - int j; + int mblen; + int encoding; + unsigned char s[2]; + int j; + #endif #ifdef MULTIBYTE @@ -1136,22 +1137,23 @@ CopyReadAttribute(FILE *fp, bool *isnull, char *delim) if (!done) attribute[i++] = c; #ifdef MULTIBYTE - s[0] = c; - mblen = pg_encoding_mblen(encoding, s); - mblen--; - for(j=0;j<mblen;j++) { - c = getc(fp); - if (feof(fp)) - return NULL; - attribute[i++] = c; - } + s[0] = c; + mblen = pg_encoding_mblen(encoding, s); + mblen--; + for (j = 0; j < mblen; j++) + { + c = getc(fp); + if (feof(fp)) + return NULL; + attribute[i++] = c; + } #endif if (i == EXT_ATTLEN - 1) elog(ERROR, "CopyReadAttribute - attribute length too long. line: %d", lineno); } attribute[i] = '\0'; #ifdef MULTIBYTE - return(pg_client_to_server((unsigned char*)attribute, strlen(attribute))); + return (pg_client_to_server((unsigned char *) attribute, strlen(attribute))); #else return &attribute[0]; #endif @@ -1160,13 +1162,14 @@ CopyReadAttribute(FILE *fp, bool *isnull, char *delim) static void CopyAttributeOut(FILE *fp, char *server_string, char *delim, int is_array) { - char *string; + char *string; char c; #ifdef MULTIBYTE - int mblen; - int encoding; - int i; + int mblen; + int encoding; + int i; + #endif #ifdef MULTIBYTE @@ -1178,7 +1181,7 @@ CopyAttributeOut(FILE *fp, char *server_string, char *delim, int is_array) #ifdef MULTIBYTE for (; (mblen = pg_encoding_mblen(encoding, string)) && - ((c = *string) != '\0'); string += mblen) + ((c = *string) != '\0'); string += mblen) #else for (; (c = *string) != '\0'; string++) #endif @@ -1204,9 +1207,8 @@ CopyAttributeOut(FILE *fp, char *server_string, char *delim, int is_array) } } #ifdef MULTIBYTE - for (i=0;i<mblen;i++) { - fputc(*(string+i), fp); - } + for (i = 0; i < mblen; i++) + fputc(*(string + i), fp); #else fputc(*string, fp); #endif diff --git a/src/backend/commands/creatinh.c b/src/backend/commands/creatinh.c index 0286ab4659..ae4495655d 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.33 1998/09/01 03:21:56 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/Attic/creatinh.c,v 1.34 1998/09/01 04:27:49 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -33,8 +33,7 @@ * ---------------- */ -static int -checkAttrExists(char *attributeName, +static int checkAttrExists(char *attributeName, char *attributeType, List *schema); static List *MergeAttributes(List *schema, List *supers, List **supconstr); static void StoreCatalogInheritance(Oid relationId, List *supers); @@ -404,7 +403,7 @@ StoreCatalogInheritance(Oid relationId, List *supers) char nullarr[Natts_pg_inherits]; tuple = SearchSysCacheTuple(RELNAME, - PointerGetDatum(strVal(lfirst(entry))), + PointerGetDatum(strVal(lfirst(entry))), 0, 0, 0); AssertArg(HeapTupleIsValid(tuple)); diff --git a/src/backend/commands/dbcommands.c b/src/backend/commands/dbcommands.c index 3954eb78de..5ae406b905 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.23 1998/09/01 03:21:57 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/dbcommands.c,v 1.24 1998/09/01 04:27:51 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -36,8 +36,7 @@ /* non-export function prototypes */ -static void -check_permissions(char *command, char *dbpath, char *dbname, +static void check_permissions(char *command, char *dbpath, char *dbname, Oid *dbIdP, int4 *userIdP); static HeapTuple get_pg_dbtup(char *command, char *dbname, Relation dbrel); static void stop_vacuum(char *dbpath, char *dbname); @@ -46,7 +45,7 @@ void createdb(char *dbname, char *dbpath, int encoding) { Oid db_id; - int4 user_id; + int4 user_id; char buf[512]; char *lp, loc[512]; @@ -100,7 +99,7 @@ createdb(char *dbname, char *dbpath, int encoding) void destroydb(char *dbname) { - int4 user_id; + int4 user_id; Oid db_id; char *path; char dbpath[MAXPGPATH + 1]; @@ -203,8 +202,8 @@ check_permissions(char *command, userName = GetPgUserName(); utup = SearchSysCacheTuple(USENAME, - PointerGetDatum(userName), - 0, 0, 0); + PointerGetDatum(userName), + 0, 0, 0); *userIdP = ((Form_pg_shadow) GETSTRUCT(utup))->usesysid; use_super = ((Form_pg_shadow) GETSTRUCT(utup))->usesuper; use_createdb = ((Form_pg_shadow) GETSTRUCT(utup))->usecreatedb; @@ -249,9 +248,9 @@ check_permissions(char *command, if (dbfound) { dbowner = (int4) heap_getattr(dbtup, - Anum_pg_database_datdba, - RelationGetDescr(dbrel), - (char *) NULL); + Anum_pg_database_datdba, + RelationGetDescr(dbrel), + (char *) NULL); *dbIdP = dbtup->t_oid; dbtext = (text *) heap_getattr(dbtup, Anum_pg_database_datpath, diff --git a/src/backend/commands/defind.c b/src/backend/commands/defind.c index 342a99b127..ab6e26f1e1 100644 --- a/src/backend/commands/defind.c +++ b/src/backend/commands/defind.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/Attic/defind.c,v 1.25 1998/09/01 03:21:58 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/Attic/defind.c,v 1.26 1998/09/01 04:27:52 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -41,16 +41,13 @@ /* non-export function prototypes */ static void CheckPredicate(List *predList, List *rangeTable, Oid baseRelOid); -static void -CheckPredExpr(Node *predicate, List *rangeTable, +static void CheckPredExpr(Node *predicate, List *rangeTable, Oid baseRelOid); static void CheckPredClause(Expr *predicate, List *rangeTable, Oid baseRelOid); -static void -FuncIndexArgs(IndexElem *funcIndex, AttrNumber *attNumP, +static void FuncIndexArgs(IndexElem *funcIndex, AttrNumber *attNumP, Oid *argTypes, Oid *opOidP, Oid relId); -static void -NormIndexAttrs(List *attList, AttrNumber *attNumP, +static void NormIndexAttrs(List *attList, AttrNumber *attNumP, Oid *opOidP, Oid relId); static char *GetDefaultOpClass(Oid atttypid); @@ -197,7 +194,7 @@ DefineIndex(char *heapRelationName, else { attributeNumberA = (AttrNumber *) palloc(numberOfAttributes * - sizeof attributeNumberA[0]); + sizeof attributeNumberA[0]); classObjectId = (Oid *) palloc(numberOfAttributes * sizeof classObjectId[0]); @@ -468,7 +465,8 @@ NormIndexAttrs(List *attList, /* list of IndexElem's */ Oid relId) { List *rest; - HeapTuple atttuple, tuple; + HeapTuple atttuple, + tuple; /* * process attributeList @@ -485,9 +483,9 @@ NormIndexAttrs(List *attList, /* list of IndexElem's */ elog(ERROR, "missing attribute for define index"); atttuple = SearchSysCacheTupleCopy(ATTNAME, - ObjectIdGetDatum(relId), - PointerGetDatum(attribute->name), - 0, 0); + ObjectIdGetDatum(relId), + PointerGetDatum(attribute->name), + 0, 0); if (!HeapTupleIsValid(atttuple)) { elog(ERROR, @@ -502,8 +500,8 @@ NormIndexAttrs(List *attList, /* list of IndexElem's */ if (attribute->typename == NULL) { tuple = SearchSysCacheTuple(TYPOID, - ObjectIdGetDatum(attform->atttypid), - 0, 0, 0); + ObjectIdGetDatum(attform->atttypid), + 0, 0, 0); if (!HeapTupleIsValid(tuple)) elog(ERROR, "create index: type for attribute '%s' undefined", attribute->name); diff --git a/src/backend/commands/explain.c b/src/backend/commands/explain.c index 3178dd2d8a..63534050f1 100644 --- a/src/backend/commands/explain.c +++ b/src/backend/commands/explain.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/explain.c,v 1.23 1998/08/04 16:43:54 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/explain.c,v 1.24 1998/09/01 04:27:53 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -83,7 +83,7 @@ ExplainQuery(Query *query, bool verbose, CommandDest dest) if (es->printNodes) s = nodeToString(plan); - + if (es->printCost) { s2 = Explain_PlanToString(plan, es); @@ -107,7 +107,7 @@ ExplainQuery(Query *query, bool verbose, CommandDest dest) len -= ELOG_MAXLEN - 64; } if (es->printNodes) - pprint(plan); /* display in postmaster log file */ + pprint(plan); /* display in postmaster log file */ pfree(es); } @@ -123,7 +123,7 @@ ExplainQuery(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; char buf[1000]; @@ -280,11 +280,11 @@ explain_outNode(StringInfo str, Plan *plan, int indent, ExplainState *es) List *saved_rtable = es->rtable; List *lst; int whichplan = 0; - Append *appendplan = (Append *)plan; + Append *appendplan = (Append *) plan; foreach(lst, appendplan->appendplans) { - Plan *subnode = (Plan *)lfirst(lst); + Plan *subnode = (Plan *) lfirst(lst); if (appendplan->inheritrelid > 0) { diff --git a/src/backend/commands/proclang.c b/src/backend/commands/proclang.c index f3c4d4b6e1..86f24d9678 100644 --- a/src/backend/commands/proclang.c +++ b/src/backend/commands/proclang.c @@ -162,8 +162,8 @@ DropProceduralLanguage(DropPLangStmt *stmt) case_translate_language_name(stmt->plname, languageName); langTup = SearchSysCacheTupleCopy(LANNAME, - PointerGetDatum(languageName), - 0, 0, 0); + PointerGetDatum(languageName), + 0, 0, 0); if (!HeapTupleIsValid(langTup)) elog(ERROR, "Language %s doesn't exist", languageName); diff --git a/src/backend/commands/recipe.c b/src/backend/commands/recipe.c index 4d06c57feb..f8b7ce15df 100644 --- a/src/backend/commands/recipe.c +++ b/src/backend/commands/recipe.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/Attic/recipe.c,v 1.23 1998/09/01 03:22:01 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/Attic/recipe.c,v 1.24 1998/09/01 04:27:56 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -64,39 +64,31 @@ typedef struct _teeInfo QueryTreeList *appendQlist(QueryTreeList *q1, QueryTreeList *q2); void OffsetVarAttno(Node *node, int varno, int offset); -static void -appendTeeQuery(TeeInfo * teeInfo, +static void appendTeeQuery(TeeInfo * teeInfo, QueryTreeList *q, char *teeNodeName); -static Plan * -replaceTeeScans(Plan *plan, +static Plan *replaceTeeScans(Plan *plan, Query *parsetree, TeeInfo * teeInfo); -static void -replaceSeqScan(Plan *plan, +static void replaceSeqScan(Plan *plan, Plan *parent, int rt_ind, Plan *tplan); -static void -tg_rewriteQuery(TgRecipe * r, TgNode * n, +static void tg_rewriteQuery(TgRecipe * r, TgNode * n, QueryTreeList *q, QueryTreeList *inputQlist); -static Node * -tg_replaceNumberedParam(Node *expression, +static Node *tg_replaceNumberedParam(Node *expression, int pnum, int rt_ind, char *teeRelName); -static Node * -tg_rewriteParamsInExpr(Node *expression, +static Node *tg_rewriteParamsInExpr(Node *expression, QueryTreeList *inputQlist); -static QueryTreeList * -tg_parseSubQuery(TgRecipe * r, +static QueryTreeList *tg_parseSubQuery(TgRecipe * r, TgNode * n, TeeInfo * teeInfo); -static QueryTreeList * -tg_parseTeeNode(TgRecipe * r, +static QueryTreeList *tg_parseTeeNode(TgRecipe * r, TgNode * n, int i, QueryTreeList *qList, @@ -193,7 +185,7 @@ beginRecipe(RecipeStmt *stmt) #ifdef DEBUG_RECIPE elog(NOTICE, "beginRecipe: eyes[%d] = %s\n", i, e->nodeName); -#endif /* DEBUG_RECIPE */ +#endif /* DEBUG_RECIPE */ qList = tg_parseSubQuery(r, e->inNodes->val[0], teeInfo); @@ -851,7 +843,7 @@ tg_parseSubQuery(TgRecipe * r, TgNode * n, TeeInfo * teeInfo) #ifdef DEBUG_RECIPE elog(NOTICE, "calling parser with %s", elem->src); -#endif /* DEBUG_RECIPE */ +#endif /* DEBUG_RECIPE */ parameterCount = getParamTypes(elem, typev); @@ -894,7 +886,7 @@ tg_parseSubQuery(TgRecipe * r, TgNode * n, TeeInfo * teeInfo) #ifdef DEBUG_RECIPE elog(NOTICE, "calling parser with %s", newquery); -#endif /* DEBUG_RECIPE */ +#endif /* DEBUG_RECIPE */ qList = parser(newquery, typev, parameterCount); if (qList->len > 1) @@ -1032,8 +1024,8 @@ tg_parseSubQuery(TgRecipe * r, TgNode * n, TeeInfo * teeInfo) tupdesc = rel->rd_att; relid = heap_create_with_catalog( - child->nodeElem->outTypes->val[0], - tupdesc, RELKIND_RELATION); + child->nodeElem->outTypes->val[0], + tupdesc, RELKIND_RELATION); } else { @@ -1056,8 +1048,8 @@ tg_parseSubQuery(TgRecipe * r, TgNode * n, TeeInfo * teeInfo) else { relid = heap_create_with_catalog( - child->nodeElem->outTypes->val[0], - tupdesc, RELKIND_RELATION); + child->nodeElem->outTypes->val[0], + tupdesc, RELKIND_RELATION); } } } @@ -1338,4 +1330,4 @@ replaceTeeScans(Plan *plan, Query *parsetree, TeeInfo * teeInfo) -#endif /* TIOGA */ +#endif /* TIOGA */ diff --git a/src/backend/commands/remove.c b/src/backend/commands/remove.c index aa828ec4d8..cc68739f53 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.28 1998/09/01 03:22:02 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/Attic/remove.c,v 1.29 1998/09/01 04:27:57 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -57,7 +57,7 @@ RemoveOperator(char *operatorName, /* operator name */ bool defined; char *userName; char oprtype; - + if (typeName1) { typeId1 = TypeGet(typeName1, &defined); @@ -86,11 +86,11 @@ RemoveOperator(char *operatorName, /* operator name */ oprtype = 'r'; tup = SearchSysCacheTupleCopy(OPRNAME, - PointerGetDatum(operatorName), - ObjectIdGetDatum(typeId1), - ObjectIdGetDatum(typeId2), - CharGetDatum(oprtype)); - + PointerGetDatum(operatorName), + ObjectIdGetDatum(typeId1), + ObjectIdGetDatum(typeId2), + CharGetDatum(oprtype)); + relation = heap_openr(OperatorRelationName); if (HeapTupleIsValid(tup)) { @@ -150,7 +150,7 @@ SingleOpOperatorRemove(Oid typeOid) int i; ScanKeyEntryInitialize(&key[0], - 0, 0, F_OIDEQ, (Datum) typeOid); + 0, 0, F_OIDEQ, (Datum) typeOid); rel = heap_openr(OperatorRelationName); for (i = 0; i < 3; ++i) { @@ -192,7 +192,7 @@ AttributeAndRelationRemove(Oid typeOid) */ ScanKeyEntryInitialize(&key[0], - 0, 3, F_OIDEQ, (Datum) typeOid); + 0, 3, F_OIDEQ, (Datum) typeOid); oidptr = (struct oidlist *) palloc(sizeof(*oidptr)); oidptr->next = NULL; @@ -232,7 +232,7 @@ AttributeAndRelationRemove(Oid typeOid) heap_close(rel); } -#endif /* NOTYET */ +#endif /* NOTYET */ /* * TypeRemove @@ -257,15 +257,15 @@ RemoveType(char *typeName) /* type name to be removed */ relation = heap_openr(TypeRelationName); tup = SearchSysCacheTuple(TYPNAME, - PointerGetDatum(typeName), - 0, 0, 0); + PointerGetDatum(typeName), + 0, 0, 0); if (!HeapTupleIsValid(tup)) { heap_close(relation); elog(ERROR, "RemoveType: type '%s' does not exist", typeName); } - + relation = heap_openr(TypeRelationName); typeOid = tup->t_oid; heap_delete(relation, &tup->t_ctid); @@ -273,8 +273,8 @@ RemoveType(char *typeName) /* type name to be removed */ /* Now, Delete the "array of" that type */ shadow_type = makeArrayTypeName(typeName); tup = SearchSysCacheTuple(TYPNAME, - PointerGetDatum(shadow_type), - 0, 0, 0); + PointerGetDatum(shadow_type), + 0, 0, 0); if (!HeapTupleIsValid(tup)) { heap_close(relation); @@ -308,7 +308,7 @@ RemoveFunction(char *functionName, /* function name to be removed */ char *typename; int i; - + MemSet(argList, 0, 8 * sizeof(Oid)); for (i = 0; i < nargs; i++) { @@ -340,10 +340,10 @@ RemoveFunction(char *functionName, /* function name to be removed */ relation = heap_openr(ProcedureRelationName); tup = SearchSysCacheTuple(PRONAME, - PointerGetDatum(functionName), - Int32GetDatum(nargs), - PointerGetDatum(argList), - 0); + PointerGetDatum(functionName), + Int32GetDatum(nargs), + PointerGetDatum(argList), + 0); if (!HeapTupleIsValid(tup)) { @@ -353,8 +353,8 @@ RemoveFunction(char *functionName, /* function name to be removed */ if ((((Form_pg_proc) GETSTRUCT(tup))->prolang) == INTERNALlanguageId) { - heap_close(relation); - elog(ERROR, "RemoveFunction: function \"%s\" is built-in",functionName); + heap_close(relation); + elog(ERROR, "RemoveFunction: function \"%s\" is built-in", functionName); } heap_delete(relation, &tup->t_ctid); @@ -410,9 +410,9 @@ RemoveAggregate(char *aggName, char *aggType) relation = heap_openr(AggregateRelationName); tup = SearchSysCacheTuple(AGGNAME, - PointerGetDatum(aggName), - ObjectIdGetDatum(basetypeID), - 0, 0); + PointerGetDatum(aggName), + ObjectIdGetDatum(basetypeID), + 0, 0); if (!HeapTupleIsValid(tup)) { diff --git a/src/backend/commands/rename.c b/src/backend/commands/rename.c index 25243224af..31f193d053 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.16 1998/09/01 03:22:04 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/Attic/rename.c,v 1.17 1998/09/01 04:27:59 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -36,7 +36,7 @@ #include <optimizer/prep.h> /* for find_all_inheritors */ #ifndef NO_SECURITY #include <utils/acl.h> -#endif /* !NO_SECURITY */ +#endif /* !NO_SECURITY */ #ifndef HAVE_MEMMOVE #include <regex/utils.h> #else @@ -73,7 +73,7 @@ renameatt(char *relname, newatttup; Relation irelations[Num_pg_attr_indices]; Oid relid; - + /* * permissions checking. this would normally be done in utility.c, * but this particular routine is recursive. @@ -111,12 +111,10 @@ renameatt(char *relname, 0, 0, 0); if (!HeapTupleIsValid(reltup)) - { elog(ERROR, "renameatt: unknown relation: \"%s\"", relname); - } myrelid = reltup->t_oid; - + /* this routine is actually in the planner */ children = find_all_inheritors(lconsi(myrelid, NIL), NIL); @@ -127,7 +125,7 @@ renameatt(char *relname, */ foreach(child, children) { - char childname[NAMEDATALEN]; + char childname[NAMEDATALEN]; childrelid = lfirsti(child); if (childrelid == myrelid) @@ -142,10 +140,10 @@ renameatt(char *relname, } /* make copy of cache value, could disappear in call */ StrNCpy(childname, - ((Form_pg_class) GETSTRUCT(reltup))->relname.data, - NAMEDATALEN); + ((Form_pg_class) GETSTRUCT(reltup))->relname.data, + NAMEDATALEN); /* no more recursion! */ - renameatt(childname, oldattname, newattname, userName, 0); + renameatt(childname, oldattname, newattname, userName, 0); } } @@ -158,9 +156,9 @@ renameatt(char *relname, relid = reltup->t_oid; oldatttup = SearchSysCacheTupleCopy(ATTNAME, - ObjectIdGetDatum(relid), - PointerGetDatum(oldattname), - 0, 0); + ObjectIdGetDatum(relid), + PointerGetDatum(oldattname), + 0, 0); if (!HeapTupleIsValid(oldatttup)) elog(ERROR, "renameatt: attribute \"%s\" nonexistent", oldattname); @@ -168,9 +166,9 @@ renameatt(char *relname, elog(ERROR, "renameatt: system attribute \"%s\" not renamed", oldattname); newatttup = SearchSysCacheTuple(ATTNAME, - ObjectIdGetDatum(relid), - PointerGetDatum(newattname), - 0, 0); + ObjectIdGetDatum(relid), + PointerGetDatum(newattname), + 0, 0); /* should not already exist */ if (HeapTupleIsValid(newatttup)) { @@ -179,7 +177,7 @@ renameatt(char *relname, } StrNCpy((((Form_pg_attribute) (GETSTRUCT(oldatttup)))->attname.data), - newattname, NAMEDATALEN); + newattname, NAMEDATALEN); attrelation = heap_openr(AttributeRelationName); heap_replace(attrelation, &oldatttup->t_ctid, oldatttup); @@ -212,13 +210,13 @@ renameatt(char *relname, void renamerel(char *oldrelname, char *newrelname) { - Relation relrelation; /* for RELATION relation */ + Relation relrelation; /* for RELATION relation */ HeapTuple oldreltup, newreltup; char oldpath[MAXPGPATH], newpath[MAXPGPATH]; Relation irelations[Num_pg_class_indices]; - + if (IsSystemRelationName(oldrelname)) elog(ERROR, "renamerel: system relation \"%s\" not renamed", oldrelname); @@ -228,14 +226,14 @@ renamerel(char *oldrelname, char *newrelname) newrelname); oldreltup = SearchSysCacheTupleCopy(RELNAME, - PointerGetDatum(oldrelname), - 0, 0, 0); + PointerGetDatum(oldrelname), + 0, 0, 0); if (!HeapTupleIsValid(oldreltup)) elog(ERROR, "renamerel: relation \"%s\" does not exist", oldrelname); newreltup = SearchSysCacheTuple(RELNAME, - PointerGetDatum(newrelname), - 0, 0, 0); + PointerGetDatum(newrelname), + 0, 0, 0); if (HeapTupleIsValid(newreltup)) elog(ERROR, "renamerel: relation \"%s\" exists", newrelname); @@ -246,7 +244,7 @@ renamerel(char *oldrelname, char *newrelname) elog(ERROR, "renamerel: unable to rename file: %s", oldpath); StrNCpy((((Form_pg_class) GETSTRUCT(oldreltup))->relname.data), - newrelname, NAMEDATALEN); + newrelname, NAMEDATALEN); /* insert fixed rel tuple */ relrelation = heap_openr(RelationRelationName); diff --git a/src/backend/commands/sequence.c b/src/backend/commands/sequence.c index e73981e813..7d9bd1d660 100644 --- a/src/backend/commands/sequence.c +++ b/src/backend/commands/sequence.c @@ -316,9 +316,9 @@ currval(struct varlena * seqin) int4 setval(struct varlena * seqin, int4 next) { - char *seqname = textout(seqin); + char *seqname = textout(seqin); SeqTable elm; - Buffer buf; + Buffer buf; Form_pg_sequence seq; ItemPointerData iptr; @@ -329,17 +329,20 @@ setval(struct varlena * seqin, int4 next) #endif /* open and WIntentLock sequence */ - elm = init_sequence ("setval", seqname); - seq = read_info ("setval", elm, &buf); /* lock page and read tuple */ + elm = init_sequence("setval", seqname); + seq = read_info("setval", elm, &buf); /* lock page and read + * tuple */ - if ( seq->cache_value != 1 ) { - elog (ERROR, "%s.setval: can't set value of sequence %s, cache != 1", - seqname, seqname); + if (seq->cache_value != 1) + { + elog(ERROR, "%s.setval: can't set value of sequence %s, cache != 1", + seqname, seqname); } - if ((next < seq->min_value) || (next > seq->max_value)) { - elog (ERROR, "%s.setval: value %d is of of bounds (%d,%d)", - seqname, next, seq->min_value, seq->max_value); + if ((next < seq->min_value) || (next > seq->max_value)) + { + elog(ERROR, "%s.setval: value %d is of of bounds (%d,%d)", + seqname, next, seq->min_value, seq->max_value); } /* save info in local cache */ @@ -350,11 +353,11 @@ setval(struct varlena * seqin, int4 next) seq->last_value = next; /* last fetched number */ seq->is_called = 't'; - if ( WriteBuffer (buf) == STATUS_ERROR ) - elog (ERROR, "%s.settval: WriteBuffer failed", seqname); + if (WriteBuffer(buf) == STATUS_ERROR) + elog(ERROR, "%s.settval: WriteBuffer failed", seqname); ItemPointerSet(&iptr, 0, FirstOffsetNumber); - RelationUnsetSingleWLockPage (elm->rel, &iptr); + RelationUnsetSingleWLockPage(elm->rel, &iptr); return next; } diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c index f26860cfb7..9636466bff 100644 --- a/src/backend/commands/trigger.c +++ b/src/backend/commands/trigger.c @@ -40,8 +40,7 @@ void RelationBuildTriggers(Relation relation); void FreeTriggerDesc(Relation relation); static void DescribeTrigger(TriggerDesc *trigdesc, Trigger *trigger); -static HeapTuple -GetTupleForTrigger(Relation relation, ItemPointer tid, +static HeapTuple GetTupleForTrigger(Relation relation, ItemPointer tid, bool before); extern GlobalMemory CacheCxt; @@ -220,8 +219,8 @@ CreateTrigger(CreateTrigStmt *stmt) /* update pg_class */ tuple = SearchSysCacheTupleCopy(RELNAME, - PointerGetDatum(stmt->relname), - 0, 0, 0); + PointerGetDatum(stmt->relname), + 0, 0, 0); if (!HeapTupleIsValid(tuple)) elog(ERROR, "CreateTrigger: relation %s not found in pg_class", stmt->relname); @@ -258,7 +257,7 @@ DropTrigger(DropTrigStmt *stmt) MemoryContext oldcxt; int found = 0; int tgfound = 0; - + #ifndef NO_SECURITY if (!pg_ownercheck(GetPgUserName(), stmt->relname, RELNAME)) elog(ERROR, "%s: %s", stmt->relname, aclcheck_error_strings[ACLCHECK_NOT_OWNER]); @@ -298,8 +297,8 @@ DropTrigger(DropTrigStmt *stmt) heap_close(tgrel); tuple = SearchSysCacheTupleCopy(RELNAME, - PointerGetDatum(stmt->relname), - 0, 0, 0); + PointerGetDatum(stmt->relname), + 0, 0, 0); if (!HeapTupleIsValid(tuple)) elog(ERROR, "DropTrigger: relation %s not found in pg_class", stmt->relname); diff --git a/src/backend/commands/user.c b/src/backend/commands/user.c index a61bfd5f2e..e1aaa4cb22 100644 --- a/src/backend/commands/user.c +++ b/src/backend/commands/user.c @@ -263,7 +263,7 @@ AlterUser(AlterUserStmt *stmt) { RelationUnsetLockForWrite(pg_shadow_rel); heap_close(pg_shadow_rel); - UserAbortTransactionBlock(); /* needed? */ + UserAbortTransactionBlock(); /* needed? */ elog(ERROR, "alterUser: user \"%s\" does not exist", stmt->user); return; } @@ -430,8 +430,8 @@ RemoveUser(char *user) * tables, views, etc owned by the user. * * The second option would be to create a means of deleting tables, view, - * etc. owned by the user from other databases. pg_shadow is global and - * so this must be done at some point. + * etc. owned by the user from other databases. pg_shadow is global + * and so this must be done at some point. * * Let us not forget that the user should be removed from the pg_groups * also. @@ -466,8 +466,8 @@ CheckPgUserAclNotNull() HeapTuple htup; htup = SearchSysCacheTuple(RELNAME, - PointerGetDatum(ShadowRelationName), - 0, 0, 0); + PointerGetDatum(ShadowRelationName), + 0, 0, 0); if (!HeapTupleIsValid(htup)) { elog(ERROR, "IsPgUserAclNull: class \"%s\" not found", diff --git a/src/backend/commands/vacuum.c b/src/backend/commands/vacuum.c index 1d522795b2..9898f58188 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.79 1998/09/01 03:22:08 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.80 1998/09/01 04:28:05 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -288,7 +288,7 @@ vc_getrels(NameData *VacRelP) else { ScanKeyEntryInitialize(&key, 0x0, Anum_pg_class_relkind, - F_CHAREQ, CharGetDatum('r')); + F_CHAREQ, CharGetDatum('r')); } portalmem = PortalGetVariableMemory(vc_portal); @@ -377,16 +377,16 @@ vc_vacone(Oid relid, bool analyze, List *va_cols) HeapTuple tuple, typetuple; Relation onerel; - VPageListData vacuum_pages; /* List of pages to vacuum and/or clean + VPageListData vacuum_pages; /* List of pages to vacuum and/or clean * indices */ - VPageListData fraged_pages; /* List of pages with space enough for + VPageListData fraged_pages; /* List of pages with space enough for * re-using */ VPageDescr *vpp; Relation *Irel; int32 nindices, i; VRelStats *vacrelstats; - + StartTransactionCommand(); rel = heap_openr(RelationRelationName); @@ -397,8 +397,8 @@ vc_vacone(Oid relid, bool analyze, List *va_cols) * last time we saw it, we don't need to vacuum it. */ tuple = SearchSysCacheTuple(RELOID, - ObjectIdGetDatum(relid), - 0, 0, 0); + ObjectIdGetDatum(relid), + 0, 0, 0); if (!HeapTupleIsValid(tuple)) { heap_close(rel); @@ -499,8 +499,8 @@ vc_vacone(Oid relid, bool analyze, List *va_cols) stats->f_cmpgt.fn_addr = NULL; typetuple = SearchSysCacheTuple(TYPOID, - ObjectIdGetDatum(stats->attr->atttypid), - 0, 0, 0); + ObjectIdGetDatum(stats->attr->atttypid), + 0, 0, 0); if (HeapTupleIsValid(typetuple)) stats->outfunc = ((Form_pg_type) GETSTRUCT(typetuple))->typoutput; else @@ -549,13 +549,14 @@ vc_vacone(Oid relid, bool analyze, List *va_cols) } } - if (fraged_pages.vpl_num_pages > 0) /* Try to shrink heap */ + if (fraged_pages.vpl_num_pages > 0) /* Try to shrink heap */ vc_rpfheap(vacrelstats, onerel, &vacuum_pages, &fraged_pages, nindices, Irel); else { if (Irel != (Relation *) NULL) vc_clsindices(nindices, Irel); - if (vacuum_pages.vpl_num_pages > 0)/* Clean pages from vacuum_pages list */ + if (vacuum_pages.vpl_num_pages > 0) /* Clean pages from + * vacuum_pages list */ vc_vacheap(vacrelstats, onerel, &vacuum_pages); } @@ -644,7 +645,7 @@ vc_scanheap(VRelStats *vacrelstats, Relation onerel, vpc->vpd_offsets_used = 0; elog(MESSAGE_LEVEL, "--Relation %s--", relname); - + for (blkno = 0; blkno < nblocks; blkno++) { buf = ReadBuffer(onerel, blkno); @@ -875,8 +876,8 @@ vc_scanheap(VRelStats *vacrelstats, Relation onerel, fraged_pages->vpl_empty_end_pages = empty_end_pages; /* - * Try to make fraged_pages keeping in mind that we can't use free space of - * "empty" end-pages and last page if it reapped. + * Try to make fraged_pages keeping in mind that we can't use free + * space of "empty" end-pages and last page if it reapped. */ if (do_shrinking && vacuum_pages->vpl_num_pages - empty_end_pages > 0) { @@ -1010,9 +1011,9 @@ vc_rpfheap(VRelStats *vacrelstats, Relation onerel, isempty = PageIsEmpty(page); dowrite = false; - if (blkno == last_vacuum_block) /* it's reapped page */ + if (blkno == last_vacuum_block) /* it's reapped page */ { - if (last_vacuum_page->vpd_offsets_free > 0) /* there are dead tuples */ + if (last_vacuum_page->vpd_offsets_free > 0) /* there are dead tuples */ { /* on this page - clean */ Assert(!isempty); vc_vacpage(page, last_vacuum_page); @@ -1025,7 +1026,8 @@ vc_rpfheap(VRelStats *vacrelstats, Relation onerel, /* get prev reapped page from vacuum_pages */ last_vacuum_page = vacuum_pages->vpl_pagedesc[vacuumed_pages - 1]; last_vacuum_block = last_vacuum_page->vpd_blkno; - if (blkno == last_fraged_block) /* this page in fraged_pages too */ + if (blkno == last_fraged_block) /* this page in + * fraged_pages too */ { --num_fraged_pages; Assert(num_fraged_pages > 0); @@ -1080,7 +1082,7 @@ vc_rpfheap(VRelStats *vacrelstats, Relation onerel, Assert(num_fraged_pages > cur_item + 1); memmove(fraged_pages->vpl_pagedesc + cur_item, fraged_pages->vpl_pagedesc + cur_item + 1, - sizeof(VPageDescr *) * (num_fraged_pages - cur_item - 1)); + sizeof(VPageDescr *) * (num_fraged_pages - cur_item - 1)); num_fraged_pages--; Assert(last_fraged_page == fraged_pages->vpl_pagedesc[num_fraged_pages - 1]); } @@ -1121,7 +1123,7 @@ vc_rpfheap(VRelStats *vacrelstats, Relation onerel, elog(ERROR, "\ failed to add item with len = %u to page %u (free space %u, nusd %u, noff %u)", tuple_len, cur_page->vpd_blkno, cur_page->vpd_free, - cur_page->vpd_offsets_used, cur_page->vpd_offsets_free); + cur_page->vpd_offsets_used, cur_page->vpd_offsets_free); } newitemid = PageGetItemId(ToPage, newoff); pfree(newtup); @@ -1145,7 +1147,7 @@ failed to add item with len = %u to page %u (free space %u, nusd %u, noff %u)", for (i = 0, idcur = Idesc; i < nindices; i++, idcur++) { FormIndexDatum(idcur->natts, - (AttrNumber *) &(idcur->tform->indkey[0]), + (AttrNumber *) &(idcur->tform->indkey[0]), newtup, tupdesc, idatum, @@ -1201,8 +1203,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 and set xmin committed - * for inserted tuples + * Clean uncleaned reapped pages from vacuum_pages list and set xmin + * committed for inserted tuples */ checked_moved = 0; for (i = 0, vpp = vacuum_pages->vpl_pagedesc; i < vacuumed_pages; i++, vpp++) @@ -1320,7 +1322,7 @@ Elapsed %u/%u sec.", elog(FATAL, "VACUUM (vc_rpfheap): BlowawayRelationBuffers returned %d", i); blkno = smgrtruncate(DEFAULT_SMGR, onerel, blkno); Assert(blkno >= 0); - vacrelstats->num_pages = blkno; /* set new number of blocks */ + vacrelstats->num_pages = blkno; /* set new number of blocks */ } if (Irel != (Relation *) NULL) /* pfree index' allocations */ @@ -1351,7 +1353,8 @@ vc_vacheap(VRelStats *vacrelstats, Relation onerel, VPageList vacuum_pages) int i; nblocks = vacuum_pages->vpl_num_pages; - nblocks -= vacuum_pages->vpl_empty_end_pages;/* nothing to do with them */ + nblocks -= vacuum_pages->vpl_empty_end_pages; /* nothing to do with + * them */ for (i = 0, vpp = vacuum_pages->vpl_pagedesc; i < nblocks; i++, vpp++) { @@ -1385,7 +1388,8 @@ vc_vacheap(VRelStats *vacrelstats, Relation onerel, VPageList vacuum_pages) nblocks = smgrtruncate(DEFAULT_SMGR, onerel, nblocks); Assert(nblocks >= 0); - vacrelstats->num_pages = nblocks; /* set new number of blocks */ + vacrelstats->num_pages = nblocks; /* set new number of + * blocks */ } } /* vc_vacheap */ @@ -1555,7 +1559,7 @@ vc_tidreapped(ItemPointer itemptr, VPageList vpl) vp = &vpd; vpp = (VPageDescr *) vc_find_eq((char *) (vpl->vpl_pagedesc), - vpl->vpl_num_pages, sizeof(VPageDescr), (char *) &vp, + vpl->vpl_num_pages, sizeof(VPageDescr), (char *) &vp, vc_cmp_blk); if (vpp == (VPageDescr *) NULL) @@ -1570,7 +1574,7 @@ vc_tidreapped(ItemPointer itemptr, VPageList vpl) } voff = (OffsetNumber *) vc_find_eq((char *) (vp->vpd_offsets), - vp->vpd_offsets_free, sizeof(OffsetNumber), (char *) &ioffno, + vp->vpd_offsets_free, sizeof(OffsetNumber), (char *) &ioffno, vc_cmp_offno); if (voff == (OffsetNumber *) NULL) @@ -1746,16 +1750,16 @@ vc_updstats(Oid relid, int num_pages, int num_tuples, bool hasindex, VRelStats * ScanKeyData askey; Form_pg_attribute attp; Buffer buffer; - + /* * update number of tuples and number of pages in pg_class */ rtup = SearchSysCacheTuple(RELOID, - ObjectIdGetDatum(relid), - 0, 0, 0); + ObjectIdGetDatum(relid), + 0, 0, 0); if (!HeapTupleIsValid(rtup)) elog(ERROR, "pg_class entry for relid %d vanished during vacuuming", - relid); + relid); rd = heap_openr(RelationRelationName); @@ -2207,16 +2211,20 @@ vc_mkindesc(Relation onerel, int nindices, Relation *Irel, IndDesc **Idesc) AttrNumber *attnumP; int natts; int i; - + *Idesc = (IndDesc *) palloc(nindices * sizeof(IndDesc)); for (i = 0, idcur = *Idesc; i < nindices; i++, idcur++) { cachetuple = SearchSysCacheTupleCopy(INDEXRELID, - ObjectIdGetDatum(RelationGetRelid(Irel[i])), - 0, 0, 0); + ObjectIdGetDatum(RelationGetRelid(Irel[i])), + 0, 0, 0); Assert(cachetuple); - /* we never free the copy we make, because Idesc needs it for later */ + + /* + * we never free the copy we make, because Idesc needs it for + * later + */ idcur->tform = (Form_pg_index) GETSTRUCT(cachetuple); for (attnumP = &(idcur->tform->indkey[0]), natts = 0; *attnumP != InvalidAttrNumber && natts != INDEX_MAX_KEYS; @@ -2247,7 +2255,8 @@ vc_enough_space(VPageDescr vpd, Size len) if (len > vpd->vpd_free) return false; - if (vpd->vpd_offsets_used < vpd->vpd_offsets_free) /* there are free itemid(s) */ + if (vpd->vpd_offsets_used < vpd->vpd_offsets_free) /* there are free + * itemid(s) */ return true; /* and len <= free_space */ /* ok. noff_usd >= noff_free and so we'll have to allocate new itemid */ diff --git a/src/backend/commands/variable.c b/src/backend/commands/variable.c index e01967f43b..2c813dcd59 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.11 1998/09/01 03:22:10 momjian Exp $ + * $Id: variable.c,v 1.12 1998/09/01 04:28:07 momjian Exp $ * */ @@ -554,7 +554,7 @@ struct VariableParsers { "client_encoding", parse_client_encoding, show_client_encoding, reset_client_encoding }, - { + { "server_encoding", parse_server_encoding, show_server_encoding, reset_server_encoding }, #endif diff --git a/src/backend/commands/view.c b/src/backend/commands/view.c index 0da160d5e8..cf81e8be66 100644 --- a/src/backend/commands/view.c +++ b/src/backend/commands/view.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/view.c,v 1.24 1998/08/06 05:12:30 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/view.c,v 1.25 1998/09/01 04:28:10 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -223,7 +223,7 @@ UpdateRangeTableOfViewParse(char *viewName, Query *viewParse) OffsetVarNodes(viewParse->qual, 2); OffsetVarNodes(viewParse->havingQual, 2); - + /* * find the old range table... diff --git a/src/backend/executor/execAmi.c b/src/backend/executor/execAmi.c index 210d2d5072..e8c9bec312 100644 --- a/src/backend/executor/execAmi.c +++ b/src/backend/executor/execAmi.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/executor/execAmi.c,v 1.24 1998/07/27 19:37:54 vadim Exp $ + * $Header: /cvsroot/pgsql/src/backend/executor/execAmi.c,v 1.25 1998/09/01 04:28:13 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -54,8 +54,7 @@ #include "access/heapam.h" #include "catalog/heap.h" -static Pointer -ExecBeginScan(Relation relation, int nkeys, ScanKey skeys, +static Pointer ExecBeginScan(Relation relation, int nkeys, ScanKey skeys, bool isindex, ScanDirection dir, Snapshot snapshot); static Relation ExecOpenR(Oid relationOid, bool isindex); diff --git a/src/backend/executor/execFlatten.c b/src/backend/executor/execFlatten.c index 24b524fbf5..729232d9d4 100644 --- a/src/backend/executor/execFlatten.c +++ b/src/backend/executor/execFlatten.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/executor/Attic/execFlatten.c,v 1.6 1998/09/01 03:22:11 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/executor/Attic/execFlatten.c,v 1.7 1998/09/01 04:28:14 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -33,8 +33,7 @@ #include "executor/execFlatten.h" #ifdef SETS_FIXED -static bool -FjoinBumpOuterNodes(TargetEntry *tlist, ExprContext *econtext, +static bool FjoinBumpOuterNodes(TargetEntry *tlist, ExprContext *econtext, DatumPtr results, char *nulls); #endif diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c index 3d782f34b0..f470abb6b6 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.54 1998/09/01 03:22:14 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.55 1998/09/01 04:28:16 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -54,31 +54,25 @@ #include "catalog/heap.h" #include "commands/trigger.h" -void -ExecCheckPerms(CmdType operation, int resultRelation, List *rangeTable, +void ExecCheckPerms(CmdType operation, int resultRelation, List *rangeTable, Query *parseTree); /* decls for local routines only used within this module */ -static TupleDesc -InitPlan(CmdType operation, Query *parseTree, +static TupleDesc InitPlan(CmdType operation, Query *parseTree, Plan *plan, EState *estate); static void EndPlan(Plan *plan, EState *estate); -static TupleTableSlot * -ExecutePlan(EState *estate, Plan *plan, +static TupleTableSlot *ExecutePlan(EState *estate, Plan *plan, Query *parseTree, CmdType operation, int numberTuples, ScanDirection direction, void (*printfunc) ()); static void ExecRetrieve(TupleTableSlot *slot, void (*printfunc) (), EState *estate); -static void -ExecAppend(TupleTableSlot *slot, ItemPointer tupleid, +static void ExecAppend(TupleTableSlot *slot, ItemPointer tupleid, EState *estate); -static void -ExecDelete(TupleTableSlot *slot, ItemPointer tupleid, +static void ExecDelete(TupleTableSlot *slot, ItemPointer tupleid, EState *estate); -static void -ExecReplace(TupleTableSlot *slot, ItemPointer tupleid, +static void ExecReplace(TupleTableSlot *slot, ItemPointer tupleid, EState *estate, Query *parseTree); /* end of local decls */ @@ -124,7 +118,7 @@ ExecutorStart(QueryDesc *queryDesc, EState *estate) palloc(queryDesc->plantree->nParamExec * sizeof(ParamExecData)); memset(estate->es_param_exec_vals, 0, queryDesc->plantree->nParamExec * sizeof(ParamExecData)); } - + estate->es_snapshot = SnapshotNow; result = InitPlan(queryDesc->operation, @@ -315,8 +309,8 @@ ExecCheckPerms(CmdType operation, relid = rte->relid; htup = SearchSysCacheTuple(RELOID, - ObjectIdGetDatum(relid), - 0, 0, 0); + ObjectIdGetDatum(relid), + 0, 0, 0); if (!HeapTupleIsValid(htup)) elog(ERROR, "ExecCheckPerms: bogus RT relid: %d", relid); @@ -521,19 +515,19 @@ InitPlan(CmdType operation, Query *parseTree, Plan *plan, EState *estate) * 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. + * 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; - List *tlist; - + bool junk_filter_needed = false; + List *tlist; + if (operation == CMD_SELECT) { foreach(tlist, targetList) { - TargetEntry *tle = lfirst(tlist); - + TargetEntry *tle = lfirst(tlist); + if (tle->resdom->resjunk) { junk_filter_needed = true; @@ -547,6 +541,7 @@ InitPlan(CmdType operation, Query *parseTree, Plan *plan, EState *estate) (operation == CMD_SELECT && junk_filter_needed)) { JunkFilter *j = (JunkFilter *) ExecInitJunkFilter(targetList); + estate->es_junkFilter = j; if (operation == CMD_SELECT) @@ -555,7 +550,7 @@ InitPlan(CmdType operation, Query *parseTree, Plan *plan, EState *estate) else estate->es_junkFilter = NULL; } - + /* ---------------- * initialize the "into" relation * ---------------- @@ -588,7 +583,7 @@ InitPlan(CmdType operation, Query *parseTree, Plan *plan, EState *estate) tupdesc = CreateTupleDescCopy(tupType); intoRelationId = heap_create_with_catalog(intoName, - tupdesc, RELKIND_RELATION); + tupdesc, RELKIND_RELATION); FreeTupleDesc(tupdesc); diff --git a/src/backend/executor/execQual.c b/src/backend/executor/execQual.c index 72de0b8faf..f3d12b1319 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.35 1998/09/01 03:22:18 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/executor/execQual.c,v 1.36 1998/09/01 04:28:18 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -68,24 +68,19 @@ int execConstLen; /* static functions decls */ static Datum ExecEvalAggreg(Aggreg *agg, ExprContext *econtext, bool *isNull); -static Datum -ExecEvalArrayRef(ArrayRef *arrayRef, ExprContext *econtext, +static Datum ExecEvalArrayRef(ArrayRef *arrayRef, ExprContext *econtext, bool *isNull, bool *isDone); static Datum ExecEvalAnd(Expr *andExpr, ExprContext *econtext, bool *isNull); -static Datum -ExecEvalFunc(Expr *funcClause, ExprContext *econtext, +static Datum ExecEvalFunc(Expr *funcClause, ExprContext *econtext, bool *isNull, bool *isDone); -static void -ExecEvalFuncArgs(FunctionCachePtr fcache, ExprContext *econtext, +static void ExecEvalFuncArgs(FunctionCachePtr fcache, ExprContext *econtext, List *argList, Datum argV[], bool *argIsDone); static Datum ExecEvalNot(Expr *notclause, ExprContext *econtext, bool *isNull); -static Datum -ExecEvalOper(Expr *opClause, ExprContext *econtext, +static Datum ExecEvalOper(Expr *opClause, ExprContext *econtext, bool *isNull); static Datum ExecEvalOr(Expr *orExpr, ExprContext *econtext, bool *isNull); static Datum ExecEvalVar(Var *variable, ExprContext *econtext, bool *isNull); -static Datum -ExecMakeFunctionResult(Node *node, List *arguments, +static Datum ExecMakeFunctionResult(Node *node, List *arguments, ExprContext *econtext, bool *isNull, bool *isDone); static bool ExecQualClause(Node *clause, ExprContext *econtext); @@ -200,7 +195,7 @@ ExecEvalArrayRef(ArrayRef *arrayRef, static Datum ExecEvalAggreg(Aggreg *agg, ExprContext *econtext, bool *isNull) { - *isNull = econtext->ecxt_nulls[agg->aggno]; + *isNull = econtext->ecxt_nulls[agg->aggno]; return econtext->ecxt_values[agg->aggno]; } diff --git a/src/backend/executor/execScan.c b/src/backend/executor/execScan.c index e04876c331..30b1166e80 100644 --- a/src/backend/executor/execScan.c +++ b/src/backend/executor/execScan.c @@ -11,7 +11,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/executor/execScan.c,v 1.7 1998/02/26 12:13:09 vadim Exp $ + * $Header: /cvsroot/pgsql/src/backend/executor/execScan.c,v 1.8 1998/09/01 04:28:20 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -106,9 +106,9 @@ ExecScan(Scan *node, * NULL, then it means there is nothing more to scan * so we just return the empty slot... * - * ... with invalid TupleDesc (not the same as in - * projInfo->pi_slot) and break upper MergeJoin node. - * New code below do what ExecProject() does. - vadim 02/26/98 + * ... with invalid TupleDesc (not the same as in + * projInfo->pi_slot) and break upper MergeJoin node. + * New code below do what ExecProject() does. - vadim 02/26/98 * ---------------- */ if (TupIsNull(slot)) @@ -116,10 +116,10 @@ ExecScan(Scan *node, scanstate->cstate.cs_TupFromTlist = false; resultSlot = scanstate->cstate.cs_ProjInfo->pi_slot; return (TupleTableSlot *) - ExecStoreTuple (NULL, - resultSlot, - InvalidBuffer, - true); + ExecStoreTuple(NULL, + resultSlot, + InvalidBuffer, + true); } /* ---------------- diff --git a/src/backend/executor/execUtils.c b/src/backend/executor/execUtils.c index 7cc53dce48..fb83fd6e55 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.37 1998/09/01 03:22:21 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/executor/execUtils.c,v 1.38 1998/09/01 04:28:22 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -57,8 +57,7 @@ #include "utils/lsyscache.h" #include "utils/mcxt.h" -static void -ExecGetIndexKeyInfo(Form_pg_index indexTuple, int *numAttsOutP, +static void ExecGetIndexKeyInfo(Form_pg_index indexTuple, int *numAttsOutP, AttrNumber **attsOutP, FuncIndexInfoPtr fInfoP); /* ---------------------------------------------------------------- @@ -750,7 +749,7 @@ ExecOpenIndices(Oid resultRelationOid, */ indexSd = heap_beginscan(indexRd, /* scan desc */ false, /* scan backward flag */ - SnapshotNow, /* NOW snapshot */ + SnapshotNow, /* NOW snapshot */ 1, /* number scan keys */ &key); /* scan keys */ diff --git a/src/backend/executor/functions.c b/src/backend/executor/functions.c index 4d23d27178..fd095e7864 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.19 1998/09/01 03:22:22 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/executor/functions.c,v 1.20 1998/09/01 04:28:23 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -57,16 +57,13 @@ typedef struct local_es /* non-export function prototypes */ static TupleDesc postquel_start(execution_state *es); -static execution_state * -init_execution_state(FunctionCachePtr fcache, +static execution_state *init_execution_state(FunctionCachePtr fcache, char *args[]); static TupleTableSlot *postquel_getnext(execution_state *es); static void postquel_end(execution_state *es); -static void -postquel_sub_params(execution_state *es, int nargs, +static void postquel_sub_params(execution_state *es, int nargs, char *args[], bool *nullV); -static Datum -postquel_execute(execution_state *es, FunctionCachePtr fcache, +static Datum postquel_execute(execution_state *es, FunctionCachePtr fcache, List *fTlist, char **args, bool *isNull); diff --git a/src/backend/executor/nodeAgg.c b/src/backend/executor/nodeAgg.c index 28f50bdd4f..c7e69d1a72 100644 --- a/src/backend/executor/nodeAgg.c +++ b/src/backend/executor/nodeAgg.c @@ -109,388 +109,397 @@ ExecAgg(Agg *node) bool isNull = FALSE, isNull1 = FALSE, isNull2 = FALSE; - bool qual_result; - + bool qual_result; + /* --------------------- * get state info from node * --------------------- */ - /* We loop retrieving groups until we find one matching node->plan.qual */ - do { + /* + * We loop retrieving groups until we find one matching + * node->plan.qual + */ + do + { - aggstate = node->aggstate; - if (aggstate->agg_done) - return NULL; + aggstate = node->aggstate; + if (aggstate->agg_done) + return NULL; - estate = node->plan.state; - econtext = aggstate->csstate.cstate.cs_ExprContext; + estate = node->plan.state; + econtext = aggstate->csstate.cstate.cs_ExprContext; - nagg = length(node->aggs); + nagg = length(node->aggs); - aggregates = (Aggreg **) palloc(sizeof(Aggreg *) * nagg); + aggregates = (Aggreg **) palloc(sizeof(Aggreg *) * nagg); - /* take List* and make it an array that can be quickly indexed */ - alist = node->aggs; - for (i = 0; i < nagg; i++) - { - aggregates[i] = lfirst(alist); - aggregates[i]->aggno = i; - alist = lnext(alist); - } - - value1 = node->aggstate->csstate.cstate.cs_ExprContext->ecxt_values; - nulls = node->aggstate->csstate.cstate.cs_ExprContext->ecxt_nulls; + /* take List* and make it an array that can be quickly indexed */ + alist = node->aggs; + for (i = 0; i < nagg; i++) + { + aggregates[i] = lfirst(alist); + aggregates[i]->aggno = i; + alist = lnext(alist); + } - value2 = (Datum *) palloc(sizeof(Datum) * nagg); - MemSet(value2, 0, sizeof(Datum) * nagg); + value1 = node->aggstate->csstate.cstate.cs_ExprContext->ecxt_values; + nulls = node->aggstate->csstate.cstate.cs_ExprContext->ecxt_nulls; - aggFuncInfo = (AggFuncInfo *) palloc(sizeof(AggFuncInfo) * nagg); - MemSet(aggFuncInfo, 0, sizeof(AggFuncInfo) * nagg); + value2 = (Datum *) palloc(sizeof(Datum) * nagg); + MemSet(value2, 0, sizeof(Datum) * nagg); - noInitValue = (int *) palloc(sizeof(int) * nagg); - MemSet(noInitValue, 0, sizeof(noInitValue) * nagg); + aggFuncInfo = (AggFuncInfo *) palloc(sizeof(AggFuncInfo) * nagg); + MemSet(aggFuncInfo, 0, sizeof(AggFuncInfo) * nagg); - outerPlan = outerPlan(node); - oneTuple = NULL; + noInitValue = (int *) palloc(sizeof(int) * nagg); + MemSet(noInitValue, 0, sizeof(noInitValue) * nagg); - projInfo = aggstate->csstate.cstate.cs_ProjInfo; + outerPlan = outerPlan(node); + oneTuple = NULL; - for (i = 0; i < nagg; i++) - { - Aggreg *agg; - char *aggname; - HeapTuple aggTuple; - Form_pg_aggregate aggp; - Oid xfn1_oid, - xfn2_oid, - finalfn_oid; - - agg = aggregates[i]; - - /* --------------------- - * find transfer functions of all the aggregates and initialize - * their initial values - * --------------------- - */ - aggname = agg->aggname; - aggTuple = SearchSysCacheTuple(AGGNAME, - PointerGetDatum(aggname), - ObjectIdGetDatum(agg->basetype), - 0, 0); - if (!HeapTupleIsValid(aggTuple)) - elog(ERROR, "ExecAgg: cache lookup failed for aggregate \"%s\"(%s)", - aggname, - typeidTypeName(agg->basetype)); - aggp = (Form_pg_aggregate) GETSTRUCT(aggTuple); - - xfn1_oid = aggp->aggtransfn1; - xfn2_oid = aggp->aggtransfn2; - finalfn_oid = aggp->aggfinalfn; - - if (OidIsValid(finalfn_oid)) - { - fmgr_info(finalfn_oid, &aggFuncInfo[i].finalfn); - aggFuncInfo[i].finalfn_oid = finalfn_oid; - } + projInfo = aggstate->csstate.cstate.cs_ProjInfo; - if (OidIsValid(xfn2_oid)) + for (i = 0; i < nagg; i++) { - fmgr_info(xfn2_oid, &aggFuncInfo[i].xfn2); - aggFuncInfo[i].xfn2_oid = xfn2_oid; - value2[i] = (Datum) AggNameGetInitVal((char *) aggname, - aggp->aggbasetype, - 2, - &isNull2); - /* ------------------------------------------ - * If there is a second transition function, its initial - * value must exist -- as it does not depend on data values, - * we have no other way of determining an initial value. - * ------------------------------------------ + Aggreg *agg; + char *aggname; + HeapTuple aggTuple; + Form_pg_aggregate aggp; + Oid xfn1_oid, + xfn2_oid, + finalfn_oid; + + agg = aggregates[i]; + + /* --------------------- + * find transfer functions of all the aggregates and initialize + * their initial values + * --------------------- */ - if (isNull2) - elog(ERROR, "ExecAgg: agginitval2 is null"); - } + aggname = agg->aggname; + aggTuple = SearchSysCacheTuple(AGGNAME, + PointerGetDatum(aggname), + ObjectIdGetDatum(agg->basetype), + 0, 0); + if (!HeapTupleIsValid(aggTuple)) + elog(ERROR, "ExecAgg: cache lookup failed for aggregate \"%s\"(%s)", + aggname, + typeidTypeName(agg->basetype)); + aggp = (Form_pg_aggregate) GETSTRUCT(aggTuple); + + xfn1_oid = aggp->aggtransfn1; + xfn2_oid = aggp->aggtransfn2; + finalfn_oid = aggp->aggfinalfn; + + if (OidIsValid(finalfn_oid)) + { + fmgr_info(finalfn_oid, &aggFuncInfo[i].finalfn); + aggFuncInfo[i].finalfn_oid = finalfn_oid; + } - if (OidIsValid(xfn1_oid)) - { - fmgr_info(xfn1_oid, &aggFuncInfo[i].xfn1); - aggFuncInfo[i].xfn1_oid = xfn1_oid; - value1[i] = (Datum) AggNameGetInitVal((char *) aggname, - aggp->aggbasetype, - 1, - &isNull1); - - /* ------------------------------------------ - * If the initial value for the first transition function - * doesn't exist in the pg_aggregate table then we let - * the first value returned from the outer procNode become - * the initial value. (This is useful for aggregates like - * max{} and min{}.) - * ------------------------------------------ - */ - if (isNull1) + if (OidIsValid(xfn2_oid)) { - noInitValue[i] = 1; - nulls[i] = 1; + fmgr_info(xfn2_oid, &aggFuncInfo[i].xfn2); + aggFuncInfo[i].xfn2_oid = xfn2_oid; + value2[i] = (Datum) AggNameGetInitVal((char *) aggname, + aggp->aggbasetype, + 2, + &isNull2); + /* ------------------------------------------ + * If there is a second transition function, its initial + * value must exist -- as it does not depend on data values, + * we have no other way of determining an initial value. + * ------------------------------------------ + */ + if (isNull2) + elog(ERROR, "ExecAgg: agginitval2 is null"); } - } - } - - /* ---------------- - * for each tuple from the the outer plan, apply all the aggregates - * ---------------- - */ - for (;;) - { - HeapTuple outerTuple = NULL; - TupleTableSlot *outerslot; - - isNull = isNull1 = isNull2 = 0; - outerslot = ExecProcNode(outerPlan, (Plan *) node); - if (outerslot) - outerTuple = outerslot->val; - if (!HeapTupleIsValid(outerTuple)) - { - /* - * when the outerplan doesn't return a single tuple, create a - * dummy heaptuple anyway because we still need to return a - * valid aggregate value. The value returned will be the - * initial values of the transition functions - */ - if (nTuplesAgged == 0) + if (OidIsValid(xfn1_oid)) { - TupleDesc tupType; - Datum *tupValue; - char *null_array; - - tupType = aggstate->csstate.css_ScanTupleSlot->ttc_tupleDescriptor; - tupValue = projInfo->pi_tupValue; - - /* initially, set all the values to NULL */ - null_array = palloc(tupType->natts); - for (i = 0; i < tupType->natts; i++) - null_array[i] = 'n'; - oneTuple = heap_formtuple(tupType, tupValue, null_array); - pfree(null_array); + fmgr_info(xfn1_oid, &aggFuncInfo[i].xfn1); + aggFuncInfo[i].xfn1_oid = xfn1_oid; + value1[i] = (Datum) AggNameGetInitVal((char *) aggname, + aggp->aggbasetype, + 1, + &isNull1); + + /* ------------------------------------------ + * If the initial value for the first transition function + * doesn't exist in the pg_aggregate table then we let + * the first value returned from the outer procNode become + * the initial value. (This is useful for aggregates like + * max{} and min{}.) + * ------------------------------------------ + */ + if (isNull1) + { + noInitValue[i] = 1; + nulls[i] = 1; + } } - break; } - for (i = 0; i < nagg; i++) + /* ---------------- + * for each tuple from the the outer plan, apply all the aggregates + * ---------------- + */ + for (;;) { - AttrNumber attnum; - int2 attlen = 0; - Datum newVal = (Datum) NULL; - AggFuncInfo *aggfns = &aggFuncInfo[i]; - Datum args[2]; - Node *tagnode = NULL; - - switch (nodeTag(aggregates[i]->target)) + HeapTuple outerTuple = NULL; + TupleTableSlot *outerslot; + + isNull = isNull1 = isNull2 = 0; + outerslot = ExecProcNode(outerPlan, (Plan *) node); + if (outerslot) + outerTuple = outerslot->val; + if (!HeapTupleIsValid(outerTuple)) { - case T_Var: - tagnode = NULL; - newVal = aggGetAttr(outerslot, - aggregates[i], - &isNull); - break; - case T_Expr: - tagnode = ((Expr *) aggregates[i]->target)->oper; - econtext->ecxt_scantuple = outerslot; - newVal = ExecEvalExpr(aggregates[i]->target, econtext, - &isNull, &isDone); - break; - case T_Const: - tagnode = NULL; - econtext->ecxt_scantuple = outerslot; - newVal = ExecEvalExpr(aggregates[i]->target, econtext, - &isNull, &isDone); - break; - default: - elog(ERROR, "ExecAgg: Bad Agg->Target for Agg %d", i); - } - if (isNull && !aggregates[i]->usenulls) - continue; /* ignore this tuple for this agg */ + /* + * when the outerplan doesn't return a single tuple, + * create a dummy heaptuple anyway because we still need + * to return a valid aggregate value. The value returned + * will be the initial values of the transition functions + */ + if (nTuplesAgged == 0) + { + TupleDesc tupType; + Datum *tupValue; + char *null_array; + + tupType = aggstate->csstate.css_ScanTupleSlot->ttc_tupleDescriptor; + tupValue = projInfo->pi_tupValue; + + /* initially, set all the values to NULL */ + null_array = palloc(tupType->natts); + for (i = 0; i < tupType->natts; i++) + null_array[i] = 'n'; + oneTuple = heap_formtuple(tupType, tupValue, null_array); + pfree(null_array); + } + break; + } - if (aggfns->xfn1.fn_addr != NULL) + for (i = 0; i < nagg; i++) { - if (noInitValue[i]) + AttrNumber attnum; + int2 attlen = 0; + Datum newVal = (Datum) NULL; + AggFuncInfo *aggfns = &aggFuncInfo[i]; + Datum args[2]; + Node *tagnode = NULL; + + switch (nodeTag(aggregates[i]->target)) + { + case T_Var: + tagnode = NULL; + newVal = aggGetAttr(outerslot, + aggregates[i], + &isNull); + break; + case T_Expr: + tagnode = ((Expr *) aggregates[i]->target)->oper; + econtext->ecxt_scantuple = outerslot; + newVal = ExecEvalExpr(aggregates[i]->target, econtext, + &isNull, &isDone); + break; + case T_Const: + tagnode = NULL; + econtext->ecxt_scantuple = outerslot; + newVal = ExecEvalExpr(aggregates[i]->target, econtext, + &isNull, &isDone); + break; + default: + elog(ERROR, "ExecAgg: Bad Agg->Target for Agg %d", i); + } + + if (isNull && !aggregates[i]->usenulls) + continue; /* ignore this tuple for this agg */ + + if (aggfns->xfn1.fn_addr != NULL) { - int byVal = 0; - - /* - * value1 and value2 has not been initialized. This is - * the first non-NULL value. We use it as the initial - * value. - */ - - /* - * 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 - */ - switch (nodeTag(aggregates[i]->target)) + if (noInitValue[i]) { - case T_Var: - attnum = ((Var *) aggregates[i]->target)->varattno; - attlen = outerslot->ttc_tupleDescriptor->attrs[attnum - 1]->attlen; - byVal = outerslot->ttc_tupleDescriptor->attrs[attnum - 1]->attbyval; - - break; - case T_Expr: - { - FunctionCachePtr fcache_ptr; - - if (nodeTag(tagnode) == T_Func) - fcache_ptr = ((Func *) tagnode)->func_fcache; - else - fcache_ptr = ((Oper *) tagnode)->op_fcache; - attlen = fcache_ptr->typlen; - byVal = fcache_ptr->typbyval; + int byVal = 0; + + /* + * value1 and value2 has not been initialized. + * This is the first non-NULL value. We use it as + * the initial value. + */ + + /* + * 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 + */ + switch (nodeTag(aggregates[i]->target)) + { + case T_Var: + attnum = ((Var *) aggregates[i]->target)->varattno; + attlen = outerslot->ttc_tupleDescriptor->attrs[attnum - 1]->attlen; + byVal = outerslot->ttc_tupleDescriptor->attrs[attnum - 1]->attbyval; + + break; + case T_Expr: + { + FunctionCachePtr fcache_ptr; + + if (nodeTag(tagnode) == T_Func) + fcache_ptr = ((Func *) tagnode)->func_fcache; + else + fcache_ptr = ((Oper *) tagnode)->op_fcache; + attlen = fcache_ptr->typlen; + byVal = fcache_ptr->typbyval; + + break; + } + case T_Const: + attlen = ((Const *) aggregates[i]->target)->constlen; + byVal = ((Const *) aggregates[i]->target)->constbyval; break; - } - case T_Const: - attlen = ((Const *) aggregates[i]->target)->constlen; - byVal = ((Const *) aggregates[i]->target)->constbyval; - - break; - default: - elog(ERROR, "ExecAgg: Bad Agg->Target for Agg %d", i); + default: + elog(ERROR, "ExecAgg: Bad Agg->Target for Agg %d", i); + } + if (attlen == -1) + { + /* variable length */ + attlen = VARSIZE((struct varlena *) newVal); + } + value1[i] = (Datum) palloc(attlen); + if (byVal) + value1[i] = newVal; + else + memmove((char *) (value1[i]), (char *) newVal, attlen); + noInitValue[i] = 0; + nulls[i] = 0; } - if (attlen == -1) + else { - /* variable length */ - attlen = VARSIZE((struct varlena *) newVal); + + /* + * apply the transition functions. + */ + args[0] = value1[i]; + args[1] = newVal; + value1[i] = + (Datum) fmgr_c(&aggfns->xfn1, + (FmgrValues *) args, + &isNull1); + Assert(!isNull1); } - value1[i] = (Datum) palloc(attlen); - if (byVal) - value1[i] = newVal; - else - memmove((char *) (value1[i]), (char *) newVal, attlen); - noInitValue[i] = 0; - nulls[i] = 0; } - else + + if (aggfns->xfn2.fn_addr != NULL) { + Datum xfn2_val = value2[i]; - /* - * apply the transition functions. - */ - args[0] = value1[i]; - args[1] = newVal; - value1[i] = - (Datum) fmgr_c(&aggfns->xfn1, - (FmgrValues *) args, - &isNull1); - Assert(!isNull1); + value2[i] = + (Datum) fmgr_c(&aggfns->xfn2, + (FmgrValues *) &xfn2_val, &isNull2); + Assert(!isNull2); } } - if (aggfns->xfn2.fn_addr != NULL) - { - Datum xfn2_val = value2[i]; + /* + * keep this for the projection (we only need one of these - + * all the tuples we aggregate over share the same group + * column) + */ + if (!oneTuple) + oneTuple = heap_copytuple(outerslot->val); - value2[i] = - (Datum) fmgr_c(&aggfns->xfn2, - (FmgrValues *) &xfn2_val, &isNull2); - Assert(!isNull2); - } + nTuplesAgged++; } - /* - * keep this for the projection (we only need one of these - all - * the tuples we aggregate over share the same group column) + /* -------------- + * finalize the aggregate (if necessary), and get the resultant value + * -------------- */ - if (!oneTuple) - oneTuple = heap_copytuple(outerslot->val); - - nTuplesAgged++; - } - - /* -------------- - * finalize the aggregate (if necessary), and get the resultant value - * -------------- - */ - for (i = 0; i < nagg; i++) - { - char *args[2]; - AggFuncInfo *aggfns = &aggFuncInfo[i]; - - if (noInitValue[i]) + for (i = 0; i < nagg; i++) { + char *args[2]; + AggFuncInfo *aggfns = &aggFuncInfo[i]; - /* - * No values found for this agg; return current state. This - * seems to fix behavior for avg() aggregate. -tgl 12/96 - */ - } - else if (aggfns->finalfn.fn_addr != NULL && nTuplesAgged > 0) - { - if (aggfns->finalfn.fn_nargs > 1) + if (noInitValue[i]) { - args[0] = (char *) value1[i]; - args[1] = (char *) value2[i]; + + /* + * No values found for this agg; return current state. + * This seems to fix behavior for avg() aggregate. -tgl + * 12/96 + */ + } + else if (aggfns->finalfn.fn_addr != NULL && nTuplesAgged > 0) + { + if (aggfns->finalfn.fn_nargs > 1) + { + args[0] = (char *) value1[i]; + args[1] = (char *) value2[i]; + } + else if (aggfns->xfn1.fn_addr != NULL) + args[0] = (char *) value1[i]; + else if (aggfns->xfn2.fn_addr != NULL) + args[0] = (char *) value2[i]; + else + elog(NOTICE, "ExecAgg: no valid transition functions??"); + value1[i] = (Datum) fmgr_c(&aggfns->finalfn, + (FmgrValues *) args, &(nulls[i])); } else if (aggfns->xfn1.fn_addr != NULL) - args[0] = (char *) value1[i]; + { + + /* + * value in the right place, ignore. (If you remove this + * case, fix the else part. -ay 2/95) + */ + } else if (aggfns->xfn2.fn_addr != NULL) - args[0] = (char *) value2[i]; + value1[i] = value2[i]; else - elog(NOTICE, "ExecAgg: no valid transition functions??"); - value1[i] = (Datum) fmgr_c(&aggfns->finalfn, - (FmgrValues *) args, &(nulls[i])); + elog(ERROR, "ExecAgg: no valid transition functions??"); } - else if (aggfns->xfn1.fn_addr != NULL) - { - /* - * value in the right place, ignore. (If you remove this case, - * fix the else part. -ay 2/95) - */ + /* + * whether the aggregation is done depends on whether we are doing + * aggregation over groups or the entire table + */ + if (nodeTag(outerPlan) == T_Group) + { + /* aggregation over groups */ + aggstate->agg_done = ((Group *) outerPlan)->grpstate->grp_done; } - else if (aggfns->xfn2.fn_addr != NULL) - value1[i] = value2[i]; else - elog(ERROR, "ExecAgg: no valid transition functions??"); - } + aggstate->agg_done = TRUE; - /* - * whether the aggregation is done depends on whether we are doing - * aggregation over groups or the entire table - */ - if (nodeTag(outerPlan) == T_Group) - { - /* aggregation over groups */ - aggstate->agg_done = ((Group *) outerPlan)->grpstate->grp_done; - } - else - aggstate->agg_done = TRUE; + /* ---------------- + * form a projection tuple, store it in the result tuple + * slot and return it. + * ---------------- + */ - /* ---------------- - * form a projection tuple, store it in the result tuple - * slot and return it. - * ---------------- - */ - - ExecStoreTuple(oneTuple, - aggstate->csstate.css_ScanTupleSlot, - InvalidBuffer, - false); - econtext->ecxt_scantuple = aggstate->csstate.css_ScanTupleSlot; - - resultSlot = ExecProject(projInfo, &isDone); - - /* As long as the retrieved group does not match the qualifications it is ignored and - * the next group is fetched */ - qual_result=ExecQual(fix_opids(node->plan.qual),econtext); - if (oneTuple) - pfree(oneTuple); - } - while((node->plan.qual!=NULL) && (qual_result!=true)); + ExecStoreTuple(oneTuple, + aggstate->csstate.css_ScanTupleSlot, + InvalidBuffer, + false); + econtext->ecxt_scantuple = aggstate->csstate.css_ScanTupleSlot; + + resultSlot = ExecProject(projInfo, &isDone); + + /* + * As long as the retrieved group does not match the + * qualifications it is ignored and the next group is fetched + */ + qual_result = ExecQual(fix_opids(node->plan.qual), econtext); + if (oneTuple) + pfree(oneTuple); + } + while ((node->plan.qual != NULL) && (qual_result != true)); return resultSlot; } diff --git a/src/backend/executor/nodeAppend.c b/src/backend/executor/nodeAppend.c index aea1873934..1c2217cdc4 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.14 1998/07/15 22:16:18 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/executor/nodeAppend.c,v 1.15 1998/09/01 04:28:26 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -158,7 +158,7 @@ exec_append_initialize_next(Append *node) { estate->es_result_relation_info = (RelationInfo *) nth(whichplan, - appendstate->as_result_relation_info_list); + appendstate->as_result_relation_info_list); } result_slot->ttc_whichplan = whichplan; @@ -505,8 +505,8 @@ void ExecReScanAppend(Append *node, ExprContext *exprCtxt, Plan *parent) { AppendState *appendstate = node->appendstate; - int nplans = length(node->appendplans); - int i; + int nplans = length(node->appendplans); + int i; for (i = 0; i < nplans; i++) { @@ -517,7 +517,7 @@ ExecReScanAppend(Append *node, ExprContext *exprCtxt, Plan *parent) if (rescanNode->chgParam == NULL) { exec_append_initialize_next(node); - ExecReScan((Plan *)rescanNode, exprCtxt, (Plan *) node); + ExecReScan((Plan *) rescanNode, exprCtxt, (Plan *) node); } } appendstate->as_whichplan = 0; diff --git a/src/backend/executor/nodeGroup.c b/src/backend/executor/nodeGroup.c index cecae67b78..1fdf6bedc3 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.21 1998/07/16 02:58:09 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/executor/nodeGroup.c,v 1.22 1998/09/01 04:28:28 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -30,8 +30,7 @@ static TupleTableSlot *ExecGroupEveryTuple(Group *node); static TupleTableSlot *ExecGroupOneTuple(Group *node); -static bool -sameGroup(HeapTuple oldslot, HeapTuple newslot, +static bool sameGroup(HeapTuple oldslot, HeapTuple newslot, int numCols, AttrNumber *grpColIdx, TupleDesc tupdesc); /* --------------------------------------- diff --git a/src/backend/executor/nodeHash.c b/src/backend/executor/nodeHash.c index 9fa3f01190..634411a7c6 100644 --- a/src/backend/executor/nodeHash.c +++ b/src/backend/executor/nodeHash.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/executor/nodeHash.c,v 1.22 1998/09/01 03:22:23 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/executor/nodeHash.c,v 1.23 1998/09/01 04:28:29 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -45,8 +45,7 @@ static void mk_hj_temp(char *tempname); static int hashFunc(char *key, int len); static int ExecHashPartition(Hash *node); static RelativeAddr hashTableAlloc(int size, HashJoinTable hashtable); -static void -ExecHashOverflowInsert(HashJoinTable hashtable, +static void ExecHashOverflowInsert(HashJoinTable hashtable, HashBucket bucket, HeapTuple heapTuple); diff --git a/src/backend/executor/nodeHashjoin.c b/src/backend/executor/nodeHashjoin.c index c4a52fe910..deef889522 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.12 1998/09/01 03:22:25 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/executor/nodeHashjoin.c,v 1.13 1998/09/01 04:28:31 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -28,12 +28,10 @@ static TupleTableSlot * ExecHashJoinOuterGetTuple(Plan *node, Plan *parent, HashJoinState *hjstate); -static TupleTableSlot * -ExecHashJoinGetSavedTuple(HashJoinState *hjstate, char *buffer, +static TupleTableSlot *ExecHashJoinGetSavedTuple(HashJoinState *hjstate, char *buffer, File file, TupleTableSlot *tupleSlot, int *block, char **position); -static int -ExecHashJoinGetBatch(int bucketno, HashJoinTable hashtable, +static int ExecHashJoinGetBatch(int bucketno, HashJoinTable hashtable, int nbatch); static int ExecHashJoinNewBatch(HashJoinState *hjstate); diff --git a/src/backend/executor/nodeIndexscan.c b/src/backend/executor/nodeIndexscan.c index 03b43f09b5..2df3b98a44 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.26 1998/09/01 03:22:26 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/executor/nodeIndexscan.c,v 1.27 1998/09/01 04:28:32 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -85,8 +85,8 @@ IndexNext(IndexScan *node) EState *estate; CommonScanState *scanstate; IndexScanState *indexstate; - ScanDirection direction; - Snapshot snapshot; + ScanDirection direction; + Snapshot snapshot; IndexScanDescPtr scanDescs; IndexScanDesc scandesc; Relation heapRelation; @@ -95,7 +95,7 @@ IndexNext(IndexScan *node) TupleTableSlot *slot; Buffer buffer = InvalidBuffer; int numIndices; - + /* ---------------- * extract necessary information from index scan node * ---------------- @@ -122,39 +122,40 @@ IndexNext(IndexScan *node) while ((result = index_getnext(scandesc, direction)) != NULL) { tuple = heap_fetch(heapRelation, snapshot, - &result->heap_iptr, &buffer); + &result->heap_iptr, &buffer); pfree(result); if (tuple != NULL) { bool prev_matches = false; int prev_index; - + /* ---------------- - * store the scanned tuple in the scan tuple slot of - * the scan state. Eventually we will only do this and not - * return a tuple. Note: we pass 'false' because tuples - * returned by amgetnext are pointers onto disk pages and - * were not created with palloc() and so should not be pfree()'d. - * ---------------- - */ - ExecStoreTuple(tuple, /* tuple to store */ - slot, /* slot to store in */ - buffer, /* buffer associated with tuple */ - false); /* don't pfree */ + * store the scanned tuple in the scan tuple slot of + * the scan state. Eventually we will only do this and not + * return a tuple. Note: we pass 'false' because tuples + * returned by amgetnext are pointers onto disk pages and + * were not created with palloc() and so should not be pfree()'d. + * ---------------- + */ + ExecStoreTuple(tuple, /* tuple to store */ + slot, /* slot to store in */ + buffer, /* buffer associated with tuple */ + false); /* don't pfree */ /* - * We must check to see if the current tuple would have been - * matched by an earlier index, so we don't double report it. - * We do this by passing the tuple through ExecQual and look - * for failure with all previous qualifications. + * We must check to see if the current tuple would have + * been matched by an earlier index, so we don't double + * report it. We do this by passing the tuple through + * ExecQual and look for failure with all previous + * qualifications. */ for (prev_index = 0; prev_index < indexstate->iss_IndexPtr; - prev_index++) + prev_index++) { scanstate->cstate.cs_ExprContext->ecxt_scantuple = slot; if (ExecQual(nth(prev_index, node->indxqual), - scanstate->cstate.cs_ExprContext)) + scanstate->cstate.cs_ExprContext)) { prev_matches = true; break; @@ -259,17 +260,16 @@ ExecIndexReScan(IndexScan *node, ExprContext *exprCtxt, Plan *parent) indxqual = node->indxqual; numScanKeys = indexstate->iss_NumScanKeys; indexstate->iss_IndexPtr = 0; - + /* it's possible in subselects */ if (exprCtxt == NULL) exprCtxt = node->scan.scanstate->cstate.cs_ExprContext; node->scan.scanstate->cstate.cs_ExprContext->ecxt_outertuple = exprCtxt->ecxt_outertuple; - + /* - * get the index qualifications and recalculate the appropriate - * values + * get the index qualifications and recalculate the appropriate values */ for (i = 0; i < numIndices; i++) { @@ -282,17 +282,19 @@ ExecIndexReScan(IndexScan *node, ExprContext *exprCtxt, Plan *parent) run_keys = (int *) runtimeKeyInfo[i]; for (j = 0; j < n_keys; j++) { + /* * If we have a run-time key, then extract the run-time * expression and evaluate it with respect to the current - * outer tuple. We then stick the result into the scan key. + * outer tuple. We then stick the result into the scan + * key. */ if (run_keys[j] != NO_OP) { clause = nth(j, qual); scanexpr = (run_keys[j] == RIGHT_OP) ? (Node *) get_rightop(clause) : (Node *) get_leftop(clause); - + /* * pass in isDone but ignore it. We don't iterate in * quals @@ -333,7 +335,7 @@ ExecEndIndexScan(IndexScan *node) IndexScanState *indexstate; Pointer *runtimeKeyInfo; ScanKey *scanKeys; - List *indxqual; + List *indxqual; int *numScanKeys; int numIndices; int i; @@ -342,7 +344,7 @@ ExecEndIndexScan(IndexScan *node) indexstate = node->indxstate; indxqual = node->indxqual; runtimeKeyInfo = (Pointer *) indexstate->iss_RuntimeKeyInfo; - + /* ---------------- * extract information from the node * ---------------- @@ -381,7 +383,7 @@ ExecEndIndexScan(IndexScan *node) pfree(numScanKeys); if (runtimeKeyInfo) - { + { for (i = 0; i < numIndices; i++) { List *qual; @@ -394,7 +396,7 @@ ExecEndIndexScan(IndexScan *node) } pfree(runtimeKeyInfo); } - + /* ---------------- * clear out tuple table slots * ---------------- @@ -428,7 +430,7 @@ ExecIndexMarkPos(IndexScan *node) #if 0 IndexScanMarkPosition(scanDesc); #endif - index_markpos (scanDesc); + index_markpos(scanDesc); } /* ---------------------------------------------------------------- @@ -457,7 +459,7 @@ ExecIndexRestrPos(IndexScan *node) #if 0 IndexScanRestorePosition(scanDesc); #endif - index_restrpos (scanDesc); + index_restrpos(scanDesc); } /* ---------------------------------------------------------------- @@ -504,7 +506,7 @@ ExecInitIndexScan(IndexScan *node, EState *estate, Plan *parent) HeapScanDesc currentScanDesc; ScanDirection direction; int baseid; - + List *execParam = NULL; /* ---------------- @@ -727,22 +729,22 @@ ExecInitIndexScan(IndexScan *node, EState *estate, Plan *parent) * it identifies the value to place in our scan key. * ---------------- */ - + /* Life was so easy before ... subselects */ - if ( ((Param *) leftop)->paramkind == PARAM_EXEC ) + if (((Param *) leftop)->paramkind == PARAM_EXEC) { have_runtime_keys = true; run_keys[j] = LEFT_OP; - execParam = lappendi (execParam, ((Param*) leftop)->paramid); + execParam = lappendi(execParam, ((Param *) leftop)->paramid); } else { scanvalue = ExecEvalParam((Param *) leftop, - scanstate->cstate.cs_ExprContext, + scanstate->cstate.cs_ExprContext, &isnull); if (isnull) flags |= SK_ISNULL; - + run_keys[j] = NO_OP; } } @@ -820,22 +822,22 @@ ExecInitIndexScan(IndexScan *node, EState *estate, Plan *parent) * it identifies the value to place in our scan key. * ---------------- */ - + /* Life was so easy before ... subselects */ - if ( ((Param *) rightop)->paramkind == PARAM_EXEC ) + if (((Param *) rightop)->paramkind == PARAM_EXEC) { have_runtime_keys = true; run_keys[j] = RIGHT_OP; - execParam = lappendi (execParam, ((Param*) rightop)->paramid); + execParam = lappendi(execParam, ((Param *) rightop)->paramid); } else { scanvalue = ExecEvalParam((Param *) rightop, - scanstate->cstate.cs_ExprContext, + scanstate->cstate.cs_ExprContext, &isnull); if (isnull) flags |= SK_ISNULL; - + run_keys[j] = NO_OP; } } @@ -992,13 +994,13 @@ ExecInitIndexScan(IndexScan *node, EState *estate, Plan *parent) indexstate->iss_ScanDescs = scanDescs; indexstate->cstate.cs_TupFromTlist = false; - - /* - * if there are some PARAM_EXEC in skankeys then - * force index rescan on first scan. + + /* + * if there are some PARAM_EXEC in skankeys then force index rescan on + * first scan. */ - ((Plan*) node)->chgParam = execParam; - + ((Plan *) node)->chgParam = execParam; + /* ---------------- * all done. * ---------------- @@ -1010,5 +1012,5 @@ int ExecCountSlotsIndexScan(IndexScan *node) { return ExecCountSlotsNode(outerPlan((Plan *) node)) + - ExecCountSlotsNode(innerPlan((Plan *) node)) + INDEXSCAN_NSLOTS; + ExecCountSlotsNode(innerPlan((Plan *) node)) + INDEXSCAN_NSLOTS; } diff --git a/src/backend/executor/nodeMaterial.c b/src/backend/executor/nodeMaterial.c index 1c957d7661..95c8a6f56f 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.16 1998/09/01 03:22:27 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/executor/nodeMaterial.c,v 1.17 1998/09/01 04:28:34 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -173,7 +173,7 @@ ExecMaterial(Material *node) return ExecStoreTuple(heapTuple, /* tuple to store */ slot, /* slot to store in */ - currentScanDesc->rs_cbuf, /* buffer for this tuple */ + currentScanDesc->rs_cbuf, /* buffer for this tuple */ false); /* don't pfree this pointer */ } diff --git a/src/backend/executor/nodeMergejoin.c b/src/backend/executor/nodeMergejoin.c index 805b6ed334..30c11e8b2f 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.18 1998/07/19 10:05:19 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/executor/nodeMergejoin.c,v 1.19 1998/09/01 04:28:35 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -480,8 +480,8 @@ ExecMergeJoin(MergeJoin *node) * means that this is the first time ExecMergeJoin() has * been called and so we have to initialize the inner, * outer and marked tuples as well as various stuff in the - * expression context. - * ******************************** + * expression context. ******************************** + * */ case EXEC_MJ_INITIALIZE: MJ_printf("ExecMergeJoin: EXEC_MJ_INITIALIZE\n"); @@ -514,7 +514,7 @@ ExecMergeJoin(MergeJoin *node) mergestate->mj_MarkedTupleSlot->ttc_tupleDescriptor = innerTupleSlot->ttc_tupleDescriptor; - + /* ---------------- * initialize merge join state to skip inner tuples. * ---------------- @@ -526,8 +526,8 @@ ExecMergeJoin(MergeJoin *node) * ******************************** EXEC_MJ_JOINMARK means * we have just found a new outer tuple and a possible * matching inner tuple. This is the case after the - * INITIALIZE, SKIPOUTER or SKIPINNER states. - * ******************************** + * INITIALIZE, SKIPOUTER or SKIPINNER states. ******************************** + * */ case EXEC_MJ_JOINMARK: MJ_printf("ExecMergeJoin: EXEC_MJ_JOINMARK\n"); @@ -655,8 +655,8 @@ ExecMergeJoin(MergeJoin *node) break; /* - * ******************************** EXEC_MJ_TESTOUTER - * If the new outer tuple and the marked tuple satisify the + * ******************************** EXEC_MJ_TESTOUTER If + * the new outer tuple and the marked tuple satisify the * merge clause then we know we have duplicates in the * outer scan so we have to restore the inner scan to the * marked tuple and proceed to join the new outer tuples @@ -680,7 +680,9 @@ ExecMergeJoin(MergeJoin *node) * * new outer tuple > marked tuple * - * **************************** + *************************** + * + * */ case EXEC_MJ_TESTOUTER: MJ_printf("ExecMergeJoin: EXEC_MJ_TESTOUTER\n"); @@ -698,13 +700,14 @@ ExecMergeJoin(MergeJoin *node) if (qualResult) { - /* - * the merge clause matched so now we juggle the slots - * back the way they were and proceed to JOINTEST. + + /* + * the merge clause matched so now we juggle the slots + * back the way they were and proceed to JOINTEST. * - * I can't understand why we have to go to JOINTEST - * and compare outer tuple with the same inner one - * again -> go to JOINTUPLES... - vadim 02/27/98 + * I can't understand why we have to go to JOINTEST and + * compare outer tuple with the same inner one again + * -> go to JOINTUPLES... - vadim 02/27/98 */ ExecRestrPos(innerPlan); @@ -738,7 +741,7 @@ ExecMergeJoin(MergeJoin *node) return NULL; } - /* continue on to skip outer tuples */ + /* continue on to skip outer tuples */ mergestate->mj_JoinState = EXEC_MJ_SKIPOUTER; } break; @@ -756,7 +759,9 @@ ExecMergeJoin(MergeJoin *node) * we have to advance the outer scan until we find the outer * 8. * - **************************** + ************************** + * + * * * * @@ -856,7 +861,9 @@ ExecMergeJoin(MergeJoin *node) * we have to advance the inner scan until we find the inner * 12. * - **************************** + ************************** + * + * * * * @@ -988,10 +995,10 @@ bool ExecInitMergeJoin(MergeJoin *node, EState *estate, Plan *parent) { MergeJoinState *mergestate; - List *joinclauses; - RegProcedure rightsortop; - RegProcedure leftsortop; - RegProcedure sortop; + List *joinclauses; + RegProcedure rightsortop; + RegProcedure leftsortop; + RegProcedure sortop; TupleTableSlot *mjSlot; List *OSortopI; @@ -1042,7 +1049,7 @@ ExecInitMergeJoin(MergeJoin *node, EState *estate, Plan *parent) mjSlot->ttc_whichplan = -1; mjSlot->ttc_descIsNew = true; mergestate->mj_MarkedTupleSlot = mjSlot; - + /* ---------------- * get merge sort operators. * @@ -1166,9 +1173,9 @@ ExecEndMergeJoin(MergeJoin *node) */ ExecClearTuple(mergestate->jstate.cs_ResultTupleSlot); ExecClearTuple(mergestate->mj_MarkedTupleSlot); - pfree (mergestate->mj_MarkedTupleSlot); + pfree(mergestate->mj_MarkedTupleSlot); mergestate->mj_MarkedTupleSlot = NULL; - + MJ1_printf("ExecEndMergeJoin: %s\n", "node processing ended"); } @@ -1185,12 +1192,12 @@ ExecReScanMergeJoin(MergeJoin *node, ExprContext *exprCtxt, Plan *parent) mjSlot->ttc_tupleDescriptor = NULL; mjSlot->ttc_whichplan = -1; mjSlot->ttc_descIsNew = true; - + mergestate->mj_JoinState = EXEC_MJ_INITIALIZE; /* - * if chgParam of subnodes is not null then plans will be re-scanned by - * first ExecProcNode. + * if chgParam of subnodes is not null then plans will be re-scanned + * by first ExecProcNode. */ if (((Plan *) node)->lefttree->chgParam == NULL) ExecReScan(((Plan *) node)->lefttree, exprCtxt, (Plan *) node); diff --git a/src/backend/executor/nodeSeqscan.c b/src/backend/executor/nodeSeqscan.c index 6b2972d410..c5bceea06b 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.13 1998/09/01 03:22:28 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/executor/nodeSeqscan.c,v 1.14 1998/09/01 04:28:37 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -30,8 +30,7 @@ #include "access/heapam.h" #include "parser/parsetree.h" -static Oid -InitScanRelation(SeqScan *node, EState *estate, +static Oid InitScanRelation(SeqScan *node, EState *estate, CommonScanState *scanstate, Plan *outerPlan); static TupleTableSlot *SeqNext(SeqScan *node); @@ -83,7 +82,8 @@ SeqNext(SeqScan *node) slot = ExecStoreTuple(tuple,/* tuple to store */ slot, /* slot to store in */ - scandesc->rs_cbuf,/* buffer associated with this tuple */ + scandesc->rs_cbuf, /* buffer associated with + * this tuple */ false); /* don't pfree this pointer */ /* ---------------- diff --git a/src/backend/executor/nodeSubplan.c b/src/backend/executor/nodeSubplan.c index 95fa2f0afe..94abb9aae6 100644 --- a/src/backend/executor/nodeSubplan.c +++ b/src/backend/executor/nodeSubplan.c @@ -112,8 +112,8 @@ ExecInitSubPlan(SubPlan *node, EState *estate, Plan *parent) { EState *sp_estate = CreateExecutorState(); - ExecCheckPerms (CMD_SELECT, 0, node->rtable, (Query*) NULL); - + ExecCheckPerms(CMD_SELECT, 0, node->rtable, (Query *) NULL); + sp_estate->es_range_table = node->rtable; sp_estate->es_param_list_info = estate->es_param_list_info; sp_estate->es_param_exec_vals = estate->es_param_exec_vals; diff --git a/src/backend/executor/nodeTee.c b/src/backend/executor/nodeTee.c index b96cac45ad..9a39e649a9 100644 --- a/src/backend/executor/nodeTee.c +++ b/src/backend/executor/nodeTee.c @@ -15,7 +15,7 @@ * ExecEndTee * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/executor/Attic/nodeTee.c,v 1.22 1998/09/01 03:22:32 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/executor/Attic/nodeTee.c,v 1.23 1998/09/01 04:28:40 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -168,8 +168,8 @@ ExecInitTee(Tee *node, EState *currentEstate, Plan *parent) bufferRel = heap_openr(teeState->tee_bufferRelname); else bufferRel = heap_open( - heap_create_with_catalog(teeState->tee_bufferRelname, - tupType, RELKIND_RELATION)); + heap_create_with_catalog(teeState->tee_bufferRelname, + tupType, RELKIND_RELATION)); } else { @@ -178,8 +178,8 @@ ExecInitTee(Tee *node, EState *currentEstate, Plan *parent) newoid()); /* bufferRel = ExecCreatR(len, tupType, _TEMP_RELATION_ID); */ bufferRel = heap_open( - heap_create_with_catalog(teeState->tee_bufferRelname, - tupType, RELKIND_RELATION)); + heap_create_with_catalog(teeState->tee_bufferRelname, + tupType, RELKIND_RELATION)); } teeState->tee_bufferRel = bufferRel; @@ -228,11 +228,11 @@ ExecCountSlotsTee(Tee *node) static void initTeeScanDescs(Tee *node) { - TeeState *teeState; - Relation bufferRel; - ScanDirection dir; - Snapshot snapshot; - MemoryContext orig; + TeeState *teeState; + Relation bufferRel; + ScanDirection dir; + Snapshot snapshot; + MemoryContext orig; teeState = node->teestate; if (teeState->tee_leftScanDesc && teeState->tee_rightScanDesc) @@ -250,18 +250,18 @@ initTeeScanDescs(Tee *node) { teeState->tee_leftScanDesc = heap_beginscan(bufferRel, ScanDirectionIsBackward(dir), - snapshot, - 0, /* num scan keys */ - NULL /* scan keys */ + snapshot, + 0, /* num scan keys */ + NULL /* scan keys */ ); } if (teeState->tee_rightScanDesc == NULL) { teeState->tee_rightScanDesc = heap_beginscan(bufferRel, ScanDirectionIsBackward(dir), - snapshot, - 0, /* num scan keys */ - NULL /* scan keys */ + snapshot, + 0, /* num scan keys */ + NULL /* scan keys */ ); } @@ -365,7 +365,7 @@ ExecTee(Tee *node, Plan *parent) HeapTuple throwAway; /* Buffer buffer; */ - throwAway = heap_getnext(scanDesc,ScanDirectionIsBackward(dir)); + throwAway = heap_getnext(scanDesc, ScanDirectionIsBackward(dir)); } /* @@ -406,7 +406,7 @@ ExecTee(Tee *node, Plan *parent) result = ExecStoreTuple(heapTuple, /* tuple to store */ slot, /* slot to store in */ - scanDesc->rs_cbuf, /* this tuple's buffer */ + scanDesc->rs_cbuf, /* this tuple's buffer */ false); /* don't free stuff from * heap_getnext */ diff --git a/src/backend/executor/spi.c b/src/backend/executor/spi.c index 17f81537ee..f034dd064d 100644 --- a/src/backend/executor/spi.c +++ b/src/backend/executor/spi.c @@ -47,8 +47,7 @@ static int _SPI_pquery(QueryDesc *queryDesc, EState *state, int tcount); static void _SPI_fetch(FetchStmt *stmt); #endif -static int -_SPI_execute_plan(_SPI_plan *plan, +static int _SPI_execute_plan(_SPI_plan *plan, Datum *Values, char *Nulls, int tcount); #define _SPI_CPLAN_CURCXT 0 @@ -466,7 +465,7 @@ SPI_gettype(TupleDesc tupdesc, int fnumber) } typeTuple = SearchSysCacheTuple(TYPOID, - ObjectIdGetDatum(tupdesc->attrs[fnumber - 1]->atttypid), + ObjectIdGetDatum(tupdesc->attrs[fnumber - 1]->atttypid), 0, 0, 0); if (!HeapTupleIsValid(typeTuple)) diff --git a/src/backend/libpq/auth.c b/src/backend/libpq/auth.c index 027f945a3d..4b161ed0a1 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.30 1998/09/01 03:22:41 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/libpq/auth.c,v 1.31 1998/09/01 04:28:44 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -140,7 +140,7 @@ pg_krb4_recvauth(Port *port) return STATUS_ERROR; } -#endif /* KRB4 */ +#endif /* KRB4 */ #ifdef KRB5 @@ -320,7 +320,7 @@ pg_krb5_recvauth(Port *port) return STATUS_ERROR; } -#endif /* KRB5 */ +#endif /* KRB5 */ /* @@ -422,7 +422,7 @@ be_recvauth(Port *port) */ if (hba_getauthmethod(&port->raddr, port->user, port->database, - port->auth_arg, &port->auth_method) != STATUS_OK) + port->auth_arg, &port->auth_method) != STATUS_OK) PacketSendError(&port->pktInfo, "Missing or mis-configured pg_hba.conf file"); else if (PG_PROTOCOL_MAJOR(port->proto) == 0) diff --git a/src/backend/libpq/be-fsstubs.c b/src/backend/libpq/be-fsstubs.c index 7be91f13e8..b35eba81ca 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.25 1998/09/01 03:22:44 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/libpq/be-fsstubs.c,v 1.26 1998/09/01 04:28:46 momjian Exp $ * * NOTES * This should be moved to a more appropriate place. It is here @@ -370,22 +370,23 @@ lo_export(Oid lobjId, text *filename) /* * lo_commit - - * prepares large objects for transaction commit [PA, 7/17/98] + * prepares large objects for transaction commit [PA, 7/17/98] */ -void +void _lo_commit(void) { - int i; + int i; MemoryContext currentContext; if (fscxt == NULL) return; - + currentContext = MemoryContextSwitchTo((MemoryContext) fscxt); for (i = 0; i < MAX_LOBJ_FDS; i++) { - if (cookies[i] != NULL) inv_cleanindex(cookies[i]); + if (cookies[i] != NULL) + inv_cleanindex(cookies[i]); } MemoryContextSwitchTo(currentContext); diff --git a/src/backend/libpq/hba.c b/src/backend/libpq/hba.c index 83acfe4c00..381278e2b0 100644 --- a/src/backend/libpq/hba.c +++ b/src/backend/libpq/hba.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/libpq/hba.c,v 1.34 1998/09/01 03:22:46 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/libpq/hba.c,v 1.35 1998/09/01 04:28:48 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -161,7 +161,7 @@ process_hba_record(FILE *file, SockAddr *raddr, const char *user, /*--------------------------------------------------------------------------- Process the non-comment record in the config file that is next on the file. See if it applies to a connection to a host with IP address "*raddr" - to a database named "*database". If so, return *matches_p true + to a database named "*database". If so, return *matches_p true and *userauth_p and *auth_arg as the values from the entry. If not, leave *matches_p as it was. If the record has a syntax error, return *error_p true, after issuing a message to stderr. If no error, @@ -211,7 +211,7 @@ process_hba_record(FILE *file, SockAddr *raddr, const char *user, */ if ((strcmp(db, database) != 0 && strcmp(db, "all") != 0 && - (strcmp(db, "sameuser") != 0 || strcmp(database, user) != 0)) || + (strcmp(db, "sameuser") != 0 || strcmp(database, user) != 0)) || raddr->sa.sa_family != AF_UNIX) return; } @@ -271,7 +271,7 @@ process_hba_record(FILE *file, SockAddr *raddr, const char *user, */ if ((strcmp(db, database) != 0 && strcmp(db, "all") != 0 && - (strcmp(db, "sameuser") != 0 || strcmp(database, user) != 0)) || + (strcmp(db, "sameuser") != 0 || strcmp(database, user) != 0)) || raddr->sa.sa_family != AF_INET || ((file_ip_addr.s_addr ^ raddr->in.sin_addr.s_addr) & mask.s_addr) != 0x0000) return; @@ -679,7 +679,7 @@ parse_map_record(FILE *file, return; } } - sprintf(PQerrormsg,"Incomplete line in pg_ident: %s",file_map); + sprintf(PQerrormsg, "Incomplete line in pg_ident: %s", file_map); fputs(PQerrormsg, stderr); pqdebug("%s", PQerrormsg); } diff --git a/src/backend/libpq/portal.c b/src/backend/libpq/portal.c index 679d9bdc9b..3fb02b03ec 100644 --- a/src/backend/libpq/portal.c +++ b/src/backend/libpq/portal.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/libpq/Attic/portal.c,v 1.16 1998/09/01 03:22:48 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/libpq/Attic/portal.c,v 1.17 1998/09/01 04:28:50 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -481,7 +481,7 @@ PQftype(PortalBuffer *portal, int tuple_index, int field_number) return -1; if ((gbp = PQgroup(portal, tuple_index)) && - in_range("PQftype: field number", field_number, 0, gbp->no_fields)) + in_range("PQftype: field number", field_number, 0, gbp->no_fields)) return gbp->types[field_number].typid; return -1; } diff --git a/src/backend/libpq/pqcomm.c b/src/backend/libpq/pqcomm.c index f44176400c..349765f171 100644 --- a/src/backend/libpq/pqcomm.c +++ b/src/backend/libpq/pqcomm.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/libpq/pqcomm.c,v 1.52 1998/09/01 03:22:50 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/libpq/pqcomm.c,v 1.53 1998/09/01 04:28:51 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -60,8 +60,8 @@ #if defined(linux) #ifndef SOMAXCONN #define SOMAXCONN 5 /* from Linux listen(2) man page */ -#endif /* SOMAXCONN */ -#endif /* linux */ +#endif /* SOMAXCONN */ +#endif /* linux */ #include "miscadmin.h" #include "libpq/pqsignal.h" @@ -184,8 +184,9 @@ pq_getstr(char *s, int maxlen) int c = '\0'; #ifdef MULTIBYTE - unsigned char *p, *ps; - int len; + unsigned char *p, + *ps; + int len; ps = s; len = maxlen; @@ -203,11 +204,12 @@ pq_getstr(char *s, int maxlen) #ifdef MULTIBYTE p = pg_client_to_server(ps, len); - if (ps != p) { /* actual conversion has been done? */ - strcpy(ps, p); + if (ps != p) + { /* actual conversion has been done? */ + strcpy(ps, p); } #endif - + /* ----------------- * If EOF reached let caller know. * (This will only happen if we hit EOF before the string @@ -344,12 +346,12 @@ void pq_putstr(char *s) { #ifdef MULTIBYTE - unsigned char *p; + unsigned char *p; - p = pg_server_to_client(s, strlen(s)); + p = pg_server_to_client(s, strlen(s)); if (pqPutString(p, Pfout)) #else - if (pqPutString(s, Pfout)) + if (pqPutString(s, Pfout)) #endif { sprintf(PQerrormsg, @@ -555,16 +557,18 @@ StreamServerPort(char *hostName, short portName, int *fdP) strcpy(sock_path, saddr.un.sun_path); /* - * If the socket exists but nobody has an advisory lock on it - * we can safely delete the file. + * If the socket exists but nobody has an advisory lock on it we + * can safely delete the file. */ - if ((lock_fd = open(sock_path, O_RDONLY|O_NONBLOCK, 0666)) >= 0) { - if (flock(lock_fd, LOCK_EX|LOCK_NB) == 0) { + if ((lock_fd = open(sock_path, O_RDONLY | O_NONBLOCK, 0666)) >= 0) + { + if (flock(lock_fd, LOCK_EX | LOCK_NB) == 0) + { TPRINTF(TRACE_VERBOSE, "flock on %s, deleting", sock_path); unlink(sock_path); - } else { - TPRINTF(TRACE_VERBOSE, "flock failed for %s", sock_path); } + else + TPRINTF(TRACE_VERBOSE, "flock failed for %s", sock_path); close(lock_fd); } } @@ -584,8 +588,8 @@ StreamServerPort(char *hostName, short portName, int *fdP) strcat(PQerrormsg, "\tIs another postmaster already running on that port?\n"); if (family == AF_UNIX) - sprintf(PQerrormsg+strlen(PQerrormsg), - "\tIf not, remove socket node (%s) and retry.\n", + sprintf(PQerrormsg + strlen(PQerrormsg), + "\tIf not, remove socket node (%s) and retry.\n", sock_path); else strcat(PQerrormsg, "\tIf not, wait a few seconds and retry.\n"); @@ -593,17 +597,18 @@ StreamServerPort(char *hostName, short portName, int *fdP) return STATUS_ERROR; } - if (family == AF_UNIX) { + if (family == AF_UNIX) + { on_proc_exit(StreamDoUnlink, NULL); /* - * Open the socket file and get an advisory lock on it. - * The lock_fd is left open to keep the lock. + * Open the socket file and get an advisory lock on it. The + * lock_fd is left open to keep the lock. */ - if ((lock_fd = open(sock_path, O_RDONLY|O_NONBLOCK, 0666)) >= 0) { - if (flock(lock_fd, LOCK_EX|LOCK_NB) != 0) { + if ((lock_fd = open(sock_path, O_RDONLY | O_NONBLOCK, 0666)) >= 0) + { + if (flock(lock_fd, LOCK_EX | LOCK_NB) != 0) TPRINTF(TRACE_VERBOSE, "flock error for %s", sock_path); - } } } @@ -775,12 +780,13 @@ StreamOpen(char *hostName, short portName, Port *port) void pq_putncharlen(char *s, int n) { - unsigned char *p; - int len; + unsigned char *p; + int len; - p = pg_server_to_client(s, n); - len = strlen(p); - pq_putint(len, sizeof(int)); - pq_putnchar(p, len); + p = pg_server_to_client(s, n); + len = strlen(p); + pq_putint(len, sizeof(int)); + pq_putnchar(p, len); } + #endif diff --git a/src/backend/libpq/pqpacket.c b/src/backend/libpq/pqpacket.c index 5307adb7bc..952f652b76 100644 --- a/src/backend/libpq/pqpacket.c +++ b/src/backend/libpq/pqpacket.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/libpq/Attic/pqpacket.c,v 1.17 1998/08/25 21:22:27 scrappy Exp $ + * $Header: /cvsroot/pgsql/src/backend/libpq/Attic/pqpacket.c,v 1.18 1998/09/01 04:28:53 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -118,7 +118,8 @@ PacketReceiveFragment(Packet *pkt, int sock) * Set up a packet write for the postmaster event loop. */ -void PacketSendSetup(Packet *pkt, int nbytes, PacketDoneProc iodone, void *arg) +void +PacketSendSetup(Packet *pkt, int nbytes, PacketDoneProc iodone, void *arg) { pkt->len = (PacketLen) nbytes; pkt->nrtodo = nbytes; diff --git a/src/backend/libpq/pqsignal.c b/src/backend/libpq/pqsignal.c index ab5afd12eb..d06909f828 100644 --- a/src/backend/libpq/pqsignal.c +++ b/src/backend/libpq/pqsignal.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/libpq/pqsignal.c,v 1.9 1998/09/01 03:22:52 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/libpq/pqsignal.c,v 1.10 1998/09/01 04:28:55 momjian Exp $ * * NOTES * This shouldn't be in libpq, but the monitor and some other @@ -60,5 +60,5 @@ pqsignal(int signo, pqsigfunc func) if (sigaction(signo, &act, &oact) < 0) return SIG_ERR; return oact.sa_handler; -#endif /* !USE_POSIX_SIGNALS */ +#endif /* !USE_POSIX_SIGNALS */ } diff --git a/src/backend/main/main.c b/src/backend/main/main.c index 30e7ed3bc5..7f123d9dfd 100644 --- a/src/backend/main/main.c +++ b/src/backend/main/main.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/main/main.c,v 1.21 1998/06/15 19:28:28 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/main/main.c,v 1.22 1998/09/01 04:28:57 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -45,11 +45,11 @@ main(int argc, char *argv[]) #ifdef NOFIXADE int buffer[] = {SSIN_UACPROC, UAC_SIGBUS}; -#endif /* NOFIXADE */ +#endif /* NOFIXADE */ #ifdef NOPRINTADE int buffer[] = {SSIN_UACPROC, UAC_NOPRINT}; -#endif /* NOPRINTADE */ +#endif /* NOPRINTADE */ #endif #ifdef USE_LOCALE @@ -75,7 +75,7 @@ main(int argc, char *argv[]) elog(NOTICE, "setsysinfo failed: %d\n", errno); #endif -#endif /* NOFIXADE || NOPRINTADE */ +#endif /* NOFIXADE || NOPRINTADE */ /* * use one executable for both postgres and postmaster, invoke one or diff --git a/src/backend/nodes/copyfuncs.c b/src/backend/nodes/copyfuncs.c index d7dc535812..5083b47dbf 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.47 1998/09/01 03:22:53 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/nodes/copyfuncs.c,v 1.48 1998/09/01 04:29:00 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -999,9 +999,9 @@ _copyArrayRef(ArrayRef *from) ** -- JMH, 8/2/93 */ static RelOptInfo * -_copyRelOptInfo(RelOptInfo *from) +_copyRelOptInfo(RelOptInfo * from) { - RelOptInfo *newnode = makeNode(RelOptInfo); + RelOptInfo *newnode = makeNode(RelOptInfo); int i, len; @@ -1320,9 +1320,9 @@ _copyMergeOrder(MergeOrder *from) * ---------------- */ static ClauseInfo * -_copyClauseInfo(ClauseInfo *from) +_copyClauseInfo(ClauseInfo * from) { - ClauseInfo *newnode = makeNode(ClauseInfo); + ClauseInfo *newnode = makeNode(ClauseInfo); /* ---------------- * copy remainder of node @@ -1413,9 +1413,9 @@ _copyMInfo(MInfo *from) * ---------------- */ static JoinInfo * -_copyJoinInfo(JoinInfo *from) +_copyJoinInfo(JoinInfo * from) { - JoinInfo *newnode = makeNode(JoinInfo); + JoinInfo *newnode = makeNode(JoinInfo); /* ---------------- * copy remainder of node diff --git a/src/backend/nodes/equalfuncs.c b/src/backend/nodes/equalfuncs.c index 5e9be73256..7a82ad99fd 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.19 1998/09/01 03:22:55 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/nodes/equalfuncs.c,v 1.20 1998/09/01 04:29:03 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -281,7 +281,7 @@ _equalFunc(Func *a, Func *b) * ClauseInfo is a subclass of Node. */ static bool -_equalClauseInfo(ClauseInfo *a, ClauseInfo *b) +_equalClauseInfo(ClauseInfo * a, ClauseInfo * b) { Assert(IsA(a, ClauseInfo)); Assert(IsA(b, ClauseInfo)); @@ -306,7 +306,7 @@ _equalClauseInfo(ClauseInfo *a, ClauseInfo *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)); @@ -530,7 +530,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)); diff --git a/src/backend/nodes/list.c b/src/backend/nodes/list.c index c19a85ac50..19ebe881b1 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.14 1998/09/01 03:22:56 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/nodes/list.c,v 1.15 1998/09/01 04:29:05 momjian Exp $ * * NOTES * XXX a few of the following functions are duplicated to handle @@ -105,7 +105,7 @@ nconc(List *l1, List *l2) ; lnext(temp) = l2; - return l1; /* list1 is now list1+list2 */ + return l1; /* list1 is now list1+list2 */ } @@ -305,10 +305,10 @@ LispUnion(List *l1, List *l2) List *j = NIL; if (l1 == NIL) - return l2; /* XXX - should be copy of l2 */ + return l2; /* XXX - should be copy of l2 */ if (l2 == NIL) - return l1; /* XXX - should be copy of l1 */ + return l1; /* XXX - should be copy of l1 */ foreach(i, l1) { @@ -335,10 +335,10 @@ LispUnioni(List *l1, List *l2) List *j = NIL; if (l1 == NIL) - return l2; /* XXX - should be copy of l2 */ + return l2; /* XXX - should be copy of l2 */ if (l2 == NIL) - return l1; /* XXX - should be copy of l1 */ + return l1; /* XXX - should be copy of l1 */ foreach(i, l1) { diff --git a/src/backend/nodes/outfuncs.c b/src/backend/nodes/outfuncs.c index c515bde33b..f018fc5892 100644 --- a/src/backend/nodes/outfuncs.c +++ b/src/backend/nodes/outfuncs.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/nodes/outfuncs.c,v 1.45 1998/09/01 03:22:59 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/nodes/outfuncs.c,v 1.46 1998/09/01 04:29:07 momjian Exp $ * * NOTES * Every (plan) node in POSTGRES has an associated "out" routine which @@ -129,6 +129,7 @@ _outFuncCall(StringInfo str, FuncCall *node) appendStringInfo(str, " :args "); _outNode(str, node->args); } + #endif static void @@ -660,7 +661,8 @@ _outResdom(StringInfo str, Resdom *node) sprintf(buf, " :restypmod %d ", node->restypmod); appendStringInfo(str, buf); appendStringInfo(str, " :resname "); - sprintf(buf,"\"%s\"", node->resname); /* fix for SELECT col AS "my name" */ + sprintf(buf, "\"%s\"", node->resname); /* fix for SELECT col AS + * "my name" */ appendStringInfo(str, buf); sprintf(buf, " :reskey %d ", node->reskey); appendStringInfo(str, buf); @@ -990,7 +992,7 @@ _outEState(StringInfo str, EState *node) * Stuff from relation.h */ static void -_outRelOptInfo(StringInfo str, RelOptInfo *node) +_outRelOptInfo(StringInfo str, RelOptInfo * node) { char buf[500]; @@ -1356,7 +1358,7 @@ _outMergeOrder(StringInfo str, MergeOrder *node) * ClauseInfo is a subclass of Node. */ static void -_outClauseInfo(StringInfo str, ClauseInfo *node) +_outClauseInfo(StringInfo str, ClauseInfo * node) { char buf[500]; @@ -1424,7 +1426,7 @@ _outHInfo(StringInfo str, HInfo *node) * JoinInfo is a subclass of Node. */ static void -_outJoinInfo(StringInfo str, JoinInfo *node) +_outJoinInfo(StringInfo str, JoinInfo * node) { appendStringInfo(str, " JINFO "); diff --git a/src/backend/nodes/print.c b/src/backend/nodes/print.c index 585144007f..af3a3eb847 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.17 1998/08/16 05:35:35 thomas Exp $ + * $Header: /cvsroot/pgsql/src/backend/nodes/print.c,v 1.18 1998/09/01 04:29:10 momjian Exp $ * * HISTORY * AUTHOR DATE MAJOR EVENT @@ -201,7 +201,7 @@ print_expr(Node *expr, List *rtable) print_expr((Node *) get_leftop(e), rtable); opname = get_opname(((Oper *) e->oper)->opno); - printf(" %s ", ((opname != NULL)? opname: "(invalid operator)")); + printf(" %s ", ((opname != NULL) ? opname : "(invalid operator)")); print_expr((Node *) get_rightop(e), rtable); } else @@ -392,13 +392,16 @@ print_plan_recursive(Plan *p, Query *parsetree, int indentLevel, char *label) { List *lst; int whichplan = 0; - Append *appendplan = (Append *)p; - + Append *appendplan = (Append *) p; + foreach(lst, appendplan->appendplans) { - Plan *subnode = (Plan *)lfirst(lst); + Plan *subnode = (Plan *) lfirst(lst); - /* I don't think we need to fiddle with the range table here, bjm */ + /* + * I don't think we need to fiddle with the range table here, + * bjm + */ print_plan_recursive(subnode, parsetree, indentLevel + 3, "a: "); whichplan++; diff --git a/src/backend/nodes/readfuncs.c b/src/backend/nodes/readfuncs.c index 804942800f..9ffbc29043 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.36 1998/09/01 03:23:03 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/nodes/readfuncs.c,v 1.37 1998/09/01 04:29:12 momjian Exp $ * * NOTES * Most of the read functions for plan nodes are tested. (In fact, they @@ -326,14 +326,14 @@ _readAppend() local_node->appendplans = nodeRead(true); /* now read it */ token = lsptok(NULL, &length); /* eat :unionrtables */ - local_node->unionrtables = nodeRead(true); /* now read it */ + local_node->unionrtables = nodeRead(true); /* now read it */ token = lsptok(NULL, &length); /* eat :inheritrelid */ token = lsptok(NULL, &length); /* get inheritrelid */ local_node->inheritrelid = strtoul(token, NULL, 10); token = lsptok(NULL, &length); /* eat :inheritrtable */ - local_node->inheritrtable = nodeRead(true); /* now read it */ + local_node->inheritrtable = nodeRead(true); /* now read it */ return local_node; } @@ -716,7 +716,7 @@ _readResdom() else { local_node->resname = (char *) palloc(length + 1); - StrNCpy(local_node->resname, token+1, length + 1 - 2);/* strip quotes */ + StrNCpy(local_node->resname, token + 1, length + 1 - 2); /* strip quotes */ } token = lsptok(NULL, &length); /* eat :reskey */ @@ -1224,7 +1224,7 @@ _readEState() static RelOptInfo * _readRelOptInfo() { - RelOptInfo *local_node; + RelOptInfo *local_node; char *token; int length; @@ -1769,7 +1769,7 @@ _readMergeOrder() static ClauseInfo * _readClauseInfo() { - ClauseInfo *local_node; + ClauseInfo *local_node; char *token; int length; @@ -1867,7 +1867,7 @@ _readHInfo() static JoinInfo * _readJoinInfo() { - JoinInfo *local_node; + JoinInfo *local_node; char *token; int length; diff --git a/src/backend/optimizer/geqo/geqo_eval.c b/src/backend/optimizer/geqo/geqo_eval.c index cf52ddfc45..4d2df3373c 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.23 1998/09/01 03:23:07 momjian Exp $ + * $Id: geqo_eval.c,v 1.24 1998/09/01 04:29:16 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -50,12 +50,12 @@ #include "optimizer/geqo_paths.h" -static List *gimme_clause_joins(Query *root, RelOptInfo *outer_rel, RelOptInfo *inner_rel); -static RelOptInfo *gimme_clauseless_join(RelOptInfo *outer_rel, RelOptInfo *inner_rel); -static RelOptInfo *init_join_rel(RelOptInfo *outer_rel, RelOptInfo *inner_rel, JoinInfo *joininfo); +static List *gimme_clause_joins(Query *root, RelOptInfo * outer_rel, RelOptInfo * inner_rel); +static RelOptInfo *gimme_clauseless_join(RelOptInfo * outer_rel, RelOptInfo * inner_rel); +static RelOptInfo *init_join_rel(RelOptInfo * outer_rel, RelOptInfo * inner_rel, JoinInfo * joininfo); static List *new_join_tlist(List *tlist, List *other_relids, int first_resdomno); static List *new_joininfo_list(List *joininfo_list, List *join_relids); -static void geqo_joinrel_size(RelOptInfo *joinrel, RelOptInfo *outer_rel, RelOptInfo *inner_rel); +static void geqo_joinrel_size(RelOptInfo * joinrel, RelOptInfo * outer_rel, RelOptInfo * inner_rel); static RelOptInfo *geqo_nth(int stop, List *rels); /* @@ -66,7 +66,7 @@ static RelOptInfo *geqo_nth(int stop, List *rels); Cost geqo_eval(Query *root, Gene *tour, int num_gene) { - RelOptInfo *joinrel; + RelOptInfo *joinrel; Cost fitness; List *temp; @@ -99,13 +99,13 @@ 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 *outer_rel) +gimme_tree(Query *root, Gene *tour, int rel_count, int num_gene, RelOptInfo * outer_rel) { - RelOptInfo *inner_rel; /* current relation */ + RelOptInfo *inner_rel; /* current relation */ int base_rel_index; List *new_rels = NIL; - RelOptInfo *new_rel = NULL; + RelOptInfo *new_rel = NULL; if (rel_count < num_gene) { /* tree not yet finished */ @@ -189,7 +189,7 @@ gimme_tree(Query *root, Gene *tour, int rel_count, int num_gene, RelOptInfo *out */ static List * -gimme_clause_joins(Query *root, RelOptInfo *outer_rel, RelOptInfo *inner_rel) +gimme_clause_joins(Query *root, RelOptInfo * outer_rel, RelOptInfo * inner_rel) { List *join_list = NIL; List *i = NIL; @@ -197,8 +197,8 @@ gimme_clause_joins(Query *root, RelOptInfo *outer_rel, RelOptInfo *inner_rel) foreach(i, joininfo_list) { - JoinInfo *joininfo = (JoinInfo *) lfirst(i); - RelOptInfo *rel = NULL; + JoinInfo *joininfo = (JoinInfo *) lfirst(i); + RelOptInfo *rel = NULL; if (!joininfo->inactive) { @@ -240,7 +240,7 @@ gimme_clause_joins(Query *root, RelOptInfo *outer_rel, RelOptInfo *inner_rel) */ static RelOptInfo * -gimme_clauseless_join(RelOptInfo *outer_rel, RelOptInfo *inner_rel) +gimme_clauseless_join(RelOptInfo * outer_rel, RelOptInfo * inner_rel) { return init_join_rel(outer_rel, inner_rel, (JoinInfo *) NULL); } @@ -257,9 +257,9 @@ gimme_clauseless_join(RelOptInfo *outer_rel, RelOptInfo *inner_rel) * Returns the new join relation node. */ static RelOptInfo * -init_join_rel(RelOptInfo *outer_rel, RelOptInfo *inner_rel, JoinInfo *joininfo) +init_join_rel(RelOptInfo * outer_rel, RelOptInfo * inner_rel, JoinInfo * joininfo) { - RelOptInfo *joinrel = makeNode(RelOptInfo); + RelOptInfo *joinrel = makeNode(RelOptInfo); List *joinrel_joininfo_list = NIL; List *new_outer_tlist; List *new_inner_tlist; @@ -389,13 +389,13 @@ new_joininfo_list(List *joininfo_list, List *join_relids) { List *current_joininfo_list = NIL; List *new_otherrels = NIL; - JoinInfo *other_joininfo = (JoinInfo *) NULL; + JoinInfo *other_joininfo = (JoinInfo *) NULL; List *xjoininfo = NIL; foreach(xjoininfo, joininfo_list) { List *or; - JoinInfo *joininfo = (JoinInfo *) lfirst(xjoininfo); + JoinInfo *joininfo = (JoinInfo *) lfirst(xjoininfo); new_otherrels = joininfo->otherrels; foreach(or, new_otherrels) @@ -457,16 +457,16 @@ geqo_add_new_joininfos(Query *root, List *joinrels, List *outerrels) List *xrel = NIL; List *xjoininfo = NIL; - RelOptInfo *rel; + RelOptInfo *rel; List *relids; List *super_rels; List *xsuper_rel = NIL; - JoinInfo *new_joininfo; + JoinInfo *new_joininfo; foreach(xjoinrel, joinrels) { - RelOptInfo *joinrel = (RelOptInfo *) lfirst(xjoinrel); + RelOptInfo *joinrel = (RelOptInfo *) lfirst(xjoinrel); foreach(xrelid, joinrel->relids) { @@ -477,8 +477,8 @@ geqo_add_new_joininfos(Query *root, List *joinrels, List *outerrels) */ /* - * ! BUG BUG ! Relid relid = (Relid)lfirst(xrelid); RelOptInfo *rel = - * get_join_rel(root, relid); + * ! BUG BUG ! Relid relid = (Relid)lfirst(xrelid); RelOptInfo + * *rel = get_join_rel(root, relid); */ /* @@ -502,11 +502,11 @@ geqo_add_new_joininfos(Query *root, List *joinrels, List *outerrels) } foreach(xjoinrel, joinrels) { - RelOptInfo *joinrel = (RelOptInfo *) lfirst(xjoinrel); + RelOptInfo *joinrel = (RelOptInfo *) lfirst(xjoinrel); foreach(xjoininfo, joinrel->joininfo) { - JoinInfo *joininfo = (JoinInfo *) lfirst(xjoininfo); + JoinInfo *joininfo = (JoinInfo *) lfirst(xjoininfo); List *other_rels = joininfo->otherrels; List *clause_info = joininfo->jinfoclauseinfo; bool mergejoinable = joininfo->mergejoinable; @@ -516,8 +516,8 @@ geqo_add_new_joininfos(Query *root, List *joinrels, List *outerrels) { /* - * ! BUG BUG ! Relid relid = (Relid)lfirst(xrelid); RelOptInfo - * *rel = get_join_rel(root, relid); + * ! BUG BUG ! Relid relid = (Relid)lfirst(xrelid); + * RelOptInfo *rel = get_join_rel(root, relid); */ /* @@ -549,12 +549,12 @@ geqo_add_new_joininfos(Query *root, List *joinrels, List *outerrels) foreach(xsuper_rel, super_rels) { - RelOptInfo *super_rel = (RelOptInfo *) lfirst(xsuper_rel); + RelOptInfo *super_rel = (RelOptInfo *) lfirst(xsuper_rel); if (nonoverlap_rels(super_rel, joinrel)) { List *new_relids = super_rel->relids; - JoinInfo *other_joininfo = + JoinInfo *other_joininfo = joininfo_member(new_relids, joinrel->joininfo); @@ -566,7 +566,7 @@ geqo_add_new_joininfos(Query *root, List *joinrels, List *outerrels) } else { - JoinInfo *new_joininfo = makeNode(JoinInfo); + JoinInfo *new_joininfo = makeNode(JoinInfo); new_joininfo->otherrels = new_relids; new_joininfo->jinfoclauseinfo = clause_info; @@ -611,13 +611,13 @@ geqo_final_join_rels(List *join_rel_list) */ foreach(xrel, join_rel_list) { - RelOptInfo *rel = (RelOptInfo *) lfirst(xrel); + RelOptInfo *rel = (RelOptInfo *) lfirst(xrel); List *xjoininfo = NIL; bool final = true; foreach(xjoininfo, rel->joininfo) { - JoinInfo *joininfo = (JoinInfo *) lfirst(xjoininfo); + JoinInfo *joininfo = (JoinInfo *) lfirst(xjoininfo); if (joininfo->otherrels != NIL) { @@ -645,7 +645,7 @@ geqo_final_join_rels(List *join_rel_list) * Modifies the superrels field of rel */ static void -add_superrels(RelOptInfo *rel, RelOptInfo *super_rel) +add_superrels(RelOptInfo * rel, RelOptInfo * super_rel) { rel->superrels = lappend(rel->superrels, super_rel); } @@ -660,7 +660,7 @@ add_superrels(RelOptInfo *rel, RelOptInfo *super_rel) * Returns non-nil if rel1 and rel2 do not overlap. */ static bool -nonoverlap_rels(RelOptInfo *rel1, RelOptInfo *rel2) +nonoverlap_rels(RelOptInfo * rel1, RelOptInfo * rel2) { return nonoverlap_sets(rel1->relids, rel2->relids); } @@ -680,7 +680,7 @@ nonoverlap_sets(List *s1, List *s2) return true; } -#endif /* NOTUSED */ +#endif /* NOTUSED */ /* * geqo_joinrel_size-- @@ -688,7 +688,7 @@ nonoverlap_sets(List *s1, List *s2) * long join queries; so get logarithm of size when MAXINT overflow; */ static void -geqo_joinrel_size(RelOptInfo *joinrel, RelOptInfo *outer_rel, RelOptInfo *inner_rel) +geqo_joinrel_size(RelOptInfo * joinrel, RelOptInfo * outer_rel, RelOptInfo * inner_rel) { Cost temp; int ntuples; diff --git a/src/backend/optimizer/geqo/geqo_main.c b/src/backend/optimizer/geqo/geqo_main.c index fd75985c40..68b8f6245e 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.10 1998/09/01 03:23:09 momjian Exp $ + * $Id: geqo_main.c,v 1.11 1998/09/01 04:29:18 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -98,7 +98,7 @@ geqo(Query *root) status_interval; Gene *best_tour; - RelOptInfo *best_rel; + RelOptInfo *best_rel; /* Plan *best_plan; */ diff --git a/src/backend/optimizer/geqo/geqo_misc.c b/src/backend/optimizer/geqo/geqo_misc.c index c1dab6a99c..e79b2138ea 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.10 1998/09/01 03:23:10 momjian Exp $ + * $Id: geqo_misc.c,v 1.11 1998/09/01 04:29:19 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -146,7 +146,7 @@ geqo_print_joinclauses(Query *root, List *clauses) foreach(l, clauses) { - ClauseInfo *c = lfirst(l); + ClauseInfo *c = lfirst(l); print_expr((Node *) c->clause, root->rtable); if (lnext(l)) @@ -262,7 +262,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_paths.c b/src/backend/optimizer/geqo/geqo_paths.c index a23c9010de..25928d167f 100644 --- a/src/backend/optimizer/geqo/geqo_paths.c +++ b/src/backend/optimizer/geqo/geqo_paths.c @@ -5,7 +5,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: geqo_paths.c,v 1.11 1998/09/01 03:23:12 momjian Exp $ + * $Id: geqo_paths.c,v 1.12 1998/09/01 04:29:21 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -28,8 +28,8 @@ #include "optimizer/geqo_paths.h" -static List *geqo_prune_rel(RelOptInfo *rel, List *other_rels); -static Path *set_paths(RelOptInfo *rel, Path *unorderedpath); +static List *geqo_prune_rel(RelOptInfo * rel, List *other_rels); +static Path *set_paths(RelOptInfo * rel, Path *unorderedpath); /* * geqo-prune-rels-- @@ -47,8 +47,8 @@ geqo_prune_rels(List *rel_list) if (rel_list != NIL) { temp_list = lcons(lfirst(rel_list), - geqo_prune_rels(geqo_prune_rel((RelOptInfo *) lfirst(rel_list), - lnext(rel_list)))); + geqo_prune_rels(geqo_prune_rel((RelOptInfo *) lfirst(rel_list), + lnext(rel_list)))); } return temp_list; } @@ -65,12 +65,12 @@ geqo_prune_rels(List *rel_list) * */ static List * -geqo_prune_rel(RelOptInfo *rel, List *other_rels) +geqo_prune_rel(RelOptInfo * rel, List *other_rels) { List *i = NIL; List *t_list = NIL; List *temp_node = NIL; - RelOptInfo *other_rel = (RelOptInfo *) NULL; + RelOptInfo *other_rel = (RelOptInfo *) NULL; foreach(i, other_rels) { @@ -102,7 +102,7 @@ geqo_prune_rel(RelOptInfo *rel, List *other_rels) * */ void -geqo_rel_paths(RelOptInfo *rel) +geqo_rel_paths(RelOptInfo * rel) { List *y = NIL; Path *path = (Path *) NULL; @@ -134,7 +134,7 @@ geqo_rel_paths(RelOptInfo *rel) * */ static Path * -set_paths(RelOptInfo *rel, Path *unorderedpath) +set_paths(RelOptInfo * rel, Path *unorderedpath) { Path *cheapest = set_cheapest(rel, rel->pathlist); diff --git a/src/backend/optimizer/geqo/minspantree.c b/src/backend/optimizer/geqo/minspantree.c index c4e1b53ad0..41171fc510 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.7 1998/08/10 02:26:19 momjian Exp $ +* $Header: /cvsroot/pgsql/src/backend/optimizer/geqo/Attic/minspantree.c,v 1.8 1998/09/01 04:29:24 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); @@ -70,8 +70,8 @@ minspantree(Query *root, List *join_rels, RelOptInfo *garel) id1, id2; List *r = NIL; - RelOptInfo *joinrel = NULL; - RelOptInfo **tmprel_array; + RelOptInfo *joinrel = NULL; + RelOptInfo **tmprel_array; /* allocate memory for matrix tmprel_array[x][y] */ @@ -111,9 +111,9 @@ minspantree(Query *root, List *join_rels, RelOptInfo *garel) else if (number_of_joins == 3) { - RelOptInfo *rel12 = (RelOptInfo *) &tmprel_array[1][2]; - RelOptInfo *rel13 = (RelOptInfo *) &tmprel_array[1][3]; - RelOptInfo *rel23 = (RelOptInfo *) &tmprel_array[2][3]; + RelOptInfo *rel12 = (RelOptInfo *) & tmprel_array[1][2]; + RelOptInfo *rel13 = (RelOptInfo *) & tmprel_array[1][3]; + RelOptInfo *rel23 = (RelOptInfo *) & tmprel_array[2][3]; if (rel12->cheapestpath->path_cost > rel13->cheapestpath->path_cost) { @@ -159,9 +159,9 @@ minspantree(Query *root, List *join_rels, RelOptInfo *garel) if (connectto[tempn] != 0) { if (n > tempn) - joinrel = (RelOptInfo *) &tmprel_array[tempn][n]; + joinrel = (RelOptInfo *) & tmprel_array[tempn][n]; else - joinrel = (RelOptInfo *) &tmprel_array[n][tempn]; + joinrel = (RelOptInfo *) & tmprel_array[n][tempn]; dist = joinrel->cheapestpath->path_cost; if (dist < disttoconnect[tempn]) diff --git a/src/backend/optimizer/path/allpaths.c b/src/backend/optimizer/path/allpaths.c index 00b22c0abc..8de364a04a 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.22 1998/09/01 03:23:17 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/path/allpaths.c,v 1.23 1998/09/01 04:29:27 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -45,8 +45,10 @@ int32 _use_geqo_rels_ = GEQO_RELS; static void find_rel_paths(Query *root, List *rels); static List *find_join_paths(Query *root, List *outer_rels, 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 +78,7 @@ find_paths(Query *root, List *rels) if (levels_needed <= 1) { + /* * Unsorted single relation, no more processing is required. */ @@ -83,6 +86,7 @@ find_paths(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. @@ -118,10 +122,10 @@ find_rel_paths(Query *root, List *rels) sequential_scan_list = lcons(create_seqscan_path(rel), NIL); rel_index_scan_list = find_index_paths(root, - rel, - find_relation_indices(root, rel), - rel->clauseinfo, - rel->joininfo); + rel, + find_relation_indices(root, rel), + rel->clauseinfo, + rel->joininfo); or_index_scan_list = create_or_index_paths(root, rel, rel->clauseinfo); @@ -180,7 +184,8 @@ find_join_paths(Query *root, List *outer_rels, int levels_needed) *******************************************/ if ((_use_geqo_) && length(root->base_rel_list) >= _use_geqo_rels_) - return lcons(geqo(root), NIL); /* returns *one* RelOptInfo, so lcons it */ + return lcons(geqo(root), NIL); /* returns *one* RelOptInfo, so + * lcons it */ /******************************************* * rest will be deprecated in case of GEQO * @@ -280,7 +285,7 @@ print_joinclauses(Query *root, List *clauses) foreach(l, clauses) { - ClauseInfo *c = lfirst(l); + ClauseInfo *c = lfirst(l); print_expr((Node *) c->clause, root->rtable); if (lnext(l)) @@ -396,7 +401,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; @@ -412,4 +417,4 @@ debug_print_rel(Query *root, RelOptInfo *rel) print_path(root, rel->cheapestpath, 1); } -#endif /* OPTIMIZER_DEBUG */ +#endif /* OPTIMIZER_DEBUG */ diff --git a/src/backend/optimizer/path/clausesel.c b/src/backend/optimizer/path/clausesel.c index 94cc5c71fc..8a0536c7bb 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.12 1998/09/01 03:23:19 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/path/clausesel.c,v 1.13 1998/09/01 04:29:29 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -46,7 +46,7 @@ void set_clause_selectivities(List *clauseinfo_list, Cost new_selectivity) { List *temp; - ClauseInfo *clausenode; + ClauseInfo *clausenode; Cost cost_clause; foreach(temp, clauseinfo_list) @@ -95,7 +95,7 @@ product_selec(List *clauseinfo_list) void set_rest_relselec(Query *root, List *rel_list) { - RelOptInfo *rel; + RelOptInfo *rel; List *x; foreach(x, rel_list) @@ -117,7 +117,7 @@ void set_rest_selec(Query *root, List *clauseinfo_list) { List *temp = NIL; - ClauseInfo *clausenode = (ClauseInfo *) NULL; + ClauseInfo *clausenode = (ClauseInfo *) NULL; Cost cost_clause; foreach(temp, clauseinfo_list) @@ -159,8 +159,8 @@ set_rest_selec(Query *root, List *clauseinfo_list) Cost compute_clause_selec(Query *root, Node *clause, List *or_selectivities) { - if (is_opclause(clause)) - return compute_selec(root, lcons(clause,NIL), or_selectivities); + if (is_opclause(clause)) + return compute_selec(root, lcons(clause, NIL), or_selectivities); else if (not_clause(clause)) { @@ -182,9 +182,7 @@ compute_clause_selec(Query *root, Node *clause, List *or_selectivities) return compute_selec(root, ((Expr *) clause)->args, or_selectivities); } else - { return compute_selec(root, lcons(clause, NIL), or_selectivities); - } } /* diff --git a/src/backend/optimizer/path/costsize.c b/src/backend/optimizer/path/costsize.c index 7d00a7f1f5..5fbf3e5059 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.24 1998/09/01 03:23:20 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/path/costsize.c,v 1.25 1998/09/01 04:29:30 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -360,7 +360,7 @@ cost_hashjoin(Cost outercost, * Returns the size. */ int -compute_rel_size(RelOptInfo *rel) +compute_rel_size(RelOptInfo * rel) { Cost temp; int temp1; @@ -383,7 +383,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)); } diff --git a/src/backend/optimizer/path/hashutils.c b/src/backend/optimizer/path/hashutils.c index 29ce0f67fc..59bf4897c0 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.6 1998/09/01 03:23:22 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/path/Attic/hashutils.c,v 1.7 1998/09/01 04:29:32 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -39,7 +39,7 @@ group_clauses_by_hashop(List *clauseinfo_list, int inner_relid) { List *hashinfo_list = NIL; - ClauseInfo *clauseinfo = (ClauseInfo *) NULL; + ClauseInfo *clauseinfo = (ClauseInfo *) NULL; List *i = NIL; Oid hashjoinop = 0; @@ -121,7 +121,7 @@ match_hashop_hashinfo(Oid hashop, List *hashinfo_list) key = xhashinfo->hashop; if (hashop == key) { /* found */ - return xhashinfo; /* should be a hashinfo node ! */ + return xhashinfo; /* should be a hashinfo node ! */ } } return (HInfo *) NIL; diff --git a/src/backend/optimizer/path/indxpath.c b/src/backend/optimizer/path/indxpath.c index 9d991d97aa..24f46ec933 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.33 1998/09/01 03:23:23 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/path/indxpath.c,v 1.34 1998/09/01 04:29:33 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -41,46 +41,36 @@ #include "parser/parsetree.h" /* for getrelid() */ #include "parser/parse_expr.h" /* for exprType() */ #include "parser/parse_oper.h" /* for oprid() and oper() */ -#include "parser/parse_coerce.h" /* for IS_BINARY_COMPATIBLE() */ +#include "parser/parse_coerce.h"/* for IS_BINARY_COMPATIBLE() */ #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 *clauseinfo_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, +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, int xclass, List *or_clauses, List *other_matching_indices); -static List * -group_clauses_by_indexkey(RelOptInfo *rel, RelOptInfo *index, +static List *group_clauses_by_indexkey(RelOptInfo * rel, RelOptInfo * index, int *indexkeys, Oid *classes, List *clauseinfo_list); -static List * -group_clauses_by_ikey_for_joins(RelOptInfo *rel, RelOptInfo *index, +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 ClauseInfo * -match_clause_to_indexkey(RelOptInfo *rel, RelOptInfo *index, int indexkey, - int xclass, ClauseInfo *clauseInfo, bool join); -static bool -pred_test(List *predicate_list, List *clauseinfo_list, +static ClauseInfo *match_clause_to_indexkey(RelOptInfo * rel, RelOptInfo * index, int indexkey, + int xclass, ClauseInfo * clauseInfo, bool join); +static bool pred_test(List *predicate_list, List *clauseinfo_list, List *joininfo_list); static bool one_pred_test(Expr *predicate, List *clauseinfo_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 *clauseinfo_list); -static List * -index_innerjoin(Query *root, RelOptInfo *rel, - List *clausegroup_list, RelOptInfo *index); -static List * -create_index_paths(Query *root, RelOptInfo *rel, RelOptInfo *index, +static List *index_innerjoin(Query *root, RelOptInfo * rel, + List *clausegroup_list, RelOptInfo * index); +static List *create_index_paths(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() @@ -110,14 +100,14 @@ static bool function_index_operand(Expr *funcOpnd, RelOptInfo *rel, RelOptInfo * */ List * find_index_paths(Query *root, - RelOptInfo *rel, + RelOptInfo * rel, List *indices, List *clauseinfo_list, List *joininfo_list) { List *scanclausegroups = NIL; List *scanpaths = NIL; - RelOptInfo *index = (RelOptInfo *) NULL; + RelOptInfo *index = (RelOptInfo *) NULL; List *joinclausegroups = NIL; List *joinpaths = NIL; List *retval = NIL; @@ -127,7 +117,10 @@ find_index_paths(Query *root, { index = (RelOptInfo *) lfirst(ilist); - /* If this is a partial index, return if it fails the predicate test */ + /* + * If this is a partial index, return if it fails the predicate + * test + */ if (index->indpred != NIL) if (!pred_test(index->indpred, clauseinfo_list, joininfo_list)) continue; @@ -136,20 +129,20 @@ find_index_paths(Query *root, * 1. Try matching the index against subclauses of an 'or' clause. * The fields of the clauseinfo 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. + * 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, - index->indexkeys[0], - index->classlist[0], - clauseinfo_list); + index, + index->indexkeys[0], + index->classlist[0], + clauseinfo_list); /* - * 2. If the keys of this index match any of the available restriction - * clauses, then create pathnodes corresponding to each group of - * usable clauses. + * 2. If the keys of this index match any of the available + * restriction clauses, then create pathnodes corresponding to + * each group of usable clauses. */ scanclausegroups = group_clauses_by_indexkey(rel, index, @@ -167,10 +160,10 @@ find_index_paths(Query *root, /* * 3. If this index can be used with any join clause, then create - * pathnodes for each group of usable clauses. An index can be used - * with a join clause if its ordering is useful for a mergejoin, or if - * the index can possibly be used for scanning the inner relation of a - * nestloop join. + * pathnodes for each group of usable clauses. An index can be + * used with a join clause if its ordering is useful for a + * mergejoin, or if the index can possibly be used for scanning + * the inner relation of a nestloop join. */ joinclausegroups = indexable_joinclauses(rel, index, joininfo_list, clauseinfo_list); joinpaths = NIL; @@ -179,7 +172,7 @@ find_index_paths(Query *root, { List *new_join_paths = create_index_paths(root, rel, index, - joinclausegroups, + joinclausegroups, true); List *innerjoin_paths = index_innerjoin(root, rel, joinclausegroups, index); @@ -225,13 +218,13 @@ find_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 *clauseinfo_list) { - ClauseInfo *clauseinfo = (ClauseInfo *) NULL; + ClauseInfo *clauseinfo = (ClauseInfo *) NULL; List *i = NIL; foreach(i, clauseinfo_list) @@ -262,10 +255,10 @@ 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; + bool result; /* * Normal index. @@ -305,8 +298,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, @@ -323,30 +316,29 @@ match_index_orclause(RelOptInfo *rel, foreach(clist, or_clauses) matching_indices = lcons(NIL, matching_indices); } - else matching_indices = other_matching_indices; + else + matching_indices = other_matching_indices; index_list = matching_indices; foreach(clist, or_clauses) { clause = lfirst(clist); - + if (is_opclause(clause) && op_class(((Oper *) ((Expr *) clause)->oper)->opno, xclass, index->relam) && ((match_index_to_operand(indexkey, - (Expr *) get_leftop((Expr *) clause), - rel, - index) && + (Expr *) get_leftop((Expr *) clause), + rel, + index) && IsA(get_rightop((Expr *) clause), Const)) || (match_index_to_operand(indexkey, (Expr *) get_rightop((Expr *) clause), - rel, - index) && - IsA(get_leftop((Expr *) clause), Const)))) - { + rel, + index) && + IsA(get_leftop((Expr *) clause), Const)))) lfirst(matching_indices) = lcons(index, lfirst(matching_indices)); - } matching_indices = lnext(matching_indices); } @@ -396,14 +388,14 @@ 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 *clauseinfo_list) { List *curCinfo = NIL; - ClauseInfo *matched_clause = (ClauseInfo *) NULL; + ClauseInfo *matched_clause = (ClauseInfo *) NULL; List *clausegroup = NIL; int curIndxKey; Oid curClass; @@ -420,7 +412,7 @@ group_clauses_by_indexkey(RelOptInfo *rel, foreach(curCinfo, clauseinfo_list) { - ClauseInfo *temp = (ClauseInfo *) lfirst(curCinfo); + ClauseInfo *temp = (ClauseInfo *) lfirst(curCinfo); matched_clause = match_clause_to_indexkey(rel, index, @@ -458,15 +450,15 @@ 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, List *restr_cinfo_list) { List *curCinfo = NIL; - ClauseInfo *matched_clause = (ClauseInfo *) NULL; + ClauseInfo *matched_clause = (ClauseInfo *) NULL; List *clausegroup = NIL; int curIndxKey; Oid curClass; @@ -484,7 +476,7 @@ group_clauses_by_ikey_for_joins(RelOptInfo *rel, foreach(curCinfo, join_cinfo_list) { - ClauseInfo *temp = (ClauseInfo *) lfirst(curCinfo); + ClauseInfo *temp = (ClauseInfo *) lfirst(curCinfo); matched_clause = match_clause_to_indexkey(rel, index, @@ -500,7 +492,7 @@ group_clauses_by_ikey_for_joins(RelOptInfo *rel, } foreach(curCinfo, restr_cinfo_list) { - ClauseInfo *temp = (ClauseInfo *) lfirst(curCinfo); + ClauseInfo *temp = (ClauseInfo *) lfirst(curCinfo); matched_clause = match_clause_to_indexkey(rel, index, @@ -580,11 +572,11 @@ group_clauses_by_ikey_for_joins(RelOptInfo *rel, * */ static ClauseInfo * -match_clause_to_indexkey(RelOptInfo *rel, - RelOptInfo *index, +match_clause_to_indexkey(RelOptInfo * rel, + RelOptInfo * index, int indexkey, int xclass, - ClauseInfo *clauseInfo, + ClauseInfo * clauseInfo, bool join) { Expr *clause = clauseInfo->clause; @@ -607,6 +599,7 @@ match_clause_to_indexkey(RelOptInfo *rel, */ if (!join) { + /* * Check for standard s-argable clause */ @@ -622,24 +615,28 @@ match_clause_to_indexkey(RelOptInfo *rel, index)); #ifndef IGNORE_BINARY_COMPATIBLE_INDICES - /* Didn't find an index? - * Then maybe we can find another binary-compatible index instead... - * thomas 1998-08-14 + + /* + * Didn't find an index? Then maybe we can find another + * binary-compatible index instead... thomas 1998-08-14 */ - if (! isIndexable) + if (!isIndexable) { - Oid ltype; - Oid rtype; + Oid ltype; + Oid rtype; - ltype = exprType((Node *)leftop); - rtype = exprType((Node *)rightop); + ltype = exprType((Node *) leftop); + rtype = exprType((Node *) rightop); - /* make sure we have two different binary-compatible types... */ + /* + * make sure we have two different binary-compatible + * types... + */ if ((ltype != rtype) - && IS_BINARY_COMPATIBLE(ltype, rtype)) + && IS_BINARY_COMPATIBLE(ltype, rtype)) { - char *opname; - Operator newop; + char *opname; + Operator newop; opname = get_opname(restrict_op); if (opname != NULL) @@ -660,9 +657,7 @@ match_clause_to_indexkey(RelOptInfo *rel, index)); if (isIndexable) - { ((Oper *) ((Expr *) clause)->oper)->opno = restrict_op; - } } } } @@ -679,24 +674,24 @@ match_clause_to_indexkey(RelOptInfo *rel, get_commutator(((Oper *) ((Expr *) clause)->oper)->opno); isIndexable = ((restrict_op != InvalidOid) && - op_class(restrict_op, xclass, index->relam) && - IndexScanableOperand(rightop, - indexkey, rel, index)); + op_class(restrict_op, xclass, index->relam) && + IndexScanableOperand(rightop, + indexkey, rel, index)); #ifndef IGNORE_BINARY_COMPATIBLE_INDICES - if (! isIndexable) + if (!isIndexable) { - Oid ltype; - Oid rtype; + Oid ltype; + Oid rtype; - ltype = exprType((Node *)leftop); - rtype = exprType((Node *)rightop); + ltype = exprType((Node *) leftop); + rtype = exprType((Node *) rightop); if ((ltype != rtype) - && IS_BINARY_COMPATIBLE(ltype, rtype)) + && IS_BINARY_COMPATIBLE(ltype, rtype)) { - char *opname; - Operator newop; + char *opname; + Operator newop; restrict_op = ((Oper *) ((Expr *) clause)->oper)->opno; @@ -712,16 +707,14 @@ match_clause_to_indexkey(RelOptInfo *rel, get_commutator(oprid(newop)); isIndexable = ((restrict_op != InvalidOid) && - op_class(restrict_op, xclass, index->relam) && - IndexScanableOperand(rightop, - indexkey, - rel, - index)); + op_class(restrict_op, xclass, index->relam) && + IndexScanableOperand(rightop, + indexkey, + rel, + index)); if (isIndexable) - { ((Oper *) ((Expr *) clause)->oper)->opno = oprid(newop); - } } } } @@ -729,6 +722,7 @@ match_clause_to_indexkey(RelOptInfo *rel, if (isIndexable) { + /* * In place list modification. (op const var/func) -> (op * var/func const) @@ -848,7 +842,7 @@ pred_test(List *predicate_list, List *clauseinfo_list, List *joininfo_list) static bool one_pred_test(Expr *predicate, List *clauseinfo_list) { - ClauseInfo *clauseinfo; + ClauseInfo *clauseinfo; List *item; Assert(predicate != NULL); @@ -1152,7 +1146,7 @@ clause_pred_clause_test(Expr *predicate, Node *clause) */ test_oper = makeOper(test_op, /* opno */ InvalidOid, /* opid */ - BOOLOID, /* opresulttype */ + BOOLOID, /* opresulttype */ 0, /* opsize */ NULL); /* op_fcache */ replace_opid(test_oper); @@ -1163,7 +1157,7 @@ clause_pred_clause_test(Expr *predicate, Node *clause) #ifndef OMIT_PARTIAL_INDEX test_result = ExecEvalExpr((Node *) test_expr, NULL, &isNull, NULL); -#endif /* OMIT_PARTIAL_INDEX */ +#endif /* OMIT_PARTIAL_INDEX */ if (isNull) { elog(DEBUG, "clause_pred_clause_test: null test result"); @@ -1193,10 +1187,10 @@ 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 *clauseinfo_list) { - JoinInfo *joininfo = (JoinInfo *) NULL; + JoinInfo *joininfo = (JoinInfo *) NULL; List *cg_list = NIL; List *i = NIL; List *clausegroups = NIL; @@ -1245,7 +1239,7 @@ extract_restrict_clauses(List *clausegroup) foreach(l, clausegroup) { - ClauseInfo *cinfo = lfirst(l); + ClauseInfo *cinfo = lfirst(l); if (!is_joinable((Node *) cinfo->clause)) restrict_cls = lappend(restrict_cls, cinfo); @@ -1267,8 +1261,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; @@ -1354,8 +1348,8 @@ index_innerjoin(Query *root, RelOptInfo *rel, List *clausegroup_list, */ static List * create_index_paths(Query *root, - RelOptInfo *rel, - RelOptInfo *index, + RelOptInfo * rel, + RelOptInfo * index, List *clausegroup_list, bool join) { @@ -1367,7 +1361,7 @@ create_index_paths(Query *root, foreach(i, clausegroup_list) { - ClauseInfo *clauseinfo; + ClauseInfo *clauseinfo; List *temp_node = NIL; bool temp = true; @@ -1399,7 +1393,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 7b05f9fddf..f8291f7e96 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.9 1998/09/01 03:23:24 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/path/joinpath.c,v 1.10 1998/09/01 04:29:35 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -30,19 +30,15 @@ * _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 bool EnoughMemoryForHashjoin(RelOptInfo *hashrel); -static List * -hash_inner_and_outer(RelOptInfo *joinrel, RelOptInfo *outerrel, RelOptInfo *innerrel, +static bool EnoughMemoryForHashjoin(RelOptInfo * hashrel); +static List *hash_inner_and_outer(RelOptInfo * joinrel, RelOptInfo * outerrel, RelOptInfo * innerrel, List *hashinfo_list); /* @@ -76,11 +72,11 @@ find_all_join_paths(Query *root, List *joinrels) while (joinrels != NIL) { - RelOptInfo *joinrel = (RelOptInfo *) lfirst(joinrels); + RelOptInfo *joinrel = (RelOptInfo *) lfirst(joinrels); List *innerrelids; List *outerrelids; - RelOptInfo *innerrel; - RelOptInfo *outerrel; + RelOptInfo *innerrel; + RelOptInfo *outerrel; Path *bestinnerjoin; List *pathlist = NIL; @@ -238,9 +234,9 @@ best_innerjoin(List *join_paths, List *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; @@ -316,9 +312,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, @@ -469,9 +465,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) { @@ -565,7 +561,7 @@ match_unsorted_inner(RelOptInfo *joinrel, } static bool -EnoughMemoryForHashjoin(RelOptInfo *hashrel) +EnoughMemoryForHashjoin(RelOptInfo * hashrel) { int ntuples; int tupsize; @@ -599,9 +595,9 @@ EnoughMemoryForHashjoin(RelOptInfo *hashrel) * 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) { HInfo *xhashinfo = (HInfo *) NULL; diff --git a/src/backend/optimizer/path/joinrels.c b/src/backend/optimizer/path/joinrels.c index 2a0755010d..636207c941 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.14 1998/09/01 03:23:25 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/path/joinrels.c,v 1.15 1998/09/01 04:29:37 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -31,19 +31,17 @@ bool _use_right_sided_plans_ = false; #endif -static List *find_clause_joins(Query *root, RelOptInfo *outer_rel, List *joininfo_list); -static List *find_clauseless_joins(RelOptInfo *outer_rel, List *inner_rels); -static RelOptInfo *init_join_rel(RelOptInfo *outer_rel, RelOptInfo *inner_rel, JoinInfo *joininfo); -static List * -new_join_tlist(List *tlist, List *other_relids, +static List *find_clause_joins(Query *root, RelOptInfo * outer_rel, List *joininfo_list); +static List *find_clauseless_joins(RelOptInfo * outer_rel, List *inner_rels); +static RelOptInfo *init_join_rel(RelOptInfo * outer_rel, RelOptInfo * inner_rel, JoinInfo * joininfo); +static List *new_join_tlist(List *tlist, List *other_relids, int first_resdomno); static List *new_joininfo_list(List *joininfo_list, List *join_relids); -static void add_superrels(RelOptInfo *rel, RelOptInfo *super_rel); -static bool nonoverlap_rels(RelOptInfo *rel1, RelOptInfo *rel2); +static void add_superrels(RelOptInfo * rel, RelOptInfo * super_rel); +static bool nonoverlap_rels(RelOptInfo * rel1, RelOptInfo * rel2); static bool nonoverlap_sets(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); /* * find-join-rels-- @@ -67,7 +65,7 @@ find_join_rels(Query *root, List *outer_rels) foreach(r, outer_rels) { - RelOptInfo *outer_rel = (RelOptInfo *) lfirst(r); + RelOptInfo *outer_rel = (RelOptInfo *) lfirst(r); if (!(joins = find_clause_joins(root, outer_rel, outer_rel->joininfo))) { @@ -99,15 +97,15 @@ find_join_rels(Query *root, List *outer_rels) * Returns a list of new join relations. */ static List * -find_clause_joins(Query *root, RelOptInfo *outer_rel, List *joininfo_list) +find_clause_joins(Query *root, RelOptInfo * outer_rel, List *joininfo_list) { List *join_list = NIL; List *i = NIL; foreach(i, joininfo_list) { - JoinInfo *joininfo = (JoinInfo *) lfirst(i); - RelOptInfo *rel; + JoinInfo *joininfo = (JoinInfo *) lfirst(i); + RelOptInfo *rel; if (!joininfo->inactive) { @@ -158,9 +156,9 @@ find_clause_joins(Query *root, RelOptInfo *outer_rel, List *joininfo_list) * Returns a list of new join relations. */ static List * -find_clauseless_joins(RelOptInfo *outer_rel, List *inner_rels) +find_clauseless_joins(RelOptInfo * outer_rel, List *inner_rels) { - RelOptInfo *inner_rel; + RelOptInfo *inner_rel; List *t_list = NIL; List *temp_node = NIL; List *i = NIL; @@ -193,9 +191,9 @@ find_clauseless_joins(RelOptInfo *outer_rel, List *inner_rels) * Returns the new join relation node. */ static RelOptInfo * -init_join_rel(RelOptInfo *outer_rel, RelOptInfo *inner_rel, JoinInfo *joininfo) +init_join_rel(RelOptInfo * outer_rel, RelOptInfo * inner_rel, JoinInfo * joininfo) { - RelOptInfo *joinrel = makeNode(RelOptInfo); + RelOptInfo *joinrel = makeNode(RelOptInfo); List *joinrel_joininfo_list = NIL; List *new_outer_tlist; List *new_inner_tlist; @@ -327,13 +325,13 @@ new_joininfo_list(List *joininfo_list, List *join_relids) { List *current_joininfo_list = NIL; List *new_otherrels = NIL; - JoinInfo *other_joininfo = (JoinInfo *) NULL; + JoinInfo *other_joininfo = (JoinInfo *) NULL; List *xjoininfo = NIL; foreach(xjoininfo, joininfo_list) { List *or; - JoinInfo *joininfo = (JoinInfo *) lfirst(xjoininfo); + JoinInfo *joininfo = (JoinInfo *) lfirst(xjoininfo); new_otherrels = joininfo->otherrels; foreach(or, new_otherrels) @@ -396,23 +394,23 @@ add_new_joininfos(Query *root, List *joinrels, List *outerrels) foreach(xjoinrel, joinrels) { - RelOptInfo *joinrel = (RelOptInfo *) lfirst(xjoinrel); + RelOptInfo *joinrel = (RelOptInfo *) lfirst(xjoinrel); foreach(xrelid, joinrel->relids) { Relid relid = (Relid) lfirst(xrelid); - RelOptInfo *rel = get_join_rel(root, relid); + RelOptInfo *rel = get_join_rel(root, relid); add_superrels(rel, joinrel); } } foreach(xjoinrel, joinrels) { - RelOptInfo *joinrel = (RelOptInfo *) lfirst(xjoinrel); + RelOptInfo *joinrel = (RelOptInfo *) lfirst(xjoinrel); foreach(xjoininfo, joinrel->joininfo) { - JoinInfo *joininfo = (JoinInfo *) lfirst(xjoininfo); + JoinInfo *joininfo = (JoinInfo *) lfirst(xjoininfo); List *other_rels = joininfo->otherrels; List *clause_info = joininfo->jinfoclauseinfo; bool mergejoinable = joininfo->mergejoinable; @@ -421,10 +419,10 @@ add_new_joininfos(Query *root, List *joinrels, List *outerrels) foreach(xrelid, other_rels) { Relid relid = (Relid) lfirst(xrelid); - RelOptInfo *rel = get_join_rel(root, relid); + RelOptInfo *rel = get_join_rel(root, relid); List *super_rels = rel->superrels; List *xsuper_rel = NIL; - JoinInfo *new_joininfo = makeNode(JoinInfo); + JoinInfo *new_joininfo = makeNode(JoinInfo); new_joininfo->otherrels = joinrel->relids; new_joininfo->jinfoclauseinfo = clause_info; @@ -436,12 +434,12 @@ add_new_joininfos(Query *root, List *joinrels, List *outerrels) foreach(xsuper_rel, super_rels) { - RelOptInfo *super_rel = (RelOptInfo *) lfirst(xsuper_rel); + RelOptInfo *super_rel = (RelOptInfo *) lfirst(xsuper_rel); if (nonoverlap_rels(super_rel, joinrel)) { List *new_relids = super_rel->relids; - JoinInfo *other_joininfo = + JoinInfo *other_joininfo = joininfo_member(new_relids, joinrel->joininfo); @@ -453,7 +451,7 @@ add_new_joininfos(Query *root, List *joinrels, List *outerrels) } else { - JoinInfo *new_joininfo = makeNode(JoinInfo); + JoinInfo *new_joininfo = makeNode(JoinInfo); new_joininfo->otherrels = new_relids; new_joininfo->jinfoclauseinfo = clause_info; @@ -471,7 +469,7 @@ add_new_joininfos(Query *root, List *joinrels, List *outerrels) } foreach(xrel, outerrels) { - RelOptInfo *rel = (RelOptInfo *) lfirst(xrel); + RelOptInfo *rel = (RelOptInfo *) lfirst(xrel); rel->superrels = NIL; } @@ -499,13 +497,13 @@ final_join_rels(List *join_rel_list) */ foreach(xrel, join_rel_list) { - RelOptInfo *rel = (RelOptInfo *) lfirst(xrel); + RelOptInfo *rel = (RelOptInfo *) lfirst(xrel); List *xjoininfo = NIL; bool final = true; foreach(xjoininfo, rel->joininfo) { - JoinInfo *joininfo = (JoinInfo *) lfirst(xjoininfo); + JoinInfo *joininfo = (JoinInfo *) lfirst(xjoininfo); if (joininfo->otherrels != NIL) { @@ -533,7 +531,7 @@ final_join_rels(List *join_rel_list) * Modifies the superrels field of rel */ static void -add_superrels(RelOptInfo *rel, RelOptInfo *super_rel) +add_superrels(RelOptInfo * rel, RelOptInfo * super_rel) { rel->superrels = lappend(rel->superrels, super_rel); } @@ -548,7 +546,7 @@ add_superrels(RelOptInfo *rel, RelOptInfo *super_rel) * Returns non-nil if rel1 and rel2 do not overlap. */ static bool -nonoverlap_rels(RelOptInfo *rel1, RelOptInfo *rel2) +nonoverlap_rels(RelOptInfo * rel1, RelOptInfo * rel2) { return nonoverlap_sets(rel1->relids, rel2->relids); } @@ -569,7 +567,7 @@ nonoverlap_sets(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/joinutils.c b/src/backend/optimizer/path/joinutils.c index f39a783547..3b0bce8394 100644 --- a/src/backend/optimizer/path/joinutils.c +++ b/src/backend/optimizer/path/joinutils.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/path/Attic/joinutils.c,v 1.7 1998/09/01 03:23:27 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/path/Attic/joinutils.c,v 1.8 1998/09/01 04:29:38 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -26,18 +26,14 @@ #include "optimizer/ordering.h" -static int -match_pathkey_joinkeys(List *pathkey, List *joinkeys, +static int match_pathkey_joinkeys(List *pathkey, List *joinkeys, int which_subkey); -static bool -every_func(List *joinkeys, List *pathkey, +static bool every_func(List *joinkeys, List *pathkey, int which_subkey); -static List * -new_join_pathkey(List *subkeys, +static List *new_join_pathkey(List *subkeys, List *considered_subkeys, List *join_rel_tlist, List *joinclauses); -static List * -new_matching_subkeys(Var *subkey, List *considered_subkeys, +static List *new_matching_subkeys(Var *subkey, List *considered_subkeys, List *join_rel_tlist, List *joinclauses); /**************************************************************************** @@ -146,7 +142,7 @@ match_pathkey_joinkeys(List *pathkey, pos++; } } - return -1; /* no index found */ + return -1; /* no index found */ } /* diff --git a/src/backend/optimizer/path/mergeutils.c b/src/backend/optimizer/path/mergeutils.c index 8bf4bb73c2..2d1d021511 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.8 1998/09/01 03:23:28 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/path/Attic/mergeutils.c,v 1.9 1998/09/01 04:29:40 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -42,7 +42,7 @@ group_clauses_by_order(List *clauseinfo_list, foreach(xclauseinfo, clauseinfo_list) { - ClauseInfo *clauseinfo = (ClauseInfo *) lfirst(xclauseinfo); + ClauseInfo *clauseinfo = (ClauseInfo *) lfirst(xclauseinfo); MergeOrder *merge_ordering = clauseinfo->mergejoinorder; if (merge_ordering) diff --git a/src/backend/optimizer/path/orindxpath.c b/src/backend/optimizer/path/orindxpath.c index c56d6200f8..3f8d6b15da 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.10 1998/09/01 03:23:29 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/path/orindxpath.c,v 1.11 1998/09/01 04:29:41 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -32,11 +32,10 @@ static void -best_or_subclause_indices(Query *root, RelOptInfo *rel, List *subclauses, +best_or_subclause_indices(Query *root, RelOptInfo * rel, List *subclauses, List *indices, List *examined_indexids, Cost subcost, List *selectivities, List **indexids, Cost *cost, List **selecs); -static void -best_or_subclause_index(Query *root, RelOptInfo *rel, Expr *subclause, +static void best_or_subclause_index(Query *root, RelOptInfo * rel, Expr *subclause, List *indices, int *indexid, Cost *cost, Cost *selec); @@ -52,14 +51,14 @@ best_or_subclause_index(Query *root, RelOptInfo *rel, Expr *subclause, */ List * create_or_index_paths(Query *root, - RelOptInfo *rel, List *clauses) + RelOptInfo * rel, List *clauses) { List *t_list = NIL; List *clist; foreach(clist, clauses) { - ClauseInfo *clausenode = (ClauseInfo *) (lfirst(clist)); + ClauseInfo *clausenode = (ClauseInfo *) (lfirst(clist)); /* * Check to see if this clause is an 'or' clause, and, if so, @@ -114,8 +113,8 @@ create_or_index_paths(Query *root, * processing -- JMH, 7/7/92 */ pathnode->path.locclauseinfo = - set_difference(copyObject((Node *)rel->clauseinfo), - lcons(clausenode,NIL)); + set_difference(copyObject((Node *) rel->clauseinfo), + lcons(clausenode, NIL)); #if 0 /* fix xfunc */ /* add in cost for expensive functions! -- JMH, 7/7/92 */ @@ -156,7 +155,7 @@ create_or_index_paths(Query *root, */ static void best_or_subclause_indices(Query *root, - RelOptInfo *rel, + RelOptInfo * rel, List *subclauses, List *indices, List *examined_indexids, @@ -166,9 +165,9 @@ best_or_subclause_indices(Query *root, Cost *cost, /* return value */ List **selecs) /* return value */ { - List *slist; - - foreach (slist, subclauses) + List *slist; + + foreach(slist, subclauses) { int best_indexid; Cost best_cost; @@ -176,7 +175,7 @@ best_or_subclause_indices(Query *root, best_or_subclause_index(root, rel, lfirst(slist), lfirst(indices), &best_indexid, &best_cost, &best_selec); - + examined_indexids = lappendi(examined_indexids, best_indexid); subcost += best_cost; selectivities = lappend(selectivities, makeFloat(best_selec)); @@ -207,25 +206,25 @@ 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 */ Cost *retCost, /* return value */ Cost *retSelec) /* return value */ { - List *ilist; - bool first_run = true; + List *ilist; + bool first_run = true; /* if we don't match anything, return zeros */ *retIndexid = 0; *retCost = 0.0; *retSelec = 0.0; - - foreach (ilist, indices) + + foreach(ilist, indices) { - RelOptInfo *index = (RelOptInfo *) lfirst(ilist); - + RelOptInfo *index = (RelOptInfo *) lfirst(ilist); + Datum value; int flag = 0; Cost subcost; diff --git a/src/backend/optimizer/path/predmig.c b/src/backend/optimizer/path/predmig.c index 07615c031d..b1ff33cee6 100644 --- a/src/backend/optimizer/path/predmig.c +++ b/src/backend/optimizer/path/predmig.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/path/Attic/predmig.c,v 1.12 1998/09/01 03:23:30 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/path/Attic/predmig.c,v 1.13 1998/09/01 04:29:42 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -53,21 +53,18 @@ * (not a join) iff it has * a non-NULL cinfo field */ -static void -xfunc_predmig(JoinPath pathnode, Stream streamroot, +static void xfunc_predmig(JoinPath pathnode, Stream streamroot, Stream laststream, bool *progressp); static bool xfunc_series_llel(Stream stream); static bool xfunc_llel_chains(Stream root, Stream bottom); static Stream xfunc_complete_stream(Stream stream); -static bool -xfunc_prdmig_pullup(Stream origstream, Stream pullme, +static bool xfunc_prdmig_pullup(Stream origstream, Stream pullme, JoinPath joinpath); static void xfunc_form_groups(Stream root, Stream bottom); static void xfunc_free_stream(Stream root); static Stream xfunc_add_clauses(Stream current); static void xfunc_setup_group(Stream node, Stream bottom); -static Stream -xfunc_streaminsert(ClauseInfo clauseinfo, Stream current, +static Stream xfunc_streaminsert(ClauseInfo clauseinfo, Stream current, int clausetype); static int xfunc_num_relids(Stream node); static StreamPtr xfunc_get_downjoin(Stream node); @@ -77,7 +74,7 @@ static int xfunc_stream_compare(void *arg1, void *arg2); static bool xfunc_check_stream(Stream node); static bool xfunc_in_stream(Stream node, Stream stream); -/* ----------------- MAIN FUNCTIONS ------------------------ */ +/* ----------------- MAIN FUNCTIONS ------------------------ */ /* ** xfunc_do_predmig ** wrapper for Predicate Migration. It calls xfunc_predmig until no @@ -318,7 +315,7 @@ xfunc_complete_stream(Stream stream) static bool xfunc_prdmig_pullup(Stream origstream, Stream pullme, JoinPath joinpath) { - ClauseInfo clauseinfo = get_cinfo(pullme); + ClauseInfo clauseinfo = get_cinfo(pullme); bool progress = false; Stream upjoin, orignode, @@ -492,7 +489,7 @@ xfunc_form_groups(Query *queryInfo, Stream root, Stream bottom) } -/* ------------------- UTILITY FUNCTIONS ------------------------- */ +/* ------------------- UTILITY FUNCTIONS ------------------------- */ /* ** xfunc_free_stream -- diff --git a/src/backend/optimizer/path/prune.c b/src/backend/optimizer/path/prune.c index 18228cbd89..908687e6d8 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.16 1998/09/01 03:23:32 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/path/Attic/prune.c,v 1.17 1998/09/01 04:29:44 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -24,7 +24,7 @@ #include "utils/elog.h" -static List *prune_joinrel(RelOptInfo *rel, List *other_rels); +static List *prune_joinrel(RelOptInfo * rel, List *other_rels); /* * prune-joinrels-- @@ -59,15 +59,15 @@ prune_joinrels(List *rel_list) * */ static List * -prune_joinrel(RelOptInfo *rel, List *other_rels) +prune_joinrel(RelOptInfo * rel, List *other_rels) { List *i = NIL; List *result = NIL; foreach(i, other_rels) { - RelOptInfo *other_rel = (RelOptInfo *) lfirst(i); - + RelOptInfo *other_rel = (RelOptInfo *) lfirst(i); + if (same(rel->relids, other_rel->relids)) { rel->pathlist = add_pathlist(rel, @@ -96,7 +96,7 @@ prune_rel_paths(List *rel_list) List *x = NIL; List *y = NIL; Path *path = NULL; - RelOptInfo *rel = (RelOptInfo *) NULL; + RelOptInfo *rel = (RelOptInfo *) NULL; JoinPath *cheapest = (JoinPath *) NULL; foreach(x, rel_list) @@ -130,7 +130,7 @@ prune_rel_paths(List *rel_list) * */ Path * -prune_rel_path(RelOptInfo *rel, Path *unorderedpath) +prune_rel_path(RelOptInfo * rel, Path *unorderedpath) { Path *cheapest = set_cheapest(rel, rel->pathlist); @@ -165,7 +165,7 @@ merge_joinrels(List *rel_list1, List *rel_list2) foreach(xrel, rel_list1) { - RelOptInfo *rel = (RelOptInfo *) lfirst(xrel); + RelOptInfo *rel = (RelOptInfo *) lfirst(xrel); rel_list2 = prune_joinrel(rel, rel_list2); } @@ -187,7 +187,7 @@ merge_joinrels(List *rel_list1, List *rel_list2) List * prune_oldrels(List *old_rels) { - RelOptInfo *rel; + RelOptInfo *rel; List *joininfo_list, *xjoininfo, *i, @@ -204,7 +204,7 @@ prune_oldrels(List *old_rels) { foreach(xjoininfo, joininfo_list) { - JoinInfo *joininfo = (JoinInfo *) lfirst(xjoininfo); + JoinInfo *joininfo = (JoinInfo *) lfirst(xjoininfo); if (!joininfo->inactive) { diff --git a/src/backend/optimizer/path/xfunc.c b/src/backend/optimizer/path/xfunc.c index b5eb9f2bdd..f32b77cdc2 100644 --- a/src/backend/optimizer/path/xfunc.c +++ b/src/backend/optimizer/path/xfunc.c @@ -9,7 +9,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/path/Attic/xfunc.c,v 1.21 1998/09/01 03:23:33 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/path/Attic/xfunc.c,v 1.22 1998/09/01 04:29:45 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -43,8 +43,7 @@ #define ever ; 1 ; /* local funcs */ -static int -xfunc_card_unreferenced(Query *queryInfo, +static int xfunc_card_unreferenced(Query *queryInfo, Expr *clause, Relid referenced); */ @@ -60,8 +59,8 @@ void xfunc_trypullup(RelOptInfo rel) { LispValue y; /* list ptr */ - ClauseInfo maxcinfo; /* The ClauseInfo to pull up, as calculated by - * xfunc_shouldpull() */ + ClauseInfo maxcinfo; /* The ClauseInfo to pull up, as + * calculated by xfunc_shouldpull() */ JoinPath curpath; /* current path in list */ int progress; /* has progress been made this time * through? */ @@ -147,12 +146,12 @@ xfunc_shouldpull(Query *queryInfo, Path childpath, JoinPath parentpath, int whichchild, - ClauseInfo *maxcinfopt) /* Out: pointer to clause to - * pullup */ + ClauseInfo * maxcinfopt) /* Out: pointer to clause + * to pullup */ { LispValue clauselist, tmplist; /* lists of clauses */ - ClauseInfo maxcinfo; /* clause to pullup */ + ClauseInfo maxcinfo; /* clause to pullup */ LispValue primjoinclause /* primary join clause */ = xfunc_primary_join(parentpath); Cost tmprank, @@ -194,7 +193,7 @@ xfunc_shouldpull(Query *queryInfo, { if (tmplist != LispNil && - (tmprank = xfunc_rank(get_clause((ClauseInfo) lfirst(tmplist)))) + (tmprank = xfunc_rank(get_clause((ClauseInfo) lfirst(tmplist)))) > maxrank) { maxcinfo = (ClauseInfo) lfirst(tmplist); @@ -267,15 +266,15 @@ ClauseInfo xfunc_pullup(Query *queryInfo, Path childpath, JoinPath parentpath, - ClauseInfo cinfo, /* clause to pull up */ + ClauseInfo 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 */ { Path newkid; - RelOptInfo newrel; + RelOptInfo newrel; Cost pulled_selec; Cost cost; - ClauseInfo newinfo; + ClauseInfo newinfo; /* remove clause from childpath */ newkid = (Path) copyObject((Node) childpath); @@ -294,8 +293,8 @@ xfunc_pullup(Query *queryInfo, } /* - * * give the new child path its own RelOptInfo node that reflects the * lack - * of the pulled-up predicate + * * give the new child path its own RelOptInfo node that reflects the * + * lack of the pulled-up predicate */ pulled_selec = compute_clause_selec(queryInfo, get_clause(cinfo), LispNil); @@ -497,8 +496,8 @@ xfunc_func_expense(LispValue node, LispValue args) /* look up tuple in cache */ tupl = SearchSysCacheTuple(PROOID, - ObjectIdGetDatum(funcid), - 0, 0, 0); + ObjectIdGetDatum(funcid), + 0, 0, 0); if (!HeapTupleIsValid(tupl)) elog(ERROR, "Cache lookup failed for procedure %d", funcid); proc = (Form_pg_proc) GETSTRUCT(tupl); @@ -528,7 +527,7 @@ xfunc_func_expense(LispValue node, LispValue args) if (nargs > 0) argOidVect = proc->proargtypes; planlist = (List) pg_parse_and_plan(pq_src, argOidVect, nargs, - &parseTree_list, None, FALSE); + &parseTree_list, None, FALSE); if (IsA(node, Func)) set_func_planlist((Func) node, planlist); @@ -612,7 +611,7 @@ xfunc_width(LispValue clause) { /* base case: width is width of this attribute */ tupl = SearchSysCacheTuple(TYPOID, - ObjectIdGetDatum(get_vartype((Var) clause)), + ObjectIdGetDatum(get_vartype((Var) clause)), 0, 0, 0); if (!HeapTupleIsValid(tupl)) elog(ERROR, "Cache lookup failed for type %d", @@ -682,8 +681,8 @@ xfunc_width(LispValue clause) elog(ERROR, "Cache lookup failed for procedure %d", get_opno((Oper) get_op(clause))); return (xfunc_func_width - ((RegProcedure) (((Form_pg_operator) (GETSTRUCT(tupl)))->oprcode), - (LispValue) get_opargs(clause))); + ((RegProcedure) (((Form_pg_operator) (GETSTRUCT(tupl)))->oprcode), + (LispValue) get_opargs(clause))); } else if (fast_is_funcclause(clause)) { @@ -740,7 +739,7 @@ xfunc_card_unreferenced(Query *queryInfo, { Assert(lnext(get_relids((RelOptInfo) lfirst(temp))) == LispNil); allrelids = lappend(allrelids, - lfirst(get_relids((RelOptInfo) lfirst(temp)))); + lfirst(get_relids((RelOptInfo) lfirst(temp)))); } /* find all relids referenced in query but not in clause */ @@ -760,7 +759,7 @@ xfunc_card_product(Query *queryInfo, Relid relids) { LispValue cinfonode; LispValue temp; - RelOptInfo currel; + RelOptInfo currel; Cost tuples; Count retval = 0; @@ -777,7 +776,7 @@ xfunc_card_product(Query *queryInfo, Relid relids) if (!xfunc_expense(queryInfo, get_clause((ClauseInfo) lfirst(cinfonode)))) tuples *= compute_clause_selec(queryInfo, - get_clause((ClauseInfo) lfirst(cinfonode)), + get_clause((ClauseInfo) lfirst(cinfonode)), LispNil); } @@ -863,7 +862,7 @@ LispValue xfunc_primary_join(JoinPath pathnode) { LispValue joinclauselist = get_pathclauseinfo(pathnode); - ClauseInfo mincinfo; + ClauseInfo mincinfo; LispValue tmplist; LispValue minclause = LispNil; Cost minrank, @@ -945,7 +944,7 @@ xfunc_get_path_cost(Query *queryInfo, Path pathnode) cost += (Cost) (xfunc_local_expense(get_clause((ClauseInfo) lfirst(tmplist))) * (Cost) get_tuples(get_parent(pathnode)) * selec); selec *= compute_clause_selec(queryInfo, - get_clause((ClauseInfo) lfirst(tmplist)), + get_clause((ClauseInfo) lfirst(tmplist)), LispNil); } @@ -966,7 +965,7 @@ xfunc_get_path_cost(Query *queryInfo, Path pathnode) cost += (Cost) (xfunc_local_expense(get_clause((ClauseInfo) lfirst(tmplist))) * (Cost) get_tuples(get_parent(pathnode)) * selec); selec *= compute_clause_selec(queryInfo, - get_clause((ClauseInfo) lfirst(tmplist)), + get_clause((ClauseInfo) lfirst(tmplist)), LispNil); } } @@ -1097,8 +1096,8 @@ xfunc_total_path_cost(JoinPath pathnode) Cost xfunc_expense_per_tuple(JoinPath joinnode, int whichchild) { - RelOptInfo outerrel = get_parent((Path) get_outerjoinpath(joinnode)); - RelOptInfo innerrel = get_parent((Path) get_innerjoinpath(joinnode)); + RelOptInfo outerrel = get_parent((Path) get_outerjoinpath(joinnode)); + RelOptInfo innerrel = get_parent((Path) get_innerjoinpath(joinnode)); Count outerwidth = get_width(outerrel); Count outers_per_page = ceil(BLCKSZ / (outerwidth + sizeof(HeapTupleData))); @@ -1139,7 +1138,7 @@ xfunc_expense_per_tuple(JoinPath joinnode, int whichchild) */ void xfunc_fixvars(LispValue clause, /* clause being pulled up */ - RelOptInfo rel, /* rel it's being pulled from */ + RelOptInfo rel, /* rel it's being pulled from */ int varno) /* whether rel is INNER or OUTER of join */ { LispValue tmpclause; /* temporary variable */ @@ -1195,8 +1194,8 @@ xfunc_fixvars(LispValue clause, /* clause being pulled up */ int xfunc_cinfo_compare(void *arg1, void *arg2) { - ClauseInfo info1 = *(ClauseInfo *) arg1; - ClauseInfo info2 = *(ClauseInfo *) arg2; + ClauseInfo info1 = *(ClauseInfo *) arg1; + ClauseInfo info2 = *(ClauseInfo *) arg2; LispValue clause1 = (LispValue) get_clause(info1), clause2 = (LispValue) get_clause(info2); @@ -1310,8 +1309,8 @@ xfunc_func_width(RegProcedure funcid, LispValue args) /* lookup function and find its return type */ Assert(RegProcedureIsValid(funcid)); tupl = SearchSysCacheTuple(PROOID, - ObjectIdGetDatum(funcid), - 0, 0, 0); + ObjectIdGetDatum(funcid), + 0, 0, 0); if (!HeapTupleIsValid(tupl)) elog(ERROR, "Cache lookup failed for procedure %d", funcid); proc = (Form_pg_proc) GETSTRUCT(tupl); @@ -1430,9 +1429,9 @@ do { \ ** Just like _copyRel, but doesn't copy the paths */ bool -xfunc_copyrel(RelOptInfo from, RelOptInfo *to) +xfunc_copyrel(RelOptInfo from, RelOptInfo * to) { - RelOptInfo newnode; + RelOptInfo newnode; Pointer (*alloc) () = palloc; diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c index 5011d0b248..8eba20fd68 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.31 1998/09/01 03:23:35 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/createplan.c,v 1.32 1998/09/01 04:29:47 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -46,44 +46,33 @@ static List *switch_outer(List *clauses); 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, +static SeqScan *create_seqscan_node(Path *best_path, List *tlist, List *scan_clauses); -static IndexScan * -create_indexscan_node(IndexPath *best_path, List *tlist, +static IndexScan *create_indexscan_node(IndexPath *best_path, List *tlist, List *scan_clauses); -static NestLoop * -create_nestloop_node(JoinPath *best_path, List *tlist, +static NestLoop *create_nestloop_node(JoinPath *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, +static MergeJoin *create_mergejoin_node(MergePath *best_path, List *tlist, List *clauses, Plan *outer_node, List *outer_tlist, Plan *inner_node, List *inner_tlist); -static HashJoin * -create_hashjoin_node(HashPath *best_path, List *tlist, +static HashJoin *create_hashjoin_node(HashPath *best_path, List *tlist, List *clauses, Plan *outer_node, List *outer_tlist, Plan *inner_node, List *inner_tlist); static Node *fix_indxqual_references(Node *clause, Path *index_path); -static Temp * -make_temp(List *tlist, List *keys, Oid *operators, +static Temp *make_temp(List *tlist, List *keys, Oid *operators, Plan *plan_node, int temptype); -static IndexScan * -make_indexscan(List *qptlist, List *qpqual, Index scanrelid, +static IndexScan *make_indexscan(List *qptlist, List *qpqual, Index scanrelid, List *indxid, List *indxqual, Cost cost); -static NestLoop * -make_nestloop(List *qptlist, List *qpqual, Plan *lefttree, +static NestLoop *make_nestloop(List *qptlist, List *qpqual, Plan *lefttree, Plan *righttree); -static HashJoin * -make_hashjoin(List *tlist, List *qpqual, +static HashJoin *make_hashjoin(List *tlist, List *qpqual, List *hashclauses, Plan *lefttree, Plan *righttree); static Hash *make_hash(List *tlist, Var *hashkey, Plan *lefttree); -static MergeJoin * -make_mergejoin(List *tlist, List *qpqual, +static MergeJoin *make_mergejoin(List *tlist, List *qpqual, List *mergeclauses, Oid opcode, Oid *rightorder, Oid *leftorder, Plan *righttree, Plan *lefttree); -static Material * -make_material(List *tlist, Oid tempid, Plan *lefttree, +static Material *make_material(List *tlist, Oid tempid, Plan *lefttree, int keycount); /* @@ -106,7 +95,7 @@ create_plan(Path *best_path) { List *tlist; Plan *plan_node = (Plan *) NULL; - RelOptInfo *parent_rel; + RelOptInfo *parent_rel; int size; int width; int pages; diff --git a/src/backend/optimizer/plan/initsplan.c b/src/backend/optimizer/plan/initsplan.c index 22cfeaf755..85253b5c58 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.19 1998/09/01 03:23:36 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/initsplan.c,v 1.20 1998/09/01 04:29:50 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -40,8 +40,8 @@ extern int Quiet; static void add_clause_to_rels(Query *root, List *clause); -static void add_join_info_to_rels(Query *root, ClauseInfo *clauseinfo, - List *join_relids); +static void add_join_info_to_rels(Query *root, ClauseInfo * clauseinfo, + List *join_relids); static void add_vars_to_targetlist(Query *root, List *vars, List *join_relids); static MergeOrder *mergejoinop(Expr *clause); @@ -170,7 +170,7 @@ add_clause_to_rels(Query *root, List *clause) { List *relids; List *vars; - ClauseInfo *clauseinfo = makeNode(ClauseInfo); + ClauseInfo *clauseinfo = makeNode(ClauseInfo); /* * Retrieve all relids and vars contained within the clause. @@ -199,6 +199,7 @@ add_clause_to_rels(Query *root, List *clause) */ if (is_funcclause((Node *) clause)) { + /* * XXX If we have a func clause set selectivity to 1/3, really * need a true selectivity function. @@ -222,6 +223,7 @@ add_clause_to_rels(Query *root, List *clause) if (is_funcclause((Node *) clause)) { + /* * XXX If we have a func clause set selectivity to 1/3, really * need a true selectivity function. @@ -252,13 +254,13 @@ add_clause_to_rels(Query *root, List *clause) * */ static void -add_join_info_to_rels(Query *root, ClauseInfo *clauseinfo, List *join_relids) +add_join_info_to_rels(Query *root, ClauseInfo * clauseinfo, List *join_relids) { List *join_relid; foreach(join_relid, join_relids) { - JoinInfo *joininfo; + JoinInfo *joininfo; List *other_rels = NIL; List *rel; @@ -269,7 +271,7 @@ add_join_info_to_rels(Query *root, ClauseInfo *clauseinfo, List *join_relids) } joininfo = find_joininfo_node(get_base_rel(root, lfirsti(join_relid)), - other_rels); + other_rels); joininfo->jinfoclauseinfo = lcons(copyObject((void *) clauseinfo), joininfo->jinfoclauseinfo); @@ -332,8 +334,8 @@ init_join_info(List *rel_list) *y, *z; RelOptInfo *rel; - JoinInfo *joininfo; - ClauseInfo *clauseinfo; + JoinInfo *joininfo; + ClauseInfo *clauseinfo; Expr *clause; foreach(x, rel_list) diff --git a/src/backend/optimizer/plan/planmain.c b/src/backend/optimizer/plan/planmain.c index a3e97063a7..0cef5472f2 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.27 1998/09/01 03:23:38 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planmain.c,v 1.28 1998/09/01 04:29:51 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -44,8 +44,7 @@ static Plan *subplanner(Query *root, List *flat_tlist, List *qual); static Result *make_result(List *tlist, Node *resconstantqual, Plan *subplan); -extern Plan * -make_groupPlan(List **tlist, bool tuplePerGroup, +extern Plan *make_groupPlan(List **tlist, bool tuplePerGroup, List *groupClause, Plan *subplan); /* @@ -90,7 +89,7 @@ query_planner(Query *root, printf("After cnfify()\n"); pprint(qual); #endif - + /* * A command without a target list or qualification is an error, * except for "delete foo". @@ -191,8 +190,8 @@ query_planner(Query *root, if (constant_qual) { subplan = (Plan *) make_result((!root->hasAggs && - !root->groupClause && - !root->havingQual) + !root->groupClause && + !root->havingQual) ? tlist : subplan->targetlist, (Node *) constant_qual, subplan); @@ -255,13 +254,13 @@ subplanner(Query *root, List *flat_tlist, List *qual) { - RelOptInfo *final_rel; - List *final_rel_list; + RelOptInfo *final_rel; + List *final_rel_list; /* * Initialize the targetlist and qualification, adding entries to - * base_rel_list as relation references are found (e.g., in - * the qualification, the targetlist, etc.) + * base_rel_list as relation references are found (e.g., in the + * qualification, the targetlist, etc.) */ root->base_rel_list = NIL; root->join_rel_list = NIL; diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c index 703e067e4c..7d4091c4aa 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.31 1998/09/01 03:23:39 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planner.c,v 1.32 1998/09/01 04:29:53 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -49,8 +49,7 @@ #include "executor/executor.h" static Plan *make_sortplan(List *tlist, List *sortcls, Plan *plannode); -extern Plan * -make_groupPlan(List **tlist, bool tuplePerGroup, +extern Plan *make_groupPlan(List **tlist, bool tuplePerGroup, List *groupClause, Plan *subplan); /***************************************************************************** @@ -96,10 +95,12 @@ union_planner(Query *parse) { List *tlist = parse->targetList; - /* copy the original tlist, we will need the original one - * for the AGG node later on */ - List *new_tlist = new_unsorted_tlist(tlist); - + /* + * copy the original tlist, we will need the original one for the AGG + * node later on + */ + List *new_tlist = new_unsorted_tlist(tlist); + List *rangetable = parse->rtable; Plan *result_plan = (Plan *) NULL; @@ -109,12 +110,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) @@ -122,64 +123,65 @@ 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; - - /* This is only necessary if aggregates are in use in queries like: - * SELECT sid - * FROM part - * GROUP BY sid - * HAVING MIN(pid) > 1; (pid is used but never selected for!!!) - * because the function 'query_planner' creates the plan for the lefttree - * of the 'GROUP' node and returns only those attributes contained in 'tlist'. - * The original 'tlist' contains only 'sid' here and that's why we have to - * to extend it to attributes which are not selected but are used in the - * havingQual. */ - - /* 'check_having_qual_for_vars' takes the havingQual and the actual 'tlist' - * as arguments and recursively scans the havingQual for attributes - * (VAR nodes) that are not contained in 'tlist' yet. If so, it creates - * a new entry and attaches it to the list 'new_tlist' (consisting of the - * VAR node and the RESDOM node as usual with tlists :-) ) */ - if (parse->hasAggs) - { - if (parse->havingQual != NULL) + List **vpm = NULL; + + /* + * This is only necessary if aggregates are in use in queries + * like: SELECT sid FROM part GROUP BY sid HAVING MIN(pid) > 1; + * (pid is used but never selected for!!!) because the function + * 'query_planner' creates the plan for the lefttree of the + * 'GROUP' node and returns only those attributes contained in + * 'tlist'. The original 'tlist' contains only 'sid' here and + * that's why we have to to extend it to attributes which are not + * selected but are used in the havingQual. + */ + + /* + * 'check_having_qual_for_vars' takes the havingQual and the + * actual 'tlist' as arguments and recursively scans the + * havingQual for attributes (VAR nodes) that are not contained in + * 'tlist' yet. If so, it creates a new entry and attaches it to + * the list 'new_tlist' (consisting of the VAR node and the RESDOM + * node as usual with tlists :-) ) + */ + if (parse->hasAggs) { - new_tlist = check_having_qual_for_vars(parse->havingQual,new_tlist); + if (parse->havingQual != NULL) + new_tlist = check_having_qual_for_vars(parse->havingQual, new_tlist); } - } - - new_tlist = preprocess_targetlist(new_tlist, - parse->commandType, - parse->resultRelation, - parse->rtable); - - /* Here starts the original (pre having) code */ - tlist = preprocess_targetlist(tlist, - parse->commandType, - parse->resultRelation, - parse->rtable); - - 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, - new_tlist, - (List *) parse->qual); - PlannerVarParam = lnext(PlannerVarParam); - if (vpm != NULL) - pfree(vpm); + + new_tlist = preprocess_targetlist(new_tlist, + parse->commandType, + parse->resultRelation, + parse->rtable); + + /* Here starts the original (pre having) code */ + tlist = preprocess_targetlist(tlist, + parse->commandType, + parse->resultRelation, + parse->rtable); + + 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, + new_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.) @@ -209,11 +211,14 @@ union_planner(Query *parse) */ if (parse->hasAggs) { - int old_length=0, new_length=0; - - /* Create the AGG node but use 'tlist' not 'new_tlist' as target list because we - * don't want the additional attributes (only used for the havingQual, see above) - * to show up in the result */ + int old_length = 0, + new_length = 0; + + /* + * Create the AGG node but use 'tlist' not 'new_tlist' as target + * list because we don't want the additional attributes (only used + * for the havingQual, see above) to show up in the result + */ result_plan = (Plan *) make_agg(tlist, result_plan); /* @@ -221,70 +226,84 @@ union_planner(Query *parse) * the result tuple of the subplans. */ ((Agg *) result_plan)->aggs = - set_agg_tlist_references((Agg *) result_plan); + set_agg_tlist_references((Agg *) result_plan); - if(parse->havingQual!=NULL) - { - List *clause; - List **vpm = NULL; - - - /* stuff copied from above to handle the use of attributes from outside - * in subselects */ + if (parse->havingQual != NULL) + { + List *clause; + List **vpm = NULL; + + + /* + * stuff copied from above to handle the use of attributes + * from outside in subselects + */ + + if (parse->rtable != NULL) + { + vpm = (List **) palloc(length(parse->rtable) * sizeof(List *)); + memset(vpm, 0, length(parse->rtable) * sizeof(List *)); + } + PlannerVarParam = lcons(vpm, PlannerVarParam); + + /* + * There is a subselect in the havingQual, so we have to + * process it using the same function as for a subselect in + * 'where' + */ + if (parse->hasSubLinks) + parse->havingQual = SS_process_sublinks((Node *) parse->havingQual); + + /* convert the havingQual to conjunctive normal form (cnf) */ + parse->havingQual = (Node *) cnfify((Expr *) (Node *) parse->havingQual, true); + + /* + * Calculate the opfids from the opnos (=select the correct + * functions for the used VAR datatypes) + */ + parse->havingQual = (Node *) fix_opids((List *) parse->havingQual); + + ((Agg *) result_plan)->plan.qual = (List *) parse->havingQual; + + /* + * Check every clause of the havingQual for aggregates used + * and append them to result_plan->aggs + */ + foreach(clause, ((Agg *) result_plan)->plan.qual) + { + + /* + * Make sure there are aggregates in the havingQual if so, + * the list must be longer after + * check_having_qual_for_aggs + */ + old_length = length(((Agg *) result_plan)->aggs); + + ((Agg *) result_plan)->aggs = nconc(((Agg *) result_plan)->aggs, + check_having_qual_for_aggs((Node *) lfirst(clause), + ((Agg *) result_plan)->plan.lefttree->targetlist, + ((List *) parse->groupClause))); + + /* + * Have a look at the length of the returned list. If + * there is no difference, no aggregates have been found + * and that means, that the Qual belongs to the where + * clause + */ + if (((new_length = length(((Agg *) result_plan)->aggs)) == old_length) || + (new_length == 0)) + { + elog(ERROR, "This could have been done in a where clause!!"); + return (Plan *) NIL; + } + } + PlannerVarParam = lnext(PlannerVarParam); + if (vpm != NULL) + pfree(vpm); + } + } - if (parse->rtable != NULL) - { - vpm = (List **) palloc(length(parse->rtable) * sizeof(List *)); - memset(vpm, 0, length(parse->rtable) * sizeof(List *)); - } - PlannerVarParam = lcons(vpm, PlannerVarParam); - - /* There is a subselect in the havingQual, so we have to process it - * using the same function as for a subselect in 'where' */ - if (parse->hasSubLinks) - { - parse->havingQual = SS_process_sublinks((Node *) parse->havingQual); - } - - /* convert the havingQual to conjunctive normal form (cnf) */ - parse->havingQual = (Node * ) cnfify((Expr *)(Node *) parse->havingQual,true); - - /* Calculate the opfids from the opnos (=select the correct functions for - * the used VAR datatypes) */ - parse->havingQual = (Node * ) fix_opids((List *) parse->havingQual); - - ((Agg *) result_plan)->plan.qual=(List *) parse->havingQual; - - /* Check every clause of the havingQual for aggregates used and append - * them to result_plan->aggs */ - foreach(clause, ((Agg *) result_plan)->plan.qual) - { - /* Make sure there are aggregates in the havingQual - * if so, the list must be longer after check_having_qual_for_aggs */ - old_length=length(((Agg *) result_plan)->aggs); - - ((Agg *) result_plan)->aggs = nconc(((Agg *) result_plan)->aggs, - check_having_qual_for_aggs((Node *) lfirst(clause), - ((Agg *) result_plan)->plan.lefttree->targetlist, - ((List *) parse->groupClause))); - - /* Have a look at the length of the returned list. If there is no - * difference, no aggregates have been found and that means, that - * the Qual belongs to the where clause */ - if (((new_length=length(((Agg *) result_plan)->aggs)) == old_length) || - (new_length == 0)) - { - elog(ERROR,"This could have been done in a where clause!!"); - return (Plan *)NIL; - } - } - PlannerVarParam = lnext(PlannerVarParam); - if (vpm != NULL) - pfree(vpm); - } - } - /* * For now, before we hand back the plan, check to see if there is a * user-specified sort that needs to be done. Eventually, this will @@ -530,6 +549,3 @@ pg_checkretval(Oid rettype, QueryTreeList *queryTreeList) /* success */ return; } - - - diff --git a/src/backend/optimizer/plan/setrefs.c b/src/backend/optimizer/plan/setrefs.c index 32f0b8225f..6f134acddb 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.25 1998/09/01 03:23:40 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/setrefs.c,v 1.26 1998/09/01 04:29:54 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -36,11 +36,9 @@ static void set_join_tlist_references(Join *join); static void set_tempscan_tlist_references(SeqScan *tempscan); static void set_temp_tlist_references(Temp *temp); -static List * -replace_clause_joinvar_refs(Expr *clause, +static List *replace_clause_joinvar_refs(Expr *clause, List *outer_tlist, List *inner_tlist); -static List * -replace_subclause_joinvar_refs(List *clauses, +static List *replace_subclause_joinvar_refs(List *clauses, List *outer_tlist, List *inner_tlist); static Var *replace_joinvar_refs(Var *var, List *outer_tlist, List *inner_tlist); static List *tlist_temp_references(Oid tempid, List *tlist); @@ -498,13 +496,13 @@ tlist_temp_references(Oid tempid, oattno = 0; temp = makeTargetEntry(xtl->resdom, - (Node *) makeVar(tempid, - xtl->resdom->resno, - xtl->resdom->restype, - xtl->resdom->restypmod, - 0, - tempid, - oattno)); + (Node *) makeVar(tempid, + xtl->resdom->resno, + xtl->resdom->restype, + xtl->resdom->restypmod, + 0, + tempid, + oattno)); t_list = lappend(t_list, temp); } @@ -901,190 +899,190 @@ del_agg_clause(Node *clause) /* check_having_qual_for_vars takes the the havingQual and the actual targetlist as arguments * and recursively scans the havingQual for attributes that are not included in the targetlist * yet. Attributes contained in the havingQual but not in the targetlist show up with queries - * like: - * SELECT sid + * like: + * SELECT sid * FROM part * GROUP BY sid - * HAVING MIN(pid) > 1; (pid is used but never selected for!!!). + * HAVING MIN(pid) > 1; (pid is used but never selected for!!!). * To be able to handle queries like that correctly we have to extend the actual targetlist - * (which will be the one used for the GROUP node later on) by these attributes. */ + * (which will be the one used for the GROUP node later on) by these attributes. */ List * check_having_qual_for_vars(Node *clause, List *targetlist_so_far) { - List *t; + List *t; + + + if (IsA(clause, Var)) + { + RelOptInfo tmp_rel; - if (IsA(clause, Var)) - { - RelOptInfo tmp_rel; - + tmp_rel.targetlist = targetlist_so_far; - tmp_rel.targetlist = targetlist_so_far; - - /* - * Ha! A Var node! - */ + /* + * Ha! A Var node! + */ + + /* Check if the VAR is already contained in the targetlist */ + if (tlist_member((Var *) clause, (List *) targetlist_so_far) == NULL) + add_tl_element(&tmp_rel, (Var *) clause); - /* Check if the VAR is already contained in the targetlist */ - if (tlist_member((Var *)clause, (List *)targetlist_so_far) == NULL) + return tmp_rel.targetlist; + } + + else if (is_funcclause(clause) || not_clause(clause) || + or_clause(clause) || and_clause(clause)) { - add_tl_element(&tmp_rel, (Var *)clause); - } - - return tmp_rel.targetlist; - } - - else if (is_funcclause(clause) || not_clause(clause) || - or_clause(clause) || and_clause(clause)) - { - - /* - * This is a function. Recursively call this routine for its - * arguments... - */ - foreach(t, ((Expr *) clause)->args) + + /* + * This is a function. Recursively call this routine for its + * arguments... + */ + foreach(t, ((Expr *) clause)->args) + targetlist_so_far = check_having_qual_for_vars(lfirst(t), targetlist_so_far); + return targetlist_so_far; + } + else if (IsA(clause, Aggreg)) { - targetlist_so_far = check_having_qual_for_vars(lfirst(t), targetlist_so_far); + targetlist_so_far = + check_having_qual_for_vars(((Aggreg *) clause)->target, targetlist_so_far); + return targetlist_so_far; } - return targetlist_so_far; - } - else if (IsA(clause, Aggreg)) - { - targetlist_so_far = - check_having_qual_for_vars(((Aggreg *) clause)->target, targetlist_so_far); - return targetlist_so_far; - } - else if (IsA(clause, ArrayRef)) - { - ArrayRef *aref = (ArrayRef *) clause; - - /* - * This is an arrayref. Recursively call this routine for its - * expression and its index expression... - */ - foreach(t, aref->refupperindexpr) + else if (IsA(clause, ArrayRef)) { - targetlist_so_far = check_having_qual_for_vars(lfirst(t), targetlist_so_far); + ArrayRef *aref = (ArrayRef *) clause; + + /* + * This is an arrayref. Recursively call this routine for its + * expression and its index expression... + */ + foreach(t, aref->refupperindexpr) + targetlist_so_far = check_having_qual_for_vars(lfirst(t), targetlist_so_far); + foreach(t, aref->reflowerindexpr) + targetlist_so_far = check_having_qual_for_vars(lfirst(t), targetlist_so_far); + targetlist_so_far = check_having_qual_for_vars(aref->refexpr, targetlist_so_far); + targetlist_so_far = check_having_qual_for_vars(aref->refassgnexpr, targetlist_so_far); + + return targetlist_so_far; + } + else if (is_opclause(clause)) + { + + /* + * This is an operator. Recursively call this routine for both its + * left and right operands + */ + Node *left = (Node *) get_leftop((Expr *) clause); + Node *right = (Node *) get_rightop((Expr *) clause); + + if (left != (Node *) NULL) + targetlist_so_far = check_having_qual_for_vars(left, targetlist_so_far); + if (right != (Node *) NULL) + targetlist_so_far = check_having_qual_for_vars(right, targetlist_so_far); + + return targetlist_so_far; } - foreach(t, aref->reflowerindexpr) + else if (IsA(clause, Param) ||IsA(clause, Const)) { - targetlist_so_far = check_having_qual_for_vars(lfirst(t), targetlist_so_far); + /* do nothing! */ + return targetlist_so_far; } - targetlist_so_far = check_having_qual_for_vars(aref->refexpr, targetlist_so_far); - targetlist_so_far = check_having_qual_for_vars(aref->refassgnexpr, targetlist_so_far); - - return targetlist_so_far; - } - else if (is_opclause(clause)) - { - - /* - * This is an operator. Recursively call this routine for both its - * left and right operands - */ - Node *left = (Node *) get_leftop((Expr *) clause); - Node *right = (Node *) get_rightop((Expr *) clause); - - if (left != (Node *) NULL) - targetlist_so_far = check_having_qual_for_vars(left, targetlist_so_far); - if (right != (Node *) NULL) - targetlist_so_far = check_having_qual_for_vars(right, targetlist_so_far); - - return targetlist_so_far; - } - else if (IsA(clause, Param) || IsA(clause, Const)) - { - /* do nothing! */ - return targetlist_so_far; - } - /* If we get to a sublink, then we only have to check the lefthand side of the expression - * to see if there are any additional VARs */ - else if (IsA(clause, SubLink)) - { - foreach(t,((List *)((SubLink *)clause)->lefthand)) + + /* + * If we get to a sublink, then we only have to check the lefthand + * side of the expression to see if there are any additional VARs + */ + else if (IsA(clause, SubLink)) { - targetlist_so_far = check_having_qual_for_vars(lfirst(t), targetlist_so_far); + foreach(t, ((List *) ((SubLink *) clause)->lefthand)) + targetlist_so_far = check_having_qual_for_vars(lfirst(t), targetlist_so_far); + return targetlist_so_far; + } + else + { + + /* + * Ooops! we can not handle that! + */ + elog(ERROR, "check_having_qual_for_vars: Can not handle this having_qual! %d\n", + nodeTag(clause)); + return NIL; } - return targetlist_so_far; - } - else - { - /* - * Ooops! we can not handle that! - */ - elog(ERROR, "check_having_qual_for_vars: Can not handle this having_qual! %d\n", - nodeTag(clause)); - return NIL; - } } -/* check_having_qual_for_aggs takes the havingQual, the targetlist and the groupClause +/* check_having_qual_for_aggs takes the havingQual, the targetlist and the groupClause * as arguments and scans the havingQual recursively for aggregates. If an aggregate is - * found it is attached to a list and returned by the function. (All the returned lists + * found it is attached to a list and returned by the function. (All the returned lists * are concenated to result_plan->aggs in planner.c:union_planner() */ List * check_having_qual_for_aggs(Node *clause, List *subplanTargetList, List *groupClause) { - List *t, *l1; + List *t, + *l1; List *agg_list = NIL; - int contained_in_group_clause = 0; - + int contained_in_group_clause = 0; + if (IsA(clause, Var)) { - TargetEntry *subplanVar; - - /* - * Ha! A Var node! - */ - subplanVar = match_varid((Var *) clause, subplanTargetList); - - /* - * Change the varno & varattno fields of the var node to point to the resdom->resno - * fields of the subplan (lefttree) - */ - ((Var *) clause)->varattno = subplanVar->resdom->resno; - - return NIL; + TargetEntry *subplanVar; + + /* + * Ha! A Var node! + */ + subplanVar = match_varid((Var *) clause, subplanTargetList); + + /* + * Change the varno & varattno fields of the var node to point to + * the resdom->resno fields of the subplan (lefttree) + */ + ((Var *) clause)->varattno = subplanVar->resdom->resno; + + return NIL; } - else if (is_funcclause(clause) || not_clause(clause) || - or_clause(clause) || and_clause(clause)) + else if (is_funcclause(clause) || not_clause(clause) || + or_clause(clause) || and_clause(clause)) { - int new_length=0, old_length=0; - + int new_length = 0, + old_length = 0; + /* * This is a function. Recursively call this routine for its * arguments... (i.e. for AND, OR, ... clauses!) */ foreach(t, ((Expr *) clause)->args) { - old_length=length((List *)agg_list); - - agg_list = nconc(agg_list, - check_having_qual_for_aggs(lfirst(t), subplanTargetList, - groupClause)); - - /* The arguments of OR or AND clauses are comparisons or relations - * and because we are in the havingQual there must be at least one operand - * using an aggregate function. If so, we will find it and the lenght of the - * agg_list will be increased after the above call to - * check_having_qual_for_aggs. If there are no aggregates used, the query - * could have been formulated using the 'where' clause */ - if(((new_length=length((List *)agg_list)) == old_length) || (new_length == 0)) - { - elog(ERROR,"This could have been done in a where clause!!"); - return NIL; - } + old_length = length((List *) agg_list); + + agg_list = nconc(agg_list, + check_having_qual_for_aggs(lfirst(t), subplanTargetList, + groupClause)); + + /* + * The arguments of OR or AND clauses are comparisons or + * relations and because we are in the havingQual there must + * be at least one operand using an aggregate function. If so, + * we will find it and the lenght of the agg_list will be + * increased after the above call to + * check_having_qual_for_aggs. If there are no aggregates + * used, the query could have been formulated using the + * 'where' clause + */ + if (((new_length = length((List *) agg_list)) == old_length) || (new_length == 0)) + { + elog(ERROR, "This could have been done in a where clause!!"); + return NIL; + } } return agg_list; } else if (IsA(clause, Aggreg)) { return lcons(clause, - check_having_qual_for_aggs(((Aggreg *) clause)->target, subplanTargetList, - groupClause)); + check_having_qual_for_aggs(((Aggreg *) clause)->target, subplanTargetList, + groupClause)); } else if (IsA(clause, ArrayRef)) { @@ -1097,21 +1095,21 @@ check_having_qual_for_aggs(Node *clause, List *subplanTargetList, List *groupCla foreach(t, aref->refupperindexpr) { agg_list = nconc(agg_list, - check_having_qual_for_aggs(lfirst(t), subplanTargetList, - groupClause)); + check_having_qual_for_aggs(lfirst(t), subplanTargetList, + groupClause)); } foreach(t, aref->reflowerindexpr) { agg_list = nconc(agg_list, - check_having_qual_for_aggs(lfirst(t), subplanTargetList, - groupClause)); + check_having_qual_for_aggs(lfirst(t), subplanTargetList, + groupClause)); } agg_list = nconc(agg_list, - check_having_qual_for_aggs(aref->refexpr, subplanTargetList, - groupClause)); + check_having_qual_for_aggs(aref->refexpr, subplanTargetList, + groupClause)); agg_list = nconc(agg_list, - check_having_qual_for_aggs(aref->refassgnexpr, subplanTargetList, - groupClause)); + check_having_qual_for_aggs(aref->refassgnexpr, subplanTargetList, + groupClause)); return agg_list; } @@ -1127,80 +1125,86 @@ check_having_qual_for_aggs(Node *clause, List *subplanTargetList, List *groupCla if (left != (Node *) NULL) agg_list = nconc(agg_list, - check_having_qual_for_aggs(left, subplanTargetList, - groupClause)); + check_having_qual_for_aggs(left, subplanTargetList, + groupClause)); if (right != (Node *) NULL) agg_list = nconc(agg_list, check_having_qual_for_aggs(right, subplanTargetList, - groupClause)); + groupClause)); return agg_list; } - else if (IsA(clause, Param) || IsA(clause, Const)) + else if (IsA(clause, Param) ||IsA(clause, Const)) { /* do nothing! */ return NIL; } - /* This is for Sublinks which show up as EXPR nodes. All the other EXPR nodes - * (funcclauses, and_clauses, or_clauses) were caught above */ + + /* + * This is for Sublinks which show up as EXPR nodes. All the other + * EXPR nodes (funcclauses, and_clauses, or_clauses) were caught above + */ else if (IsA(clause, Expr)) - { - /* Only the lefthand side of the sublink has to be checked for aggregates - * to be attached to result_plan->aggs (see planner.c:union_planner() ) - */ - foreach(t,((List *)((SubLink *)((SubPlan *) - ((Expr *)clause)->oper)->sublink)->lefthand)) - { - agg_list = - nconc(agg_list, - check_having_qual_for_aggs(lfirst(t), - subplanTargetList, groupClause)); - } - - - /* All arguments to the Sublink node are attributes from outside used within - * the sublink. Here we have to check that only attributes that is grouped for - * are used! */ - foreach(t,((Expr *)clause)->args) - { - contained_in_group_clause = 0; - - foreach(l1,groupClause) - { - if (tlist_member(lfirst(t),lcons(((GroupClause *)lfirst(l1))->entry,NIL)) != - NULL) - { - contained_in_group_clause=1; - } - } - - /* If the use of the attribute is allowed (i.e. it is in the groupClause) - * we have to adjust the varnos and varattnos */ - if (contained_in_group_clause) - { - agg_list = - nconc(agg_list, - check_having_qual_for_aggs(lfirst(t), - subplanTargetList, groupClause)); - } - else - { - elog(ERROR,"You must group by the attribute used from outside!"); - return NIL; - } - } - return agg_list; - } - else - { - /* - * Ooops! we can not handle that! - */ - elog(ERROR, "check_having_qual_for_aggs: Can not handle this having_qual! %d\n", - nodeTag(clause)); - return NIL; - } -} + { + /* + * Only the lefthand side of the sublink has to be checked for + * aggregates to be attached to result_plan->aggs (see + * planner.c:union_planner() ) + */ + foreach(t, ((List *) ((SubLink *) ((SubPlan *) + ((Expr *) clause)->oper)->sublink)->lefthand)) + { + agg_list = + nconc(agg_list, + check_having_qual_for_aggs(lfirst(t), + subplanTargetList, groupClause)); + } + /* + * All arguments to the Sublink node are attributes from outside + * used within the sublink. Here we have to check that only + * attributes that is grouped for are used! + */ + foreach(t, ((Expr *) clause)->args) + { + contained_in_group_clause = 0; + + foreach(l1, groupClause) + { + if (tlist_member(lfirst(t), lcons(((GroupClause *) lfirst(l1))->entry, NIL)) != + NULL) + contained_in_group_clause = 1; + } + + /* + * If the use of the attribute is allowed (i.e. it is in the + * groupClause) we have to adjust the varnos and varattnos + */ + if (contained_in_group_clause) + { + agg_list = + nconc(agg_list, + check_having_qual_for_aggs(lfirst(t), + subplanTargetList, groupClause)); + } + else + { + elog(ERROR, "You must group by the attribute used from outside!"); + return NIL; + } + } + return agg_list; + } + else + { + + /* + * Ooops! we can not handle that! + */ + elog(ERROR, "check_having_qual_for_aggs: Can not handle this having_qual! %d\n", + nodeTag(clause)); + return NIL; + } +} diff --git a/src/backend/optimizer/plan/subselect.c b/src/backend/optimizer/plan/subselect.c index 61d0df57af..a1b4cd22cc 100644 --- a/src/backend/optimizer/plan/subselect.c +++ b/src/backend/optimizer/plan/subselect.c @@ -405,20 +405,23 @@ SS_process_sublinks(Node *expr) SS_process_sublinks((Node *) ((Expr *) expr)->args); else if (IsA(expr, SubLink))/* got it! */ { - /* Hack to make sure expr->oper->args points to the same VAR node - * as expr->lefthand does. Needed for subselects in the havingQual - * when used on views. - * Otherwise aggregate functions will fail later on (at execution - * time!) Reason: The rewite System makes several copies of the - * VAR nodes and in this case it should not do so :-( */ - if(((SubLink *) expr)->lefthand != NULL) + + /* + * Hack to make sure expr->oper->args points to the same VAR node + * as expr->lefthand does. Needed for subselects in the havingQual + * when used on views. Otherwise aggregate functions will fail + * later on (at execution time!) Reason: The rewite System makes + * several copies of the VAR nodes and in this case it should not + * do so :-( + */ + if (((SubLink *) expr)->lefthand != NULL) { - lfirst(((Expr *) lfirst(((SubLink *)expr)->oper))->args) = - lfirst(((SubLink *)expr)->lefthand); + lfirst(((Expr *) lfirst(((SubLink *) expr)->oper))->args) = + lfirst(((SubLink *) expr)->lefthand); } - expr = _make_subplan((SubLink *) expr); + expr = _make_subplan((SubLink *) expr); } - + return expr; } diff --git a/src/backend/optimizer/prep/preptlist.c b/src/backend/optimizer/prep/preptlist.c index 6fa90a13cf..73ed555ff5 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.15 1998/09/01 03:23:44 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/prep/preptlist.c,v 1.16 1998/09/01 04:29:57 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -34,14 +34,11 @@ #include "optimizer/clauses.h" #include "optimizer/tlist.h" -static List * -expand_targetlist(List *tlist, Oid relid, int command_type, +static List *expand_targetlist(List *tlist, Oid relid, int command_type, Index result_relation); -static List * -replace_matching_resname(List *new_tlist, +static List *replace_matching_resname(List *new_tlist, List *old_tlist); -static List * -new_relation_targetlist(Oid relid, Index rt_index, +static List *new_relation_targetlist(Oid relid, Index rt_index, NodeTag node_type); @@ -295,13 +292,13 @@ new_relation_targetlist(Oid relid, Index rt_index, NodeTag node_type) false); temp3 = makeTargetEntry(makeResdom(attno, - atttype, - -1, - attname, - 0, - (Oid) 0, - 0), - (Node *) temp2); + atttype, + -1, + attname, + 0, + (Oid) 0, + 0), + (Node *) temp2); t_list = lappend(t_list, temp3); break; } @@ -316,13 +313,13 @@ new_relation_targetlist(Oid relid, Index rt_index, NodeTag node_type) 0, rt_index, attno); temp_list = makeTargetEntry(makeResdom(attno, - atttype, - get_atttypmod(relid, attno), - attname, - 0, - (Oid) 0, - 0), - (Node *) temp_var); + atttype, + get_atttypmod(relid, attno), + attname, + 0, + (Oid) 0, + 0), + (Node *) temp_var); t_list = lappend(t_list, temp_list); break; } diff --git a/src/backend/optimizer/prep/prepunion.c b/src/backend/optimizer/prep/prepunion.c index f0242d7270..06f270e118 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.26 1998/09/01 03:23:46 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/prep/prepunion.c,v 1.27 1998/09/01 04:29:59 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -34,21 +34,16 @@ #include "optimizer/planner.h" #include "optimizer/planmain.h" -static List * -plan_inherit_query(List *relids, Index rt_index, +static List *plan_inherit_query(List *relids, Index rt_index, RangeTblEntry *rt_entry, Query *parse, List **union_rtentriesPtr); -static RangeTblEntry * -new_rangetable_entry(Oid new_relid, +static RangeTblEntry *new_rangetable_entry(Oid new_relid, RangeTblEntry *old_entry); -static Query * -subst_rangetable(Query *root, Index index, +static Query *subst_rangetable(Query *root, Index index, RangeTblEntry *new_entry); -static void -fix_parsetree_attnums(Index rt_index, Oid old_relid, +static void fix_parsetree_attnums(Index rt_index, Oid old_relid, Oid new_relid, Query *parsetree); -static Append * -make_append(List *appendplans, List *unionrtables, Index rt_index, +static Append *make_append(List *appendplans, List *unionrtables, Index rt_index, List *inheritrtable, List *tlist); @@ -89,7 +84,7 @@ plan_union_queries(Query *parse) * * So the above query becomes: * - * Append Node + * Append Node * { * Sort and Unique * { @@ -281,7 +276,7 @@ plan_inherit_query(List *relids, new_root->sortClause = NULL; new_root->groupClause = NULL; new_root->havingQual = NULL; - + if (new_root->hasAggs) { new_root->hasAggs = false; @@ -502,14 +497,14 @@ make_append(List *appendplans, { Append *node = makeNode(Append); List *subnode; - + node->appendplans = appendplans; node->unionrtables = unionrtables; node->inheritrelid = rt_index; node->inheritrtable = inheritrtable; node->plan.cost = 0.0; foreach(subnode, appendplans) - node->plan.cost += ((Plan *)lfirst(subnode))->cost; + node->plan.cost += ((Plan *) lfirst(subnode))->cost; node->plan.state = (EState *) NULL; node->plan.targetlist = tlist; node->plan.qual = NIL; diff --git a/src/backend/optimizer/util/clauseinfo.c b/src/backend/optimizer/util/clauseinfo.c index 0385edaae9..207074bb1a 100644 --- a/src/backend/optimizer/util/clauseinfo.c +++ b/src/backend/optimizer/util/clauseinfo.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/util/Attic/clauseinfo.c,v 1.8 1998/09/01 03:23:47 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/util/Attic/clauseinfo.c,v 1.9 1998/09/01 04:30:00 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -27,7 +27,7 @@ * */ bool -valid_or_clause(ClauseInfo *clauseinfo) +valid_or_clause(ClauseInfo * clauseinfo) { if (clauseinfo != NULL && !single_node((Node *) clauseinfo->clause) && @@ -49,7 +49,7 @@ get_actual_clauses(List *clauseinfo_list) { List *temp = NIL; List *result = NIL; - ClauseInfo *clause = (ClauseInfo *) NULL; + ClauseInfo *clause = (ClauseInfo *) NULL; foreach(temp, clauseinfo_list) { @@ -93,7 +93,7 @@ get_relattvals(List *clauseinfo_list, List *result1 = NIL; List *result2 = NIL; List *result3 = NIL; - ClauseInfo *temp = (ClauseInfo *) NULL; + ClauseInfo *temp = (ClauseInfo *) NULL; List *i = NIL; foreach(i, clauseinfo_list) @@ -144,7 +144,7 @@ get_joinvars(Oid relid, foreach(temp, clauseinfo_list) { - ClauseInfo *clauseinfo = lfirst(temp); + ClauseInfo *clauseinfo = lfirst(temp); Expr *clause = clauseinfo->clause; if (IsA(get_leftop(clause), Var) && @@ -176,7 +176,7 @@ get_joinvars(Oid relid, List * get_opnos(List *clauseinfo_list) { - ClauseInfo *temp = (ClauseInfo *) NULL; + ClauseInfo *temp = (ClauseInfo *) NULL; List *result = NIL; List *i = NIL; diff --git a/src/backend/optimizer/util/clauses.c b/src/backend/optimizer/util/clauses.c index 0ec0f74ca1..19bd3ce98e 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.23 1998/09/01 03:23:49 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/util/clauses.c,v 1.24 1998/09/01 04:30:02 momjian Exp $ * * HISTORY * AUTHOR DATE MAJOR EVENT @@ -199,8 +199,8 @@ bool or_clause(Node *clause) { return clause != NULL && - nodeTag(clause) == T_Expr && - ((Expr *) clause)->opType == OR_EXPR; + nodeTag(clause) == T_Expr && + ((Expr *) clause)->opType == OR_EXPR; } /* @@ -460,7 +460,7 @@ is_joinable(Node *clause) * One side of the clause (i.e. left or right operands) must either be * a var node ... */ - if (IsA(leftop, Var) || IsA(rightop, Var)) + if (IsA(leftop, Var) ||IsA(rightop, Var)) return true; /* diff --git a/src/backend/optimizer/util/indexnode.c b/src/backend/optimizer/util/indexnode.c index a48c817e1f..d83b353cc5 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.9 1998/09/01 03:23:50 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/util/Attic/indexnode.c,v 1.10 1998/09/01 04:30:04 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)); @@ -61,7 +61,7 @@ find_secondary_index(Query *root, Oid relid) while (index_info(root, first, relid, &indexinfo)) { - RelOptInfo *indexnode = makeNode(RelOptInfo); + RelOptInfo *indexnode = makeNode(RelOptInfo); indexnode->relids = lconsi(indexinfo.relid, NIL); indexnode->relam = indexinfo.relam; diff --git a/src/backend/optimizer/util/joininfo.c b/src/backend/optimizer/util/joininfo.c index 9e45905bc8..50e3065f82 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.11 1998/09/01 03:23:52 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/util/joininfo.c,v 1.12 1998/09/01 04:30:05 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -35,7 +35,7 @@ * exists. * */ -JoinInfo * +JoinInfo * joininfo_member(List *join_relids, List *joininfo_list) { List *i = NIL; @@ -61,10 +61,10 @@ joininfo_member(List *join_relids, List *joininfo_list) * Returns a joininfo node. * */ -JoinInfo * -find_joininfo_node(RelOptInfo *this_rel, List *join_relids) +JoinInfo * +find_joininfo_node(RelOptInfo * this_rel, List *join_relids) { - JoinInfo *joininfo = joininfo_member(join_relids, + JoinInfo *joininfo = joininfo_member(join_relids, this_rel->joininfo); if (joininfo == NULL) diff --git a/src/backend/optimizer/util/keys.c b/src/backend/optimizer/util/keys.c index 9ecf7377ab..3e2372339d 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.8 1998/09/01 03:23:53 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/util/Attic/keys.c,v 1.9 1998/09/01 04:30:07 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) && diff --git a/src/backend/optimizer/util/pathnode.c b/src/backend/optimizer/util/pathnode.c index bdd4e4509a..598400fa49 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.11 1998/09/01 03:23:55 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/util/pathnode.c,v 1.12 1998/09/01 04:30:08 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,7 +99,7 @@ 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 *x; Path *new_path; @@ -200,7 +200,7 @@ better_path(Path *new_path, List *unique_paths, bool *noOther) * */ Path * -create_seqscan_path(RelOptInfo *rel) +create_seqscan_path(RelOptInfo * rel) { int relid = 0; @@ -251,8 +251,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) { @@ -406,8 +406,8 @@ create_index_path(Query *root, * */ JoinPath * -create_nestloop_path(RelOptInfo *joinrel, - RelOptInfo *outer_rel, +create_nestloop_path(RelOptInfo * joinrel, + RelOptInfo * outer_rel, Path *outer_path, Path *inner_path, List *keys) @@ -481,7 +481,7 @@ create_nestloop_path(RelOptInfo *joinrel, * */ MergePath * -create_mergejoin_path(RelOptInfo *joinrel, +create_mergejoin_path(RelOptInfo * joinrel, int outersize, int innersize, int outerwidth, @@ -547,7 +547,7 @@ create_mergejoin_path(RelOptInfo *joinrel, * */ HashPath * -create_hashjoin_path(RelOptInfo *joinrel, +create_hashjoin_path(RelOptInfo * joinrel, int outersize, int innersize, int outerwidth, diff --git a/src/backend/optimizer/util/plancat.c b/src/backend/optimizer/util/plancat.c index b04efb5a36..786947e809 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.20 1998/09/01 03:23:56 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/util/plancat.c,v 1.21 1998/09/01 04:30:09 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -40,10 +40,9 @@ #endif -static void -IndexSelectivity(Oid indexrelid, Oid indrelid, int32 nIndexKeys, - Oid *AccessMethodOperatorClasses, Oid *operatorObjectIds, - int32 *varAttributeNumbers, char **constValues, int32 *constFlags, +static void IndexSelectivity(Oid indexrelid, Oid indrelid, int32 nIndexKeys, + Oid *AccessMethodOperatorClasses, Oid *operatorObjectIds, + int32 *varAttributeNumbers, char **constValues, int32 *constFlags, float *idxPages, float *idxSelec); @@ -65,7 +64,7 @@ relation_info(Query *root, Index relid, relationObjectId = getrelid(relid, root->rtable); relationTuple = SearchSysCacheTuple(RELOID, - ObjectIdGetDatum(relationObjectId), + ObjectIdGetDatum(relationObjectId), 0, 0, 0); if (HeapTupleIsValid(relationTuple)) { @@ -195,7 +194,7 @@ index_info(Query *root, bool first, int relid, IdxInfoRetval *info) #ifdef notdef /* XXX should iterate through strategies -- but how? use #1 for now */ amstrategy = indexRelation->rd_am->amstrategies; -#endif /* notdef */ +#endif /* notdef */ amstrategy = 1; relam = indexRelation->rd_rel->relam; info->relam = relam; diff --git a/src/backend/optimizer/util/relnode.c b/src/backend/optimizer/util/relnode.c index 869b4ff6bd..52bcd059db 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.8 1998/09/01 03:23:58 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/util/relnode.c,v 1.9 1998/09/01 04:30:11 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -31,7 +31,7 @@ RelOptInfo * get_base_rel(Query *root, int relid) { List *relids; - RelOptInfo *rel; + RelOptInfo *rel; relids = lconsi(relid, NIL); rel = rel_member(relids, root->base_rel_list); @@ -65,6 +65,7 @@ get_base_rel(Query *root, int relid) */ if (relid < 0) { + /* * If the relation is a materialized relation, assume * constants for sizes. diff --git a/src/backend/optimizer/util/tlist.c b/src/backend/optimizer/util/tlist.c index 8aee7a1645..8400e96725 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.17 1998/09/01 03:23:59 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/util/tlist.c,v 1.18 1998/09/01 04:30:12 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -93,7 +93,7 @@ matching_tlvar(Var *var, List *targetlist) * CREATES: new var-node iff no matching var-node exists in targetlist */ void -add_tl_element(RelOptInfo *rel, Var *var) +add_tl_element(RelOptInfo * rel, Var *var) { Expr *oldvar = (Expr *) NULL; @@ -134,14 +134,14 @@ TargetEntry * create_tl_element(Var *var, int resdomno) { - return makeTargetEntry(makeResdom(resdomno, - var->vartype, - var->vartypmod, - NULL, - (Index) 0, - (Oid) 0, - 0), - (Node *) var); + return makeTargetEntry(makeResdom(resdomno, + var->vartype, + var->vartypmod, + NULL, + (Index) 0, + (Oid) 0, + 0), + (Node *) var); } /* @@ -348,7 +348,7 @@ copy_vars(List *target, List *source) dest != NIL; src = lnext(src), dest = lnext(dest)) { TargetEntry *temp = makeTargetEntry(((TargetEntry *) lfirst(dest))->resdom, - (Node *) get_expr(lfirst(src))); + (Node *) get_expr(lfirst(src))); result = lappend(result, temp); } @@ -432,8 +432,8 @@ flatten_tlist_vars(List *full_tlist, List *flat_tlist) result = lappend(result, makeTargetEntry(tle->resdom, - flatten_tlistentry((Node *) get_expr(tle), - flat_tlist))); + flatten_tlistentry((Node *) get_expr(tle), + flat_tlist))); } return result; diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c index f7486c546c..f77cdfc755 100644 --- a/src/backend/parser/analyze.c +++ b/src/backend/parser/analyze.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.84 1998/09/01 03:24:02 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.85 1998/09/01 04:30:15 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -69,7 +69,7 @@ parse_analyze(List *pl, ParseState *parentParseState) while (pl != NIL) { #ifdef PARSEDEBUG - elog(DEBUG,"parse tree from yacc:\n---\n%s\n---\n", nodeToString(lfirst(pl))); + elog(DEBUG, "parse tree from yacc:\n---\n%s\n---\n", nodeToString(lfirst(pl))); #endif pstate = make_parsestate(parentParseState); @@ -313,11 +313,11 @@ transformInsertStmt(ParseState *pstate, InsertStmt *stmt) * better to create proper target list here... */ te = makeTargetEntry(makeResdom(defval[ndef].adnum, - att[defval[ndef].adnum - 1]->atttypid, - att[defval[ndef].adnum - 1]->atttypmod, - pstrdup(nameout(&(att[defval[ndef].adnum - 1]->attname))), - 0, 0, 0), - (Node *) stringToNode(defval[ndef].adbin)); + att[defval[ndef].adnum - 1]->atttypid, + att[defval[ndef].adnum - 1]->atttypmod, + pstrdup(nameout(&(att[defval[ndef].adnum - 1]->attname))), + 0, 0, 0), + (Node *) stringToNode(defval[ndef].adbin)); qry->targetList = lappend(qry->targetList, te); } } @@ -325,9 +325,12 @@ transformInsertStmt(ParseState *pstate, InsertStmt *stmt) /* fix where clause */ qry->qual = transformWhereClause(pstate, stmt->whereClause); - /* The havingQual has a similar meaning as "qual" in the where statement. - * So we can easily use the code from the "where clause" with some additional - * traversals done in .../optimizer/plan/planner.c */ + /* + * The havingQual has a similar meaning as "qual" in the where + * statement. So we can easily use the code from the "where clause" + * with some additional traversals done in + * .../optimizer/plan/planner.c + */ qry->havingQual = transformWhereClause(pstate, stmt->havingClause); qry->hasSubLinks = pstate->p_hasSubLinks; @@ -351,20 +354,24 @@ transformInsertStmt(ParseState *pstate, InsertStmt *stmt) if (pstate->p_hasAggs) parseCheckAggregates(pstate, qry); - /* The INSERT INTO ... SELECT ... could have a UNION - * in child, so unionClause may be false + /* + * The INSERT INTO ... SELECT ... could have a UNION in child, so + * unionClause may be false */ qry->unionall = stmt->unionall; qry->unionClause = transformUnionClause(stmt->unionClause, qry->targetList); - /* If there is a havingQual but there are no aggregates, then there is something wrong - * with the query because having must contain aggregates in its expressions! - * Otherwise the query could have been formulated using the where clause. */ - if((qry->hasAggs == false) && (qry->havingQual != NULL)) - { - elog(ERROR,"This is not a valid having query!"); - return (Query *)NIL; - } + /* + * If there is a havingQual but there are no aggregates, then there is + * something wrong with the query because having must contain + * aggregates in its expressions! Otherwise the query could have been + * formulated using the where clause. + */ + if ((qry->hasAggs == false) && (qry->havingQual != NULL)) + { + elog(ERROR, "This is not a valid having query!"); + return (Query *) NIL; + } return (Query *) qry; } @@ -495,13 +502,13 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt) if (column->is_sequence) { - char *cstring; + char *cstring; CreateSeqStmt *sequence; constraint = makeNode(Constraint); constraint->contype = CONSTR_DEFAULT; constraint->name = makeTableName(stmt->relname, column->colname, "seq", NULL); - cstring = palloc(9+strlen(constraint->name)+2+1); + cstring = palloc(9 + strlen(constraint->name) + 2 + 1); strcpy(cstring, "nextval('"); strcat(cstring, constraint->name); strcat(cstring, "')"); @@ -509,20 +516,16 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt) constraint->keys = NULL; if (column->constraints != NIL) - { column->constraints = lappend(column->constraints, constraint); - } else - { column->constraints = lcons(constraint, NIL); - } sequence = makeNode(CreateSeqStmt); sequence->seqname = pstrdup(constraint->name); sequence->options = NIL; elog(NOTICE, "CREATE TABLE will create implicit sequence %s for SERIAL column %s.%s", - sequence->seqname, stmt->relname, column->colname); + sequence->seqname, stmt->relname, column->colname); ilist = lcons(sequence, NIL); @@ -789,14 +792,16 @@ transformRuleStmt(ParseState *pstate, RuleStmt *stmt) qry->commandType = CMD_UTILITY; /* - * 'instead nothing' rules with a qualification need a - * query a rangetable so the rewrite handler can add the - * negated rule qualification to the original query. We - * create a query with the new command type CMD_NOTHING - * here that is treated special by the rewrite system. + * 'instead nothing' rules with a qualification need a query a + * rangetable so the rewrite handler can add the negated rule + * qualification to the original query. We create a query with the new + * command type CMD_NOTHING here that is treated special by the + * rewrite system. */ - if (stmt->actions == NIL) { - Query *nothing_qry = makeNode(Query); + if (stmt->actions == NIL) + { + Query *nothing_qry = makeNode(Query); + nothing_qry->commandType = CMD_NOTHING; addRangeTableEntry(pstate, stmt->object->relname, "*CURRENT*", @@ -830,7 +835,7 @@ transformRuleStmt(ParseState *pstate, RuleStmt *stmt) pstate->p_is_rule = true; /* for expand all */ pstate->p_hasAggs = false; - action = (Query *)lfirst(actions); + action = (Query *) lfirst(actions); if (action->commandType != CMD_NOTHING) lfirst(actions) = transformStmt(pstate, lfirst(actions)); actions = lnext(actions); @@ -869,9 +874,12 @@ transformSelectStmt(ParseState *pstate, SelectStmt *stmt) qry->qual = transformWhereClause(pstate, stmt->whereClause); - /* The havingQual has a similar meaning as "qual" in the where statement. - * So we can easily use the code from the "where clause" with some additional - * traversals done in .../optimizer/plan/planner.c */ + /* + * The havingQual has a similar meaning as "qual" in the where + * statement. So we can easily use the code from the "where clause" + * with some additional traversals done in + * .../optimizer/plan/planner.c + */ qry->havingQual = transformWhereClause(pstate, stmt->havingClause); qry->hasSubLinks = pstate->p_hasSubLinks; @@ -891,20 +899,24 @@ transformSelectStmt(ParseState *pstate, SelectStmt *stmt) if (pstate->p_hasAggs) parseCheckAggregates(pstate, qry); - /* The INSERT INTO ... SELECT ... could have a UNION - * in child, so unionClause may be false + /* + * The INSERT INTO ... SELECT ... could have a UNION in child, so + * unionClause may be false */ qry->unionall = stmt->unionall; qry->unionClause = transformUnionClause(stmt->unionClause, qry->targetList); - /* If there is a havingQual but there are no aggregates, then there is something wrong - * with the query because having must contain aggregates in its expressions! - * Otherwise the query could have been formulated using the where clause. */ - if((qry->hasAggs == false) && (qry->havingQual != NULL)) - { - elog(ERROR,"This is not a valid having query!"); - return (Query *)NIL; - } + /* + * If there is a havingQual but there are no aggregates, then there is + * something wrong with the query because having must contain + * aggregates in its expressions! Otherwise the query could have been + * formulated using the where clause. + */ + if ((qry->hasAggs == false) && (qry->havingQual != NULL)) + { + elog(ERROR, "This is not a valid having query!"); + return (Query *) NIL; + } return (Query *) qry; } diff --git a/src/backend/parser/gram.c b/src/backend/parser/gram.c index 0f93d9c800..6092cc57df 100644 --- a/src/backend/parser/gram.c +++ b/src/backend/parser/gram.c @@ -1,212 +1,212 @@ -/* A Bison parser, made from gram.y +/* A Bison parser, made from gram.y by GNU Bison version 1.25 */ -#define YYBISON 1 /* Identify Bison output. */ - -#define ACTION 258 -#define ADD 259 -#define ALL 260 -#define ALTER 261 -#define AND 262 -#define ANY 263 -#define AS 264 -#define ASC 265 -#define BEGIN_TRANS 266 -#define BETWEEN 267 -#define BOTH 268 -#define BY 269 -#define CASCADE 270 -#define CAST 271 -#define CHAR 272 -#define CHARACTER 273 -#define CHECK 274 -#define CLOSE 275 -#define COLLATE 276 -#define COLUMN 277 -#define COMMIT 278 -#define CONSTRAINT 279 -#define CREATE 280 -#define CROSS 281 -#define CURRENT 282 -#define CURRENT_DATE 283 -#define CURRENT_TIME 284 -#define CURRENT_TIMESTAMP 285 -#define CURRENT_USER 286 -#define CURSOR 287 -#define DAY_P 288 -#define DECIMAL 289 -#define DECLARE 290 -#define DEFAULT 291 -#define DELETE 292 -#define DESC 293 -#define DISTINCT 294 -#define DOUBLE 295 -#define DROP 296 -#define END_TRANS 297 -#define EXECUTE 298 -#define EXISTS 299 -#define EXTRACT 300 -#define FETCH 301 -#define FLOAT 302 -#define FOR 303 -#define FOREIGN 304 -#define FROM 305 -#define FULL 306 -#define GRANT 307 -#define GROUP 308 -#define HAVING 309 -#define HOUR_P 310 -#define IN 311 -#define INNER_P 312 -#define INSERT 313 -#define INTERVAL 314 -#define INTO 315 -#define IS 316 -#define JOIN 317 -#define KEY 318 -#define LANGUAGE 319 -#define LEADING 320 -#define LEFT 321 -#define LIKE 322 -#define LOCAL 323 -#define MATCH 324 -#define MINUTE_P 325 -#define MONTH_P 326 -#define NAMES 327 -#define NATIONAL 328 -#define NATURAL 329 -#define NCHAR 330 -#define NO 331 -#define NOT 332 -#define NOTIFY 333 -#define NULL_P 334 -#define NUMERIC 335 -#define ON 336 -#define OPTION 337 -#define OR 338 -#define ORDER 339 -#define OUTER_P 340 -#define PARTIAL 341 -#define POSITION 342 -#define PRECISION 343 -#define PRIMARY 344 -#define PRIVILEGES 345 -#define PROCEDURE 346 -#define PUBLIC 347 -#define REFERENCES 348 -#define REVOKE 349 -#define RIGHT 350 -#define ROLLBACK 351 -#define SECOND_P 352 -#define SELECT 353 -#define SET 354 -#define SUBSTRING 355 -#define TABLE 356 -#define TIME 357 -#define TIMESTAMP 358 -#define TIMEZONE_HOUR 359 -#define TIMEZONE_MINUTE 360 -#define TO 361 -#define TRAILING 362 -#define TRANSACTION 363 -#define TRIM 364 -#define UNION 365 -#define UNIQUE 366 -#define UPDATE 367 -#define USER 368 -#define USING 369 -#define VALUES 370 -#define VARCHAR 371 -#define VARYING 372 -#define VIEW 373 -#define WHERE 374 -#define WITH 375 -#define WORK 376 -#define YEAR_P 377 -#define ZONE 378 -#define FALSE_P 379 -#define TRIGGER 380 -#define TRUE_P 381 -#define TYPE_P 382 -#define ABORT_TRANS 383 -#define AFTER 384 -#define AGGREGATE 385 -#define ANALYZE 386 -#define BACKWARD 387 -#define BEFORE 388 -#define BINARY 389 -#define CACHE 390 -#define CLUSTER 391 -#define COPY 392 -#define CYCLE 393 -#define DATABASE 394 -#define DELIMITERS 395 -#define DO 396 -#define EACH 397 -#define EXPLAIN 398 -#define EXTEND 399 -#define FORWARD 400 -#define FUNCTION 401 -#define HANDLER 402 -#define INCREMENT 403 -#define INDEX 404 -#define INHERITS 405 -#define INSTEAD 406 -#define ISNULL 407 -#define LANCOMPILER 408 -#define LISTEN 409 -#define LOAD 410 -#define LOCK_P 411 -#define LOCATION 412 -#define MAXVALUE 413 -#define MINVALUE 414 -#define MOVE 415 -#define NEW 416 -#define NONE 417 -#define NOTHING 418 -#define NOTNULL 419 -#define OIDS 420 -#define OPERATOR 421 -#define PROCEDURAL 422 -#define RECIPE 423 -#define RENAME 424 -#define RESET 425 -#define RETURNS 426 -#define ROW 427 -#define RULE 428 -#define SEQUENCE 429 -#define SERIAL 430 -#define SETOF 431 -#define SHOW 432 -#define START 433 -#define STATEMENT 434 -#define STDIN 435 -#define STDOUT 436 -#define TRUSTED 437 -#define VACUUM 438 -#define VERBOSE 439 -#define VERSION 440 -#define ENCODING 441 -#define UNLISTEN 442 -#define ARCHIVE 443 -#define PASSWORD 444 -#define CREATEDB 445 -#define NOCREATEDB 446 -#define CREATEUSER 447 -#define NOCREATEUSER 448 -#define VALID 449 -#define UNTIL 450 -#define IDENT 451 -#define SCONST 452 -#define Op 453 -#define ICONST 454 -#define PARAM 455 -#define FCONST 456 -#define OP 457 -#define UMINUS 458 -#define TYPECAST 459 +#define YYBISON 1 /* Identify Bison output. */ + +#define ACTION 258 +#define ADD 259 +#define ALL 260 +#define ALTER 261 +#define AND 262 +#define ANY 263 +#define AS 264 +#define ASC 265 +#define BEGIN_TRANS 266 +#define BETWEEN 267 +#define BOTH 268 +#define BY 269 +#define CASCADE 270 +#define CAST 271 +#define CHAR 272 +#define CHARACTER 273 +#define CHECK 274 +#define CLOSE 275 +#define COLLATE 276 +#define COLUMN 277 +#define COMMIT 278 +#define CONSTRAINT 279 +#define CREATE 280 +#define CROSS 281 +#define CURRENT 282 +#define CURRENT_DATE 283 +#define CURRENT_TIME 284 +#define CURRENT_TIMESTAMP 285 +#define CURRENT_USER 286 +#define CURSOR 287 +#define DAY_P 288 +#define DECIMAL 289 +#define DECLARE 290 +#define DEFAULT 291 +#define DELETE 292 +#define DESC 293 +#define DISTINCT 294 +#define DOUBLE 295 +#define DROP 296 +#define END_TRANS 297 +#define EXECUTE 298 +#define EXISTS 299 +#define EXTRACT 300 +#define FETCH 301 +#define FLOAT 302 +#define FOR 303 +#define FOREIGN 304 +#define FROM 305 +#define FULL 306 +#define GRANT 307 +#define GROUP 308 +#define HAVING 309 +#define HOUR_P 310 +#define IN 311 +#define INNER_P 312 +#define INSERT 313 +#define INTERVAL 314 +#define INTO 315 +#define IS 316 +#define JOIN 317 +#define KEY 318 +#define LANGUAGE 319 +#define LEADING 320 +#define LEFT 321 +#define LIKE 322 +#define LOCAL 323 +#define MATCH 324 +#define MINUTE_P 325 +#define MONTH_P 326 +#define NAMES 327 +#define NATIONAL 328 +#define NATURAL 329 +#define NCHAR 330 +#define NO 331 +#define NOT 332 +#define NOTIFY 333 +#define NULL_P 334 +#define NUMERIC 335 +#define ON 336 +#define OPTION 337 +#define OR 338 +#define ORDER 339 +#define OUTER_P 340 +#define PARTIAL 341 +#define POSITION 342 +#define PRECISION 343 +#define PRIMARY 344 +#define PRIVILEGES 345 +#define PROCEDURE 346 +#define PUBLIC 347 +#define REFERENCES 348 +#define REVOKE 349 +#define RIGHT 350 +#define ROLLBACK 351 +#define SECOND_P 352 +#define SELECT 353 +#define SET 354 +#define SUBSTRING 355 +#define TABLE 356 +#define TIME 357 +#define TIMESTAMP 358 +#define TIMEZONE_HOUR 359 +#define TIMEZONE_MINUTE 360 +#define TO 361 +#define TRAILING 362 +#define TRANSACTION 363 +#define TRIM 364 +#define UNION 365 +#define UNIQUE 366 +#define UPDATE 367 +#define USER 368 +#define USING 369 +#define VALUES 370 +#define VARCHAR 371 +#define VARYING 372 +#define VIEW 373 +#define WHERE 374 +#define WITH 375 +#define WORK 376 +#define YEAR_P 377 +#define ZONE 378 +#define FALSE_P 379 +#define TRIGGER 380 +#define TRUE_P 381 +#define TYPE_P 382 +#define ABORT_TRANS 383 +#define AFTER 384 +#define AGGREGATE 385 +#define ANALYZE 386 +#define BACKWARD 387 +#define BEFORE 388 +#define BINARY 389 +#define CACHE 390 +#define CLUSTER 391 +#define COPY 392 +#define CYCLE 393 +#define DATABASE 394 +#define DELIMITERS 395 +#define DO 396 +#define EACH 397 +#define EXPLAIN 398 +#define EXTEND 399 +#define FORWARD 400 +#define FUNCTION 401 +#define HANDLER 402 +#define INCREMENT 403 +#define INDEX 404 +#define INHERITS 405 +#define INSTEAD 406 +#define ISNULL 407 +#define LANCOMPILER 408 +#define LISTEN 409 +#define LOAD 410 +#define LOCK_P 411 +#define LOCATION 412 +#define MAXVALUE 413 +#define MINVALUE 414 +#define MOVE 415 +#define NEW 416 +#define NONE 417 +#define NOTHING 418 +#define NOTNULL 419 +#define OIDS 420 +#define OPERATOR 421 +#define PROCEDURAL 422 +#define RECIPE 423 +#define RENAME 424 +#define RESET 425 +#define RETURNS 426 +#define ROW 427 +#define RULE 428 +#define SEQUENCE 429 +#define SERIAL 430 +#define SETOF 431 +#define SHOW 432 +#define START 433 +#define STATEMENT 434 +#define STDIN 435 +#define STDOUT 436 +#define TRUSTED 437 +#define VACUUM 438 +#define VERBOSE 439 +#define VERSION 440 +#define ENCODING 441 +#define UNLISTEN 442 +#define ARCHIVE 443 +#define PASSWORD 444 +#define CREATEDB 445 +#define NOCREATEDB 446 +#define CREATEUSER 447 +#define NOCREATEUSER 448 +#define VALID 449 +#define UNTIL 450 +#define IDENT 451 +#define SCONST 452 +#define Op 453 +#define ICONST 454 +#define PARAM 455 +#define FCONST 456 +#define OP 457 +#define UMINUS 458 +#define TYPECAST 459 #line 1 "gram.y" /* -*-text-*- */ @@ -221,7 +221,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/Attic/gram.c,v 2.32 1998/09/01 03:24:04 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/Attic/gram.c,v 2.33 1998/09/01 04:30:18 momjian Exp $ * * HISTORY * AUTHOR DATE MAJOR EVENT @@ -261,10 +261,11 @@ #include "mb/pg_wchar.h" #endif -static char saved_relname[NAMEDATALEN]; /* need this for complex attributes */ +static char saved_relname[NAMEDATALEN]; /* need this for complex + * attributes */ static bool QueryIsRule = FALSE; static List *saved_In_Expr = NIL; -static Oid *param_type_info; +static Oid *param_type_info; static int pfunc_num_args; extern List *parsetree; @@ -280,52 +281,53 @@ static char *xlateSqlFunc(char *); static char *xlateSqlType(char *); static Node *makeA_Expr(int oper, char *opname, Node *lexpr, Node *rexpr); static Node *makeRowExpr(char *opr, List *largs, List *rargs); -void mapTargetColumns(List *source, List *target); -static List *makeConstantList( A_Const *node); +void mapTargetColumns(List *source, List *target); +static List *makeConstantList(A_Const *node); static char *FlattenStringList(List *list); static char *fmtId(char *rawid); static Node *makeIndexable(char *opname, Node *lexpr, Node *rexpr); static void param_type_init(Oid *typev, int nargs); -Oid param_type(int t); /* used in parse_expr.c */ +Oid param_type(int t); /* used in parse_expr.c */ /* old versions of flex define this as a macro */ #if defined(yywrap) #undef yywrap -#endif /* yywrap */ +#endif /* yywrap */ #line 88 "gram.y" typedef union { - double dval; - int ival; - char chr; - char *str; - bool boolean; - bool* pboolean; /* for pg_shadow privileges */ - List *list; - Node *node; - Value *value; - - Attr *attr; - - TypeName *typnam; - DefElem *defelt; - ParamString *param; - SortGroupBy *sortgroupby; - JoinUsing *joinusing; - IndexElem *ielem; - RangeVar *range; - RelExpr *relexp; - A_Indices *aind; - ResTarget *target; - ParamNo *paramno; - - VersionStmt *vstmt; - DefineStmt *dstmt; - RuleStmt *rstmt; - InsertStmt *astmt; + double dval; + int ival; + char chr; + char *str; + bool boolean; + bool *pboolean; /* for pg_shadow privileges */ + List *list; + Node *node; + Value *value; + + Attr *attr; + + TypeName *typnam; + DefElem *defelt; + ParamString *param; + SortGroupBy *sortgroupby; + JoinUsing *joinusing; + IndexElem *ielem; + RangeVar *range; + RelExpr *relexp; + A_Indices *aind; + ResTarget *target; + ParamNo *paramno; + + VersionStmt *vstmt; + DefineStmt *dstmt; + RuleStmt *rstmt; + InsertStmt *astmt; } YYSTYPE; + #include <stdio.h> #ifndef __cplusplus @@ -336,3710 +338,3713 @@ typedef union -#define YYFINAL 1576 -#define YYFLAG -32768 -#define YYNTBASE 221 +#define YYFINAL 1576 +#define YYFLAG -32768 +#define YYNTBASE 221 #define YYTRANSLATE(x) ((unsigned)(x) <= 459 ? yytranslate[x] : 477) -static const short yytranslate[] = { 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 219, - 220, 208, 206, 218, 207, 214, 209, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 211, 212, 204, - 203, 205, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 215, 2, 216, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 210, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, - 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, - 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, - 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, - 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, - 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, - 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, - 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, - 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, - 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, - 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, - 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, - 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, - 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, - 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, - 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, - 196, 197, 198, 199, 200, 201, 202, 213, 217 +static const short yytranslate[] = {0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 219, + 220, 208, 206, 218, 207, 214, 209, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 211, 212, 204, + 203, 205, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 215, 2, 216, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 210, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, + 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 213, 217 }; #if YYDEBUG != 0 -static const short yyprhs[] = { 0, - 0, 2, 4, 8, 11, 14, 16, 18, 20, 22, - 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, - 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, - 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, - 84, 86, 88, 90, 92, 94, 96, 98, 100, 109, - 118, 122, 126, 127, 129, 131, 132, 134, 136, 137, - 141, 143, 147, 148, 152, 153, 158, 163, 168, 172, - 174, 176, 178, 180, 182, 185, 189, 192, 196, 202, - 206, 211, 215, 222, 228, 231, 234, 242, 244, 246, - 248, 250, 252, 254, 255, 258, 259, 263, 264, 273, - 277, 279, 280, 282, 284, 288, 291, 293, 294, 297, - 299, 303, 305, 310, 313, 316, 318, 321, 327, 331, - 333, 335, 337, 340, 344, 348, 352, 356, 360, 364, - 368, 371, 374, 377, 381, 388, 392, 396, 401, 405, - 408, 411, 413, 415, 420, 422, 427, 429, 431, 435, - 437, 442, 447, 453, 464, 468, 470, 472, 474, 476, - 479, 483, 487, 491, 495, 499, 503, 507, 510, 513, - 516, 520, 527, 531, 535, 540, 544, 548, 553, 557, - 561, 564, 567, 570, 573, 577, 580, 585, 589, 593, - 598, 603, 609, 616, 622, 629, 633, 635, 637, 640, - 643, 644, 647, 649, 650, 654, 658, 661, 663, 666, - 669, 674, 675, 679, 680, 687, 691, 692, 696, 698, - 700, 705, 708, 709, 712, 714, 717, 720, 723, 726, - 728, 730, 732, 735, 737, 740, 750, 752, 753, 758, - 773, 775, 777, 779, 783, 789, 791, 793, 795, 799, - 801, 802, 804, 806, 808, 812, 813, 815, 817, 819, - 821, 827, 831, 834, 836, 838, 840, 842, 844, 846, - 848, 850, 854, 856, 860, 864, 866, 870, 872, 874, - 876, 878, 881, 885, 889, 894, 899, 901, 903, 904, - 906, 908, 909, 912, 913, 921, 924, 926, 928, 930, - 934, 936, 938, 940, 942, 944, 946, 949, 951, 955, - 956, 963, 975, 977, 978, 981, 982, 984, 986, 990, - 992, 999, 1003, 1006, 1009, 1010, 1012, 1015, 1016, 1021, - 1025, 1037, 1040, 1041, 1045, 1048, 1050, 1054, 1057, 1059, - 1060, 1064, 1066, 1068, 1070, 1072, 1077, 1079, 1081, 1086, - 1093, 1095, 1097, 1099, 1101, 1103, 1105, 1107, 1109, 1111, - 1113, 1117, 1121, 1125, 1135, 1137, 1138, 1140, 1141, 1142, - 1156, 1158, 1160, 1164, 1168, 1170, 1172, 1176, 1179, 1182, - 1186, 1188, 1190, 1192, 1194, 1196, 1198, 1199, 1202, 1205, - 1208, 1211, 1214, 1217, 1220, 1223, 1225, 1227, 1228, 1234, - 1237, 1244, 1248, 1252, 1253, 1257, 1258, 1260, 1262, 1263, - 1265, 1267, 1268, 1272, 1277, 1281, 1287, 1289, 1290, 1292, - 1293, 1297, 1298, 1300, 1304, 1308, 1310, 1312, 1314, 1316, - 1318, 1320, 1326, 1331, 1340, 1344, 1345, 1349, 1351, 1354, - 1359, 1363, 1370, 1385, 1396, 1405, 1409, 1410, 1415, 1417, - 1425, 1429, 1430, 1432, 1433, 1435, 1436, 1438, 1442, 1444, - 1445, 1449, 1450, 1452, 1456, 1459, 1462, 1465, 1468, 1470, - 1472, 1473, 1475, 1476, 1478, 1480, 1484, 1488, 1489, 1492, - 1493, 1502, 1505, 1506, 1510, 1515, 1517, 1521, 1524, 1526, - 1529, 1532, 1535, 1538, 1540, 1542, 1544, 1545, 1547, 1548, - 1553, 1558, 1559, 1561, 1565, 1567, 1571, 1573, 1576, 1577, - 1579, 1582, 1586, 1591, 1592, 1596, 1601, 1602, 1605, 1607, - 1610, 1612, 1614, 1616, 1618, 1620, 1622, 1625, 1628, 1631, - 1634, 1636, 1639, 1641, 1643, 1647, 1648, 1654, 1658, 1659, - 1665, 1669, 1670, 1675, 1677, 1682, 1685, 1687, 1691, 1694, - 1696, 1697, 1701, 1702, 1705, 1706, 1708, 1711, 1713, 1716, - 1718, 1720, 1722, 1724, 1726, 1728, 1732, 1733, 1735, 1739, - 1743, 1747, 1751, 1755, 1759, 1763, 1764, 1766, 1768, 1776, - 1785, 1794, 1802, 1810, 1814, 1818, 1820, 1822, 1824, 1826, - 1828, 1830, 1832, 1834, 1836, 1838, 1840, 1843, 1845, 1847, - 1849, 1852, 1856, 1860, 1864, 1868, 1872, 1876, 1880, 1883, - 1886, 1889, 1893, 1900, 1904, 1908, 1912, 1917, 1920, 1923, - 1928, 1932, 1937, 1939, 1941, 1946, 1948, 1953, 1955, 1957, - 1962, 1967, 1972, 1977, 1983, 1989, 1995, 2000, 2003, 2007, - 2010, 2015, 2019, 2024, 2028, 2033, 2039, 2046, 2047, 2054, - 2055, 2063, 2069, 2075, 2081, 2087, 2093, 2099, 2105, 2111, - 2118, 2125, 2132, 2139, 2146, 2153, 2160, 2167, 2174, 2181, - 2188, 2195, 2202, 2209, 2216, 2223, 2227, 2231, 2234, 2237, - 2239, 2241, 2244, 2248, 2252, 2256, 2260, 2263, 2266, 2269, - 2273, 2280, 2284, 2288, 2291, 2294, 2298, 2303, 2305, 2307, - 2312, 2314, 2319, 2321, 2323, 2328, 2333, 2339, 2345, 2351, - 2356, 2361, 2368, 2369, 2371, 2375, 2379, 2383, 2384, 2386, - 2388, 2390, 2394, 2395, 2398, 2400, 2403, 2407, 2411, 2415, - 2419, 2422, 2426, 2433, 2437, 2441, 2444, 2447, 2449, 2453, - 2458, 2463, 2468, 2474, 2480, 2486, 2491, 2495, 2496, 2499, - 2500, 2503, 2504, 2508, 2511, 2513, 2515, 2517, 2519, 2523, - 2525, 2527, 2529, 2533, 2537, 2541, 2543, 2547, 2551, 2555, - 2557, 2559, 2564, 2567, 2571, 2575, 2577, 2581, 2583, 2587, - 2589, 2591, 2592, 2594, 2596, 2598, 2600, 2602, 2604, 2606, - 2608, 2610, 2612, 2614, 2616, 2618, 2620, 2623, 2625, 2627, - 2629, 2631, 2633, 2635, 2637, 2639, 2641, 2643, 2645, 2647, - 2649, 2651, 2653, 2655, 2657, 2659, 2661, 2663, 2665, 2667, - 2669, 2671, 2673, 2675, 2677, 2679, 2681, 2683, 2685, 2687, - 2689, 2691, 2693, 2695, 2697, 2699, 2701, 2703, 2705, 2707, - 2709, 2711, 2713, 2715, 2717, 2719, 2721, 2723, 2725, 2727, - 2729, 2731, 2733, 2735, 2737, 2739, 2741, 2743, 2745, 2747 +static const short yyprhs[] = {0, + 0, 2, 4, 8, 11, 14, 16, 18, 20, 22, + 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, + 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, + 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, + 84, 86, 88, 90, 92, 94, 96, 98, 100, 109, + 118, 122, 126, 127, 129, 131, 132, 134, 136, 137, + 141, 143, 147, 148, 152, 153, 158, 163, 168, 172, + 174, 176, 178, 180, 182, 185, 189, 192, 196, 202, + 206, 211, 215, 222, 228, 231, 234, 242, 244, 246, + 248, 250, 252, 254, 255, 258, 259, 263, 264, 273, + 277, 279, 280, 282, 284, 288, 291, 293, 294, 297, + 299, 303, 305, 310, 313, 316, 318, 321, 327, 331, + 333, 335, 337, 340, 344, 348, 352, 356, 360, 364, + 368, 371, 374, 377, 381, 388, 392, 396, 401, 405, + 408, 411, 413, 415, 420, 422, 427, 429, 431, 435, + 437, 442, 447, 453, 464, 468, 470, 472, 474, 476, + 479, 483, 487, 491, 495, 499, 503, 507, 510, 513, + 516, 520, 527, 531, 535, 540, 544, 548, 553, 557, + 561, 564, 567, 570, 573, 577, 580, 585, 589, 593, + 598, 603, 609, 616, 622, 629, 633, 635, 637, 640, + 643, 644, 647, 649, 650, 654, 658, 661, 663, 666, + 669, 674, 675, 679, 680, 687, 691, 692, 696, 698, + 700, 705, 708, 709, 712, 714, 717, 720, 723, 726, + 728, 730, 732, 735, 737, 740, 750, 752, 753, 758, + 773, 775, 777, 779, 783, 789, 791, 793, 795, 799, + 801, 802, 804, 806, 808, 812, 813, 815, 817, 819, + 821, 827, 831, 834, 836, 838, 840, 842, 844, 846, + 848, 850, 854, 856, 860, 864, 866, 870, 872, 874, + 876, 878, 881, 885, 889, 894, 899, 901, 903, 904, + 906, 908, 909, 912, 913, 921, 924, 926, 928, 930, + 934, 936, 938, 940, 942, 944, 946, 949, 951, 955, + 956, 963, 975, 977, 978, 981, 982, 984, 986, 990, + 992, 999, 1003, 1006, 1009, 1010, 1012, 1015, 1016, 1021, + 1025, 1037, 1040, 1041, 1045, 1048, 1050, 1054, 1057, 1059, + 1060, 1064, 1066, 1068, 1070, 1072, 1077, 1079, 1081, 1086, + 1093, 1095, 1097, 1099, 1101, 1103, 1105, 1107, 1109, 1111, + 1113, 1117, 1121, 1125, 1135, 1137, 1138, 1140, 1141, 1142, + 1156, 1158, 1160, 1164, 1168, 1170, 1172, 1176, 1179, 1182, + 1186, 1188, 1190, 1192, 1194, 1196, 1198, 1199, 1202, 1205, + 1208, 1211, 1214, 1217, 1220, 1223, 1225, 1227, 1228, 1234, + 1237, 1244, 1248, 1252, 1253, 1257, 1258, 1260, 1262, 1263, + 1265, 1267, 1268, 1272, 1277, 1281, 1287, 1289, 1290, 1292, + 1293, 1297, 1298, 1300, 1304, 1308, 1310, 1312, 1314, 1316, + 1318, 1320, 1326, 1331, 1340, 1344, 1345, 1349, 1351, 1354, + 1359, 1363, 1370, 1385, 1396, 1405, 1409, 1410, 1415, 1417, + 1425, 1429, 1430, 1432, 1433, 1435, 1436, 1438, 1442, 1444, + 1445, 1449, 1450, 1452, 1456, 1459, 1462, 1465, 1468, 1470, + 1472, 1473, 1475, 1476, 1478, 1480, 1484, 1488, 1489, 1492, + 1493, 1502, 1505, 1506, 1510, 1515, 1517, 1521, 1524, 1526, + 1529, 1532, 1535, 1538, 1540, 1542, 1544, 1545, 1547, 1548, + 1553, 1558, 1559, 1561, 1565, 1567, 1571, 1573, 1576, 1577, + 1579, 1582, 1586, 1591, 1592, 1596, 1601, 1602, 1605, 1607, + 1610, 1612, 1614, 1616, 1618, 1620, 1622, 1625, 1628, 1631, + 1634, 1636, 1639, 1641, 1643, 1647, 1648, 1654, 1658, 1659, + 1665, 1669, 1670, 1675, 1677, 1682, 1685, 1687, 1691, 1694, + 1696, 1697, 1701, 1702, 1705, 1706, 1708, 1711, 1713, 1716, + 1718, 1720, 1722, 1724, 1726, 1728, 1732, 1733, 1735, 1739, + 1743, 1747, 1751, 1755, 1759, 1763, 1764, 1766, 1768, 1776, + 1785, 1794, 1802, 1810, 1814, 1818, 1820, 1822, 1824, 1826, + 1828, 1830, 1832, 1834, 1836, 1838, 1840, 1843, 1845, 1847, + 1849, 1852, 1856, 1860, 1864, 1868, 1872, 1876, 1880, 1883, + 1886, 1889, 1893, 1900, 1904, 1908, 1912, 1917, 1920, 1923, + 1928, 1932, 1937, 1939, 1941, 1946, 1948, 1953, 1955, 1957, + 1962, 1967, 1972, 1977, 1983, 1989, 1995, 2000, 2003, 2007, + 2010, 2015, 2019, 2024, 2028, 2033, 2039, 2046, 2047, 2054, + 2055, 2063, 2069, 2075, 2081, 2087, 2093, 2099, 2105, 2111, + 2118, 2125, 2132, 2139, 2146, 2153, 2160, 2167, 2174, 2181, + 2188, 2195, 2202, 2209, 2216, 2223, 2227, 2231, 2234, 2237, + 2239, 2241, 2244, 2248, 2252, 2256, 2260, 2263, 2266, 2269, + 2273, 2280, 2284, 2288, 2291, 2294, 2298, 2303, 2305, 2307, + 2312, 2314, 2319, 2321, 2323, 2328, 2333, 2339, 2345, 2351, + 2356, 2361, 2368, 2369, 2371, 2375, 2379, 2383, 2384, 2386, + 2388, 2390, 2394, 2395, 2398, 2400, 2403, 2407, 2411, 2415, + 2419, 2422, 2426, 2433, 2437, 2441, 2444, 2447, 2449, 2453, + 2458, 2463, 2468, 2474, 2480, 2486, 2491, 2495, 2496, 2499, + 2500, 2503, 2504, 2508, 2511, 2513, 2515, 2517, 2519, 2523, + 2525, 2527, 2529, 2533, 2537, 2541, 2543, 2547, 2551, 2555, + 2557, 2559, 2564, 2567, 2571, 2575, 2577, 2581, 2583, 2587, + 2589, 2591, 2592, 2594, 2596, 2598, 2600, 2602, 2604, 2606, + 2608, 2610, 2612, 2614, 2616, 2618, 2620, 2623, 2625, 2627, + 2629, 2631, 2633, 2635, 2637, 2639, 2641, 2643, 2645, 2647, + 2649, 2651, 2653, 2655, 2657, 2659, 2661, 2663, 2665, 2667, + 2669, 2671, 2673, 2675, 2677, 2679, 2681, 2683, 2685, 2687, + 2689, 2691, 2693, 2695, 2697, 2699, 2701, 2703, 2705, 2707, + 2709, 2711, 2713, 2715, 2717, 2719, 2721, 2723, 2725, 2727, + 2729, 2731, 2733, 2735, 2737, 2739, 2741, 2743, 2745, 2747 }; -static const short yyrhs[] = { 222, - 0, 223, 0, 222, 223, 212, 0, 222, 223, 0, - 223, 212, 0, 238, 0, 225, 0, 240, 0, 241, - 0, 247, 0, 269, 0, 273, 0, 279, 0, 282, - 0, 224, 0, 362, 0, 292, 0, 300, 0, 281, - 0, 291, 0, 226, 0, 321, 0, 368, 0, 301, - 0, 305, 0, 312, 0, 350, 0, 351, 0, 376, - 0, 323, 0, 322, 0, 331, 0, 334, 0, 333, - 0, 329, 0, 338, 0, 311, 0, 369, 0, 341, - 0, 352, 0, 354, 0, 355, 0, 356, 0, 361, - 0, 363, 0, 233, 0, 236, 0, 237, 0, 25, - 113, 472, 227, 228, 229, 231, 232, 0, 6, 113, - 472, 227, 228, 229, 231, 232, 0, 41, 113, 472, - 0, 120, 189, 472, 0, 0, 190, 0, 191, 0, - 0, 192, 0, 193, 0, 0, 230, 218, 472, 0, - 472, 0, 56, 53, 230, 0, 0, 194, 195, 197, - 0, 0, 99, 474, 106, 234, 0, 99, 474, 203, - 234, 0, 99, 102, 123, 235, 0, 99, 72, 360, - 0, 471, 0, 36, 0, 471, 0, 36, 0, 68, - 0, 177, 474, 0, 177, 102, 123, 0, 170, 474, - 0, 170, 102, 123, 0, 6, 101, 458, 392, 239, - 0, 4, 340, 250, 0, 4, 219, 248, 220, 0, - 41, 340, 474, 0, 6, 340, 474, 99, 36, 256, - 0, 6, 340, 474, 41, 36, 0, 4, 258, 0, - 20, 457, 0, 137, 244, 458, 245, 242, 243, 246, - 0, 106, 0, 50, 0, 471, 0, 180, 0, 181, - 0, 134, 0, 0, 120, 165, 0, 0, 114, 140, - 471, 0, 0, 25, 101, 458, 219, 248, 220, 267, - 268, 0, 248, 218, 249, 0, 249, 0, 0, 250, - 0, 257, 0, 474, 409, 251, 0, 474, 175, 0, - 252, 0, 0, 252, 253, 0, 253, 0, 24, 464, - 254, 0, 254, 0, 19, 219, 260, 220, 0, 36, - 256, 0, 77, 79, 0, 111, 0, 89, 63, 0, - 93, 474, 372, 263, 264, 0, 255, 218, 256, 0, - 256, 0, 468, 0, 79, 0, 207, 256, 0, 256, - 206, 256, 0, 256, 207, 256, 0, 256, 209, 256, - 0, 256, 208, 256, 0, 256, 203, 256, 0, 256, - 204, 256, 0, 256, 205, 256, 0, 211, 256, 0, - 212, 256, 0, 210, 256, 0, 256, 217, 409, 0, - 16, 219, 256, 9, 409, 220, 0, 219, 256, 220, - 0, 465, 219, 220, 0, 465, 219, 255, 220, 0, - 256, 198, 256, 0, 198, 256, 0, 256, 198, 0, - 28, 0, 29, 0, 29, 219, 470, 220, 0, 30, - 0, 30, 219, 470, 220, 0, 31, 0, 113, 0, - 24, 464, 258, 0, 258, 0, 19, 219, 260, 220, - 0, 111, 219, 373, 220, 0, 89, 63, 219, 373, - 220, 0, 49, 63, 219, 373, 220, 93, 474, 372, - 263, 264, 0, 259, 218, 260, 0, 260, 0, 468, - 0, 79, 0, 474, 0, 207, 260, 0, 260, 206, - 260, 0, 260, 207, 260, 0, 260, 209, 260, 0, - 260, 208, 260, 0, 260, 203, 260, 0, 260, 204, - 260, 0, 260, 205, 260, 0, 211, 260, 0, 212, - 260, 0, 210, 260, 0, 260, 217, 409, 0, 16, - 219, 260, 9, 409, 220, 0, 219, 260, 220, 0, - 465, 219, 220, 0, 465, 219, 259, 220, 0, 260, - 198, 260, 0, 260, 67, 260, 0, 260, 77, 67, - 260, 0, 260, 7, 260, 0, 260, 83, 260, 0, - 77, 260, 0, 198, 260, 0, 260, 198, 0, 260, - 152, 0, 260, 61, 79, 0, 260, 164, 0, 260, - 61, 77, 79, 0, 260, 61, 126, 0, 260, 61, - 124, 0, 260, 61, 77, 126, 0, 260, 61, 77, - 124, 0, 260, 56, 219, 261, 220, 0, 260, 77, - 56, 219, 261, 220, 0, 260, 12, 262, 7, 262, - 0, 260, 77, 12, 262, 7, 262, 0, 261, 218, - 262, 0, 262, 0, 468, 0, 69, 51, 0, 69, - 86, 0, 0, 265, 265, 0, 265, 0, 0, 81, - 37, 266, 0, 81, 112, 266, 0, 76, 3, 0, - 15, 0, 99, 36, 0, 99, 79, 0, 150, 219, - 393, 220, 0, 0, 188, 203, 162, 0, 0, 25, - 101, 458, 270, 9, 380, 0, 219, 271, 220, 0, - 0, 271, 218, 272, 0, 272, 0, 474, 0, 25, - 174, 458, 274, 0, 274, 275, 0, 0, 135, 278, - 0, 138, 0, 148, 278, 0, 158, 278, 0, 159, - 278, 0, 178, 278, 0, 277, 0, 278, 0, 201, - 0, 207, 201, 0, 470, 0, 207, 470, 0, 25, - 280, 167, 64, 471, 147, 295, 153, 471, 0, 182, - 0, 0, 41, 167, 64, 471, 0, 25, 125, 464, - 283, 284, 81, 458, 286, 43, 91, 464, 219, 289, - 220, 0, 133, 0, 129, 0, 285, 0, 285, 83, - 285, 0, 285, 83, 285, 83, 285, 0, 58, 0, - 37, 0, 112, 0, 48, 287, 288, 0, 142, 0, - 0, 172, 0, 179, 0, 290, 0, 289, 218, 290, - 0, 0, 199, 0, 201, 0, 471, 0, 196, 0, - 41, 125, 464, 81, 458, 0, 25, 294, 293, 0, - 295, 296, 0, 166, 0, 127, 0, 130, 0, 91, - 0, 62, 0, 474, 0, 336, 0, 198, 0, 219, - 297, 220, 0, 298, 0, 297, 218, 298, 0, 295, - 203, 299, 0, 295, 0, 36, 203, 299, 0, 474, - 0, 335, 0, 276, 0, 471, 0, 176, 474, 0, - 41, 101, 393, 0, 41, 174, 393, 0, 46, 302, - 303, 304, 0, 160, 302, 303, 304, 0, 145, 0, - 132, 0, 0, 470, 0, 5, 0, 0, 56, 464, - 0, 0, 52, 306, 81, 393, 106, 309, 310, 0, - 5, 90, 0, 5, 0, 307, 0, 308, 0, 307, - 218, 308, 0, 98, 0, 58, 0, 112, 0, 37, - 0, 173, 0, 92, 0, 53, 474, 0, 474, 0, - 120, 52, 82, 0, 0, 94, 306, 81, 393, 50, - 309, 0, 25, 313, 149, 463, 81, 458, 314, 219, - 315, 220, 324, 0, 111, 0, 0, 114, 460, 0, - 0, 316, 0, 317, 0, 316, 218, 318, 0, 318, - 0, 465, 219, 394, 220, 319, 320, 0, 461, 319, - 320, 0, 211, 409, 0, 48, 409, 0, 0, 462, - 0, 114, 462, 0, 0, 144, 149, 463, 405, 0, - 43, 168, 467, 0, 25, 146, 465, 325, 171, 327, - 324, 9, 471, 64, 471, 0, 120, 296, 0, 0, - 219, 326, 220, 0, 219, 220, 0, 473, 0, 326, - 218, 473, 0, 328, 473, 0, 176, 0, 0, 41, - 330, 464, 0, 127, 0, 149, 0, 173, 0, 118, - 0, 41, 130, 464, 332, 0, 464, 0, 208, 0, - 41, 146, 465, 325, 0, 41, 166, 335, 219, 337, - 220, 0, 198, 0, 336, 0, 206, 0, 207, 0, - 208, 0, 209, 0, 204, 0, 205, 0, 203, 0, - 464, 0, 464, 218, 464, 0, 162, 218, 464, 0, - 464, 218, 162, 0, 6, 101, 458, 392, 169, 340, - 339, 106, 464, 0, 464, 0, 0, 22, 0, 0, - 0, 25, 173, 464, 9, 342, 81, 347, 106, 346, - 405, 141, 348, 343, 0, 163, 0, 369, 0, 215, - 344, 216, 0, 219, 344, 220, 0, 345, 0, 369, - 0, 345, 369, 212, 0, 345, 369, 0, 369, 212, - 0, 458, 214, 461, 0, 458, 0, 98, 0, 112, - 0, 37, 0, 58, 0, 151, 0, 0, 78, 458, - 0, 154, 458, 0, 187, 458, 0, 128, 353, 0, - 11, 353, 0, 23, 353, 0, 42, 353, 0, 96, - 353, 0, 121, 0, 108, 0, 0, 25, 118, 464, - 9, 379, 0, 155, 466, 0, 25, 139, 459, 120, - 357, 358, 0, 25, 139, 459, 0, 157, 203, 359, - 0, 0, 186, 203, 360, 0, 0, 471, 0, 36, - 0, 0, 471, 0, 36, 0, 0, 41, 139, 459, - 0, 136, 463, 81, 458, 0, 183, 364, 365, 0, - 183, 364, 365, 458, 366, 0, 184, 0, 0, 131, - 0, 0, 219, 367, 220, 0, 0, 464, 0, 367, - 218, 464, 0, 143, 364, 369, 0, 379, 0, 378, - 0, 377, 0, 370, 0, 349, 0, 375, 0, 58, - 60, 458, 372, 371, 0, 115, 219, 455, 220, 0, - 98, 387, 455, 397, 405, 395, 396, 381, 0, 219, - 373, 220, 0, 0, 373, 218, 374, 0, 374, 0, - 474, 437, 0, 37, 50, 458, 405, 0, 156, 385, - 458, 0, 112, 458, 99, 453, 397, 405, 0, 35, - 464, 244, 32, 48, 98, 387, 455, 397, 405, 395, - 396, 381, 388, 0, 98, 387, 455, 384, 397, 405, - 395, 396, 381, 388, 0, 98, 387, 455, 397, 405, - 395, 396, 381, 0, 110, 386, 382, 0, 0, 382, - 110, 386, 383, 0, 383, 0, 98, 387, 455, 397, - 405, 395, 396, 0, 60, 385, 458, 0, 0, 101, - 0, 0, 5, 0, 0, 39, 0, 39, 81, 474, - 0, 5, 0, 0, 84, 14, 389, 0, 0, 390, - 0, 389, 218, 390, 0, 433, 391, 0, 114, 198, - 0, 114, 204, 0, 114, 205, 0, 10, 0, 38, - 0, 0, 208, 0, 0, 394, 0, 464, 0, 394, - 218, 464, 0, 53, 14, 438, 0, 0, 54, 433, - 0, 0, 50, 219, 406, 400, 62, 406, 402, 220, - 0, 50, 398, 0, 0, 398, 218, 399, 0, 399, - 26, 62, 399, 0, 399, 0, 406, 9, 475, 0, - 406, 474, 0, 406, 0, 74, 400, 0, 51, 401, - 0, 66, 401, 0, 95, 401, 0, 85, 0, 57, - 0, 110, 0, 0, 85, 0, 0, 81, 219, 433, - 220, 0, 114, 219, 403, 220, 0, 0, 404, 0, - 403, 218, 404, 0, 474, 0, 474, 214, 474, 0, - 470, 0, 119, 433, 0, 0, 458, 0, 458, 208, - 0, 215, 216, 408, 0, 215, 470, 216, 408, 0, - 0, 215, 216, 408, 0, 215, 470, 216, 408, 0, - 0, 410, 407, 0, 418, 0, 176, 410, 0, 411, - 0, 423, 0, 413, 0, 412, 0, 196, 0, 127, - 0, 47, 415, 0, 40, 88, 0, 34, 417, 0, - 80, 416, 0, 47, 0, 40, 88, 0, 34, 0, - 80, 0, 219, 470, 220, 0, 0, 219, 470, 218, - 470, 220, 0, 219, 470, 220, 0, 0, 219, 470, - 218, 470, 220, 0, 219, 470, 220, 0, 0, 419, - 219, 470, 220, 0, 419, 0, 18, 420, 421, 422, - 0, 17, 420, 0, 116, 0, 73, 18, 420, 0, - 75, 420, 0, 117, 0, 0, 18, 99, 474, 0, - 0, 21, 474, 0, 0, 424, 0, 103, 425, 0, - 102, 0, 59, 426, 0, 122, 0, 71, 0, 33, - 0, 55, 0, 70, 0, 97, 0, 120, 102, 123, - 0, 0, 424, 0, 122, 106, 71, 0, 33, 106, - 55, 0, 33, 106, 70, 0, 33, 106, 97, 0, - 55, 106, 70, 0, 55, 106, 97, 0, 70, 106, - 97, 0, 0, 433, 0, 79, 0, 219, 429, 220, - 56, 219, 380, 220, 0, 219, 429, 220, 77, 56, - 219, 380, 220, 0, 219, 429, 220, 431, 432, 219, - 380, 220, 0, 219, 429, 220, 431, 219, 380, 220, - 0, 219, 429, 220, 431, 219, 429, 220, 0, 430, - 218, 433, 0, 430, 218, 433, 0, 433, 0, 198, - 0, 204, 0, 203, 0, 205, 0, 206, 0, 207, - 0, 208, 0, 209, 0, 8, 0, 5, 0, 451, - 437, 0, 428, 0, 468, 0, 474, 0, 207, 433, - 0, 433, 206, 433, 0, 433, 207, 433, 0, 433, - 209, 433, 0, 433, 208, 433, 0, 433, 204, 433, - 0, 433, 205, 433, 0, 433, 203, 433, 0, 211, - 433, 0, 212, 433, 0, 210, 433, 0, 433, 217, - 409, 0, 16, 219, 433, 9, 409, 220, 0, 219, - 427, 220, 0, 433, 198, 433, 0, 433, 67, 433, - 0, 433, 77, 67, 433, 0, 198, 433, 0, 433, - 198, 0, 465, 219, 208, 220, 0, 465, 219, 220, - 0, 465, 219, 438, 220, 0, 28, 0, 29, 0, - 29, 219, 470, 220, 0, 30, 0, 30, 219, 470, - 220, 0, 31, 0, 113, 0, 44, 219, 380, 220, - 0, 45, 219, 439, 220, 0, 87, 219, 441, 220, - 0, 100, 219, 443, 220, 0, 109, 219, 13, 446, - 220, 0, 109, 219, 65, 446, 220, 0, 109, 219, - 107, 446, 220, 0, 109, 219, 446, 220, 0, 433, - 152, 0, 433, 61, 79, 0, 433, 164, 0, 433, - 61, 77, 79, 0, 433, 61, 126, 0, 433, 61, - 77, 124, 0, 433, 61, 124, 0, 433, 61, 77, - 126, 0, 433, 12, 436, 7, 436, 0, 433, 77, - 12, 436, 7, 436, 0, 0, 433, 56, 434, 219, - 447, 220, 0, 0, 433, 77, 56, 435, 219, 449, - 220, 0, 433, 198, 219, 380, 220, 0, 433, 206, - 219, 380, 220, 0, 433, 207, 219, 380, 220, 0, - 433, 209, 219, 380, 220, 0, 433, 208, 219, 380, - 220, 0, 433, 204, 219, 380, 220, 0, 433, 205, - 219, 380, 220, 0, 433, 203, 219, 380, 220, 0, - 433, 198, 8, 219, 380, 220, 0, 433, 206, 8, - 219, 380, 220, 0, 433, 207, 8, 219, 380, 220, - 0, 433, 209, 8, 219, 380, 220, 0, 433, 208, - 8, 219, 380, 220, 0, 433, 204, 8, 219, 380, - 220, 0, 433, 205, 8, 219, 380, 220, 0, 433, - 203, 8, 219, 380, 220, 0, 433, 198, 5, 219, - 380, 220, 0, 433, 206, 5, 219, 380, 220, 0, - 433, 207, 5, 219, 380, 220, 0, 433, 209, 5, - 219, 380, 220, 0, 433, 208, 5, 219, 380, 220, - 0, 433, 204, 5, 219, 380, 220, 0, 433, 205, - 5, 219, 380, 220, 0, 433, 203, 5, 219, 380, - 220, 0, 433, 7, 433, 0, 433, 83, 433, 0, - 77, 433, 0, 451, 437, 0, 468, 0, 474, 0, - 207, 436, 0, 436, 206, 436, 0, 436, 207, 436, - 0, 436, 209, 436, 0, 436, 208, 436, 0, 211, - 436, 0, 212, 436, 0, 210, 436, 0, 436, 217, - 409, 0, 16, 219, 436, 9, 409, 220, 0, 219, - 433, 220, 0, 436, 198, 436, 0, 198, 436, 0, - 436, 198, 0, 465, 219, 220, 0, 465, 219, 438, - 220, 0, 28, 0, 29, 0, 29, 219, 470, 220, - 0, 30, 0, 30, 219, 470, 220, 0, 31, 0, - 113, 0, 87, 219, 441, 220, 0, 100, 219, 443, - 220, 0, 109, 219, 13, 446, 220, 0, 109, 219, - 65, 446, 220, 0, 109, 219, 107, 446, 220, 0, - 109, 219, 446, 220, 0, 215, 433, 216, 437, 0, - 215, 433, 211, 433, 216, 437, 0, 0, 427, 0, - 438, 218, 427, 0, 438, 114, 433, 0, 440, 50, - 433, 0, 0, 424, 0, 104, 0, 105, 0, 442, - 56, 442, 0, 0, 451, 437, 0, 468, 0, 207, - 442, 0, 442, 206, 442, 0, 442, 207, 442, 0, - 442, 209, 442, 0, 442, 208, 442, 0, 210, 442, - 0, 442, 217, 409, 0, 16, 219, 442, 9, 409, - 220, 0, 219, 442, 220, 0, 442, 198, 442, 0, - 198, 442, 0, 442, 198, 0, 474, 0, 465, 219, - 220, 0, 465, 219, 438, 220, 0, 87, 219, 441, - 220, 0, 100, 219, 443, 220, 0, 109, 219, 13, - 446, 220, 0, 109, 219, 65, 446, 220, 0, 109, - 219, 107, 446, 220, 0, 109, 219, 446, 220, 0, - 438, 444, 445, 0, 0, 50, 438, 0, 0, 48, - 438, 0, 0, 433, 50, 438, 0, 50, 438, 0, - 438, 0, 380, 0, 448, 0, 468, 0, 448, 218, - 468, 0, 380, 0, 450, 0, 468, 0, 450, 218, - 468, 0, 458, 214, 452, 0, 469, 214, 452, 0, - 461, 0, 452, 214, 461, 0, 452, 214, 208, 0, - 453, 218, 454, 0, 454, 0, 208, 0, 474, 437, - 203, 427, 0, 451, 437, 0, 458, 214, 208, 0, - 455, 218, 456, 0, 456, 0, 427, 9, 475, 0, - 427, 0, 458, 214, 208, 0, 208, 0, 474, 0, - 0, 476, 0, 474, 0, 474, 0, 196, 0, 474, - 0, 196, 0, 474, 0, 474, 0, 474, 0, 471, - 0, 196, 0, 470, 0, 201, 0, 471, 0, 409, - 471, 0, 469, 0, 126, 0, 124, 0, 200, 0, - 199, 0, 197, 0, 196, 0, 474, 0, 414, 0, - 419, 0, 196, 0, 424, 0, 3, 0, 135, 0, - 138, 0, 139, 0, 140, 0, 40, 0, 142, 0, - 186, 0, 146, 0, 148, 0, 149, 0, 63, 0, - 64, 0, 157, 0, 69, 0, 158, 0, 159, 0, - 166, 0, 82, 0, 189, 0, 90, 0, 168, 0, - 172, 0, 175, 0, 178, 0, 179, 0, 102, 0, - 104, 0, 105, 0, 125, 0, 127, 0, 194, 0, - 185, 0, 123, 0, 474, 0, 188, 0, 136, 0, - 24, 0, 26, 0, 49, 0, 53, 0, 155, 0, - 84, 0, 87, 0, 88, 0, 101, 0, 108, 0, - 126, 0, 124, 0, 27, 0, 161, 0 +static const short yyrhs[] = {222, + 0, 223, 0, 222, 223, 212, 0, 222, 223, 0, + 223, 212, 0, 238, 0, 225, 0, 240, 0, 241, + 0, 247, 0, 269, 0, 273, 0, 279, 0, 282, + 0, 224, 0, 362, 0, 292, 0, 300, 0, 281, + 0, 291, 0, 226, 0, 321, 0, 368, 0, 301, + 0, 305, 0, 312, 0, 350, 0, 351, 0, 376, + 0, 323, 0, 322, 0, 331, 0, 334, 0, 333, + 0, 329, 0, 338, 0, 311, 0, 369, 0, 341, + 0, 352, 0, 354, 0, 355, 0, 356, 0, 361, + 0, 363, 0, 233, 0, 236, 0, 237, 0, 25, + 113, 472, 227, 228, 229, 231, 232, 0, 6, 113, + 472, 227, 228, 229, 231, 232, 0, 41, 113, 472, + 0, 120, 189, 472, 0, 0, 190, 0, 191, 0, + 0, 192, 0, 193, 0, 0, 230, 218, 472, 0, + 472, 0, 56, 53, 230, 0, 0, 194, 195, 197, + 0, 0, 99, 474, 106, 234, 0, 99, 474, 203, + 234, 0, 99, 102, 123, 235, 0, 99, 72, 360, + 0, 471, 0, 36, 0, 471, 0, 36, 0, 68, + 0, 177, 474, 0, 177, 102, 123, 0, 170, 474, + 0, 170, 102, 123, 0, 6, 101, 458, 392, 239, + 0, 4, 340, 250, 0, 4, 219, 248, 220, 0, + 41, 340, 474, 0, 6, 340, 474, 99, 36, 256, + 0, 6, 340, 474, 41, 36, 0, 4, 258, 0, + 20, 457, 0, 137, 244, 458, 245, 242, 243, 246, + 0, 106, 0, 50, 0, 471, 0, 180, 0, 181, + 0, 134, 0, 0, 120, 165, 0, 0, 114, 140, + 471, 0, 0, 25, 101, 458, 219, 248, 220, 267, + 268, 0, 248, 218, 249, 0, 249, 0, 0, 250, + 0, 257, 0, 474, 409, 251, 0, 474, 175, 0, + 252, 0, 0, 252, 253, 0, 253, 0, 24, 464, + 254, 0, 254, 0, 19, 219, 260, 220, 0, 36, + 256, 0, 77, 79, 0, 111, 0, 89, 63, 0, + 93, 474, 372, 263, 264, 0, 255, 218, 256, 0, + 256, 0, 468, 0, 79, 0, 207, 256, 0, 256, + 206, 256, 0, 256, 207, 256, 0, 256, 209, 256, + 0, 256, 208, 256, 0, 256, 203, 256, 0, 256, + 204, 256, 0, 256, 205, 256, 0, 211, 256, 0, + 212, 256, 0, 210, 256, 0, 256, 217, 409, 0, + 16, 219, 256, 9, 409, 220, 0, 219, 256, 220, + 0, 465, 219, 220, 0, 465, 219, 255, 220, 0, + 256, 198, 256, 0, 198, 256, 0, 256, 198, 0, + 28, 0, 29, 0, 29, 219, 470, 220, 0, 30, + 0, 30, 219, 470, 220, 0, 31, 0, 113, 0, + 24, 464, 258, 0, 258, 0, 19, 219, 260, 220, + 0, 111, 219, 373, 220, 0, 89, 63, 219, 373, + 220, 0, 49, 63, 219, 373, 220, 93, 474, 372, + 263, 264, 0, 259, 218, 260, 0, 260, 0, 468, + 0, 79, 0, 474, 0, 207, 260, 0, 260, 206, + 260, 0, 260, 207, 260, 0, 260, 209, 260, 0, + 260, 208, 260, 0, 260, 203, 260, 0, 260, 204, + 260, 0, 260, 205, 260, 0, 211, 260, 0, 212, + 260, 0, 210, 260, 0, 260, 217, 409, 0, 16, + 219, 260, 9, 409, 220, 0, 219, 260, 220, 0, + 465, 219, 220, 0, 465, 219, 259, 220, 0, 260, + 198, 260, 0, 260, 67, 260, 0, 260, 77, 67, + 260, 0, 260, 7, 260, 0, 260, 83, 260, 0, + 77, 260, 0, 198, 260, 0, 260, 198, 0, 260, + 152, 0, 260, 61, 79, 0, 260, 164, 0, 260, + 61, 77, 79, 0, 260, 61, 126, 0, 260, 61, + 124, 0, 260, 61, 77, 126, 0, 260, 61, 77, + 124, 0, 260, 56, 219, 261, 220, 0, 260, 77, + 56, 219, 261, 220, 0, 260, 12, 262, 7, 262, + 0, 260, 77, 12, 262, 7, 262, 0, 261, 218, + 262, 0, 262, 0, 468, 0, 69, 51, 0, 69, + 86, 0, 0, 265, 265, 0, 265, 0, 0, 81, + 37, 266, 0, 81, 112, 266, 0, 76, 3, 0, + 15, 0, 99, 36, 0, 99, 79, 0, 150, 219, + 393, 220, 0, 0, 188, 203, 162, 0, 0, 25, + 101, 458, 270, 9, 380, 0, 219, 271, 220, 0, + 0, 271, 218, 272, 0, 272, 0, 474, 0, 25, + 174, 458, 274, 0, 274, 275, 0, 0, 135, 278, + 0, 138, 0, 148, 278, 0, 158, 278, 0, 159, + 278, 0, 178, 278, 0, 277, 0, 278, 0, 201, + 0, 207, 201, 0, 470, 0, 207, 470, 0, 25, + 280, 167, 64, 471, 147, 295, 153, 471, 0, 182, + 0, 0, 41, 167, 64, 471, 0, 25, 125, 464, + 283, 284, 81, 458, 286, 43, 91, 464, 219, 289, + 220, 0, 133, 0, 129, 0, 285, 0, 285, 83, + 285, 0, 285, 83, 285, 83, 285, 0, 58, 0, + 37, 0, 112, 0, 48, 287, 288, 0, 142, 0, + 0, 172, 0, 179, 0, 290, 0, 289, 218, 290, + 0, 0, 199, 0, 201, 0, 471, 0, 196, 0, + 41, 125, 464, 81, 458, 0, 25, 294, 293, 0, + 295, 296, 0, 166, 0, 127, 0, 130, 0, 91, + 0, 62, 0, 474, 0, 336, 0, 198, 0, 219, + 297, 220, 0, 298, 0, 297, 218, 298, 0, 295, + 203, 299, 0, 295, 0, 36, 203, 299, 0, 474, + 0, 335, 0, 276, 0, 471, 0, 176, 474, 0, + 41, 101, 393, 0, 41, 174, 393, 0, 46, 302, + 303, 304, 0, 160, 302, 303, 304, 0, 145, 0, + 132, 0, 0, 470, 0, 5, 0, 0, 56, 464, + 0, 0, 52, 306, 81, 393, 106, 309, 310, 0, + 5, 90, 0, 5, 0, 307, 0, 308, 0, 307, + 218, 308, 0, 98, 0, 58, 0, 112, 0, 37, + 0, 173, 0, 92, 0, 53, 474, 0, 474, 0, + 120, 52, 82, 0, 0, 94, 306, 81, 393, 50, + 309, 0, 25, 313, 149, 463, 81, 458, 314, 219, + 315, 220, 324, 0, 111, 0, 0, 114, 460, 0, + 0, 316, 0, 317, 0, 316, 218, 318, 0, 318, + 0, 465, 219, 394, 220, 319, 320, 0, 461, 319, + 320, 0, 211, 409, 0, 48, 409, 0, 0, 462, + 0, 114, 462, 0, 0, 144, 149, 463, 405, 0, + 43, 168, 467, 0, 25, 146, 465, 325, 171, 327, + 324, 9, 471, 64, 471, 0, 120, 296, 0, 0, + 219, 326, 220, 0, 219, 220, 0, 473, 0, 326, + 218, 473, 0, 328, 473, 0, 176, 0, 0, 41, + 330, 464, 0, 127, 0, 149, 0, 173, 0, 118, + 0, 41, 130, 464, 332, 0, 464, 0, 208, 0, + 41, 146, 465, 325, 0, 41, 166, 335, 219, 337, + 220, 0, 198, 0, 336, 0, 206, 0, 207, 0, + 208, 0, 209, 0, 204, 0, 205, 0, 203, 0, + 464, 0, 464, 218, 464, 0, 162, 218, 464, 0, + 464, 218, 162, 0, 6, 101, 458, 392, 169, 340, + 339, 106, 464, 0, 464, 0, 0, 22, 0, 0, + 0, 25, 173, 464, 9, 342, 81, 347, 106, 346, + 405, 141, 348, 343, 0, 163, 0, 369, 0, 215, + 344, 216, 0, 219, 344, 220, 0, 345, 0, 369, + 0, 345, 369, 212, 0, 345, 369, 0, 369, 212, + 0, 458, 214, 461, 0, 458, 0, 98, 0, 112, + 0, 37, 0, 58, 0, 151, 0, 0, 78, 458, + 0, 154, 458, 0, 187, 458, 0, 128, 353, 0, + 11, 353, 0, 23, 353, 0, 42, 353, 0, 96, + 353, 0, 121, 0, 108, 0, 0, 25, 118, 464, + 9, 379, 0, 155, 466, 0, 25, 139, 459, 120, + 357, 358, 0, 25, 139, 459, 0, 157, 203, 359, + 0, 0, 186, 203, 360, 0, 0, 471, 0, 36, + 0, 0, 471, 0, 36, 0, 0, 41, 139, 459, + 0, 136, 463, 81, 458, 0, 183, 364, 365, 0, + 183, 364, 365, 458, 366, 0, 184, 0, 0, 131, + 0, 0, 219, 367, 220, 0, 0, 464, 0, 367, + 218, 464, 0, 143, 364, 369, 0, 379, 0, 378, + 0, 377, 0, 370, 0, 349, 0, 375, 0, 58, + 60, 458, 372, 371, 0, 115, 219, 455, 220, 0, + 98, 387, 455, 397, 405, 395, 396, 381, 0, 219, + 373, 220, 0, 0, 373, 218, 374, 0, 374, 0, + 474, 437, 0, 37, 50, 458, 405, 0, 156, 385, + 458, 0, 112, 458, 99, 453, 397, 405, 0, 35, + 464, 244, 32, 48, 98, 387, 455, 397, 405, 395, + 396, 381, 388, 0, 98, 387, 455, 384, 397, 405, + 395, 396, 381, 388, 0, 98, 387, 455, 397, 405, + 395, 396, 381, 0, 110, 386, 382, 0, 0, 382, + 110, 386, 383, 0, 383, 0, 98, 387, 455, 397, + 405, 395, 396, 0, 60, 385, 458, 0, 0, 101, + 0, 0, 5, 0, 0, 39, 0, 39, 81, 474, + 0, 5, 0, 0, 84, 14, 389, 0, 0, 390, + 0, 389, 218, 390, 0, 433, 391, 0, 114, 198, + 0, 114, 204, 0, 114, 205, 0, 10, 0, 38, + 0, 0, 208, 0, 0, 394, 0, 464, 0, 394, + 218, 464, 0, 53, 14, 438, 0, 0, 54, 433, + 0, 0, 50, 219, 406, 400, 62, 406, 402, 220, + 0, 50, 398, 0, 0, 398, 218, 399, 0, 399, + 26, 62, 399, 0, 399, 0, 406, 9, 475, 0, + 406, 474, 0, 406, 0, 74, 400, 0, 51, 401, + 0, 66, 401, 0, 95, 401, 0, 85, 0, 57, + 0, 110, 0, 0, 85, 0, 0, 81, 219, 433, + 220, 0, 114, 219, 403, 220, 0, 0, 404, 0, + 403, 218, 404, 0, 474, 0, 474, 214, 474, 0, + 470, 0, 119, 433, 0, 0, 458, 0, 458, 208, + 0, 215, 216, 408, 0, 215, 470, 216, 408, 0, + 0, 215, 216, 408, 0, 215, 470, 216, 408, 0, + 0, 410, 407, 0, 418, 0, 176, 410, 0, 411, + 0, 423, 0, 413, 0, 412, 0, 196, 0, 127, + 0, 47, 415, 0, 40, 88, 0, 34, 417, 0, + 80, 416, 0, 47, 0, 40, 88, 0, 34, 0, + 80, 0, 219, 470, 220, 0, 0, 219, 470, 218, + 470, 220, 0, 219, 470, 220, 0, 0, 219, 470, + 218, 470, 220, 0, 219, 470, 220, 0, 0, 419, + 219, 470, 220, 0, 419, 0, 18, 420, 421, 422, + 0, 17, 420, 0, 116, 0, 73, 18, 420, 0, + 75, 420, 0, 117, 0, 0, 18, 99, 474, 0, + 0, 21, 474, 0, 0, 424, 0, 103, 425, 0, + 102, 0, 59, 426, 0, 122, 0, 71, 0, 33, + 0, 55, 0, 70, 0, 97, 0, 120, 102, 123, + 0, 0, 424, 0, 122, 106, 71, 0, 33, 106, + 55, 0, 33, 106, 70, 0, 33, 106, 97, 0, + 55, 106, 70, 0, 55, 106, 97, 0, 70, 106, + 97, 0, 0, 433, 0, 79, 0, 219, 429, 220, + 56, 219, 380, 220, 0, 219, 429, 220, 77, 56, + 219, 380, 220, 0, 219, 429, 220, 431, 432, 219, + 380, 220, 0, 219, 429, 220, 431, 219, 380, 220, + 0, 219, 429, 220, 431, 219, 429, 220, 0, 430, + 218, 433, 0, 430, 218, 433, 0, 433, 0, 198, + 0, 204, 0, 203, 0, 205, 0, 206, 0, 207, + 0, 208, 0, 209, 0, 8, 0, 5, 0, 451, + 437, 0, 428, 0, 468, 0, 474, 0, 207, 433, + 0, 433, 206, 433, 0, 433, 207, 433, 0, 433, + 209, 433, 0, 433, 208, 433, 0, 433, 204, 433, + 0, 433, 205, 433, 0, 433, 203, 433, 0, 211, + 433, 0, 212, 433, 0, 210, 433, 0, 433, 217, + 409, 0, 16, 219, 433, 9, 409, 220, 0, 219, + 427, 220, 0, 433, 198, 433, 0, 433, 67, 433, + 0, 433, 77, 67, 433, 0, 198, 433, 0, 433, + 198, 0, 465, 219, 208, 220, 0, 465, 219, 220, + 0, 465, 219, 438, 220, 0, 28, 0, 29, 0, + 29, 219, 470, 220, 0, 30, 0, 30, 219, 470, + 220, 0, 31, 0, 113, 0, 44, 219, 380, 220, + 0, 45, 219, 439, 220, 0, 87, 219, 441, 220, + 0, 100, 219, 443, 220, 0, 109, 219, 13, 446, + 220, 0, 109, 219, 65, 446, 220, 0, 109, 219, + 107, 446, 220, 0, 109, 219, 446, 220, 0, 433, + 152, 0, 433, 61, 79, 0, 433, 164, 0, 433, + 61, 77, 79, 0, 433, 61, 126, 0, 433, 61, + 77, 124, 0, 433, 61, 124, 0, 433, 61, 77, + 126, 0, 433, 12, 436, 7, 436, 0, 433, 77, + 12, 436, 7, 436, 0, 0, 433, 56, 434, 219, + 447, 220, 0, 0, 433, 77, 56, 435, 219, 449, + 220, 0, 433, 198, 219, 380, 220, 0, 433, 206, + 219, 380, 220, 0, 433, 207, 219, 380, 220, 0, + 433, 209, 219, 380, 220, 0, 433, 208, 219, 380, + 220, 0, 433, 204, 219, 380, 220, 0, 433, 205, + 219, 380, 220, 0, 433, 203, 219, 380, 220, 0, + 433, 198, 8, 219, 380, 220, 0, 433, 206, 8, + 219, 380, 220, 0, 433, 207, 8, 219, 380, 220, + 0, 433, 209, 8, 219, 380, 220, 0, 433, 208, + 8, 219, 380, 220, 0, 433, 204, 8, 219, 380, + 220, 0, 433, 205, 8, 219, 380, 220, 0, 433, + 203, 8, 219, 380, 220, 0, 433, 198, 5, 219, + 380, 220, 0, 433, 206, 5, 219, 380, 220, 0, + 433, 207, 5, 219, 380, 220, 0, 433, 209, 5, + 219, 380, 220, 0, 433, 208, 5, 219, 380, 220, + 0, 433, 204, 5, 219, 380, 220, 0, 433, 205, + 5, 219, 380, 220, 0, 433, 203, 5, 219, 380, + 220, 0, 433, 7, 433, 0, 433, 83, 433, 0, + 77, 433, 0, 451, 437, 0, 468, 0, 474, 0, + 207, 436, 0, 436, 206, 436, 0, 436, 207, 436, + 0, 436, 209, 436, 0, 436, 208, 436, 0, 211, + 436, 0, 212, 436, 0, 210, 436, 0, 436, 217, + 409, 0, 16, 219, 436, 9, 409, 220, 0, 219, + 433, 220, 0, 436, 198, 436, 0, 198, 436, 0, + 436, 198, 0, 465, 219, 220, 0, 465, 219, 438, + 220, 0, 28, 0, 29, 0, 29, 219, 470, 220, + 0, 30, 0, 30, 219, 470, 220, 0, 31, 0, + 113, 0, 87, 219, 441, 220, 0, 100, 219, 443, + 220, 0, 109, 219, 13, 446, 220, 0, 109, 219, + 65, 446, 220, 0, 109, 219, 107, 446, 220, 0, + 109, 219, 446, 220, 0, 215, 433, 216, 437, 0, + 215, 433, 211, 433, 216, 437, 0, 0, 427, 0, + 438, 218, 427, 0, 438, 114, 433, 0, 440, 50, + 433, 0, 0, 424, 0, 104, 0, 105, 0, 442, + 56, 442, 0, 0, 451, 437, 0, 468, 0, 207, + 442, 0, 442, 206, 442, 0, 442, 207, 442, 0, + 442, 209, 442, 0, 442, 208, 442, 0, 210, 442, + 0, 442, 217, 409, 0, 16, 219, 442, 9, 409, + 220, 0, 219, 442, 220, 0, 442, 198, 442, 0, + 198, 442, 0, 442, 198, 0, 474, 0, 465, 219, + 220, 0, 465, 219, 438, 220, 0, 87, 219, 441, + 220, 0, 100, 219, 443, 220, 0, 109, 219, 13, + 446, 220, 0, 109, 219, 65, 446, 220, 0, 109, + 219, 107, 446, 220, 0, 109, 219, 446, 220, 0, + 438, 444, 445, 0, 0, 50, 438, 0, 0, 48, + 438, 0, 0, 433, 50, 438, 0, 50, 438, 0, + 438, 0, 380, 0, 448, 0, 468, 0, 448, 218, + 468, 0, 380, 0, 450, 0, 468, 0, 450, 218, + 468, 0, 458, 214, 452, 0, 469, 214, 452, 0, + 461, 0, 452, 214, 461, 0, 452, 214, 208, 0, + 453, 218, 454, 0, 454, 0, 208, 0, 474, 437, + 203, 427, 0, 451, 437, 0, 458, 214, 208, 0, + 455, 218, 456, 0, 456, 0, 427, 9, 475, 0, + 427, 0, 458, 214, 208, 0, 208, 0, 474, 0, + 0, 476, 0, 474, 0, 474, 0, 196, 0, 474, + 0, 196, 0, 474, 0, 474, 0, 474, 0, 471, + 0, 196, 0, 470, 0, 201, 0, 471, 0, 409, + 471, 0, 469, 0, 126, 0, 124, 0, 200, 0, + 199, 0, 197, 0, 196, 0, 474, 0, 414, 0, + 419, 0, 196, 0, 424, 0, 3, 0, 135, 0, + 138, 0, 139, 0, 140, 0, 40, 0, 142, 0, + 186, 0, 146, 0, 148, 0, 149, 0, 63, 0, + 64, 0, 157, 0, 69, 0, 158, 0, 159, 0, + 166, 0, 82, 0, 189, 0, 90, 0, 168, 0, + 172, 0, 175, 0, 178, 0, 179, 0, 102, 0, + 104, 0, 105, 0, 125, 0, 127, 0, 194, 0, + 185, 0, 123, 0, 474, 0, 188, 0, 136, 0, + 24, 0, 26, 0, 49, 0, 53, 0, 155, 0, + 84, 0, 87, 0, 88, 0, 101, 0, 108, 0, + 126, 0, 124, 0, 27, 0, 161, 0 }; #endif #if YYDEBUG != 0 -static const short yyrline[] = { 0, - 345, 347, 351, 353, 355, 359, 360, 361, 362, 363, - 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, - 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, - 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, - 394, 395, 396, 397, 398, 399, 400, 401, 411, 432, - 453, 461, 462, 465, 471, 477, 480, 486, 492, 495, - 499, 505, 506, 509, 510, 522, 529, 536, 543, 556, - 557, 560, 561, 562, 565, 571, 579, 585, 601, 611, - 615, 623, 625, 627, 629, 641, 658, 671, 673, 682, - 683, 684, 687, 688, 691, 692, 698, 699, 710, 722, - 729, 736, 739, 740, 743, 753, 768, 769, 772, 779, - 788, 795, 799, 808, 817, 826, 835, 844, 851, 856, - 862, 864, 866, 868, 870, 872, 874, 876, 878, 880, - 882, 884, 886, 888, 893, 898, 900, 905, 911, 917, - 919, 922, 924, 926, 932, 934, 940, 942, 950, 956, - 960, 968, 977, 986, 993, 998, 1004, 1006, 1008, 1012, - 1014, 1016, 1018, 1020, 1022, 1024, 1026, 1028, 1030, 1032, - 1034, 1039, 1044, 1046, 1051, 1057, 1059, 1061, 1063, 1065, - 1067, 1069, 1071, 1073, 1075, 1077, 1079, 1081, 1083, 1085, - 1087, 1089, 1096, 1103, 1110, 1119, 1124, 1130, 1134, 1135, - 1136, 1139, 1140, 1141, 1144, 1145, 1148, 1149, 1150, 1151, - 1154, 1155, 1162, 1163, 1166, 1176, 1177, 1180, 1181, 1184, - 1204, 1213, 1215, 1218, 1224, 1230, 1236, 1242, 1248, 1256, - 1257, 1259, 1263, 1270, 1274, 1289, 1301, 1302, 1304, 1320, - 1336, 1337, 1340, 1345, 1350, 1358, 1359, 1360, 1363, 1369, - 1370, 1373, 1374, 1377, 1379, 1381, 1385, 1391, 1397, 1398, - 1401, 1418, 1425, 1433, 1434, 1435, 1438, 1439, 1440, 1441, - 1442, 1445, 1448, 1449, 1452, 1458, 1464, 1472, 1473, 1474, - 1475, 1476, 1495, 1502, 1519, 1528, 1539, 1540, 1541, 1544, - 1547, 1548, 1551, 1552, 1563, 1569, 1573, 1577, 1583, 1587, - 1593, 1597, 1601, 1605, 1609, 1615, 1619, 1623, 1629, 1633, - 1644, 1661, 1678, 1679, 1682, 1683, 1686, 1687, 1690, 1691, - 1694, 1704, 1714, 1715, 1716, 1725, 1726, 1727, 1738, 1755, - 1784, 1797, 1798, 1801, 1802, 1805, 1807, 1811, 1821, 1822, - 1842, 1851, 1852, 1853, 1854, 1858, 1867, 1868, 1872, 1882, - 1891, 1891, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1902, - 1906, 1908, 1910, 1923, 1935, 1936, 1939, 1940, 1953, 1955, - 1969, 1970, 1971, 1972, 1975, 1977, 1981, 1983, 1985, 1989, - 1997, 2008, 2009, 2010, 2011, 2014, 2015, 2027, 2035, 2043, - 2065, 2071, 2077, 2083, 2089, 2097, 2098, 2099, 2110, 2131, - 2147, 2171, 2185, 2186, 2189, 2190, 2193, 2194, 2195, 2198, - 2199, 2200, 2210, 2226, 2243, 2252, 2265, 2266, 2269, 2270, - 2273, 2274, 2277, 2279, 2291, 2312, 2313, 2314, 2315, 2316, - 2317, 2328, 2336, 2347, 2363, 2364, 2367, 2370, 2374, 2391, - 2406, 2431, 2452, 2493, 2512, 2529, 2535, 2539, 2545, 2549, - 2565, 2566, 2569, 2570, 2573, 2574, 2577, 2578, 2579, 2580, - 2583, 2584, 2587, 2588, 2591, 2599, 2600, 2601, 2602, 2603, - 2604, 2614, 2615, 2618, 2620, 2622, 2626, 2627, 2630, 2634, - 2646, 2651, 2652, 2655, 2657, 2659, 2663, 2669, 2675, 2683, - 2684, 2686, 2688, 2690, 2692, 2694, 2696, 2700, 2701, 2704, - 2705, 2706, 2709, 2710, 2713, 2728, 2735, 2744, 2745, 2748, - 2755, 2763, 2765, 2767, 2771, 2773, 2775, 2790, 2812, 2813, - 2820, 2821, 2822, 2825, 2833, 2834, 2843, 2849, 2854, 2860, - 2868, 2870, 2872, 2874, 2878, 2889, 2895, 2902, 2907, 2913, - 2921, 2927, 2940, 2967, 2986, 3006, 3007, 3008, 3009, 3012, - 3013, 3016, 3017, 3020, 3021, 3024, 3030, 3037, 3043, 3051, - 3052, 3053, 3054, 3055, 3056, 3059, 3060, 3063, 3064, 3065, - 3066, 3067, 3068, 3069, 3070, 3071, 3081, 3083, 3100, 3110, - 3120, 3133, 3146, 3152, 3158, 3162, 3168, 3169, 3170, 3171, - 3172, 3173, 3174, 3175, 3178, 3179, 3190, 3195, 3197, 3199, - 3207, 3209, 3211, 3213, 3215, 3217, 3219, 3221, 3223, 3225, - 3227, 3229, 3245, 3261, 3263, 3265, 3267, 3269, 3271, 3273, - 3285, 3292, 3299, 3314, 3329, 3351, 3366, 3388, 3395, 3402, - 3412, 3419, 3426, 3434, 3441, 3448, 3455, 3462, 3464, 3466, - 3468, 3475, 3485, 3495, 3505, 3515, 3521, 3527, 3527, 3541, - 3541, 3555, 3565, 3575, 3585, 3595, 3605, 3615, 3625, 3635, - 3645, 3655, 3665, 3675, 3685, 3695, 3705, 3715, 3725, 3735, - 3745, 3755, 3765, 3775, 3785, 3795, 3797, 3799, 3809, 3814, - 3816, 3824, 3826, 3828, 3830, 3832, 3834, 3836, 3838, 3840, - 3856, 3872, 3874, 3876, 3878, 3880, 3887, 3894, 3909, 3924, - 3946, 3961, 3983, 3990, 3997, 4004, 4012, 4019, 4026, 4033, - 4042, 4049, 4056, 4060, 4062, 4064, 4068, 4075, 4079, 4080, - 4081, 4084, 4086, 4090, 4095, 4097, 4099, 4101, 4103, 4105, - 4107, 4109, 4125, 4141, 4143, 4145, 4147, 4149, 4157, 4164, - 4171, 4178, 4186, 4193, 4200, 4207, 4216, 4220, 4224, 4226, - 4235, 4237, 4241, 4243, 4245, 4249, 4255, 4259, 4261, 4267, - 4273, 4277, 4279, 4285, 4293, 4303, 4305, 4307, 4318, 4320, - 4322, 4337, 4344, 4351, 4370, 4372, 4377, 4384, 4391, 4403, - 4417, 4418, 4421, 4426, 4438, 4439, 4440, 4441, 4442, 4448, - 4449, 4451, 4452, 4457, 4464, 4471, 4478, 4486, 4488, 4498, - 4510, 4517, 4518, 4519, 4526, 4528, 4530, 4541, 4542, 4543, - 4544, 4545, 4546, 4547, 4548, 4549, 4550, 4551, 4552, 4553, - 4554, 4555, 4556, 4557, 4558, 4559, 4560, 4561, 4562, 4563, - 4564, 4565, 4566, 4567, 4568, 4569, 4570, 4571, 4572, 4573, - 4574, 4575, 4576, 4589, 4590, 4591, 4592, 4593, 4594, 4595, - 4596, 4597, 4598, 4599, 4600, 4601, 4602, 4603, 4606, 4613 +static const short yyrline[] = {0, + 345, 347, 351, 353, 355, 359, 360, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, 411, 432, + 453, 461, 462, 465, 471, 477, 480, 486, 492, 495, + 499, 505, 506, 509, 510, 522, 529, 536, 543, 556, + 557, 560, 561, 562, 565, 571, 579, 585, 601, 611, + 615, 623, 625, 627, 629, 641, 658, 671, 673, 682, + 683, 684, 687, 688, 691, 692, 698, 699, 710, 722, + 729, 736, 739, 740, 743, 753, 768, 769, 772, 779, + 788, 795, 799, 808, 817, 826, 835, 844, 851, 856, + 862, 864, 866, 868, 870, 872, 874, 876, 878, 880, + 882, 884, 886, 888, 893, 898, 900, 905, 911, 917, + 919, 922, 924, 926, 932, 934, 940, 942, 950, 956, + 960, 968, 977, 986, 993, 998, 1004, 1006, 1008, 1012, + 1014, 1016, 1018, 1020, 1022, 1024, 1026, 1028, 1030, 1032, + 1034, 1039, 1044, 1046, 1051, 1057, 1059, 1061, 1063, 1065, + 1067, 1069, 1071, 1073, 1075, 1077, 1079, 1081, 1083, 1085, + 1087, 1089, 1096, 1103, 1110, 1119, 1124, 1130, 1134, 1135, + 1136, 1139, 1140, 1141, 1144, 1145, 1148, 1149, 1150, 1151, + 1154, 1155, 1162, 1163, 1166, 1176, 1177, 1180, 1181, 1184, + 1204, 1213, 1215, 1218, 1224, 1230, 1236, 1242, 1248, 1256, + 1257, 1259, 1263, 1270, 1274, 1289, 1301, 1302, 1304, 1320, + 1336, 1337, 1340, 1345, 1350, 1358, 1359, 1360, 1363, 1369, + 1370, 1373, 1374, 1377, 1379, 1381, 1385, 1391, 1397, 1398, + 1401, 1418, 1425, 1433, 1434, 1435, 1438, 1439, 1440, 1441, + 1442, 1445, 1448, 1449, 1452, 1458, 1464, 1472, 1473, 1474, + 1475, 1476, 1495, 1502, 1519, 1528, 1539, 1540, 1541, 1544, + 1547, 1548, 1551, 1552, 1563, 1569, 1573, 1577, 1583, 1587, + 1593, 1597, 1601, 1605, 1609, 1615, 1619, 1623, 1629, 1633, + 1644, 1661, 1678, 1679, 1682, 1683, 1686, 1687, 1690, 1691, + 1694, 1704, 1714, 1715, 1716, 1725, 1726, 1727, 1738, 1755, + 1784, 1797, 1798, 1801, 1802, 1805, 1807, 1811, 1821, 1822, + 1842, 1851, 1852, 1853, 1854, 1858, 1867, 1868, 1872, 1882, + 1891, 1891, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1902, + 1906, 1908, 1910, 1923, 1935, 1936, 1939, 1940, 1953, 1955, + 1969, 1970, 1971, 1972, 1975, 1977, 1981, 1983, 1985, 1989, + 1997, 2008, 2009, 2010, 2011, 2014, 2015, 2027, 2035, 2043, + 2065, 2071, 2077, 2083, 2089, 2097, 2098, 2099, 2110, 2131, + 2147, 2171, 2185, 2186, 2189, 2190, 2193, 2194, 2195, 2198, + 2199, 2200, 2210, 2226, 2243, 2252, 2265, 2266, 2269, 2270, + 2273, 2274, 2277, 2279, 2291, 2312, 2313, 2314, 2315, 2316, + 2317, 2328, 2336, 2347, 2363, 2364, 2367, 2370, 2374, 2391, + 2406, 2431, 2452, 2493, 2512, 2529, 2535, 2539, 2545, 2549, + 2565, 2566, 2569, 2570, 2573, 2574, 2577, 2578, 2579, 2580, + 2583, 2584, 2587, 2588, 2591, 2599, 2600, 2601, 2602, 2603, + 2604, 2614, 2615, 2618, 2620, 2622, 2626, 2627, 2630, 2634, + 2646, 2651, 2652, 2655, 2657, 2659, 2663, 2669, 2675, 2683, + 2684, 2686, 2688, 2690, 2692, 2694, 2696, 2700, 2701, 2704, + 2705, 2706, 2709, 2710, 2713, 2728, 2735, 2744, 2745, 2748, + 2755, 2763, 2765, 2767, 2771, 2773, 2775, 2790, 2812, 2813, + 2820, 2821, 2822, 2825, 2833, 2834, 2843, 2849, 2854, 2860, + 2868, 2870, 2872, 2874, 2878, 2889, 2895, 2902, 2907, 2913, + 2921, 2927, 2940, 2967, 2986, 3006, 3007, 3008, 3009, 3012, + 3013, 3016, 3017, 3020, 3021, 3024, 3030, 3037, 3043, 3051, + 3052, 3053, 3054, 3055, 3056, 3059, 3060, 3063, 3064, 3065, + 3066, 3067, 3068, 3069, 3070, 3071, 3081, 3083, 3100, 3110, + 3120, 3133, 3146, 3152, 3158, 3162, 3168, 3169, 3170, 3171, + 3172, 3173, 3174, 3175, 3178, 3179, 3190, 3195, 3197, 3199, + 3207, 3209, 3211, 3213, 3215, 3217, 3219, 3221, 3223, 3225, + 3227, 3229, 3245, 3261, 3263, 3265, 3267, 3269, 3271, 3273, + 3285, 3292, 3299, 3314, 3329, 3351, 3366, 3388, 3395, 3402, + 3412, 3419, 3426, 3434, 3441, 3448, 3455, 3462, 3464, 3466, + 3468, 3475, 3485, 3495, 3505, 3515, 3521, 3527, 3527, 3541, + 3541, 3555, 3565, 3575, 3585, 3595, 3605, 3615, 3625, 3635, + 3645, 3655, 3665, 3675, 3685, 3695, 3705, 3715, 3725, 3735, + 3745, 3755, 3765, 3775, 3785, 3795, 3797, 3799, 3809, 3814, + 3816, 3824, 3826, 3828, 3830, 3832, 3834, 3836, 3838, 3840, + 3856, 3872, 3874, 3876, 3878, 3880, 3887, 3894, 3909, 3924, + 3946, 3961, 3983, 3990, 3997, 4004, 4012, 4019, 4026, 4033, + 4042, 4049, 4056, 4060, 4062, 4064, 4068, 4075, 4079, 4080, + 4081, 4084, 4086, 4090, 4095, 4097, 4099, 4101, 4103, 4105, + 4107, 4109, 4125, 4141, 4143, 4145, 4147, 4149, 4157, 4164, + 4171, 4178, 4186, 4193, 4200, 4207, 4216, 4220, 4224, 4226, + 4235, 4237, 4241, 4243, 4245, 4249, 4255, 4259, 4261, 4267, + 4273, 4277, 4279, 4285, 4293, 4303, 4305, 4307, 4318, 4320, + 4322, 4337, 4344, 4351, 4370, 4372, 4377, 4384, 4391, 4403, + 4417, 4418, 4421, 4426, 4438, 4439, 4440, 4441, 4442, 4448, + 4449, 4451, 4452, 4457, 4464, 4471, 4478, 4486, 4488, 4498, + 4510, 4517, 4518, 4519, 4526, 4528, 4530, 4541, 4542, 4543, + 4544, 4545, 4546, 4547, 4548, 4549, 4550, 4551, 4552, 4553, + 4554, 4555, 4556, 4557, 4558, 4559, 4560, 4561, 4562, 4563, + 4564, 4565, 4566, 4567, 4568, 4569, 4570, 4571, 4572, 4573, + 4574, 4575, 4576, 4589, 4590, 4591, 4592, 4593, 4594, 4595, + 4596, 4597, 4598, 4599, 4600, 4601, 4602, 4603, 4606, 4613 }; + #endif #if YYDEBUG != 0 || defined (YYERROR_VERBOSE) -static const char * const yytname[] = { "$","error","$undefined.","ACTION", -"ADD","ALL","ALTER","AND","ANY","AS","ASC","BEGIN_TRANS","BETWEEN","BOTH","BY", -"CASCADE","CAST","CHAR","CHARACTER","CHECK","CLOSE","COLLATE","COLUMN","COMMIT", -"CONSTRAINT","CREATE","CROSS","CURRENT","CURRENT_DATE","CURRENT_TIME","CURRENT_TIMESTAMP", -"CURRENT_USER","CURSOR","DAY_P","DECIMAL","DECLARE","DEFAULT","DELETE","DESC", -"DISTINCT","DOUBLE","DROP","END_TRANS","EXECUTE","EXISTS","EXTRACT","FETCH", -"FLOAT","FOR","FOREIGN","FROM","FULL","GRANT","GROUP","HAVING","HOUR_P","IN", -"INNER_P","INSERT","INTERVAL","INTO","IS","JOIN","KEY","LANGUAGE","LEADING", -"LEFT","LIKE","LOCAL","MATCH","MINUTE_P","MONTH_P","NAMES","NATIONAL","NATURAL", -"NCHAR","NO","NOT","NOTIFY","NULL_P","NUMERIC","ON","OPTION","OR","ORDER","OUTER_P", -"PARTIAL","POSITION","PRECISION","PRIMARY","PRIVILEGES","PROCEDURE","PUBLIC", -"REFERENCES","REVOKE","RIGHT","ROLLBACK","SECOND_P","SELECT","SET","SUBSTRING", -"TABLE","TIME","TIMESTAMP","TIMEZONE_HOUR","TIMEZONE_MINUTE","TO","TRAILING", -"TRANSACTION","TRIM","UNION","UNIQUE","UPDATE","USER","USING","VALUES","VARCHAR", -"VARYING","VIEW","WHERE","WITH","WORK","YEAR_P","ZONE","FALSE_P","TRIGGER","TRUE_P", -"TYPE_P","ABORT_TRANS","AFTER","AGGREGATE","ANALYZE","BACKWARD","BEFORE","BINARY", -"CACHE","CLUSTER","COPY","CYCLE","DATABASE","DELIMITERS","DO","EACH","EXPLAIN", -"EXTEND","FORWARD","FUNCTION","HANDLER","INCREMENT","INDEX","INHERITS","INSTEAD", -"ISNULL","LANCOMPILER","LISTEN","LOAD","LOCK_P","LOCATION","MAXVALUE","MINVALUE", -"MOVE","NEW","NONE","NOTHING","NOTNULL","OIDS","OPERATOR","PROCEDURAL","RECIPE", -"RENAME","RESET","RETURNS","ROW","RULE","SEQUENCE","SERIAL","SETOF","SHOW","START", -"STATEMENT","STDIN","STDOUT","TRUSTED","VACUUM","VERBOSE","VERSION","ENCODING", -"UNLISTEN","ARCHIVE","PASSWORD","CREATEDB","NOCREATEDB","CREATEUSER","NOCREATEUSER", -"VALID","UNTIL","IDENT","SCONST","Op","ICONST","PARAM","FCONST","OP","'='","'<'", -"'>'","'+'","'-'","'*'","'/'","'|'","':'","';'","UMINUS","'.'","'['","']'","TYPECAST", -"','","'('","')'","stmtblock","stmtmulti","stmt","CreateUserStmt","AlterUserStmt", -"DropUserStmt","user_passwd_clause","user_createdb_clause","user_createuser_clause", -"user_group_list","user_group_clause","user_valid_clause","VariableSetStmt", -"var_value","zone_value","VariableShowStmt","VariableResetStmt","AddAttrStmt", -"alter_clause","ClosePortalStmt","CopyStmt","copy_dirn","copy_file_name","opt_binary", -"opt_with_copy","copy_delimiter","CreateStmt","OptTableElementList","OptTableElement", -"columnDef","ColQualifier","ColQualList","ColConstraint","ColConstraintElem", -"default_list","default_expr","TableConstraint","ConstraintElem","constraint_list", -"constraint_expr","c_list","c_expr","key_match","key_actions","key_action","key_reference", -"OptInherit","OptArchiveType","CreateAsStmt","OptCreateAs","CreateAsList","CreateAsElement", -"CreateSeqStmt","OptSeqList","OptSeqElem","NumericOnly","FloatOnly","IntegerOnly", -"CreatePLangStmt","PLangTrusted","DropPLangStmt","CreateTrigStmt","TriggerActionTime", -"TriggerEvents","TriggerOneEvent","TriggerForSpec","TriggerForOpt","TriggerForType", -"TriggerFuncArgs","TriggerFuncArg","DropTrigStmt","DefineStmt","def_rest","def_type", -"def_name","definition","def_list","def_elem","def_arg","DestroyStmt","FetchStmt", -"opt_direction","fetch_how_many","opt_portal_name","GrantStmt","privileges", -"operation_commalist","operation","grantee","opt_with_grant","RevokeStmt","IndexStmt", -"index_opt_unique","access_method_clause","index_params","index_list","func_index", -"index_elem","opt_type","opt_class","ExtendStmt","RecipeStmt","ProcedureStmt", -"opt_with","func_args","func_args_list","func_return","set_opt","RemoveStmt", -"remove_type","RemoveAggrStmt","aggr_argtype","RemoveFuncStmt","RemoveOperStmt", -"all_Op","MathOp","oper_argtypes","RenameStmt","opt_name","opt_column","RuleStmt", -"@1","OptStmtList","OptStmtBlock","OptStmtMulti","event_object","event","opt_instead", -"NotifyStmt","ListenStmt","UnlistenStmt","TransactionStmt","opt_trans","ViewStmt", -"LoadStmt","CreatedbStmt","opt_database1","opt_database2","location","encoding", -"DestroydbStmt","ClusterStmt","VacuumStmt","opt_verbose","opt_analyze","opt_va_list", -"va_list","ExplainStmt","OptimizableStmt","InsertStmt","insert_rest","opt_column_list", -"columnList","columnElem","DeleteStmt","LockStmt","UpdateStmt","CursorStmt", -"SelectStmt","SubSelect","union_clause","select_list","SubUnion","result","opt_table", -"opt_union","opt_unique","sort_clause","sortby_list","sortby","OptUseOp","opt_inh_star", -"relation_name_list","name_list","group_clause","having_clause","from_clause", -"from_list","from_val","join_expr","join_outer","join_spec","join_list","join_using", -"where_clause","relation_expr","opt_array_bounds","nest_array_bounds","Typename", -"Array","Generic","generic","Numeric","numeric","opt_float","opt_numeric","opt_decimal", -"Character","character","opt_varying","opt_charset","opt_collate","Datetime", -"datetime","opt_timezone","opt_interval","a_expr_or_null","row_expr","row_descriptor", -"row_list","row_op","sub_type","a_expr","@2","@3","b_expr","opt_indirection", -"expr_list","extract_list","extract_arg","position_list","position_expr","substr_list", -"substr_from","substr_for","trim_list","in_expr","in_expr_nodes","not_in_expr", -"not_in_expr_nodes","attr","attrs","res_target_list","res_target_el","res_target_list2", -"res_target_el2","opt_id","relation_name","database_name","access_method","attr_name", -"class","index_name","name","func_name","file_name","recipe_name","AexprConst", -"ParamNo","Iconst","Sconst","UserId","TypeId","ColId","ColLabel","SpecialRuleRelation", NULL +static const char *const yytname[] = {"$", "error", "$undefined.", "ACTION", + "ADD", "ALL", "ALTER", "AND", "ANY", "AS", "ASC", "BEGIN_TRANS", "BETWEEN", "BOTH", "BY", + "CASCADE", "CAST", "CHAR", "CHARACTER", "CHECK", "CLOSE", "COLLATE", "COLUMN", "COMMIT", + "CONSTRAINT", "CREATE", "CROSS", "CURRENT", "CURRENT_DATE", "CURRENT_TIME", "CURRENT_TIMESTAMP", + "CURRENT_USER", "CURSOR", "DAY_P", "DECIMAL", "DECLARE", "DEFAULT", "DELETE", "DESC", + "DISTINCT", "DOUBLE", "DROP", "END_TRANS", "EXECUTE", "EXISTS", "EXTRACT", "FETCH", + "FLOAT", "FOR", "FOREIGN", "FROM", "FULL", "GRANT", "GROUP", "HAVING", "HOUR_P", "IN", + "INNER_P", "INSERT", "INTERVAL", "INTO", "IS", "JOIN", "KEY", "LANGUAGE", "LEADING", + "LEFT", "LIKE", "LOCAL", "MATCH", "MINUTE_P", "MONTH_P", "NAMES", "NATIONAL", "NATURAL", + "NCHAR", "NO", "NOT", "NOTIFY", "NULL_P", "NUMERIC", "ON", "OPTION", "OR", "ORDER", "OUTER_P", + "PARTIAL", "POSITION", "PRECISION", "PRIMARY", "PRIVILEGES", "PROCEDURE", "PUBLIC", + "REFERENCES", "REVOKE", "RIGHT", "ROLLBACK", "SECOND_P", "SELECT", "SET", "SUBSTRING", + "TABLE", "TIME", "TIMESTAMP", "TIMEZONE_HOUR", "TIMEZONE_MINUTE", "TO", "TRAILING", + "TRANSACTION", "TRIM", "UNION", "UNIQUE", "UPDATE", "USER", "USING", "VALUES", "VARCHAR", + "VARYING", "VIEW", "WHERE", "WITH", "WORK", "YEAR_P", "ZONE", "FALSE_P", "TRIGGER", "TRUE_P", + "TYPE_P", "ABORT_TRANS", "AFTER", "AGGREGATE", "ANALYZE", "BACKWARD", "BEFORE", "BINARY", + "CACHE", "CLUSTER", "COPY", "CYCLE", "DATABASE", "DELIMITERS", "DO", "EACH", "EXPLAIN", + "EXTEND", "FORWARD", "FUNCTION", "HANDLER", "INCREMENT", "INDEX", "INHERITS", "INSTEAD", + "ISNULL", "LANCOMPILER", "LISTEN", "LOAD", "LOCK_P", "LOCATION", "MAXVALUE", "MINVALUE", + "MOVE", "NEW", "NONE", "NOTHING", "NOTNULL", "OIDS", "OPERATOR", "PROCEDURAL", "RECIPE", + "RENAME", "RESET", "RETURNS", "ROW", "RULE", "SEQUENCE", "SERIAL", "SETOF", "SHOW", "START", + "STATEMENT", "STDIN", "STDOUT", "TRUSTED", "VACUUM", "VERBOSE", "VERSION", "ENCODING", + "UNLISTEN", "ARCHIVE", "PASSWORD", "CREATEDB", "NOCREATEDB", "CREATEUSER", "NOCREATEUSER", + "VALID", "UNTIL", "IDENT", "SCONST", "Op", "ICONST", "PARAM", "FCONST", "OP", "'='", "'<'", + "'>'", "'+'", "'-'", "'*'", "'/'", "'|'", "':'", "';'", "UMINUS", "'.'", "'['", "']'", "TYPECAST", + "','", "'('", "')'", "stmtblock", "stmtmulti", "stmt", "CreateUserStmt", "AlterUserStmt", + "DropUserStmt", "user_passwd_clause", "user_createdb_clause", "user_createuser_clause", + "user_group_list", "user_group_clause", "user_valid_clause", "VariableSetStmt", + "var_value", "zone_value", "VariableShowStmt", "VariableResetStmt", "AddAttrStmt", + "alter_clause", "ClosePortalStmt", "CopyStmt", "copy_dirn", "copy_file_name", "opt_binary", + "opt_with_copy", "copy_delimiter", "CreateStmt", "OptTableElementList", "OptTableElement", + "columnDef", "ColQualifier", "ColQualList", "ColConstraint", "ColConstraintElem", + "default_list", "default_expr", "TableConstraint", "ConstraintElem", "constraint_list", + "constraint_expr", "c_list", "c_expr", "key_match", "key_actions", "key_action", "key_reference", + "OptInherit", "OptArchiveType", "CreateAsStmt", "OptCreateAs", "CreateAsList", "CreateAsElement", + "CreateSeqStmt", "OptSeqList", "OptSeqElem", "NumericOnly", "FloatOnly", "IntegerOnly", + "CreatePLangStmt", "PLangTrusted", "DropPLangStmt", "CreateTrigStmt", "TriggerActionTime", + "TriggerEvents", "TriggerOneEvent", "TriggerForSpec", "TriggerForOpt", "TriggerForType", + "TriggerFuncArgs", "TriggerFuncArg", "DropTrigStmt", "DefineStmt", "def_rest", "def_type", + "def_name", "definition", "def_list", "def_elem", "def_arg", "DestroyStmt", "FetchStmt", + "opt_direction", "fetch_how_many", "opt_portal_name", "GrantStmt", "privileges", + "operation_commalist", "operation", "grantee", "opt_with_grant", "RevokeStmt", "IndexStmt", + "index_opt_unique", "access_method_clause", "index_params", "index_list", "func_index", + "index_elem", "opt_type", "opt_class", "ExtendStmt", "RecipeStmt", "ProcedureStmt", + "opt_with", "func_args", "func_args_list", "func_return", "set_opt", "RemoveStmt", + "remove_type", "RemoveAggrStmt", "aggr_argtype", "RemoveFuncStmt", "RemoveOperStmt", + "all_Op", "MathOp", "oper_argtypes", "RenameStmt", "opt_name", "opt_column", "RuleStmt", + "@1", "OptStmtList", "OptStmtBlock", "OptStmtMulti", "event_object", "event", "opt_instead", + "NotifyStmt", "ListenStmt", "UnlistenStmt", "TransactionStmt", "opt_trans", "ViewStmt", + "LoadStmt", "CreatedbStmt", "opt_database1", "opt_database2", "location", "encoding", + "DestroydbStmt", "ClusterStmt", "VacuumStmt", "opt_verbose", "opt_analyze", "opt_va_list", + "va_list", "ExplainStmt", "OptimizableStmt", "InsertStmt", "insert_rest", "opt_column_list", + "columnList", "columnElem", "DeleteStmt", "LockStmt", "UpdateStmt", "CursorStmt", + "SelectStmt", "SubSelect", "union_clause", "select_list", "SubUnion", "result", "opt_table", + "opt_union", "opt_unique", "sort_clause", "sortby_list", "sortby", "OptUseOp", "opt_inh_star", + "relation_name_list", "name_list", "group_clause", "having_clause", "from_clause", + "from_list", "from_val", "join_expr", "join_outer", "join_spec", "join_list", "join_using", + "where_clause", "relation_expr", "opt_array_bounds", "nest_array_bounds", "Typename", + "Array", "Generic", "generic", "Numeric", "numeric", "opt_float", "opt_numeric", "opt_decimal", + "Character", "character", "opt_varying", "opt_charset", "opt_collate", "Datetime", + "datetime", "opt_timezone", "opt_interval", "a_expr_or_null", "row_expr", "row_descriptor", + "row_list", "row_op", "sub_type", "a_expr", "@2", "@3", "b_expr", "opt_indirection", + "expr_list", "extract_list", "extract_arg", "position_list", "position_expr", "substr_list", + "substr_from", "substr_for", "trim_list", "in_expr", "in_expr_nodes", "not_in_expr", + "not_in_expr_nodes", "attr", "attrs", "res_target_list", "res_target_el", "res_target_list2", + "res_target_el2", "opt_id", "relation_name", "database_name", "access_method", "attr_name", + "class", "index_name", "name", "func_name", "file_name", "recipe_name", "AexprConst", + "ParamNo", "Iconst", "Sconst", "UserId", "TypeId", "ColId", "ColLabel", "SpecialRuleRelation", NULL }; + #endif -static const short yyr1[] = { 0, - 221, 221, 222, 222, 222, 223, 223, 223, 223, 223, - 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, - 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, - 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, - 223, 223, 223, 223, 223, 223, 223, 223, 224, 225, - 226, 227, 227, 228, 228, 228, 229, 229, 229, 230, - 230, 231, 231, 232, 232, 233, 233, 233, 233, 234, - 234, 235, 235, 235, 236, 236, 237, 237, 238, 239, - 239, 239, 239, 239, 239, 240, 241, 242, 242, 243, - 243, 243, 244, 244, 245, 245, 246, 246, 247, 248, - 248, 248, 249, 249, 250, 250, 251, 251, 252, 252, - 253, 253, 254, 254, 254, 254, 254, 254, 255, 255, - 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, - 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, - 256, 256, 256, 256, 256, 256, 256, 256, 257, 257, - 258, 258, 258, 258, 259, 259, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 261, 261, 262, 263, 263, - 263, 264, 264, 264, 265, 265, 266, 266, 266, 266, - 267, 267, 268, 268, 269, 270, 270, 271, 271, 272, - 273, 274, 274, 275, 275, 275, 275, 275, 275, 276, - 276, 277, 277, 278, 278, 279, 280, 280, 281, 282, - 283, 283, 284, 284, 284, 285, 285, 285, 286, 287, - 287, 288, 288, 289, 289, 289, 290, 290, 290, 290, - 291, 292, 293, 294, 294, 294, 295, 295, 295, 295, - 295, 296, 297, 297, 298, 298, 298, 299, 299, 299, - 299, 299, 300, 300, 301, 301, 302, 302, 302, 303, - 303, 303, 304, 304, 305, 306, 306, 306, 307, 307, - 308, 308, 308, 308, 308, 309, 309, 309, 310, 310, - 311, 312, 313, 313, 314, 314, 315, 315, 316, 316, - 317, 318, 319, 319, 319, 320, 320, 320, 321, 322, - 323, 324, 324, 325, 325, 326, 326, 327, 328, 328, - 329, 330, 330, 330, 330, 331, 332, 332, 333, 334, - 335, 335, 336, 336, 336, 336, 336, 336, 336, 337, - 337, 337, 337, 338, 339, 339, 340, 340, 342, 341, - 343, 343, 343, 343, 344, 344, 345, 345, 345, 346, - 346, 347, 347, 347, 347, 348, 348, 349, 350, 351, - 352, 352, 352, 352, 352, 353, 353, 353, 354, 355, - 356, 356, 357, 357, 358, 358, 359, 359, 359, 360, - 360, 360, 361, 362, 363, 363, 364, 364, 365, 365, - 366, 366, 367, 367, 368, 369, 369, 369, 369, 369, - 369, 370, 371, 371, 372, 372, 373, 373, 374, 375, - 376, 377, 378, 379, 380, 381, 381, 382, 382, 383, - 384, 384, 385, 385, 386, 386, 387, 387, 387, 387, - 388, 388, 389, 389, 390, 391, 391, 391, 391, 391, - 391, 392, 392, 393, 394, 394, 395, 395, 396, 396, - 397, 397, 397, 398, 398, 398, 399, 399, 399, 400, - 400, 400, 400, 400, 400, 400, 400, 401, 401, 402, - 402, 402, 403, 403, 404, 404, 404, 405, 405, 406, - 406, 407, 407, 407, 408, 408, 408, 409, 409, 409, - 410, 410, 410, 411, 412, 412, 413, 413, 413, 413, - 414, 414, 414, 414, 415, 415, 416, 416, 416, 417, - 417, 417, 418, 418, 419, 419, 419, 419, 419, 420, - 420, 421, 421, 422, 422, 423, 423, 423, 423, 424, - 424, 424, 424, 424, 424, 425, 425, 426, 426, 426, - 426, 426, 426, 426, 426, 426, 427, 427, 428, 428, - 428, 428, 428, 429, 430, 430, 431, 431, 431, 431, - 431, 431, 431, 431, 432, 432, 433, 433, 433, 433, - 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, - 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, - 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, - 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, - 433, 433, 433, 433, 433, 433, 433, 434, 433, 435, - 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, - 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, - 433, 433, 433, 433, 433, 433, 433, 433, 436, 436, - 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, - 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, - 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, - 437, 437, 437, 438, 438, 438, 439, 439, 440, 440, - 440, 441, 441, 442, 442, 442, 442, 442, 442, 442, - 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, - 442, 442, 442, 442, 442, 442, 443, 443, 444, 444, - 445, 445, 446, 446, 446, 447, 447, 448, 448, 449, - 449, 450, 450, 451, 451, 452, 452, 452, 453, 453, - 453, 454, 454, 454, 455, 455, 456, 456, 456, 456, - 457, 457, 458, 458, 459, 460, 461, 462, 463, 464, - 465, 466, 467, 468, 468, 468, 468, 468, 468, 468, - 469, 470, 471, 472, 473, 473, 473, 474, 474, 474, - 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, - 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, - 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, - 474, 474, 474, 475, 475, 475, 475, 475, 475, 475, - 475, 475, 475, 475, 475, 475, 475, 475, 476, 476 +static const short yyr1[] = {0, + 221, 221, 222, 222, 222, 223, 223, 223, 223, 223, + 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, + 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, + 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, + 223, 223, 223, 223, 223, 223, 223, 223, 224, 225, + 226, 227, 227, 228, 228, 228, 229, 229, 229, 230, + 230, 231, 231, 232, 232, 233, 233, 233, 233, 234, + 234, 235, 235, 235, 236, 236, 237, 237, 238, 239, + 239, 239, 239, 239, 239, 240, 241, 242, 242, 243, + 243, 243, 244, 244, 245, 245, 246, 246, 247, 248, + 248, 248, 249, 249, 250, 250, 251, 251, 252, 252, + 253, 253, 254, 254, 254, 254, 254, 254, 255, 255, + 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, 257, 257, + 258, 258, 258, 258, 259, 259, 260, 260, 260, 260, + 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, + 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, + 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, + 260, 260, 260, 260, 260, 261, 261, 262, 263, 263, + 263, 264, 264, 264, 265, 265, 266, 266, 266, 266, + 267, 267, 268, 268, 269, 270, 270, 271, 271, 272, + 273, 274, 274, 275, 275, 275, 275, 275, 275, 276, + 276, 277, 277, 278, 278, 279, 280, 280, 281, 282, + 283, 283, 284, 284, 284, 285, 285, 285, 286, 287, + 287, 288, 288, 289, 289, 289, 290, 290, 290, 290, + 291, 292, 293, 294, 294, 294, 295, 295, 295, 295, + 295, 296, 297, 297, 298, 298, 298, 299, 299, 299, + 299, 299, 300, 300, 301, 301, 302, 302, 302, 303, + 303, 303, 304, 304, 305, 306, 306, 306, 307, 307, + 308, 308, 308, 308, 308, 309, 309, 309, 310, 310, + 311, 312, 313, 313, 314, 314, 315, 315, 316, 316, + 317, 318, 319, 319, 319, 320, 320, 320, 321, 322, + 323, 324, 324, 325, 325, 326, 326, 327, 328, 328, + 329, 330, 330, 330, 330, 331, 332, 332, 333, 334, + 335, 335, 336, 336, 336, 336, 336, 336, 336, 337, + 337, 337, 337, 338, 339, 339, 340, 340, 342, 341, + 343, 343, 343, 343, 344, 344, 345, 345, 345, 346, + 346, 347, 347, 347, 347, 348, 348, 349, 350, 351, + 352, 352, 352, 352, 352, 353, 353, 353, 354, 355, + 356, 356, 357, 357, 358, 358, 359, 359, 359, 360, + 360, 360, 361, 362, 363, 363, 364, 364, 365, 365, + 366, 366, 367, 367, 368, 369, 369, 369, 369, 369, + 369, 370, 371, 371, 372, 372, 373, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 381, 382, 382, 383, + 384, 384, 385, 385, 386, 386, 387, 387, 387, 387, + 388, 388, 389, 389, 390, 391, 391, 391, 391, 391, + 391, 392, 392, 393, 394, 394, 395, 395, 396, 396, + 397, 397, 397, 398, 398, 398, 399, 399, 399, 400, + 400, 400, 400, 400, 400, 400, 400, 401, 401, 402, + 402, 402, 403, 403, 404, 404, 404, 405, 405, 406, + 406, 407, 407, 407, 408, 408, 408, 409, 409, 409, + 410, 410, 410, 411, 412, 412, 413, 413, 413, 413, + 414, 414, 414, 414, 415, 415, 416, 416, 416, 417, + 417, 417, 418, 418, 419, 419, 419, 419, 419, 420, + 420, 421, 421, 422, 422, 423, 423, 423, 423, 424, + 424, 424, 424, 424, 424, 425, 425, 426, 426, 426, + 426, 426, 426, 426, 426, 426, 427, 427, 428, 428, + 428, 428, 428, 429, 430, 430, 431, 431, 431, 431, + 431, 431, 431, 431, 432, 432, 433, 433, 433, 433, + 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, + 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, + 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, + 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, + 433, 433, 433, 433, 433, 433, 433, 434, 433, 435, + 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, + 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, + 433, 433, 433, 433, 433, 433, 433, 433, 436, 436, + 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, + 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, + 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, + 437, 437, 437, 438, 438, 438, 439, 439, 440, 440, + 440, 441, 441, 442, 442, 442, 442, 442, 442, 442, + 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, + 442, 442, 442, 442, 442, 442, 443, 443, 444, 444, + 445, 445, 446, 446, 446, 447, 447, 448, 448, 449, + 449, 450, 450, 451, 451, 452, 452, 452, 453, 453, + 453, 454, 454, 454, 455, 455, 456, 456, 456, 456, + 457, 457, 458, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 468, 468, 468, 468, 468, 468, + 469, 470, 471, 472, 473, 473, 473, 474, 474, 474, + 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, + 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, + 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, + 474, 474, 474, 475, 475, 475, 475, 475, 475, 475, + 475, 475, 475, 475, 475, 475, 475, 475, 476, 476 }; -static const short yyr2[] = { 0, - 1, 1, 3, 2, 2, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 8, 8, - 3, 3, 0, 1, 1, 0, 1, 1, 0, 3, - 1, 3, 0, 3, 0, 4, 4, 4, 3, 1, - 1, 1, 1, 1, 2, 3, 2, 3, 5, 3, - 4, 3, 6, 5, 2, 2, 7, 1, 1, 1, - 1, 1, 1, 0, 2, 0, 3, 0, 8, 3, - 1, 0, 1, 1, 3, 2, 1, 0, 2, 1, - 3, 1, 4, 2, 2, 1, 2, 5, 3, 1, - 1, 1, 2, 3, 3, 3, 3, 3, 3, 3, - 2, 2, 2, 3, 6, 3, 3, 4, 3, 2, - 2, 1, 1, 4, 1, 4, 1, 1, 3, 1, - 4, 4, 5, 10, 3, 1, 1, 1, 1, 2, - 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, - 3, 6, 3, 3, 4, 3, 3, 4, 3, 3, - 2, 2, 2, 2, 3, 2, 4, 3, 3, 4, - 4, 5, 6, 5, 6, 3, 1, 1, 2, 2, - 0, 2, 1, 0, 3, 3, 2, 1, 2, 2, - 4, 0, 3, 0, 6, 3, 0, 3, 1, 1, - 4, 2, 0, 2, 1, 2, 2, 2, 2, 1, - 1, 1, 2, 1, 2, 9, 1, 0, 4, 14, - 1, 1, 1, 3, 5, 1, 1, 1, 3, 1, - 0, 1, 1, 1, 3, 0, 1, 1, 1, 1, - 5, 3, 2, 1, 1, 1, 1, 1, 1, 1, - 1, 3, 1, 3, 3, 1, 3, 1, 1, 1, - 1, 2, 3, 3, 4, 4, 1, 1, 0, 1, - 1, 0, 2, 0, 7, 2, 1, 1, 1, 3, - 1, 1, 1, 1, 1, 1, 2, 1, 3, 0, - 6, 11, 1, 0, 2, 0, 1, 1, 3, 1, - 6, 3, 2, 2, 0, 1, 2, 0, 4, 3, - 11, 2, 0, 3, 2, 1, 3, 2, 1, 0, - 3, 1, 1, 1, 1, 4, 1, 1, 4, 6, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 3, 3, 3, 9, 1, 0, 1, 0, 0, 13, - 1, 1, 3, 3, 1, 1, 3, 2, 2, 3, - 1, 1, 1, 1, 1, 1, 0, 2, 2, 2, - 2, 2, 2, 2, 2, 1, 1, 0, 5, 2, - 6, 3, 3, 0, 3, 0, 1, 1, 0, 1, - 1, 0, 3, 4, 3, 5, 1, 0, 1, 0, - 3, 0, 1, 3, 3, 1, 1, 1, 1, 1, - 1, 5, 4, 8, 3, 0, 3, 1, 2, 4, - 3, 6, 14, 10, 8, 3, 0, 4, 1, 7, - 3, 0, 1, 0, 1, 0, 1, 3, 1, 0, - 3, 0, 1, 3, 2, 2, 2, 2, 1, 1, - 0, 1, 0, 1, 1, 3, 3, 0, 2, 0, - 8, 2, 0, 3, 4, 1, 3, 2, 1, 2, - 2, 2, 2, 1, 1, 1, 0, 1, 0, 4, - 4, 0, 1, 3, 1, 3, 1, 2, 0, 1, - 2, 3, 4, 0, 3, 4, 0, 2, 1, 2, - 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, - 1, 2, 1, 1, 3, 0, 5, 3, 0, 5, - 3, 0, 4, 1, 4, 2, 1, 3, 2, 1, - 0, 3, 0, 2, 0, 1, 2, 1, 2, 1, - 1, 1, 1, 1, 1, 3, 0, 1, 3, 3, - 3, 3, 3, 3, 3, 0, 1, 1, 7, 8, - 8, 7, 7, 3, 3, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, - 2, 3, 3, 3, 3, 3, 3, 3, 2, 2, - 2, 3, 6, 3, 3, 3, 4, 2, 2, 4, - 3, 4, 1, 1, 4, 1, 4, 1, 1, 4, - 4, 4, 4, 5, 5, 5, 4, 2, 3, 2, - 4, 3, 4, 3, 4, 5, 6, 0, 6, 0, - 7, 5, 5, 5, 5, 5, 5, 5, 5, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 3, 3, 2, 2, 1, - 1, 2, 3, 3, 3, 3, 2, 2, 2, 3, - 6, 3, 3, 2, 2, 3, 4, 1, 1, 4, - 1, 4, 1, 1, 4, 4, 5, 5, 5, 4, - 4, 6, 0, 1, 3, 3, 3, 0, 1, 1, - 1, 3, 0, 2, 1, 2, 3, 3, 3, 3, - 2, 3, 6, 3, 3, 2, 2, 1, 3, 4, - 4, 4, 5, 5, 5, 4, 3, 0, 2, 0, - 2, 0, 3, 2, 1, 1, 1, 1, 3, 1, - 1, 1, 3, 3, 3, 1, 3, 3, 3, 1, - 1, 4, 2, 3, 3, 1, 3, 1, 3, 1, - 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 +static const short yyr2[] = {0, + 1, 1, 3, 2, 2, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 8, 8, + 3, 3, 0, 1, 1, 0, 1, 1, 0, 3, + 1, 3, 0, 3, 0, 4, 4, 4, 3, 1, + 1, 1, 1, 1, 2, 3, 2, 3, 5, 3, + 4, 3, 6, 5, 2, 2, 7, 1, 1, 1, + 1, 1, 1, 0, 2, 0, 3, 0, 8, 3, + 1, 0, 1, 1, 3, 2, 1, 0, 2, 1, + 3, 1, 4, 2, 2, 1, 2, 5, 3, 1, + 1, 1, 2, 3, 3, 3, 3, 3, 3, 3, + 2, 2, 2, 3, 6, 3, 3, 4, 3, 2, + 2, 1, 1, 4, 1, 4, 1, 1, 3, 1, + 4, 4, 5, 10, 3, 1, 1, 1, 1, 2, + 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, + 3, 6, 3, 3, 4, 3, 3, 4, 3, 3, + 2, 2, 2, 2, 3, 2, 4, 3, 3, 4, + 4, 5, 6, 5, 6, 3, 1, 1, 2, 2, + 0, 2, 1, 0, 3, 3, 2, 1, 2, 2, + 4, 0, 3, 0, 6, 3, 0, 3, 1, 1, + 4, 2, 0, 2, 1, 2, 2, 2, 2, 1, + 1, 1, 2, 1, 2, 9, 1, 0, 4, 14, + 1, 1, 1, 3, 5, 1, 1, 1, 3, 1, + 0, 1, 1, 1, 3, 0, 1, 1, 1, 1, + 5, 3, 2, 1, 1, 1, 1, 1, 1, 1, + 1, 3, 1, 3, 3, 1, 3, 1, 1, 1, + 1, 2, 3, 3, 4, 4, 1, 1, 0, 1, + 1, 0, 2, 0, 7, 2, 1, 1, 1, 3, + 1, 1, 1, 1, 1, 1, 2, 1, 3, 0, + 6, 11, 1, 0, 2, 0, 1, 1, 3, 1, + 6, 3, 2, 2, 0, 1, 2, 0, 4, 3, + 11, 2, 0, 3, 2, 1, 3, 2, 1, 0, + 3, 1, 1, 1, 1, 4, 1, 1, 4, 6, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 3, 3, 3, 9, 1, 0, 1, 0, 0, 13, + 1, 1, 3, 3, 1, 1, 3, 2, 2, 3, + 1, 1, 1, 1, 1, 1, 0, 2, 2, 2, + 2, 2, 2, 2, 2, 1, 1, 0, 5, 2, + 6, 3, 3, 0, 3, 0, 1, 1, 0, 1, + 1, 0, 3, 4, 3, 5, 1, 0, 1, 0, + 3, 0, 1, 3, 3, 1, 1, 1, 1, 1, + 1, 5, 4, 8, 3, 0, 3, 1, 2, 4, + 3, 6, 14, 10, 8, 3, 0, 4, 1, 7, + 3, 0, 1, 0, 1, 0, 1, 3, 1, 0, + 3, 0, 1, 3, 2, 2, 2, 2, 1, 1, + 0, 1, 0, 1, 1, 3, 3, 0, 2, 0, + 8, 2, 0, 3, 4, 1, 3, 2, 1, 2, + 2, 2, 2, 1, 1, 1, 0, 1, 0, 4, + 4, 0, 1, 3, 1, 3, 1, 2, 0, 1, + 2, 3, 4, 0, 3, 4, 0, 2, 1, 2, + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, + 1, 2, 1, 1, 3, 0, 5, 3, 0, 5, + 3, 0, 4, 1, 4, 2, 1, 3, 2, 1, + 0, 3, 0, 2, 0, 1, 2, 1, 2, 1, + 1, 1, 1, 1, 1, 3, 0, 1, 3, 3, + 3, 3, 3, 3, 3, 0, 1, 1, 7, 8, + 8, 7, 7, 3, 3, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, + 2, 3, 3, 3, 3, 3, 3, 3, 2, 2, + 2, 3, 6, 3, 3, 3, 4, 2, 2, 4, + 3, 4, 1, 1, 4, 1, 4, 1, 1, 4, + 4, 4, 4, 5, 5, 5, 4, 2, 3, 2, + 4, 3, 4, 3, 4, 5, 6, 0, 6, 0, + 7, 5, 5, 5, 5, 5, 5, 5, 5, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 3, 3, 2, 2, 1, + 1, 2, 3, 3, 3, 3, 2, 2, 2, 3, + 6, 3, 3, 2, 2, 3, 4, 1, 1, 4, + 1, 4, 1, 1, 4, 4, 5, 5, 5, 4, + 4, 6, 0, 1, 3, 3, 3, 0, 1, 1, + 1, 3, 0, 2, 1, 2, 3, 3, 3, 3, + 2, 3, 6, 3, 3, 2, 2, 1, 3, 4, + 4, 4, 5, 5, 5, 4, 3, 0, 2, 0, + 2, 0, 3, 2, 1, 1, 1, 1, 3, 1, + 1, 1, 3, 3, 3, 1, 3, 3, 3, 1, + 1, 4, 2, 3, 3, 1, 3, 1, 3, 1, + 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; -static const short yydefact[] = { 0, - 0, 398, 782, 398, 238, 0, 0, 0, 398, 0, - 289, 0, 0, 0, 0, 398, 460, 0, 0, 398, - 0, 94, 418, 0, 0, 0, 454, 289, 0, 0, - 418, 0, 1, 2, 15, 7, 21, 46, 47, 48, - 6, 8, 9, 10, 11, 12, 13, 19, 14, 20, - 17, 18, 24, 25, 37, 26, 22, 31, 30, 35, - 32, 34, 33, 36, 39, 430, 27, 28, 40, 41, - 42, 43, 44, 16, 45, 23, 38, 429, 431, 29, - 428, 427, 426, 0, 0, 397, 396, 392, 810, 562, - 815, 563, 821, 822, 824, 564, 561, 828, 830, 565, - 836, 837, 838, 560, 843, 839, 840, 811, 812, 813, - 814, 816, 818, 819, 820, 823, 825, 826, 827, 831, - 832, 833, 834, 835, 842, 817, 829, 841, 808, 809, - 86, 781, 393, 0, 313, 0, 0, 0, 265, 266, - 0, 0, 264, 0, 0, 237, 0, 0, 0, 94, - 790, 0, 0, 0, 345, 0, 342, 0, 0, 0, - 343, 0, 0, 344, 0, 0, 394, 0, 288, 287, - 292, 297, 304, 302, 301, 303, 305, 0, 298, 299, - 0, 859, 860, 388, 784, 783, 0, 395, 459, 457, - 0, 412, 836, 0, 0, 391, 0, 789, 93, 0, - 417, 0, 0, 389, 803, 400, 792, 453, 0, 292, - 836, 77, 836, 75, 420, 390, 4, 5, 473, 804, - 53, 217, 53, 0, 0, 402, 785, 0, 791, 0, - 223, 0, 268, 267, 271, 359, 357, 358, 353, 354, - 355, 356, 262, 0, 270, 269, 0, 0, 509, 283, - 474, 475, 51, 0, 0, 413, 0, 351, 0, 352, - 0, 284, 341, 793, 330, 291, 802, 294, 290, 296, - 0, 0, 436, 0, 0, 0, 551, 551, 623, 624, - 626, 628, 542, 815, 0, 0, 536, 576, 0, 551, - 0, 578, 539, 0, 0, 836, 567, 0, 629, 547, - 800, 799, 840, 0, 808, 0, 801, 795, 0, 780, - 0, 0, 0, 0, 0, 514, 521, 524, 523, 519, - 544, 522, 809, 778, 598, 577, 713, 452, 776, 0, - 0, 599, 798, 794, 796, 600, 411, 69, 410, 0, - 0, 0, 0, 0, 96, 425, 509, 441, 294, 78, - 76, 419, 415, 3, 472, 0, 0, 56, 102, 0, - 56, 0, 242, 241, 0, 404, 0, 0, 369, 221, - 0, 0, 263, 0, 0, 0, 440, 0, 0, 348, - 346, 347, 349, 0, 239, 0, 285, 0, 300, 0, - 0, 0, 458, 0, 550, 546, 553, 0, 0, 0, - 529, 528, 0, 718, 0, 527, 562, 563, 564, 560, - 568, 559, 551, 549, 678, 0, 0, 530, 723, 748, - 0, 557, 0, 0, 558, 526, 525, 520, 556, 618, - 601, 611, 609, 610, 0, 0, 0, 577, 797, 0, - 518, 0, 0, 0, 0, 648, 0, 0, 0, 0, - 638, 640, 619, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 597, 454, 0, 483, 0, 0, 0, 73, - 74, 68, 72, 71, 66, 70, 67, 771, 713, 483, - 770, 0, 0, 713, 414, 0, 0, 329, 286, 422, - 368, 368, 368, 368, 79, 0, 54, 55, 59, 0, - 0, 0, 0, 0, 0, 101, 103, 104, 150, 0, - 219, 220, 0, 59, 399, 247, 246, 248, 0, 243, - 0, 406, 533, 815, 531, 534, 335, 0, 806, 807, - 336, 805, 340, 0, 0, 225, 0, 0, 0, 0, - 222, 0, 0, 276, 0, 273, 0, 0, 508, 476, - 261, 0, 0, 360, 293, 0, 0, 438, 713, 460, - 0, 432, 0, 0, 0, 555, 0, 0, 0, 460, - 0, 720, 721, 719, 0, 0, 0, 0, 0, 0, - 0, 548, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 713, 0, 725, 738, 714, 750, - 0, 0, 0, 0, 0, 0, 577, 755, 0, 614, - 0, 0, 517, 0, 0, 847, 848, 849, 850, 852, - 853, 854, 855, 856, 858, 857, 846, 851, 845, 844, - 777, 676, 0, 698, 699, 701, 703, 0, 0, 0, - 704, 0, 0, 0, 0, 0, 0, 0, 713, 0, - 680, 681, 0, 0, 639, 644, 642, 616, 0, 650, - 0, 677, 0, 0, 0, 615, 0, 0, 0, 608, - 0, 0, 0, 606, 0, 0, 0, 607, 0, 0, - 0, 602, 0, 0, 0, 603, 0, 0, 0, 605, - 0, 0, 0, 604, 612, 0, 0, 775, 0, 509, - 779, 764, 766, 787, 0, 621, 0, 765, 773, 0, - 509, 0, 0, 95, 89, 88, 0, 0, 416, 367, - 102, 85, 0, 0, 0, 366, 52, 57, 58, 63, - 0, 0, 0, 0, 0, 0, 212, 0, 216, 106, - 108, 215, 63, 0, 0, 409, 0, 401, 532, 0, - 334, 339, 333, 0, 0, 0, 224, 234, 226, 227, - 228, 229, 0, 0, 0, 0, 272, 316, 460, 0, - 350, 0, 0, 306, 310, 308, 0, 435, 439, 0, - 0, 311, 0, 0, 0, 545, 625, 627, 0, 541, - 0, 630, 631, 0, 535, 570, 571, 572, 573, 574, - 575, 569, 0, 538, 0, 723, 748, 0, 736, 726, - 731, 0, 632, 0, 737, 0, 0, 0, 0, 0, - 724, 0, 0, 0, 0, 752, 633, 566, 0, 754, - 0, 0, 0, 637, 0, 0, 587, 589, 588, 590, - 591, 592, 593, 594, 0, 584, 0, 512, 517, 543, - 0, 0, 0, 723, 748, 0, 694, 682, 689, 687, - 688, 0, 0, 695, 0, 0, 0, 0, 0, 679, - 0, 0, 641, 643, 645, 0, 0, 617, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 713, 451, 0, 482, 486, 489, 510, - 478, 0, 620, 622, 769, 442, 774, 0, 91, 92, - 98, 90, 0, 423, 0, 0, 80, 0, 82, 0, - 365, 0, 65, 0, 0, 158, 0, 0, 0, 0, - 0, 0, 0, 0, 157, 798, 159, 149, 0, 0, - 0, 100, 0, 214, 218, 220, 0, 0, 0, 0, - 0, 0, 116, 105, 107, 110, 112, 65, 0, 244, - 408, 403, 407, 412, 337, 0, 0, 338, 384, 385, - 382, 383, 0, 235, 0, 0, 232, 354, 280, 230, - 231, 277, 279, 281, 278, 275, 274, 0, 0, 0, - 362, 363, 361, 307, 0, 295, 437, 483, 0, 0, - 552, 554, 0, 483, 717, 0, 0, 0, 0, 0, - 0, 0, 0, 734, 722, 735, 727, 728, 730, 729, - 732, 739, 0, 749, 716, 715, 0, 747, 634, 635, - 636, 753, 0, 0, 596, 595, 0, 0, 517, 0, - 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 692, 646, 693, 683, 684, 686, 685, 690, 696, 0, - 756, 0, 757, 758, 0, 0, 0, 0, 652, 0, - 0, 659, 0, 0, 657, 0, 0, 658, 0, 0, - 653, 0, 0, 654, 0, 0, 656, 0, 0, 655, - 0, 711, 497, 0, 0, 0, 488, 511, 0, 480, - 768, 767, 772, 0, 87, 0, 421, 81, 0, 0, - 0, 0, 0, 50, 0, 181, 182, 160, 170, 168, - 169, 0, 0, 0, 0, 0, 0, 0, 0, 184, - 186, 183, 0, 0, 0, 0, 0, 0, 0, 0, - 151, 0, 0, 0, 152, 0, 0, 99, 0, 0, - 0, 142, 143, 145, 147, 122, 148, 0, 0, 0, - 0, 0, 0, 114, 0, 121, 115, 117, 436, 109, - 49, 251, 0, 0, 405, 332, 0, 0, 0, 282, - 233, 786, 315, 0, 483, 0, 509, 433, 613, 540, - 509, 537, 0, 741, 742, 0, 0, 0, 746, 740, - 751, 0, 0, 0, 0, 586, 0, 515, 517, 0, - 700, 702, 705, 706, 0, 0, 0, 710, 697, 649, - 0, 647, 760, 0, 761, 762, 668, 660, 675, 667, - 673, 665, 674, 666, 669, 661, 670, 662, 672, 664, - 671, 663, 713, 499, 495, 499, 497, 494, 499, 496, - 0, 484, 0, 487, 0, 0, 447, 0, 424, 84, - 0, 364, 62, 61, 0, 0, 173, 179, 0, 198, - 0, 0, 185, 189, 188, 177, 0, 0, 0, 180, - 176, 165, 166, 167, 161, 162, 164, 163, 171, 174, - 0, 156, 0, 153, 0, 0, 0, 111, 0, 0, - 0, 140, 123, 133, 131, 132, 0, 141, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 201, 250, 0, - 0, 245, 0, 509, 381, 236, 0, 317, 318, 320, - 325, 0, 787, 509, 309, 478, 478, 0, 743, 744, - 745, 579, 0, 582, 583, 0, 516, 0, 707, 708, - 709, 759, 651, 0, 712, 498, 491, 492, 490, 493, - 0, 485, 477, 479, 456, 462, 97, 83, 0, 64, - 0, 0, 0, 197, 187, 191, 190, 0, 0, 178, - 0, 175, 0, 211, 213, 113, 0, 0, 0, 136, - 139, 128, 129, 130, 124, 125, 127, 126, 134, 137, - 0, 120, 0, 204, 252, 253, 249, 0, 0, 0, - 0, 333, 0, 0, 0, 328, 0, 478, 480, 480, - 733, 580, 581, 691, 763, 502, 455, 0, 0, 444, - 60, 0, 194, 0, 192, 0, 0, 155, 436, 0, - 144, 146, 0, 138, 199, 200, 0, 118, 203, 0, - 331, 387, 380, 312, 319, 324, 323, 0, 788, 322, - 326, 0, 480, 447, 447, 0, 0, 0, 460, 446, - 449, 0, 172, 196, 195, 193, 201, 0, 119, 0, - 0, 202, 256, 386, 0, 327, 325, 447, 434, 445, - 0, 0, 481, 0, 456, 461, 463, 471, 204, 135, - 208, 0, 0, 205, 206, 260, 257, 258, 0, 254, - 259, 371, 0, 0, 370, 372, 328, 462, 0, 0, - 503, 507, 505, 483, 0, 0, 469, 470, 0, 465, - 154, 207, 209, 210, 0, 240, 0, 375, 376, 0, - 321, 443, 500, 0, 501, 0, 509, 448, 464, 466, - 467, 468, 255, 373, 378, 379, 374, 504, 506, 478, - 377, 480, 450, 0, 0, 0 +static const short yydefact[] = {0, + 0, 398, 782, 398, 238, 0, 0, 0, 398, 0, + 289, 0, 0, 0, 0, 398, 460, 0, 0, 398, + 0, 94, 418, 0, 0, 0, 454, 289, 0, 0, + 418, 0, 1, 2, 15, 7, 21, 46, 47, 48, + 6, 8, 9, 10, 11, 12, 13, 19, 14, 20, + 17, 18, 24, 25, 37, 26, 22, 31, 30, 35, + 32, 34, 33, 36, 39, 430, 27, 28, 40, 41, + 42, 43, 44, 16, 45, 23, 38, 429, 431, 29, + 428, 427, 426, 0, 0, 397, 396, 392, 810, 562, + 815, 563, 821, 822, 824, 564, 561, 828, 830, 565, + 836, 837, 838, 560, 843, 839, 840, 811, 812, 813, + 814, 816, 818, 819, 820, 823, 825, 826, 827, 831, + 832, 833, 834, 835, 842, 817, 829, 841, 808, 809, + 86, 781, 393, 0, 313, 0, 0, 0, 265, 266, + 0, 0, 264, 0, 0, 237, 0, 0, 0, 94, + 790, 0, 0, 0, 345, 0, 342, 0, 0, 0, + 343, 0, 0, 344, 0, 0, 394, 0, 288, 287, + 292, 297, 304, 302, 301, 303, 305, 0, 298, 299, + 0, 859, 860, 388, 784, 783, 0, 395, 459, 457, + 0, 412, 836, 0, 0, 391, 0, 789, 93, 0, + 417, 0, 0, 389, 803, 400, 792, 453, 0, 292, + 836, 77, 836, 75, 420, 390, 4, 5, 473, 804, + 53, 217, 53, 0, 0, 402, 785, 0, 791, 0, + 223, 0, 268, 267, 271, 359, 357, 358, 353, 354, + 355, 356, 262, 0, 270, 269, 0, 0, 509, 283, + 474, 475, 51, 0, 0, 413, 0, 351, 0, 352, + 0, 284, 341, 793, 330, 291, 802, 294, 290, 296, + 0, 0, 436, 0, 0, 0, 551, 551, 623, 624, + 626, 628, 542, 815, 0, 0, 536, 576, 0, 551, + 0, 578, 539, 0, 0, 836, 567, 0, 629, 547, + 800, 799, 840, 0, 808, 0, 801, 795, 0, 780, + 0, 0, 0, 0, 0, 514, 521, 524, 523, 519, + 544, 522, 809, 778, 598, 577, 713, 452, 776, 0, + 0, 599, 798, 794, 796, 600, 411, 69, 410, 0, + 0, 0, 0, 0, 96, 425, 509, 441, 294, 78, + 76, 419, 415, 3, 472, 0, 0, 56, 102, 0, + 56, 0, 242, 241, 0, 404, 0, 0, 369, 221, + 0, 0, 263, 0, 0, 0, 440, 0, 0, 348, + 346, 347, 349, 0, 239, 0, 285, 0, 300, 0, + 0, 0, 458, 0, 550, 546, 553, 0, 0, 0, + 529, 528, 0, 718, 0, 527, 562, 563, 564, 560, + 568, 559, 551, 549, 678, 0, 0, 530, 723, 748, + 0, 557, 0, 0, 558, 526, 525, 520, 556, 618, + 601, 611, 609, 610, 0, 0, 0, 577, 797, 0, + 518, 0, 0, 0, 0, 648, 0, 0, 0, 0, + 638, 640, 619, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 597, 454, 0, 483, 0, 0, 0, 73, + 74, 68, 72, 71, 66, 70, 67, 771, 713, 483, + 770, 0, 0, 713, 414, 0, 0, 329, 286, 422, + 368, 368, 368, 368, 79, 0, 54, 55, 59, 0, + 0, 0, 0, 0, 0, 101, 103, 104, 150, 0, + 219, 220, 0, 59, 399, 247, 246, 248, 0, 243, + 0, 406, 533, 815, 531, 534, 335, 0, 806, 807, + 336, 805, 340, 0, 0, 225, 0, 0, 0, 0, + 222, 0, 0, 276, 0, 273, 0, 0, 508, 476, + 261, 0, 0, 360, 293, 0, 0, 438, 713, 460, + 0, 432, 0, 0, 0, 555, 0, 0, 0, 460, + 0, 720, 721, 719, 0, 0, 0, 0, 0, 0, + 0, 548, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 713, 0, 725, 738, 714, 750, + 0, 0, 0, 0, 0, 0, 577, 755, 0, 614, + 0, 0, 517, 0, 0, 847, 848, 849, 850, 852, + 853, 854, 855, 856, 858, 857, 846, 851, 845, 844, + 777, 676, 0, 698, 699, 701, 703, 0, 0, 0, + 704, 0, 0, 0, 0, 0, 0, 0, 713, 0, + 680, 681, 0, 0, 639, 644, 642, 616, 0, 650, + 0, 677, 0, 0, 0, 615, 0, 0, 0, 608, + 0, 0, 0, 606, 0, 0, 0, 607, 0, 0, + 0, 602, 0, 0, 0, 603, 0, 0, 0, 605, + 0, 0, 0, 604, 612, 0, 0, 775, 0, 509, + 779, 764, 766, 787, 0, 621, 0, 765, 773, 0, + 509, 0, 0, 95, 89, 88, 0, 0, 416, 367, + 102, 85, 0, 0, 0, 366, 52, 57, 58, 63, + 0, 0, 0, 0, 0, 0, 212, 0, 216, 106, + 108, 215, 63, 0, 0, 409, 0, 401, 532, 0, + 334, 339, 333, 0, 0, 0, 224, 234, 226, 227, + 228, 229, 0, 0, 0, 0, 272, 316, 460, 0, + 350, 0, 0, 306, 310, 308, 0, 435, 439, 0, + 0, 311, 0, 0, 0, 545, 625, 627, 0, 541, + 0, 630, 631, 0, 535, 570, 571, 572, 573, 574, + 575, 569, 0, 538, 0, 723, 748, 0, 736, 726, + 731, 0, 632, 0, 737, 0, 0, 0, 0, 0, + 724, 0, 0, 0, 0, 752, 633, 566, 0, 754, + 0, 0, 0, 637, 0, 0, 587, 589, 588, 590, + 591, 592, 593, 594, 0, 584, 0, 512, 517, 543, + 0, 0, 0, 723, 748, 0, 694, 682, 689, 687, + 688, 0, 0, 695, 0, 0, 0, 0, 0, 679, + 0, 0, 641, 643, 645, 0, 0, 617, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 713, 451, 0, 482, 486, 489, 510, + 478, 0, 620, 622, 769, 442, 774, 0, 91, 92, + 98, 90, 0, 423, 0, 0, 80, 0, 82, 0, + 365, 0, 65, 0, 0, 158, 0, 0, 0, 0, + 0, 0, 0, 0, 157, 798, 159, 149, 0, 0, + 0, 100, 0, 214, 218, 220, 0, 0, 0, 0, + 0, 0, 116, 105, 107, 110, 112, 65, 0, 244, + 408, 403, 407, 412, 337, 0, 0, 338, 384, 385, + 382, 383, 0, 235, 0, 0, 232, 354, 280, 230, + 231, 277, 279, 281, 278, 275, 274, 0, 0, 0, + 362, 363, 361, 307, 0, 295, 437, 483, 0, 0, + 552, 554, 0, 483, 717, 0, 0, 0, 0, 0, + 0, 0, 0, 734, 722, 735, 727, 728, 730, 729, + 732, 739, 0, 749, 716, 715, 0, 747, 634, 635, + 636, 753, 0, 0, 596, 595, 0, 0, 517, 0, + 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 692, 646, 693, 683, 684, 686, 685, 690, 696, 0, + 756, 0, 757, 758, 0, 0, 0, 0, 652, 0, + 0, 659, 0, 0, 657, 0, 0, 658, 0, 0, + 653, 0, 0, 654, 0, 0, 656, 0, 0, 655, + 0, 711, 497, 0, 0, 0, 488, 511, 0, 480, + 768, 767, 772, 0, 87, 0, 421, 81, 0, 0, + 0, 0, 0, 50, 0, 181, 182, 160, 170, 168, + 169, 0, 0, 0, 0, 0, 0, 0, 0, 184, + 186, 183, 0, 0, 0, 0, 0, 0, 0, 0, + 151, 0, 0, 0, 152, 0, 0, 99, 0, 0, + 0, 142, 143, 145, 147, 122, 148, 0, 0, 0, + 0, 0, 0, 114, 0, 121, 115, 117, 436, 109, + 49, 251, 0, 0, 405, 332, 0, 0, 0, 282, + 233, 786, 315, 0, 483, 0, 509, 433, 613, 540, + 509, 537, 0, 741, 742, 0, 0, 0, 746, 740, + 751, 0, 0, 0, 0, 586, 0, 515, 517, 0, + 700, 702, 705, 706, 0, 0, 0, 710, 697, 649, + 0, 647, 760, 0, 761, 762, 668, 660, 675, 667, + 673, 665, 674, 666, 669, 661, 670, 662, 672, 664, + 671, 663, 713, 499, 495, 499, 497, 494, 499, 496, + 0, 484, 0, 487, 0, 0, 447, 0, 424, 84, + 0, 364, 62, 61, 0, 0, 173, 179, 0, 198, + 0, 0, 185, 189, 188, 177, 0, 0, 0, 180, + 176, 165, 166, 167, 161, 162, 164, 163, 171, 174, + 0, 156, 0, 153, 0, 0, 0, 111, 0, 0, + 0, 140, 123, 133, 131, 132, 0, 141, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 201, 250, 0, + 0, 245, 0, 509, 381, 236, 0, 317, 318, 320, + 325, 0, 787, 509, 309, 478, 478, 0, 743, 744, + 745, 579, 0, 582, 583, 0, 516, 0, 707, 708, + 709, 759, 651, 0, 712, 498, 491, 492, 490, 493, + 0, 485, 477, 479, 456, 462, 97, 83, 0, 64, + 0, 0, 0, 197, 187, 191, 190, 0, 0, 178, + 0, 175, 0, 211, 213, 113, 0, 0, 0, 136, + 139, 128, 129, 130, 124, 125, 127, 126, 134, 137, + 0, 120, 0, 204, 252, 253, 249, 0, 0, 0, + 0, 333, 0, 0, 0, 328, 0, 478, 480, 480, + 733, 580, 581, 691, 763, 502, 455, 0, 0, 444, + 60, 0, 194, 0, 192, 0, 0, 155, 436, 0, + 144, 146, 0, 138, 199, 200, 0, 118, 203, 0, + 331, 387, 380, 312, 319, 324, 323, 0, 788, 322, + 326, 0, 480, 447, 447, 0, 0, 0, 460, 446, + 449, 0, 172, 196, 195, 193, 201, 0, 119, 0, + 0, 202, 256, 386, 0, 327, 325, 447, 434, 445, + 0, 0, 481, 0, 456, 461, 463, 471, 204, 135, + 208, 0, 0, 205, 206, 260, 257, 258, 0, 254, + 259, 371, 0, 0, 370, 372, 328, 462, 0, 0, + 503, 507, 505, 483, 0, 0, 469, 470, 0, 465, + 154, 207, 209, 210, 0, 240, 0, 375, 376, 0, + 321, 443, 500, 0, 501, 0, 509, 448, 464, 466, + 467, 468, 255, 373, 378, 379, 374, 504, 506, 478, + 377, 480, 450, 0, 0, 0 }; -static const short yydefgoto[] = { 1574, - 33, 34, 35, 36, 37, 358, 499, 730, 1273, 933, - 1124, 38, 475, 472, 39, 40, 41, 495, 42, 43, - 717, 921, 200, 487, 1115, 44, 505, 506, 507, 964, - 965, 966, 967, 1411, 1174, 508, 509, 1301, 943, 1383, - 1384, 1414, 1458, 1459, 1514, 954, 1158, 45, 360, 510, - 511, 46, 370, 541, 989, 990, 991, 47, 147, 48, - 49, 365, 519, 520, 1183, 1330, 1417, 1519, 1520, 50, - 51, 243, 148, 544, 373, 545, 546, 992, 52, 53, - 171, 268, 387, 54, 178, 179, 180, 775, 1006, 55, - 56, 149, 999, 1337, 1338, 1339, 1340, 1426, 1470, 57, - 58, 59, 977, 368, 528, 753, 754, 60, 166, 61, - 381, 62, 63, 993, 245, 553, 64, 930, 723, 65, - 534, 1525, 1547, 1548, 1334, 983, 1495, 66, 67, 68, - 69, 88, 70, 71, 72, 522, 748, 972, 338, 73, - 74, 75, 202, 353, 719, 923, 76, 77, 78, 562, - 391, 557, 558, 79, 80, 81, 82, 83, 571, 1376, - 1480, 1481, 466, 209, 1438, 191, 1440, 1506, 1507, 1540, - 356, 250, 251, 1110, 1267, 700, 907, 908, 1261, 1367, - 1478, 1530, 1531, 377, 909, 441, 848, 315, 316, 317, - 318, 319, 529, 406, 418, 401, 320, 321, 396, 566, - 786, 322, 323, 422, 412, 599, 325, 436, 437, 845, - 1048, 326, 653, 877, 648, 463, 608, 575, 576, 593, - 594, 601, 826, 1038, 609, 1072, 1073, 1234, 1235, 327, - 702, 480, 481, 328, 329, 131, 416, 226, 1193, 703, - 1471, 197, 252, 331, 206, 265, 332, 333, 334, 335, - 221, 531, 336, 631, 186 +static const short yydefgoto[] = {1574, + 33, 34, 35, 36, 37, 358, 499, 730, 1273, 933, + 1124, 38, 475, 472, 39, 40, 41, 495, 42, 43, + 717, 921, 200, 487, 1115, 44, 505, 506, 507, 964, + 965, 966, 967, 1411, 1174, 508, 509, 1301, 943, 1383, + 1384, 1414, 1458, 1459, 1514, 954, 1158, 45, 360, 510, + 511, 46, 370, 541, 989, 990, 991, 47, 147, 48, + 49, 365, 519, 520, 1183, 1330, 1417, 1519, 1520, 50, + 51, 243, 148, 544, 373, 545, 546, 992, 52, 53, + 171, 268, 387, 54, 178, 179, 180, 775, 1006, 55, + 56, 149, 999, 1337, 1338, 1339, 1340, 1426, 1470, 57, + 58, 59, 977, 368, 528, 753, 754, 60, 166, 61, + 381, 62, 63, 993, 245, 553, 64, 930, 723, 65, + 534, 1525, 1547, 1548, 1334, 983, 1495, 66, 67, 68, + 69, 88, 70, 71, 72, 522, 748, 972, 338, 73, + 74, 75, 202, 353, 719, 923, 76, 77, 78, 562, + 391, 557, 558, 79, 80, 81, 82, 83, 571, 1376, + 1480, 1481, 466, 209, 1438, 191, 1440, 1506, 1507, 1540, + 356, 250, 251, 1110, 1267, 700, 907, 908, 1261, 1367, + 1478, 1530, 1531, 377, 909, 441, 848, 315, 316, 317, + 318, 319, 529, 406, 418, 401, 320, 321, 396, 566, + 786, 322, 323, 422, 412, 599, 325, 436, 437, 845, + 1048, 326, 653, 877, 648, 463, 608, 575, 576, 593, + 594, 601, 826, 1038, 609, 1072, 1073, 1234, 1235, 327, + 702, 480, 481, 328, 329, 131, 416, 226, 1193, 703, + 1471, 197, 252, 331, 206, 265, 332, 333, 334, 335, + 221, 531, 336, 631, 186 }; -static const short yypact[] = { 12378, - 86, 198, 11856, 198, 1346, 11856, 123, 1942, 198, -43, - -27, 499, 129, 11056, 499, 198, 225, 11314, 11056, 198, - 11856, 195, 50, 112, 11056, 229, 91, -27, 11985, 12114, - 50, 11056, 12378, 166,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768, 11056, 242,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768, 11056,-32768, 242, 11856, 11856,-32768,-32768, - 11856, 11856,-32768, 11856, 11056,-32768, 278, 9518, 320, 195, --32768, 11056, 11856, 242,-32768, 11856,-32768, 11856, 11856, 11856, --32768, 1066, 415,-32768, 11856, 11856,-32768, 272,-32768,-32768, - 39, 398,-32768,-32768,-32768,-32768,-32768, 419, 287,-32768, - 11056,-32768,-32768,-32768,-32768,-32768, 425,-32768,-32768, 437, - 5070, 17, 389, -33, 422,-32768, 441,-32768,-32768, 11056, --32768, 274, 11856,-32768,-32768,-32768,-32768,-32768, 11056, 39, - 402,-32768, 411,-32768, 407,-32768, 330,-32768, 344,-32768, - 435, 339, 435, 552, -23, 451,-32768, 359,-32768, 572, --32768, 518,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768, 366,-32768,-32768, 11856, 563, 480,-32768, - 395,-32768,-32768, 549, 9805,-32768, 359,-32768, 418,-32768, - 229,-32768,-32768,-32768,-32768,-32768,-32768, 582,-32768,-32768, - 11856, 46, 444, 11856, 11856, 445, 540, 540,-32768, 448, - 452,-32768, 456, 599, 469, 479, 482, 595, 652, 540, - 7501,-32768, 489, 491, 492, -29, 579, 494,-32768,-32768, --32768,-32768, 73, 9306, 145, 7501,-32768,-32768, 7501,-32768, - 7501, 7501, 7501, 6940, 229, 510,-32768,-32768,-32768,-32768, - 500,-32768, 212, 722,-32768, 3258, 519, -5,-32768, 525, - 524,-32768, 532,-32768,-32768, 214,-32768,-32768,-32768, 14, - 18, 18, 9665, 11056, 628,-32768, 480,-32768, 582,-32768, --32768,-32768, 11056,-32768,-32768, 60, 564, 100, 10927, 747, - 100, 656,-32768,-32768, 71, 600, 3041, 587,-32768, 607, - 229, 9361,-32768, 683, 720, 7501,-32768, 11856, 11056,-32768, --32768,-32768,-32768, 11443,-32768, 11856,-32768, 666,-32768, 11856, - 150, 723,-32768, 7501,-32768,-32768, 758, 581, 581, 581, --32768,-32768, 686, 931, 581,-32768, 682, 698, 700, 711, --32768,-32768, 540,-32768, 1149, 575, 581,-32768, 8436, 6940, - 690,-32768, 4483, 599,-32768,-32768,-32768,-32768,-32768, 879, - 602, 602, 602, 602, 603, 604, 615, 2127,-32768, 51, --32768, 581, 10618, 7501, 7688,-32768, 207, 7501, 128, 7501, --32768,-32768, 7127, 5257, 5444, 5631, 5818, 6005, 6192, 6379, - 12534, 7501,-32768, 91, 5070, 770, 9934, 3498, 11856,-32768, --32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 519, 8, --32768, 608, 532, 152,-32768, 673, 37,-32768,-32768, 620, - 43, 827, 827, 827,-32768, 242,-32768,-32768, 226, 631, - 11856, 789, 790, 637, 211,-32768,-32768,-32768,-32768, 221, --32768, 12469, 686, 226,-32768,-32768,-32768,-32768, 776, 783, - 664, 684,-32768, 771,-32768,-32768,-32768, 228,-32768,-32768, --32768,-32768, 692, 791, -104,-32768, -104, -104, -104, -104, --32768, 730, 675, 676, 258,-32768, 11056, 784, 3258,-32768, --32768, 663, 668, 679,-32768, 11185, 273,-32768, 519, 225, - 672,-32768, 11185, 2756, 795, 887, 680, 687, 319, 225, - 691,-32768,-32768,-32768, 693, 862, 694, 230, 30, 818, - 852,-32768, 11856, 323, 705, 706, 708, 725, 8436, 8436, - 8436, 8436, 710, 592, 519, 726,-32768, 214,-32768, 6, - 721, 808, 6566, 6940, 6566, 6566, 2818, -42, 737,-32768, - 886, 7501, 743, 744, 741,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768, 1149, 748,-32768, 749, 750,-32768, 753, 754, 755, --32768, 7688, 7688, 7688, 7688, 7688, 7501, 184, 519, 756, --32768, 214, 757, 181,-32768,-32768,-32768, 813, 7688,-32768, - 7501, 140, 763, 765, 6753, 879, 779, 780, 6753, 623, - 781, 786, 6753, 1465, 788, 793, 6753, 1465, 797, 798, - 6753, 206, 805, 807, 6753, 206, 810, 814, 6753, 602, - 815, 819, 6753, 602,-32768, 2579, 11056,-32768, 1563, 480, --32768, 752,-32768,-32768, 812,-32768, -51, 752,-32768, 10321, - 480, 10063, 800,-32768,-32768,-32768, 113, 11856,-32768,-32768, - 10927,-32768, 11856, 11856, 11856, 11856,-32768,-32768,-32768, 934, - 8810, 70, 820, 822, 11856, 10927, 841, 11856,-32768,-32768, - 490,-32768, 934, 11056, 71, 25, 803,-32768,-32768, 10777, --32768,-32768, 889, 10777, 127, 581,-32768,-32768,-32768,-32768, --32768,-32768, 9518, 9184, 9184, 9361,-32768, 896, 225, 11856, --32768, 11583, 11856,-32768, 917,-32768, 11856,-32768,-32768, 5070, - 5070,-32768, 12534, 11856, 11856,-32768,-32768,-32768, 581,-32768, - 5070,-32768,-32768, 7501,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768, 581,-32768, 8436, 8436, 6940, 4683, 497, 825, - 825, 772,-32768, 8436, 8623, 8436, 8436, 8436, 8436, 12534, --32768, 3697, 6940, 7501, 6940, 996,-32768,-32768, 826, -42, - 828, 829, 6940,-32768, 831, 998,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768, 40, 2221, 119,-32768, 743,-32768, - 7688, 581, 581, 8436, 6940, 4883, 588, 835, 835, 835, - 835, 1581, 7688, 7875, 7688, 7688, 7688, 7688, 12534,-32768, - 3896, 12250,-32768,-32768,-32768, 191, 837, 813, 686, 686, - 838, 686, 686, 840, 686, 686, 843, 686, 686, 851, - 686, 686, 853, 686, 686, 854, 686, 686, 855, 686, - 686, 856, 7501, 519,-32768, 11056, 839, 1019, 11727, 871, - 1008, 10192,-32768,-32768,-32768,-32768,-32768, 6940,-32768,-32768, - 967,-32768, 352,-32768, 372, 12469,-32768, 34,-32768, 976, --32768, 1030, 904, 881, 8810,-32768, 8810, 8810, 8810, 8810, - 8810, 8810, 1746, 885,-32768,-32768, 890,-32768, 11856, 11856, - 373,-32768, 892, 924,-32768,-32768, 900, 11856, 8062, 1041, - 1060, 11856,-32768,-32768, 490,-32768,-32768, 904, 1076, 1044, --32768,-32768,-32768, 17,-32768, 366, 1120,-32768,-32768,-32768, --32768,-32768, 1026,-32768, 980, 11856,-32768, 203,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768,-32768, 939, 918, 5070, --32768,-32768,-32768,-32768, 1095,-32768,-32768, 10, 378, 928, --32768,-32768, 930, 10, 3258, 932, 356, 935, 937, 6566, - 6566, 6566, 938,-32768, 712, 497, 253, 253, 825, 825, --32768,-32768, -38, -42, 3258,-32768, 6940,-32768,-32768,-32768, --32768, -42, 686, 940,-32768,-32768, 7314, 941, 743, 946, --32768, 438, 943, 951, 952, 953, 6566, 6566, 6566, 954, --32768, 787, 588, 293, 293, 835, 835,-32768,-32768, -30, --32768, 955, 933,-32768, 7688, 12250, 956, 957,-32768, 958, - 959,-32768, 962, 963,-32768, 964, 968,-32768, 969, 970, --32768, 972, 979,-32768, 981, 983,-32768, 984, 991,-32768, - 2803,-32768, 617, 11056, 1092, 10618,-32768,-32768, 1195, 1158, --32768,-32768,-32768, 1073,-32768, 11856,-32768,-32768, 1178, 1182, - 11856, 242, 1024,-32768, 8810, 3180, 1196, 1003, 1003, 1003, - 1003, 1832, 8810, 12284, 1004, 326, 8810, 231, 8810,-32768, --32768, 8997, 8810, 8810, 8810, 8810, 8810, 8810, 8810, 12534, --32768, 4283, 382, 400,-32768, 11856, 1021,-32768, 8810, 158, - 1006,-32768, 1009, 1010,-32768,-32768,-32768, 8062, 8062, 8062, - 8062, 8062, 8062, 745, 1013,-32768,-32768,-32768, 444,-32768, --32768, 1080, 1184, 71,-32768,-32768, 229, 11056, 229,-32768, --32768,-32768,-32768, 11856, 10, 1153, 480,-32768,-32768,-32768, - 480,-32768, 12534,-32768,-32768, 1016, 1022, 1023,-32768,-32768, - -42, 1027, 686, 1031, 1033, 3258, 686,-32768, 743, 12534, --32768,-32768,-32768,-32768, 1038, 1039, 1043,-32768,-32768,-32768, - 12284, 787,-32768, 1045, 1028,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768, 519, 1165,-32768, 1165, 617,-32768, 1165,-32768, - 1205,-32768, 11056,-32768, 6940, 7501, 1166, 229,-32768,-32768, - 8062,-32768, 1061,-32768, 1081, 3088,-32768, 3180, 1273,-32768, - 12284, 210,-32768,-32768,-32768, 1227, 12284, 1063, 8810, 9028, - 1196, 861, 2420, 2420, 360, 360, 1003, 1003,-32768,-32768, - 401, 3273, 1192,-32768, 1067, 1127, 1916,-32768, 8062, 581, - 581, 899, 1074, 1074, 1074, 1074, 638, 8249, 8062, 8062, - 8062, 8062, 8062, 8062, 8062, 12534, 4095, 1223,-32768, -63, - 1202,-32768, 1231, 480, 1084,-32768, 1082, 1085,-32768,-32768, - -1, 1088, 890, 480,-32768, 1008, 1008, 1094,-32768,-32768, --32768,-32768, 1103,-32768,-32768, 1107,-32768, 1108,-32768,-32768, --32768,-32768,-32768, 12284,-32768,-32768,-32768,-32768,-32768,-32768, - 11056,-32768, -42, 3258, 1295, 1220,-32768, 745, 242,-32768, - 12534, 12284, 404,-32768,-32768,-32768,-32768, 1305, 12284, 1227, - 8810,-32768, 11856,-32768,-32768,-32768, 342, 1109, 1110,-32768, - 899, 745, 989, 989, 367, 367, 1074, 1074,-32768,-32768, - 431, 745, 42, 1250,-32768,-32768,-32768, 11856, 229, 1191, - 11856, 889, 11856, 12534, 12534, -36, 11856, 1008, 1158, 1158, --32768,-32768,-32768,-32768,-32768, 90,-32768, 1235, 1320,-32768, --32768, 1115,-32768, 12284,-32768, 12284, 434, 3273, 444, 12534, --32768,-32768, 8062,-32768,-32768,-32768, 54,-32768, 1250, 1117, --32768, 1186,-32768,-32768,-32768,-32768,-32768, 1143,-32768,-32768, --32768, 440, 1158, 1166, 1166, 1121, 1122, 1125, 225, 1232, --32768, 7501,-32768,-32768,-32768,-32768, 1223, 1126, 745, 75, - 75,-32768, 162,-32768, 205,-32768, -1, 1166,-32768,-32768, - 7501, 10461,-32768, 5070, 1295, 1131,-32768, 2491, 1250,-32768, --32768, 1341, 58,-32768,-32768,-32768,-32768,-32768, 458,-32768, --32768,-32768, 274, 274,-32768,-32768, -36, 1220, 2017, 462, --32768,-32768, 1145, 10, 1235, 7501,-32768,-32768, 190,-32768, --32768,-32768,-32768,-32768, 162,-32768, 1156, 274, 1157, 1154, --32768,-32768,-32768, 10461,-32768, 11856, 480,-32768,-32768,-32768, --32768,-32768,-32768,-32768, 1161,-32768,-32768,-32768,-32768, 1008, --32768, 1158,-32768, 1375, 1376,-32768 +static const short yypact[] = {12378, + 86, 198, 11856, 198, 1346, 11856, 123, 1942, 198, -43, + -27, 499, 129, 11056, 499, 198, 225, 11314, 11056, 198, + 11856, 195, 50, 112, 11056, 229, 91, -27, 11985, 12114, + 50, 11056, 12378, 166, -32768, -32768, -32768, -32768, -32768, -32768, + -32768, -32768, -32768, -32768, -32768, -32768, -32768, -32768, -32768, -32768, + -32768, -32768, -32768, -32768, -32768, -32768, -32768, -32768, -32768, -32768, + -32768, -32768, -32768, -32768, -32768, -32768, -32768, -32768, -32768, -32768, + -32768, -32768, -32768, -32768, -32768, -32768, -32768, -32768, -32768, -32768, + -32768, -32768, -32768, 11056, 242, -32768, -32768, -32768, -32768, -32768, + -32768, -32768, -32768, -32768, -32768, -32768, -32768, -32768, -32768, -32768, + -32768, -32768, -32768, -32768, -32768, -32768, -32768, -32768, -32768, -32768, + -32768, -32768, -32768, -32768, -32768, -32768, -32768, -32768, -32768, -32768, + -32768, -32768, -32768, -32768, -32768, -32768, -32768, -32768, -32768, -32768, + -32768, -32768, -32768, 11056, -32768, 242, 11856, 11856, -32768, -32768, + 11856, 11856, -32768, 11856, 11056, -32768, 278, 9518, 320, 195, + -32768, 11056, 11856, 242, -32768, 11856, -32768, 11856, 11856, 11856, + -32768, 1066, 415, -32768, 11856, 11856, -32768, 272, -32768, -32768, + 39, 398, -32768, -32768, -32768, -32768, -32768, 419, 287, -32768, + 11056, -32768, -32768, -32768, -32768, -32768, 425, -32768, -32768, 437, + 5070, 17, 389, -33, 422, -32768, 441, -32768, -32768, 11056, + -32768, 274, 11856, -32768, -32768, -32768, -32768, -32768, 11056, 39, + 402, -32768, 411, -32768, 407, -32768, 330, -32768, 344, -32768, + 435, 339, 435, 552, -23, 451, -32768, 359, -32768, 572, + -32768, 518, -32768, -32768, -32768, -32768, -32768, -32768, -32768, -32768, + -32768, -32768, -32768, 366, -32768, -32768, 11856, 563, 480, -32768, + 395, -32768, -32768, 549, 9805, -32768, 359, -32768, 418, -32768, + 229, -32768, -32768, -32768, -32768, -32768, -32768, 582, -32768, -32768, + 11856, 46, 444, 11856, 11856, 445, 540, 540, -32768, 448, + 452, -32768, 456, 599, 469, 479, 482, 595, 652, 540, + 7501, -32768, 489, 491, 492, -29, 579, 494, -32768, -32768, + -32768, -32768, 73, 9306, 145, 7501, -32768, -32768, 7501, -32768, + 7501, 7501, 7501, 6940, 229, 510, -32768, -32768, -32768, -32768, + 500, -32768, 212, 722, -32768, 3258, 519, -5, -32768, 525, + 524, -32768, 532, -32768, -32768, 214, -32768, -32768, -32768, 14, + 18, 18, 9665, 11056, 628, -32768, 480, -32768, 582, -32768, + -32768, -32768, 11056, -32768, -32768, 60, 564, 100, 10927, 747, + 100, 656, -32768, -32768, 71, 600, 3041, 587, -32768, 607, + 229, 9361, -32768, 683, 720, 7501, -32768, 11856, 11056, -32768, + -32768, -32768, -32768, 11443, -32768, 11856, -32768, 666, -32768, 11856, + 150, 723, -32768, 7501, -32768, -32768, 758, 581, 581, 581, + -32768, -32768, 686, 931, 581, -32768, 682, 698, 700, 711, + -32768, -32768, 540, -32768, 1149, 575, 581, -32768, 8436, 6940, + 690, -32768, 4483, 599, -32768, -32768, -32768, -32768, -32768, 879, + 602, 602, 602, 602, 603, 604, 615, 2127, -32768, 51, + -32768, 581, 10618, 7501, 7688, -32768, 207, 7501, 128, 7501, + -32768, -32768, 7127, 5257, 5444, 5631, 5818, 6005, 6192, 6379, + 12534, 7501, -32768, 91, 5070, 770, 9934, 3498, 11856, -32768, + -32768, -32768, -32768, -32768, -32768, -32768, -32768, -32768, 519, 8, + -32768, 608, 532, 152, -32768, 673, 37, -32768, -32768, 620, + 43, 827, 827, 827, -32768, 242, -32768, -32768, 226, 631, + 11856, 789, 790, 637, 211, -32768, -32768, -32768, -32768, 221, + -32768, 12469, 686, 226, -32768, -32768, -32768, -32768, 776, 783, + 664, 684, -32768, 771, -32768, -32768, -32768, 228, -32768, -32768, + -32768, -32768, 692, 791, -104, -32768, -104, -104, -104, -104, + -32768, 730, 675, 676, 258, -32768, 11056, 784, 3258, -32768, + -32768, 663, 668, 679, -32768, 11185, 273, -32768, 519, 225, + 672, -32768, 11185, 2756, 795, 887, 680, 687, 319, 225, + 691, -32768, -32768, -32768, 693, 862, 694, 230, 30, 818, + 852, -32768, 11856, 323, 705, 706, 708, 725, 8436, 8436, + 8436, 8436, 710, 592, 519, 726, -32768, 214, -32768, 6, + 721, 808, 6566, 6940, 6566, 6566, 2818, -42, 737, -32768, + 886, 7501, 743, 744, 741, -32768, -32768, -32768, -32768, -32768, + -32768, -32768, -32768, -32768, -32768, -32768, -32768, -32768, -32768, -32768, + -32768, 1149, 748, -32768, 749, 750, -32768, 753, 754, 755, + -32768, 7688, 7688, 7688, 7688, 7688, 7501, 184, 519, 756, + -32768, 214, 757, 181, -32768, -32768, -32768, 813, 7688, -32768, + 7501, 140, 763, 765, 6753, 879, 779, 780, 6753, 623, + 781, 786, 6753, 1465, 788, 793, 6753, 1465, 797, 798, + 6753, 206, 805, 807, 6753, 206, 810, 814, 6753, 602, + 815, 819, 6753, 602, -32768, 2579, 11056, -32768, 1563, 480, + -32768, 752, -32768, -32768, 812, -32768, -51, 752, -32768, 10321, + 480, 10063, 800, -32768, -32768, -32768, 113, 11856, -32768, -32768, + 10927, -32768, 11856, 11856, 11856, 11856, -32768, -32768, -32768, 934, + 8810, 70, 820, 822, 11856, 10927, 841, 11856, -32768, -32768, + 490, -32768, 934, 11056, 71, 25, 803, -32768, -32768, 10777, + -32768, -32768, 889, 10777, 127, 581, -32768, -32768, -32768, -32768, + -32768, -32768, 9518, 9184, 9184, 9361, -32768, 896, 225, 11856, + -32768, 11583, 11856, -32768, 917, -32768, 11856, -32768, -32768, 5070, + 5070, -32768, 12534, 11856, 11856, -32768, -32768, -32768, 581, -32768, + 5070, -32768, -32768, 7501, -32768, -32768, -32768, -32768, -32768, -32768, + -32768, -32768, 581, -32768, 8436, 8436, 6940, 4683, 497, 825, + 825, 772, -32768, 8436, 8623, 8436, 8436, 8436, 8436, 12534, + -32768, 3697, 6940, 7501, 6940, 996, -32768, -32768, 826, -42, + 828, 829, 6940, -32768, 831, 998, -32768, -32768, -32768, -32768, + -32768, -32768, -32768, -32768, 40, 2221, 119, -32768, 743, -32768, + 7688, 581, 581, 8436, 6940, 4883, 588, 835, 835, 835, + 835, 1581, 7688, 7875, 7688, 7688, 7688, 7688, 12534, -32768, + 3896, 12250, -32768, -32768, -32768, 191, 837, 813, 686, 686, + 838, 686, 686, 840, 686, 686, 843, 686, 686, 851, + 686, 686, 853, 686, 686, 854, 686, 686, 855, 686, + 686, 856, 7501, 519, -32768, 11056, 839, 1019, 11727, 871, + 1008, 10192, -32768, -32768, -32768, -32768, -32768, 6940, -32768, -32768, + 967, -32768, 352, -32768, 372, 12469, -32768, 34, -32768, 976, + -32768, 1030, 904, 881, 8810, -32768, 8810, 8810, 8810, 8810, + 8810, 8810, 1746, 885, -32768, -32768, 890, -32768, 11856, 11856, + 373, -32768, 892, 924, -32768, -32768, 900, 11856, 8062, 1041, + 1060, 11856, -32768, -32768, 490, -32768, -32768, 904, 1076, 1044, + -32768, -32768, -32768, 17, -32768, 366, 1120, -32768, -32768, -32768, + -32768, -32768, 1026, -32768, 980, 11856, -32768, 203, -32768, -32768, + -32768, -32768, -32768, -32768, -32768, -32768, -32768, 939, 918, 5070, + -32768, -32768, -32768, -32768, 1095, -32768, -32768, 10, 378, 928, + -32768, -32768, 930, 10, 3258, 932, 356, 935, 937, 6566, + 6566, 6566, 938, -32768, 712, 497, 253, 253, 825, 825, + -32768, -32768, -38, -42, 3258, -32768, 6940, -32768, -32768, -32768, + -32768, -42, 686, 940, -32768, -32768, 7314, 941, 743, 946, + -32768, 438, 943, 951, 952, 953, 6566, 6566, 6566, 954, + -32768, 787, 588, 293, 293, 835, 835, -32768, -32768, -30, + -32768, 955, 933, -32768, 7688, 12250, 956, 957, -32768, 958, + 959, -32768, 962, 963, -32768, 964, 968, -32768, 969, 970, + -32768, 972, 979, -32768, 981, 983, -32768, 984, 991, -32768, + 2803, -32768, 617, 11056, 1092, 10618, -32768, -32768, 1195, 1158, + -32768, -32768, -32768, 1073, -32768, 11856, -32768, -32768, 1178, 1182, + 11856, 242, 1024, -32768, 8810, 3180, 1196, 1003, 1003, 1003, + 1003, 1832, 8810, 12284, 1004, 326, 8810, 231, 8810, -32768, + -32768, 8997, 8810, 8810, 8810, 8810, 8810, 8810, 8810, 12534, + -32768, 4283, 382, 400, -32768, 11856, 1021, -32768, 8810, 158, + 1006, -32768, 1009, 1010, -32768, -32768, -32768, 8062, 8062, 8062, + 8062, 8062, 8062, 745, 1013, -32768, -32768, -32768, 444, -32768, + -32768, 1080, 1184, 71, -32768, -32768, 229, 11056, 229, -32768, + -32768, -32768, -32768, 11856, 10, 1153, 480, -32768, -32768, -32768, + 480, -32768, 12534, -32768, -32768, 1016, 1022, 1023, -32768, -32768, + -42, 1027, 686, 1031, 1033, 3258, 686, -32768, 743, 12534, + -32768, -32768, -32768, -32768, 1038, 1039, 1043, -32768, -32768, -32768, + 12284, 787, -32768, 1045, 1028, -32768, -32768, -32768, -32768, -32768, + -32768, -32768, -32768, -32768, -32768, -32768, -32768, -32768, -32768, -32768, + -32768, -32768, 519, 1165, -32768, 1165, 617, -32768, 1165, -32768, + 1205, -32768, 11056, -32768, 6940, 7501, 1166, 229, -32768, -32768, + 8062, -32768, 1061, -32768, 1081, 3088, -32768, 3180, 1273, -32768, + 12284, 210, -32768, -32768, -32768, 1227, 12284, 1063, 8810, 9028, + 1196, 861, 2420, 2420, 360, 360, 1003, 1003, -32768, -32768, + 401, 3273, 1192, -32768, 1067, 1127, 1916, -32768, 8062, 581, + 581, 899, 1074, 1074, 1074, 1074, 638, 8249, 8062, 8062, + 8062, 8062, 8062, 8062, 8062, 12534, 4095, 1223, -32768, -63, + 1202, -32768, 1231, 480, 1084, -32768, 1082, 1085, -32768, -32768, + -1, 1088, 890, 480, -32768, 1008, 1008, 1094, -32768, -32768, + -32768, -32768, 1103, -32768, -32768, 1107, -32768, 1108, -32768, -32768, + -32768, -32768, -32768, 12284, -32768, -32768, -32768, -32768, -32768, -32768, + 11056, -32768, -42, 3258, 1295, 1220, -32768, 745, 242, -32768, + 12534, 12284, 404, -32768, -32768, -32768, -32768, 1305, 12284, 1227, + 8810, -32768, 11856, -32768, -32768, -32768, 342, 1109, 1110, -32768, + 899, 745, 989, 989, 367, 367, 1074, 1074, -32768, -32768, + 431, 745, 42, 1250, -32768, -32768, -32768, 11856, 229, 1191, + 11856, 889, 11856, 12534, 12534, -36, 11856, 1008, 1158, 1158, + -32768, -32768, -32768, -32768, -32768, 90, -32768, 1235, 1320, -32768, + -32768, 1115, -32768, 12284, -32768, 12284, 434, 3273, 444, 12534, + -32768, -32768, 8062, -32768, -32768, -32768, 54, -32768, 1250, 1117, + -32768, 1186, -32768, -32768, -32768, -32768, -32768, 1143, -32768, -32768, + -32768, 440, 1158, 1166, 1166, 1121, 1122, 1125, 225, 1232, + -32768, 7501, -32768, -32768, -32768, -32768, 1223, 1126, 745, 75, + 75, -32768, 162, -32768, 205, -32768, -1, 1166, -32768, -32768, + 7501, 10461, -32768, 5070, 1295, 1131, -32768, 2491, 1250, -32768, + -32768, 1341, 58, -32768, -32768, -32768, -32768, -32768, 458, -32768, + -32768, -32768, 274, 274, -32768, -32768, -36, 1220, 2017, 462, + -32768, -32768, 1145, 10, 1235, 7501, -32768, -32768, 190, -32768, + -32768, -32768, -32768, -32768, 162, -32768, 1156, 274, 1157, 1154, + -32768, -32768, -32768, 10461, -32768, 11856, 480, -32768, -32768, -32768, + -32768, -32768, -32768, -32768, 1161, -32768, -32768, -32768, -32768, 1008, + -32768, 1158, -32768, 1375, 1376, -32768 }; static const short yypgoto[] = {-32768, --32768, 1344,-32768,-32768,-32768, 1159, 1020, 866,-32768, 640, - 417,-32768, 1047,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768, 1236,-32768,-32768,-32768, 671, 651, 670,-32768, --32768, 430, 236,-32768, -715,-32768, -451,-32768, -662, 12, - -1067, -90, -102, -53, -83,-32768,-32768,-32768,-32768,-32768, - 674,-32768,-32768,-32768,-32768,-32768, 94,-32768,-32768,-32768, --32768,-32768,-32768, -717,-32768,-32768,-32768,-32768, -136,-32768, --32768,-32768,-32768, -140, 443,-32768, 644, 646,-32768,-32768, - 1386, 1206, 1068,-32768, 1406,-32768, 1150, 860,-32768,-32768, --32768,-32768,-32768,-32768,-32768,-32768, 3, -70, -99,-32768, --32768,-32768, 9, 1173,-32768,-32768,-32768,-32768,-32768,-32768, --32768,-32768,-32768, 1275, -148,-32768,-32768,-32768, -20,-32768, --32768,-32768, -86,-32768,-32768,-32768,-32768,-32768,-32768,-32768, --32768, 504,-32768,-32768,-32768,-32768,-32768,-32768, 467,-32768, --32768,-32768, 1411,-32768,-32768,-32768,-32768, -198,-32768,-32768, - -1141, -704, 669,-32768,-32768,-32768,-32768, 1083, 4, -1352, --32768, -92,-32768, 988, -57, -553, -75,-32768, -82,-32768, --32768, -159, 29, -1304, -1360, -479,-32768, -1030, 201, -943, --32768,-32768, -94, -326, -882,-32768, -812, -410, 1162,-32768, --32768,-32768,-32768,-32768,-32768,-32768,-32768, -337, -164,-32768, --32768,-32768, 1096,-32768,-32768, -166,-32768, 414,-32768,-32768, --32768, 1703,-32768,-32768, -610, -474, -411,-32768,-32768, -718, - -493, -690,-32768,-32768, -526,-32768,-32768,-32768,-32768, 719, - 993,-32768, 759, -768, 1000,-32768, 27, 1308,-32768, -893, - 2, -117, 65, 1124,-32768,-32768, 2130, 1533, -103, 13, - -134, -329, -3, 375,-32768 + -32768, 1344, -32768, -32768, -32768, 1159, 1020, 866, -32768, 640, + 417, -32768, 1047, -32768, -32768, -32768, -32768, -32768, -32768, -32768, + -32768, -32768, 1236, -32768, -32768, -32768, 671, 651, 670, -32768, + -32768, 430, 236, -32768, -715, -32768, -451, -32768, -662, 12, + -1067, -90, -102, -53, -83, -32768, -32768, -32768, -32768, -32768, + 674, -32768, -32768, -32768, -32768, -32768, 94, -32768, -32768, -32768, + -32768, -32768, -32768, -717, -32768, -32768, -32768, -32768, -136, -32768, + -32768, -32768, -32768, -140, 443, -32768, 644, 646, -32768, -32768, + 1386, 1206, 1068, -32768, 1406, -32768, 1150, 860, -32768, -32768, + -32768, -32768, -32768, -32768, -32768, -32768, 3, -70, -99, -32768, + -32768, -32768, 9, 1173, -32768, -32768, -32768, -32768, -32768, -32768, + -32768, -32768, -32768, 1275, -148, -32768, -32768, -32768, -20, -32768, + -32768, -32768, -86, -32768, -32768, -32768, -32768, -32768, -32768, -32768, + -32768, 504, -32768, -32768, -32768, -32768, -32768, -32768, 467, -32768, + -32768, -32768, 1411, -32768, -32768, -32768, -32768, -198, -32768, -32768, + -1141, -704, 669, -32768, -32768, -32768, -32768, 1083, 4, -1352, + -32768, -92, -32768, 988, -57, -553, -75, -32768, -82, -32768, + -32768, -159, 29, -1304, -1360, -479, -32768, -1030, 201, -943, + -32768, -32768, -94, -326, -882, -32768, -812, -410, 1162, -32768, + -32768, -32768, -32768, -32768, -32768, -32768, -32768, -337, -164, -32768, + -32768, -32768, 1096, -32768, -32768, -166, -32768, 414, -32768, -32768, + -32768, 1703, -32768, -32768, -610, -474, -411, -32768, -32768, -718, + -493, -690, -32768, -32768, -526, -32768, -32768, -32768, -32768, 719, + 993, -32768, 759, -768, 1000, -32768, 27, 1308, -32768, -893, + 2, -117, 65, 1124, -32768, -32768, 2130, 1533, -103, 13, + -134, -329, -3, 375, -32768 }; -#define YYLAST 12730 - - -static const short yytable[] = { 132, - 711, 223, 151, 346, 709, 262, 780, 244, 600, 713, - 185, 1008, 1009, 260, 194, 185, 791, 198, 1112, 253, - 488, 185, 1014, 1103, 324, 212, 214, 970, 185, 530, - 951, 857, 858, 859, 860, 861, 1051, 1328, 207, 722, - 184, 1429, 1430, 266, 1045, 195, 1424, 1046, 876, 470, - 695, 204, 337, 474, 464, 823, 707, 699, 216, 699, - 971, 500, 824, 491, 720, 492, 1279, 269, 1474, 1475, - 150, 824, 341, 1262, 1119, 824, 829, 1468, 831, 832, - 185, 471, 173, 824, 779, 347, 715, 1018, 500, 1511, - 1490, 502, 1455, 1543, 267, 809, 810, 811, 812, 799, - 493, 741, 756, 174, 169, 363, 269, 516, 1415, 364, - 219, 388, 1498, 397, 392, 1416, 1019, 170, 502, 824, - 821, 1499, 1500, 1473, 168, 414, 800, 1456, 517, 374, - 185, 503, 1120, 151, 151, 1055, 1544, 227, 229, 659, - 151, 185, 716, 175, 246, 1528, 444, 435, 185, 151, - 1512, 445, 151, 504, 151, 227, 229, 176, 503, 1469, - 222, 151, 151, 979, 1056, 1491, 825, -558, 914, 342, - 1476, 231, 152, 1513, 870, 825, 957, 185, 249, 825, - 504, 1210, 518, 660, 980, -558, 84, 825, 181, 1229, - 863, 208, 830, 959, 661, 446, 185, 1075, 85, 198, - 447, 224, 225, 1477, 339, 185, 448, 273, 230, 1425, - 205, 1573, 465, 205, 205, 1000, 449, 330, 177, 1388, - 254, 205, 255, 825, 981, 710, 345, 465, 494, 189, - 263, 1195, 1372, 201, 960, 348, 1218, 267, 982, 6, - 1052, 7, 1287, 198, 1153, 1154, 961, 560, 582, 267, - 962, 151, 1062, 1063, 1064, 1065, 1066, 1067, 1047, 873, - 203, 721, 13, 190, 561, 1572, 613, 151, 963, -526, - 151, 393, 1126, 385, 1127, 1128, 1129, 1130, 1131, 1132, - 948, 1023, 14, 654, 796, 655, 1288, -526, 1385, 497, - 498, 451, 919, 920, 567, 568, 569, 1289, 324, 797, - 1341, 577, 17, 452, 874, 86, 875, 1487, 6, 205, - 7, 1017, 1368, 584, 1443, 1370, 19, 267, 87, 382, - 1025, 1026, 1027, 1028, 1029, 1030, 798, 439, 199, 1060, - 656, 13, 657, 1386, 1049, 1387, 614, 453, 615, 484, - 185, -525, 454, 455, 456, 457, 458, 459, 460, 185, - 1450, 14, 473, 476, 476, 512, 461, 1516, 205, -525, - 1517, 727, 1518, 532, 1203, -784, 462, 1522, 246, 482, - 485, 17, 1010, 911, 151, 185, 1484, 218, 1485, 490, - 151, 864, 151, 542, 916, 19, 559, 1560, 864, 865, - 866, 867, 868, 1561, 1562, 600, 865, 866, 867, 868, - 869, 267, 1282, 1191, 1283, 551, 1357, 869, -556, 1031, - 1033, 1034, 530, 459, 460, 598, 530, 728, 729, 1523, - 975, 1042, 461, 1524, 978, 205, -556, -784, 736, 1102, - 737, 758, -791, 758, 758, 758, 758, 220, 738, 630, - 739, 652, 550, 600, 232, 750, 1220, 751, 554, 1284, - 555, 1285, 1312, 1313, 1314, 1315, 1316, 1317, 1068, 1070, - 818, 819, 1276, 704, 1232, 704, 1332, 264, 247, 820, - 1278, 724, 725, 726, 1286, 766, 1290, 767, 261, 1291, - 1292, 1293, 1294, 1295, 1296, 1297, 1298, 270, 1436, 1302, - 777, 330, 778, 1206, 1207, 1208, 1307, 151, 435, 271, - 867, 868, 435, 172, 272, 274, 435, 133, 957, 869, - 435, 340, 167, 958, 435, 741, 742, 275, 435, 188, - 343, 344, 435, 196, 350, 959, 435, 1463, 1197, 1341, - 1225, 1226, 1227, 351, 1201, 173, 789, 352, 790, 1318, - 803, 354, 804, 185, 1319, 1320, 1321, 1322, 1323, 1324, - 1325, 355, 776, 815, 357, 1378, 174, 359, 1326, 776, - 362, 816, 817, 818, 819, 732, 960, 1148, 1149, 1116, - 366, 1117, 820, 768, 1324, 1325, 1150, 367, 961, 704, - 369, 371, 962, 1326, 372, 598, 598, 598, 598, 736, - 777, 1118, 1155, 1397, 375, 465, 175, 1198, 376, 777, - 963, 1303, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, - 176, 1412, 378, 324, 324, 260, 260, 777, 1391, 1304, - 1392, 1444, 985, 1445, 324, 1211, 1390, 407, 757, 379, - 759, 760, 761, 762, 445, 864, 384, 386, 652, 652, - 652, 652, 652, 865, 866, 867, 868, 814, 1453, 408, - 1454, 1444, 984, 1486, 869, 652, 395, 378, 1036, 1497, - 758, 758, 390, 394, 409, 97, 398, 1254, 881, 413, - 399, 177, 884, 1255, 400, 1545, 887, 1546, 446, 1554, - 890, 1555, 1256, 447, 893, 1013, 402, 403, 896, 448, - 1257, 100, 899, 185,-32768, 185, 902, 404, 421, 1016, - 405, 1258, 816, 817, 818, 819, 484, 417, 704, 419, - 420, 1259, 423, 820, 151, 1344, 410, 926, 442, 926, - 928, 929, 151, 905, 440, 910, 1260, 947, 1448, 922, - 443, 559, 926, 462, 956, 1534, 482, 1489, 467, 1299, - 185, 535, 468, 1050, 536, 469, 532, 486, 1053, 1054, - 532, 1113, 496, 17, 537, 513, 521, 533, 973, 246, - 995, 995, 246, 547, 538, 539, 151, 548, 151, 1004, - 969, 556, 563, 559, 451, 565, 994, 994, 1365, 267, - 1011, 1012, 924, 570, 540,-32768, 452, 578, 583, 815, - 931, 602, 1348, 865, 866, 867, 868, 816, 817, 818, - 819, 598, 598, 579, 869, 580, 330, 330, 820, 1358, - 598, 598, 598, 598, 598, 598, 581, 330, 461, 699, - 453, 712, 610, 611, 445, 454, 455, 456, 457, 458, - 459, 460, 612, 324, 1001, 1318, 1003, 714, 718, 461, - 1319, 1320, 1321, 1322, 1323, 1324, 1325, 652, 720, 731, - 598, 733, 734, 1373, 1326, 735, 744, 1400, 749, 652, - 652, 652, 652, 652, 652, 745, 746, 752, 446, 747, - 1346, 755, 1134, 447, 1347, 1071, 763, 764, 765,-32768, - 770, 769, 1077, 1078, 984, 1080, 1081, 771, 1083, 1084, - 781, 1086, 1087, 784, 1089, 1090, 772, 1092, 1093, 787, - 1095, 1096, 185, 1098, 1099, 1107, 788, 785, 704, 815, - 792, 794, 793, 795, 801, 1409, 1135, 816, 817, 818, - 819, 1136, 802, 805, 806, 1504, 807, 1137, 820, 813, - 828, 947, 910, 947, 947, 947, 947, 947, 947, 447, - 827, 835, 1318, 808, 822, 559, 559, 1319, 1320, 1321, - 1322, 1323, 1324, 1325, 151, 229, 834, 847, 1179, 849, - 850, 1326, 836, 90, 451, 912, 851, 852, 853, 815, - 1442, 854, 855, 856, 871, 872, 452, 816, 817, 818, - 819, 879, 1190, 880, 864, 92, 339, 1274, 820, 932, - 953, 1024, 865, 866, 867, 868, 1305, 882, 883, 885, - 96, 97, 918, 869, 886, 974, 888, 1420, 976, 998, - 453, 889, 1140, 1466, 1467, 891, 892, 1428, 457, 458, - 459, 460, 1160, 894, 1141, 895, 330, 100, 897, 461, - 451, 913, 898, 900, 572, 573, 1005, 901, 949, 1488, - 950, 820, 452, 1037, 1105, 1039, 1212, 1040, 1041, 1043, - 1214, 869, 104, 1044, 1557, 1076, 1104, 1079, 1142, 1082, - 1109, 479, 1085, 1143, 1144, 1145, 1146, 1147, 1148, 1149, - 1088, 652, 1091, 1094, 1097, 1100,-32768, 1150, 1108, 1233, - 1114, 1121, 1122, 837, 457, 458, 459, 460, 838, 839, - 840, 841, 842, 843, 844, 461,-32768, 1123, 130, 1125, - 185, 130, 630, 1152, 1322, 1323, 1324, 1325, -791, 130, - 1156, 1157, 151, 130, 130, 1326, 130, 151, 1159, 1177, - 130, 947, 1178, 1182, 130, 130, 1184, 130, 1187, 947, - 910, 1188, 1189, 947, 1192, 947, 1194, 595, 947, 947, - 947, 947, 947, 947, 947, 947, 1196, 1199, 947, 1200, - 1231, 1202, 151, 1263, 1204, 947, 1205, 1209, 1213, 1217, - 445, 1219, 1221, 649, 229, 229, 229, 229, 229, 229, - 1222, 1223, 1224, 1228, 1230, 1237, 1238, 1239, 1240, 130, - 1269, 1241, 1242, 1243, 185, 1272, 1318, 1244, 1245, 1246, - 1343, 1247,-32768,-32768, 1322, 1323, 1324, 1325, 1248, 1333, - 1249, 1336, 1250, 1251, 446, 1326, 1398, 1399, 1265, 447, - 1252, 1266, 1268, 1270, 1335, 448, 1353, 1271, 1275, 1150, - 1356, 1329, 1281, 1306, 1309, 449, 1331, 1310, 1311, 130, - 1570, 1327, 130, 130, 1345, 1349, 130, 130, 1134, 130, - 130, 1350, 1351, 130, 1441, 1364, 1352, 130, 130, 1366, - 1354, 130, 1355, 130, 130, 130, 1136, 1359, 1360, 185, - 130, 130, 1361, 258, 1363, 228, 1371, 229, 236, 237, - 238, 239, 240, 241, 242, 1375, 130, 1380, 1379, 1382, - 1377, 1389, 1135, 257, 1393, 947, 1394, 1136, 1395, 910, - 1326, 1413, 1418,-32768, 1419, 130, 1526, 1421, 130, 1437, - 451, 1422, 1423, 1439, 130, 229, 1427, 595, 595, 595, - 595, 1446, 452, 1431, 229, 229, 229, 229, 229, 229, - 229, 229, 1432, 229, 1549, 1549, 1433, 1434, 1451, 1452, - 1457, 1462, 1479, 1482, 1483, 1493, 1494, 324, 1469, 1501, - 1502, 1505, 130, 1542, 1503, 1510, 453, 1140, 1536, 1565, - 130, 454, 455, 456, 457, 458, 459, 460, 1556, 1141, - 649, 649, 649, 649, 649, 461, 130, 185, 1566, 130, - 130, 1564, 1571, 1567, 1575, 1576, 217, 649, 1140, 743, - 514, 361, 968, 411, 1181, 248, 952, 947, 477, 1449, - 1141, 925, 927,-32768, 1180, 1308, 1509, 910, 1532, 429, - 1447, 1146, 1147, 1148, 1149, 1492, 1541, 1515, 1563, 997, - 996, 955, 1150, 210, 151, 349, 489, 704, 1186, 704, - 187, 389, 782, 151, 1142, 1465, 1527, 1551, 479, 383, - 1464, 1461, 1146, 1147, 1148, 1149, 259, 1550, 130, 130, - 1185, 215, 1558, 1150, 515, 1007, 134, 1535, 130, 229, - 1532, 697, 1552, 1559, 130, 1472, 135, 1369, 136, 1568, - 1215, 708, 130, 137, 698, 428, 256, 130, 915, 1496, - 138, 0, 139, 130, 130, 140, 445, 0, 0, 130, - 1264, 130, 1460, 0, 141, 130, 0, 0, 0, 0, - 0, 142, 0, 0, -314, 0, 0, 0, 1533, 574, - 0, 0, 0, 0, 0, 1521, 0, 0, 0, 0, - 0, 143, 0, 0, 0, 0, 0, 0, 144, 145, - 446, 0, 0, 595, 595, 447, 0, 146, 0, 0, - 330, 448, 595, 595, 595, 595, 595, 595, 130, 0, - 0, 0, 596, 0, 0, 0, 0, 0, 0, 0, - 1533, 0, 1569, 0, 0, 0, 429, 1521, 0, 0, - 0, 0, 130, 0, 130, 89, 0, 0, 650, 649, - 0, 0, 595, 0, 0, 0, 0, 0, 0, 0, - 0, 649, 649, 649, 649, 649, 649, 444, 0, 182, - 0, 0, 445, 0, 0, 90, 130, 0, 0, 0, - 0, 0, 91, 0, 0, 0, 0, 429, 0, 0, - 0, 0, 0, 0, 0, 0, 451, 92, 0, 0, - 0, 0, 0, 0, 0, 93, 94, 0, 452, 0, - 0, 95, 96, 97, 0, 0, 446, 0, 0, 0, - 0, 447, 130, 0, 98, 0, 0, 448, 0, 0, - 0, 130, 99, 0, 0, 0, 0, 449, 130, 100, - 0, 0, 453, 450, 101, 0, 102, 103,-32768,-32768, - 457, 458, 459, 460, 0, 0, 0, 0, 130, 0, - 0, 461, 0, 0, 104, 105, 0, 106, 0, 107, - 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, - 109, 110, 111, 0, 112, 0, 0, 0, 113, 0, - 114, 115, 596, 596, 596, 596, 0, 0, 0, 116, - 117, 118, 0, 183, 0, 0, 0, 0, 119, 0, - 120, 0, 451, 0, 121, 0, 0, 122, 0, 0, - 123, 124, 0, 0, 452, 0, 0, 125, 126, 0, - 0, 127, 1133, 0, 0, 0, 128, 1134, 129, 0, - 0, 0, 0, 0, 0, 650, 650, 650, 650, 650, - 0, 0, 0, 0, 0, 0, 0, 0, 453, 0, - 0, 906, 650, 454, 455, 456, 457, 458, 459, 460, - 0, 0, 130, 649, 130, 0, 0, 461, 0, 0, - 1061, 1135, 0, 0, 0, 130, 1136, 130, 0, 0, - 0, 0, 1137, 130, 0, 0, 130, 0, 130, 130, - 130, 130, 1138, 0, 0, 0, 0, 0, 1139, 0, - 130, 130, 0, 130, 0, 0, 0, 0, 1133, 130, - 0, 0, 0, 1134, 0, 130, 0, 0, 0, 130, - 0, 0, 0, 0, 944, 0, 0, 0, 130, 130, - 130, 130, 0, 0, 0, 130, 0, 130, 130, 0, - 0, 0, 130, 0, 0, 483, 0, 0, 429, 130, - 130, 0, 0, 0, 0, 0, 0, 1135, 0, 0, - 0, 0, 1136, 0, 0, 0, 0, 1140, 1137, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1138, 1141, - 0, 0, 0, 0, 1139, 429, 0, 0, 0, 0, - 0, 0, 1133, 0, 0, 0, 0, 1134, 596, 596, - 0, 0, 0, 0, 0, 0, 0, 596, 596, 596, - 596, 596, 596, 1142, 0, 0, 0, 0, 1143, 1144, - 1145, 1146, 1147, 1148, 1149, 0, 0, 0, 0, 0, - 0, 0, 1150, 0, 429, 1151, 0, 429, 0, 0, - 0, 1135, 0, 0, 650, 0, 1136, 596, 0, 0, - 0, 0, 1137, 1140, 0, 0, 650, 650, 650, 650, - 650, 650, 1138, 415, 0, 1141, 0, 0, 1139, 0, - 0, 130, 0, 0, 130, 0, 0, 130, 430, 0, - 0, 431, 0, 432, 433, 434, 438, 0, 0, 0, - 0, 429, 0, 444, 0, 0, 0, 0, 445, 1142, - 0, 0, 0, 0, 1143, 1144, 1145, 1146, 1147, 1148, - 1149, 0, 153, 0, 130, 130, 0, 0, 1150, 0, - 0, 1277, 0, 130, 154, 0, 0, 130, 944, 155, - 944, 944, 944, 944, 944, 944, 156, 1140, 157, 0, - 0, 158, 446, 0, 0, 0, 0, 447, 549, 1141, - 159, 130, 1175, 448, 0, 0, 0, 160, 0, 0, - 161, 0, 0, 449, 0, 0, 564, 0, 0, 450, - 0, 0, 0, 0, 0, 0, 0, 162, 163, 0, - 0, 0, 0, 1142, 164, 165, 0, 0, 1143, 1144, - 1145, 1146, 1147, 1148, 1149, 607, 0, 0, 0, 0, - 0, 0, 1150, 444, 0, 1396, 0, 0, 445, 0, - 0, 0, 0, 0, 0, 0, 632, 0, 0, 0, - 658, 0, 662, 0, 0, 666, 670, 674, 678, 682, - 686, 690, 694, 0, 696, 0, 0, 0, 451, 0, - 0, 429, 0, 0, 0, 0, 0, 0, 0, 0, - 452, 0, 446, 0, 0, 0, 0, 447, 0, 0, - 0, 0, 0, 448, 0, 0, 0, 0, 650, 130, - 0, 130, 0, 449, 0, 0, 0, 0, 0, 450, - 0, 130, 0, 0, 453, 0, 130, 0, 0, 454, - 455, 456, 457, 458, 459, 460, 0, 444, 0, 429, - 0, 0, 445, 461, 0, 0, 1553, 0, 0, 0, - 0, 0, 483, 0, 0, 429, 0, 0, 944, 0, - 0, 130, 0, 0, 0, 0, 944, 0, 0, 0, - 944, 0, 944, 946, 0, 944, 944, 944, 944, 944, - 944, 944, 944, 0, 0, 944, 446, 0, 451, 0, - 0, 447, 944, 130, 0, 0, 0, 448, 0, 130, - 452, 1175, 1175, 1175, 1175, 1175, 1175, 449, 429, 0, - 0, 0, 0, 450, 0, 607, 0, 607, 607, 0, - 0, 0, 0, 0, 846, 429, 0, 1342, 0, 0, - 0, 0, 0, 0, 453, 0, 429, 0, 0, 454, - 455, 456, 457, 458, 459, 460, 0, 0, 0, 0, - 0, 0, 0, 461, -586, 0, 0, 0, 0, 862, - 0, 0, 0, 0, 0, 0, 0, 0, 130, 0, - 0, 0, 0, 878, 0, 0, 0, 438, 0, 0, - 0, 438, 451, 0, 0, 438, 429, 0, 0, 438, - 0, 0, 429, 438, 452, 0, 0, 438, 0, 0, - 0, 438, 0, 0, 1175, 438, 0, 0, 0, 0, - 0, 0, 0, 0, 946, 0, 0, 0, 0, 0, - 0, 0, 944, 0, 0, 0, 0, 0, 453, 0, - 0, 429, 0, 454, 455, 456, 457, 458, 459, 460, - 0, 1134, 1175, 0, 0, 0, 0, 461, -585, 0, - 0, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 0, - 1175, 0, 0, 0, 0, 0, 0, 0, 0, 429, - 0, 0, 0, 0, 0, 0, 130, 946, 0, 946, - 946, 946, 946, 946, 946, 1135, 429, 429, 0, 0, - 1136, 0, 0, 0, 429, 0, 1137, 0, 130, 0, - 0, 946, 0, 0, 0, 0, 1015, 444, 0, 0, - 1537, 0, 445, 0, 0, 0, 0, 0, 0, 0, - 607, 0, 0, 130, 944, 0, 130, 0, 130, 429, - 429, 0, 130, 0, 0, 0, 1035, 0, 1538, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 429, - 0, 429, 0, 0, 0, 429, 446, 0, 597, 0, - 0, 447, 0, 0, 0, 0, 0, 448, 607, 0, - 0, 0, 0, 0, 0, 0, 0, 449, 0, 0, - 0, 1140, 0, 450, 651, 0, 1175, 0, 0, 0, - 0, 0, 0, 1141, 0, 444, 0, 0, 0, 0, - 445, 0, 0, 0, 0, 0, 0, 130, 0, 0, - 0, 0, 0, 0, 1539, 1101, 0, 0, 946, 0, - 0, 0, 0, 0, 0, 0, 0, 1142, 0, 0, - 0, 0, 0,-32768,-32768, 1146, 1147, 1148, 1149, 0, - 0, 0, 0, 0, 446, 0, 1150, 0, 0, 447, - 0, 0, 451, 0, 0, 448, 0, 0, 0, 130, - 0, 130, 0, 0, 452, 449, 0, 946, 0, 0, - 0, 450, 0, 0, 0, 946, 946, 0, 0, 946, - 0, 946, 0, 0, 946, 946, 946, 946, 946, 946, - 946, 946, 0, 0, 946, 0, 0, 0, 453, 0, - 0, 946, 0, 454, 455, 456, 457, 458, 459, 460, - 946, 946, 946, 946, 946, 946, 0, 461, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 597, 597, - 597, 597, 607, 607, 607, 0, 0, 0, 0, 0, - 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 452, 0, 0, 0, 0, 0, 0, 1216, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 607, - 607, 607, 444, 946, 783, 0, 0, 445, 0, 0, - 0, 651, 651, 651, 651, 651, 453, 0, 0, 0, - 0, 454, 455, 456, 457, 458, 459, 460, 651, 903, - 0, 0, 0, 0, 904, 461, 0, 0, 0, 0, - 0, 0, 0, 946, 0, 0, 0, 0, 0, 444, - 0, 446, 0, 946, 445, 0, 447, 0, 0, 946, - 0, 946, 448, 0, 444, 0, 0, 0, 0, 445, - 0, 0, 449, 0, 0, 0, 0, 0, 450, 0, - 0, 946, 0, 0, 0, 0, 0, 0, 0, 0, - 946, 946, 946, 946, 946, 946, 946, 946, 446, 946, - 945, 0, 0, 447, 0, 0, 0, 833, 0, 448, - 0, 0, 0, 446, 0, 0, 0, 0, 447, 449, - 0, 0, 0, 0, 448, 450, 0, 0, 0, 0, - 0, 0, 0, 0, 449, 0, 946, 0, 0, 0, - 450, 0, 0, 0, 0, 0, 0, 451, 0, 0, - 0, 0, 0, 0, 946, 0, 0, 0, 0, 452, - 0, 946, 0, 946, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 597, 597, 0, 0, 0, 0, - 0, 0, 0, 597, 597, 597, 597, 597, 597, 0, - 0, 0, 0, 453, 451, 0, 0, 0, 454, 455, - 456, 457, 458, 459, 460, 0, 452, 0, 1374, 451, - 0, 0, 461, 0, 0, 0, 946, 0, 946, 0, - 651, 452, 0, 597, 0, 946, 0, 0, 0, 0, - 0, 0, 651, 651, 651, 651, 651, 651, 0, 0, - 453, 1074, 0, 0, 0, 454, 455, 456, 457, 458, - 459, 460, 0, 0, 0, 453, 0, 0, 1253, 461, - 454, 455, 456, 457, 458, 459, 460, 0, 0, 0, - 0, 0, 0, 0, 461, 0, 0, 0, 0, 0, - 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 277, 278, 0, - 0, 0, 0, 0, 945, 0, 945, 945, 945, 945, - 945, 945, 0, 90, 523, 0, 0, 0, 0, 0, - 524, 0, 0, 0, 0, 0, 0, 525, 1176, 0, - 0, 0, 0, 0, 1133, 92, 1381, 0, 0, 1134, - 0, 0, 0, 93, 94, 0, 0, 0, 0, 95, - 96, 97, 0, 289, 0, 290, 0, 0, 0, 0, - 526, 0, 98, 0, 0, 0, 0, 0, 0, 0, - 99, 0, 0, 0, 0, 0, 0, 100, 0, 0, - 0, 0, 101, 1135, 102, 103, 0, 0, 1136, 0, - 0, 0, 0, 0, 1137, 0, 300, 0, 0, 0, - 0, 0, 104, 105, 1138, 106, 0, 107, 0, 0, - 1139, 0, 0, 0, 0, 108, 0, 0, 109, 110, - 111, 0, 112, 0, 1508, 0, 113, 0, 114, 115, - 0, 1134, 0, 0, 0, 0, 0, 116, 117, 118, - 0, 0, 0, 1529, 651, 1236, 119, 0, 120, 0, - 0, 0, 121, 0, 0, 122, 0, 0, 123, 124, - 0, 0, 0, 0, 0, 125, 126, 0, 0, 127, - 0, 0, 0, 0, 128, 1135, 129, 0, 1508, 1140, - 1136, 0, 0, 0, 0, 0, 1137, 0, 0, 0, - 0, 1141, 0, 0, 945, 0, 1138, 0, 0, 0, - 527, 0, 945, 1280, 444, 0, 945, 0, 945, 445, - 0, 945, 945, 945, 945, 945, 945, 945, 945, 1133, - 0, 945, 0, 0, 1134, 1142, 0, 0, 945, 0, - 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1176, 1176, 1176, - 1176, 1176, 1176, 0, 1150, 0, 0, 0, 0, 0, - 0, 0, 0, 446, 0, 0, 0, 0, 447, 0, - 0, 0, 0, 0, 448, 0, 0, 0, 1135, 0, - 0, 1140, 0, 1136, 449, 0, 0, 0, 0, 1137, - 450, 0, 0, 1141, 0, 0, 0, 0, 0, 1138, - 0, 0, 0, 0, 0, 1139, 0, 0, 0, 0, - 1362, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1142, 0, 0, - 0, 0, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 0, - 0, 0, 0, 0, 0, 0, 1150, 0, 0, 0, - 1176, 0, 0, 0, 0, 0, 0, 0, 0, 451, - 1280, 0, 0, 0, 0, 0, 1280, 0, 945, 0, - 0, 452, 0, 0, 1140, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1141, 0, 1176, 0, - 0, 0, 0, 0, 0, 0, 0, 1176, 1176, 1176, - 1176, 1176, 1176, 1176, 1176, 453, 1176, 0, 0, 0, - 454, 455, 456, 457, 458, 459, 460, 0, 0, 0, - 1142, 0, 0, 0, 461, 1143, 1144, 1145, 1146, 1147, - 1148, 1149, 0, 0, 0, 0, 0, 0, 0, 1150, - 0, 0, 0, 1435, 0, 0, 0, 0, 0, 0, - 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1280, 0, 276, 277, 278, 0, 0, 1280, 0, - 945, 0, 0, 0, 182, 279, 280, 281, 282, 0, - 90, 283, 0, 0, 0, 0, 0, 284, 0, 0, - 0, 285, 286, 0, 287, 0, 0, 0, 0, 0, - 0, 0, 92, 0, 0, 0, 288, 0, 0, 0, - 93, 94, 0, 0, 0, 0, 95, 96, 97, 0, - 289, 0, 290, 1280, 291, 1280, 292, 293, 0, 98, - 0, 0, 1176, 0, 294, 0, 0, 99, 0, 0, - 0, 0, 0, 0, 100, 0, 0, 295, 0, 296, - 297, 102, 103, 0, 0, 0, 298, 0, 0, 0, - 299, 0, 0, 300, 0, 0, 0, 0, 0, 104, - 105, 301, 106, 302, 303, 0, 0, 0, 0, 0, - 0, 0, 108, 0, 0, 109, 110, 111, 0, 112, - 0, 0, 0, 113, 0, 114, 115, 0, 0, 0, - 0, 0, 0, 0, 116, 117, 118, 0, 183, 0, - 0, 0, 0, 119, 0, 120, 0, 0, 0, 121, - 0, 0, 122, 304, 0, 123, 124, 0, 0, 0, - 0, 0, 125, 126, 0, 0, 127, 0, 0, 0, - 0, 128, 0, 305, 205, 306, 267, 307, 308, 89, - 0, 0, 0, 0, 309, 705, 0, 311, 312, 313, - 0, 0, 276, 277, 278, 0, 314, 706, 0, 0, - 0, 0, 0, 182, 279, 280, 281, 282, 0, 90, - 283, 0, 0, 0, 0, 0, 284, 0, 0, 0, - 285, 286, 0, 287, 0, 0, 0, 0, 0, 0, - 0, 92, 0, 0, 0, 288, 0, 0, 0, 93, - 94, 0, 0, 0, 0, 95, 96, 97, 0, 289, - 0, 290, 0, 291, 0, 292, 293, 0, 98, 0, - 0, 0, 0, 294, 0, 0, 99, 0, 0, 0, - 0, 0, 0, 100, 0, 0, 295, 0, 296, 297, - 102, 103, 0, 0, 0, 298, 0, 0, 0, 299, - 0, 0, 300, 0, 0, 0, 0, 0, 104, 105, - 301, 106, 302, 303, 0, 0, 0, 0, 0, 0, - 0, 108, 0, 0, 109, 110, 111, 0, 112, 0, - 0, 0, 113, 0, 114, 115, 0, 0, 0, 0, - 0, 0, 0, 116, 117, 118, 0, 183, 0, 0, - 0, 0, 119, 0, 120, 0, 0, 0, 121, 0, - 0, 122, 304, 0, 123, 124, 0, 0, 0, 0, - 0, 125, 126, 0, 0, 127, 0, 0, 0, 0, - 128, 0, 305, 205, 306, 267, 307, 308, 89, 0, - 0, 0, 0, 309, 0, 0, 311, 312, 313, 0, - 0, 276, 277, 278, 0, 314, 1032, 0, 0, 0, - 0, 0, 182, 279, 280, 281, 282, 0, 90, 283, - 0, 0, 0, 0, 0, 284, 0, 0, 0, 285, - 286, 0, 287, 0, 0, 0, 0, 0, 0, 0, - 92, 0, 0, 0, 288, 0, 0, 0, 93, 94, - 0, 0, 0, 0, 95, 96, 97, 0, 289, 0, - 290, 0, 291, 0, 292, 293, 0, 98, 0, 0, - 0, 0, 294, 0, 0, 99, 0, 0, 0, 0, - 0, 0, 100, 0, 0, 295, 0, 296, 297, 102, - 103, 0, 0, 0, 298, 0, 0, 0, 299, 0, - 0, 300, 0, 0, 0, 0, 0, 104, 105, 301, - 106, 302, 303, 0, 0, 0, 0, 0, 0, 0, - 108, 0, 0, 109, 110, 111, 0, 112, 0, 0, - 0, 113, 0, 114, 115, 0, 0, 0, 0, 0, - 0, 0, 116, 117, 118, 0, 183, 0, 0, 0, - 0, 119, 0, 120, 0, 0, 0, 121, 0, 0, - 122, 304, 0, 123, 124, 0, 0, 0, 0, 0, - 125, 126, 0, 0, 127, 0, 0, 0, 0, 128, - 0, 305, 205, 306, 267, 307, 308, 89, 0, 0, - 0, 0, 309, 0, 0, 311, 312, 313, 0, 0, - 1161, 277, 278, 0, 314, 1069, 0, 0, 0, 0, - 0, 0, 1162, 1163, 1164, 1165, 0, 90, 283, 0, - 0, 0, 0, 0, 284, 0, 0, 0, 0, 0, - 0, 287, 0, 0, 0, 0, 0, 0, 0, 92, - 0, 0, 0, 288, 0, 0, 0, 93, 94, 0, - 0, 0, 0, 95, 96, 97, 0, 289, 0, 290, - 0, 0, 0, 1166, 293, 0, 98, 0, 0, 0, - 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, - 0, 100, 0, 0, 0, 0, 296, 297, 102, 103, - 0, 0, 0, 0, 0, 0, 0, 1167, 0, 0, - 300, 0, 0, 0, 0, 0, 104, 105, 301, 106, - 302, 303, 0, 0, 0, 0, 0, 0, 0, 108, - 0, 0, 109, 110, 111, 0, 112, 0, 0, 0, - 113, 0, 114, 115, 0, 0, 0, 0, 0, 0, - 0, 116, 117, 118, 0, 0, 0, 0, 0, 0, - 119, 0, 120, 0, 0, 0, 121, 0, 0, 122, - 304, 0, 123, 124, 0, 0, 0, 0, 0, 125, - 126, 0, 0, 127, 0, 89, 0, 0, 128, 0, - 305, 205, 1168, 267, 307, 308, 0, 0, 934, 277, - 278, 1169, 0, 0, 1170, 1171, 1172, 0, 0, 0, - 0, 0, 0, 1173, 1410, 90, 283, 0, 0, 0, - 0, 0, 284, 0, 0, 0, 0, 0, 0, 287, - 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, - 0, 288, 0, 0, 0, 93, 94, 0, 0, 0, - 0, 95, 96, 97, 0, 289, 0, 290, 0, 935, - 0, 936, 293, 0, 98, 0, 0, 0, 0, 0, - 0, 0, 99, 0, 0, 0, 0, 0, 0, 100, - 0, 0, 0, 0, 296, 297, 102, 103, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, - 0, 0, 0, 0, 104, 105, 301, 106, 302, 303, - 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, - 109, 110, 111, 0, 112, 0, 0, 0, 113, 0, - 114, 115, 0, 0, 0, 0, 0, 0, 0, 116, - 117, 118, 0, 0, 0, 0, 0, 0, 119, 0, - 120, 0, 0, 0, 121, 0, 0, 122, 304, 0, - 123, 124, 0, 0, 0, 0, 0, 125, 126, 0, - 0, 127, 0, 0, 0, 0, 128, 0, 305, 205, - 937, 267, 307, 308, 0, 89, 0, 0, 0, 938, - 0, 0, 939, 940, 941, 603, 0, 0, 276, 277, - 278, 942, 1300, 0, 0, 0, 0, 0, 0, 182, - 279, 280, 281, 282, 0, 90, 283, 0, 0, 0, - 0, 0, 284, 0, 0, 0, 285, 286, 0, 287, - 0, 0, 604, 0, 0, 0, 0, 92, 0, 0, - 0, 288, 0, 0, 0, 93, 94, 605, 0, 0, - 0, 95, 96, 97, 0, 289, 0, 290, 0, 291, - 0, 292, 293, 0, 98, 0, 0, 0, 0, 294, - 0, 0, 99, 0, 0, 0, 0, 0, 0, 100, - 0, 0, 295, 0, 296, 297, 102, 103, 0, 606, - 0, 298, 0, 0, 0, 299, 0, 0, 300, 0, - 0, 0, 0, 0, 104, 105, 301, 106, 302, 303, - 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, - 109, 110, 111, 0, 112, 0, 0, 0, 113, 0, - 114, 115, 0, 0, 0, 0, 0, 0, 0, 116, - 117, 118, 0, 183, 0, 0, 0, 0, 119, 0, - 120, 0, 0, 0, 121, 0, 0, 122, 304, 0, - 123, 124, 0, 0, 0, 0, 0, 125, 126, 0, - 0, 127, 0, 0, 0, 0, 128, 0, 305, 205, - 306, 267, 307, 308, 0, 89, 0, 0, 0, 309, - 0, 0, 311, 312, 313, 1020, 0, 0, 276, 277, - 278, 314, 0, 0, 0, 0, 0, 0, 0, 182, - 279, 280, 281, 282, 0, 90, 283, 0, 0, 0, - 0, 0, 284, 0, 0, 0, 285, 286, 0, 287, - 0, 0, 604, 0, 0, 0, 0, 92, 0, 0, - 0, 288, 0, 0, 0, 93, 94, 1021, 0, 0, - 0, 95, 96, 97, 0, 289, 0, 290, 0, 291, - 0, 292, 293, 0, 98, 0, 0, 0, 0, 294, - 0, 0, 99, 0, 0, 0, 0, 0, 0, 100, - 0, 0, 295, 0, 296, 297, 102, 103, 0, 1022, - 0, 298, 0, 0, 0, 299, 0, 0, 300, 0, - 0, 0, 0, 0, 104, 105, 301, 106, 302, 303, - 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, - 109, 110, 111, 0, 112, 0, 0, 0, 113, 0, - 114, 115, 0, 0, 0, 0, 0, 0, 0, 116, - 117, 118, 0, 183, 0, 0, 0, 0, 119, 0, - 120, 0, 0, 0, 121, 0, 0, 122, 304, 0, - 123, 124, 0, 0, 0, 0, 0, 125, 126, 0, - 0, 127, 0, 0, 0, 0, 128, 0, 305, 205, - 306, 267, 307, 308, 0, 89, 0, 0, 0, 309, - 0, 0, 311, 312, 313, 1057, 0, 0, 276, 277, - 278, 314, 0, 0, 0, 0, 0, 0, 0, 182, - 279, 280, 281, 282, 0, 90, 283, 0, 0, 0, - 0, 0, 284, 0, 0, 0, 285, 286, 0, 287, - 0, 0, 604, 0, 0, 0, 0, 92, 0, 0, - 0, 288, 0, 0, 0, 93, 94, 1058, 0, 0, - 0, 95, 96, 97, 0, 289, 0, 290, 0, 291, - 0, 292, 293, 0, 98, 0, 0, 0, 0, 294, - 0, 0, 99, 0, 0, 0, 0, 0, 0, 100, - 0, 0, 295, 0, 296, 297, 102, 103, 0, 1059, - 0, 298, 0, 0, 0, 299, 0, 0, 300, 0, - 0, 0, 0, 0, 104, 105, 301, 106, 302, 303, - 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, - 109, 110, 111, 0, 112, 0, 0, 0, 113, 0, - 114, 115, 0, 0, 0, 0, 0, 0, 0, 116, - 117, 118, 0, 183, 0, 0, 0, 0, 119, 0, - 120, 0, 0, 0, 121, 0, 0, 122, 304, 0, - 123, 124, 0, 0, 0, 0, 0, 125, 126, 0, - 0, 127, 89, 0, 0, 0, 128, 0, 305, 205, - 306, 267, 307, 308, 0, 276, 277, 278, 0, 309, - 0, 0, 311, 312, 313, 0, 182, 279, 280, 281, - 282, 314, 90, 283, 0, 0, 0, 0, 0, 284, - 0, 0, 0, 285, 286, 0, 287, 0, 0, 0, - 0, 0, 0, 0, 92, 0, 0, 0, 288, 0, - 0, 0, 93, 94, 0, 0, 0, 0, 95, 96, - 97, 0, 289, 0, 290, 0, 291, 0, 292, 293, - 0, 98, 0, 0, 0, 0, 294, 0, 0, 99, - 0, 0, 0, 0, 0, 0, 100, 0, 0, 295, - 0, 296, 297, 102, 103, 0, 0, 0, 298, 0, - 0, 0, 299, 0, 0, 300, 0, 0, 0, 0, - 0, 104, 105, 301, 106, 302, 303, 0, 0, 0, - 0, 0, 0, 0, 108, 0, 0, 109, 110, 111, - 0, 112, 0, 0, 0, 113, 0, 114, 115, 0, - 0, 0, 0, 0, 0, 0, 116, 117, 118, 0, - 183, 0, 0, 0, 0, 119, 0, 120, 0, 0, - 0, 121, 0, 0, 122, 304, 0, 123, 124, 0, - 0, 0, 0, 0, 125, 126, 0, 0, 127, 89, - 0, 667, 0, 128, 668, 305, 205, 306, 267, 307, - 308, 0, 276, 277, 278, 0, 309, 310, 0, 311, - 312, 313, 0, 182, 279, 280, 281, 282, 314, 90, - 283, 0, 0, 0, 0, 0, 284, 0, 0, 0, - 285, 286, 0, 287, 0, 0, 0, 0, 0, 0, - 0, 92, 0, 0, 0, 288, 0, 0, 0, 93, - 94, 0, 0, 0, 0, 95, 96, 97, 0, 289, - 0, 290, 0, 291, 0, 0, 293, 0, 98, 0, - 0, 0, 0, 294, 0, 0, 99, 0, 0, 0, - 0, 0, 0, 100, 0, 0, 295, 0, 296, 297, - 102, 103, 0, 0, 0, 298, 0, 0, 0, 299, - 0, 0, 300, 0, 0, 0, 0, 0, 104, 105, - 301, 106, 302, 303, 0, 0, 0, 0, 0, 0, - 0, 108, 0, 0, 109, 110, 111, 0, 112, 0, - 0, 0, 113, 0, 114, 115, 0, 0, 0, 0, - 0, 0, 0, 116, 117, 118, 0, 183, 0, 0, - 0, 0, 119, 0, 120, 0, 0, 0, 121, 0, - 0, 122, 304, 0, 123, 124, 0, 0, 0, 0, - 0, 125, 126, 0, 0, 127, 89, 0, 671, 0, - 128, 672, 305, 205, 306, 267, 307, 308, 0, 276, - 277, 278, 0, 309, 0, 0, 311, 312, 313, 0, - 182, 279, 280, 281, 282, 669, 90, 283, 0, 0, - 0, 0, 0, 284, 0, 0, 0, 285, 286, 0, - 287, 0, 0, 0, 0, 0, 0, 0, 92, 0, - 0, 0, 288, 0, 0, 0, 93, 94, 0, 0, - 0, 0, 95, 96, 97, 0, 289, 0, 290, 0, - 291, 0, 0, 293, 0, 98, 0, 0, 0, 0, - 294, 0, 0, 99, 0, 0, 0, 0, 0, 0, - 100, 0, 0, 295, 0, 296, 297, 102, 103, 0, - 0, 0, 298, 0, 0, 0, 299, 0, 0, 300, - 0, 0, 0, 0, 0, 104, 105, 301, 106, 302, - 303, 0, 0, 0, 0, 0, 0, 0, 108, 0, - 0, 109, 110, 111, 0, 112, 0, 0, 0, 113, - 0, 114, 115, 0, 0, 0, 0, 0, 0, 0, - 116, 117, 118, 0, 183, 0, 0, 0, 0, 119, - 0, 120, 0, 0, 0, 121, 0, 0, 122, 304, - 0, 123, 124, 0, 0, 0, 0, 0, 125, 126, - 0, 0, 127, 89, 0, 675, 0, 128, 676, 305, - 205, 306, 267, 307, 308, 0, 276, 277, 278, 0, - 309, 0, 0, 311, 312, 313, 0, 182, 279, 280, - 281, 282, 673, 90, 283, 0, 0, 0, 0, 0, - 284, 0, 0, 0, 285, 286, 0, 287, 0, 0, - 0, 0, 0, 0, 0, 92, 0, 0, 0, 288, - 0, 0, 0, 93, 94, 0, 0, 0, 0, 95, - 96, 97, 0, 289, 0, 290, 0, 291, 0, 0, - 293, 0, 98, 0, 0, 0, 0, 294, 0, 0, - 99, 0, 0, 0, 0, 0, 0, 100, 0, 0, - 295, 0, 296, 297, 102, 103, 0, 0, 0, 298, - 0, 0, 0, 299, 0, 0, 300, 0, 0, 0, - 0, 0, 104, 105, 301, 106, 302, 303, 0, 0, - 0, 0, 0, 0, 0, 108, 0, 0, 109, 110, - 111, 0, 112, 0, 0, 0, 113, 0, 114, 115, - 0, 0, 0, 0, 0, 0, 0, 116, 117, 118, - 0, 183, 0, 0, 0, 0, 119, 0, 120, 0, - 0, 0, 121, 0, 0, 122, 304, 0, 123, 124, - 0, 0, 0, 0, 0, 125, 126, 0, 0, 127, - 89, 0, 679, 0, 128, 680, 305, 205, 306, 267, - 307, 308, 0, 276, 277, 278, 0, 309, 0, 0, - 311, 312, 313, 0, 182, 279, 280, 281, 282, 677, - 90, 283, 0, 0, 0, 0, 0, 284, 0, 0, - 0, 285, 286, 0, 287, 0, 0, 0, 0, 0, - 0, 0, 92, 0, 0, 0, 288, 0, 0, 0, - 93, 94, 0, 0, 0, 0, 95, 96, 97, 0, - 289, 0, 290, 0, 291, 0, 0, 293, 0, 98, - 0, 0, 0, 0, 294, 0, 0, 99, 0, 0, - 0, 0, 0, 0, 100, 0, 0, 295, 0, 296, - 297, 102, 103, 0, 0, 0, 298, 0, 0, 0, - 299, 0, 0, 300, 0, 0, 0, 0, 0, 104, - 105, 301, 106, 302, 303, 0, 0, 0, 0, 0, - 0, 0, 108, 0, 0, 109, 110, 111, 0, 112, - 0, 0, 0, 113, 0, 114, 115, 0, 0, 0, - 0, 0, 0, 0, 116, 117, 118, 0, 183, 0, - 0, 0, 0, 119, 0, 120, 0, 0, 0, 121, - 0, 0, 122, 304, 0, 123, 124, 0, 0, 0, - 0, 0, 125, 126, 0, 0, 127, 89, 0, 683, - 0, 128, 684, 305, 205, 306, 267, 307, 308, 0, - 276, 277, 278, 0, 309, 0, 0, 311, 312, 313, - 0, 182, 279, 280, 281, 282, 681, 90, 283, 0, - 0, 0, 0, 0, 284, 0, 0, 0, 285, 286, - 0, 287, 0, 0, 0, 0, 0, 0, 0, 92, - 0, 0, 0, 288, 0, 0, 0, 93, 94, 0, - 0, 0, 0, 95, 96, 97, 0, 289, 0, 290, - 0, 291, 0, 0, 293, 0, 98, 0, 0, 0, - 0, 294, 0, 0, 99, 0, 0, 0, 0, 0, - 0, 100, 0, 0, 295, 0, 296, 297, 102, 103, - 0, 0, 0, 298, 0, 0, 0, 299, 0, 0, - 300, 0, 0, 0, 0, 0, 104, 105, 301, 106, - 302, 303, 0, 0, 0, 0, 0, 0, 0, 108, - 0, 0, 109, 110, 111, 0, 112, 0, 0, 0, - 113, 0, 114, 115, 0, 0, 0, 0, 0, 0, - 0, 116, 117, 118, 0, 183, 0, 0, 0, 0, - 119, 0, 120, 0, 0, 0, 121, 0, 0, 122, - 304, 0, 123, 124, 0, 0, 0, 0, 0, 125, - 126, 0, 0, 127, 89, 0, 687, 0, 128, 688, - 305, 205, 306, 267, 307, 308, 0, 276, 277, 278, - 0, 309, 0, 0, 311, 312, 313, 0, 182, 279, - 280, 281, 282, 685, 90, 283, 0, 0, 0, 0, - 0, 284, 0, 0, 0, 285, 286, 0, 287, 0, - 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, - 288, 0, 0, 0, 93, 94, 0, 0, 0, 0, - 95, 96, 97, 0, 289, 0, 290, 0, 291, 0, - 0, 293, 0, 98, 0, 0, 0, 0, 294, 0, - 0, 99, 0, 0, 0, 0, 0, 0, 100, 0, - 0, 295, 0, 296, 297, 102, 103, 0, 0, 0, - 298, 0, 0, 0, 299, 0, 0, 300, 0, 0, - 0, 0, 0, 104, 105, 301, 106, 302, 303, 0, - 0, 0, 0, 0, 0, 0, 108, 0, 0, 109, - 110, 111, 0, 112, 0, 0, 0, 113, 0, 114, - 115, 0, 0, 0, 0, 0, 0, 0, 116, 117, - 118, 0, 183, 0, 0, 0, 0, 119, 0, 120, - 0, 0, 0, 121, 0, 0, 122, 304, 0, 123, - 124, 0, 0, 0, 0, 0, 125, 126, 0, 0, - 127, 89, 0, 691, 0, 128, 692, 305, 205, 306, - 267, 307, 308, 0, 276, 277, 278, 0, 309, 0, - 0, 311, 312, 313, 0, 182, 279, 280, 281, 282, - 689, 90, 283, 0, 0, 0, 0, 0, 284, 0, - 0, 0, 285, 286, 0, 287, 0, 0, 0, 0, - 0, 0, 0, 92, 0, 0, 0, 288, 0, 0, - 0, 93, 94, 0, 0, 0, 0, 95, 96, 97, - 0, 289, 0, 290, 0, 291, 0, 0, 293, 0, - 98, 0, 0, 0, 0, 294, 0, 0, 99, 0, - 0, 0, 0, 0, 0, 100, 0, 0, 295, 0, - 296, 297, 102, 103, 0, 0, 0, 298, 0, 0, - 0, 299, 0, 0, 300, 0, 0, 0, 0, 0, - 104, 105, 301, 106, 302, 303, 0, 0, 0, 0, - 0, 0, 0, 108, 0, 0, 109, 110, 111, 0, - 112, 0, 0, 0, 113, 0, 114, 115, 0, 0, - 0, 0, 0, 0, 0, 116, 117, 118, 0, 183, - 0, 0, 0, 0, 119, 0, 120, 0, 0, 0, - 121, 0, 0, 122, 304, 0, 123, 124, 0, 0, - 0, 0, 0, 125, 126, 0, 0, 127, 89, 0, - 0, 0, 128, 0, 305, 205, 306, 267, 307, 308, - 0, 276, 277, 278, 0, 309, 0, 0, 311, 312, - 313, 0, 182, 279, 280, 281, 282, 693, 90, 283, - 0, 0, 0, 0, 0, 284, 0, 0, 0, 285, - 286, 0, 287, 0, 0, 604, 0, 0, 0, 0, - 92, 0, 0, 0, 288, 0, 0, 0, 93, 94, - 0, 0, 0, 0, 95, 96, 97, 0, 289, 0, - 290, 0, 291, 0, 292, 293, 0, 98, 0, 0, - 0, 0, 294, 0, 0, 99, 0, 0, 0, 0, - 0, 0, 100, 0, 0, 295, 0, 296, 297, 102, - 103, 0, 0, 0, 298, 0, 0, 0, 299, 0, - 0, 300, 0, 0, 0, 0, 0, 104, 105, 301, - 106, 302, 303, 0, 0, 0, 0, 0, 0, 0, - 108, 0, 0, 109, 110, 111, 0, 112, 0, 0, - 0, 113, 0, 114, 115, 0, 0, 0, 0, 0, - 0, 0, 116, 117, 118, 0, 183, 0, 0, 0, - 0, 119, 0, 120, 0, 0, 0, 121, 0, 0, - 122, 304, 0, 123, 124, 0, 0, 0, 0, 0, - 125, 126, 0, 0, 127, 89, 0, 0, 0, 128, - 0, 305, 205, 306, 267, 307, 308, 0, 276, 277, - 278, 0, 309, 0, 0, 311, 312, 313, 0, 182, - 279, 280, 281, 282, 314, 90, 283, 0, 0, 0, - 0, 0, 284, 0, 0, 0, 285, 286, 0, 287, - 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, - 0, 288, 0, 0, 0, 93, 94, 0, 0, 0, - 0, 95, 96, 97, 0, 289, 0, 290, 0, 291, - 0, 292, 293, 0, 98, 0, 0, 0, 0, 294, - 0, 0, 99, 0, 0, 0, 0, 0, 0, 100, - 570, 0, 295, 0, 296, 297, 102, 103, 0, 0, - 0, 298, 0, 0, 0, 299, 0, 0, 300, 0, - 0, 0, 0, 0, 104, 105, 301, 106, 302, 303, - 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, - 109, 110, 111, 0, 112, 0, 0, 0, 113, 0, - 114, 115, 0, 0, 0, 0, 0, 0, 0, 116, - 117, 118, 0, 183, 0, 0, 0, 0, 119, 0, - 120, 0, 0, 0, 121, 0, 0, 122, 304, 0, - 123, 124, 0, 0, 0, 0, 0, 125, 126, 0, - 0, 127, 89, 0, 0, 0, 128, 0, 305, 205, - 306, 267, 307, 308, 0, 276, 277, 278, 0, 309, - 0, 0, 311, 312, 313, 0, 182, 279, 280, 281, - 282, 314, 90, 283, 0, 0, 0, 0, 0, 284, - 0, 0, 0, 285, 286, 0, 287, 0, 0, 0, - 0, 0, 0, 0, 92, 0, 0, 0, 288, 0, - 0, 0, 93, 94, 0, 0, 0, 0, 95, 96, - 97, 0, 289, 0, 290, 0, 291, 0, 292, 293, - 0, 98, 0, 0, 0, 0, 294, 0, 0, 99, - 0, 0, 0, 0, 0, 0, 100, 0, 0, 295, - 0, 296, 297, 102, 103, 0, 0, 0, 298, 0, - 0, 0, 299, 0, 0, 300, 0, 0, 0, 0, - 0, 104, 105, 301, 106, 302, 303, 0, 0, 0, - 0, 0, 0, 0, 108, 0, 0, 109, 110, 111, - 0, 112, 0, 0, 0, 113, 0, 114, 115, 0, - 0, 0, 0, 0, 0, 0, 116, 117, 118, 0, - 183, 0, 0, 0, 0, 119, 0, 120, 0, 0, - 0, 121, 0, 0, 122, 304, 0, 123, 124, 0, - 0, 0, 0, 0, 125, 126, 0, 0, 127, 89, - 0, 663, 0, 128, 664, 305, 205, 306, 267, 307, - 308, 0, 276, 277, 278, 0, 309, 0, 0, 311, - 312, 313, 0, 182, 279, 280, 281, 282, 314, 90, - 283, 0, 0, 0, 0, 0, 284, 0, 0, 0, - 285, 286, 0, 287, 0, 0, 0, 0, 0, 0, - 0, 92, 0, 0, 0, 288, 0, 0, 0, 93, - 94, 0, 0, 0, 0, 95, 96, 97, 0, 289, - 0, 290, 0, 0, 0, 0, 293, 0, 98, 0, - 0, 0, 0, 294, 0, 0, 99, 0, 0, 0, - 0, 0, 0, 100, 0, 0, 295, 0, 296, 297, - 102, 103, 0, 0, 0, 298, 0, 0, 0, 299, - 0, 0, 300, 0, 0, 0, 0, 0, 104, 105, - 301, 106, 302, 303, 0, 0, 0, 0, 0, 0, - 0, 108, 0, 0, 109, 110, 111, 0, 112, 0, - 0, 0, 113, 0, 114, 115, 0, 0, 0, 0, - 0, 0, 0, 116, 117, 118, 0, 183, 0, 0, - 0, 0, 119, 0, 120, 0, 0, 0, 121, 0, - 0, 122, 304, 0, 123, 124, 0, 0, 0, 0, - 0, 125, 126, 0, 0, 127, 89, 0, 0, 0, - 128, 0, 305, 205,-32768, 267, 307, 308, 0, 276, - 277, 278, 0, 309, 0, 0, 311, 312, 313, 0, - 182, 279, 280, 281, 282, 665, 90, 283, 0, 0, - 0, 0, 0, 284, 0, 0, 0, 285, 286, 0, - 287, 0, 0, 0, 0, 0, 0, 0, 92, 0, - 0, 0, 288, 0, 0, 0, 93, 94, 0, 0, - 0, 0, 95, 96, 97, 0, 289, 0, 290, 0, - 291, 0, 0, 293, 0, 98, 0, 0, 0, 0, - 294, 0, 0, 99, 0, 0, 0, 0, 0, 0, - 100, 570, 0, 295, 0, 296, 297, 102, 103, 0, - 0, 0, 298, 0, 0, 0, 299, 0, 0, 300, - 0, 0, 0, 0, 0, 104, 105, 301, 106, 302, - 303, 0, 0, 0, 0, 0, 0, 0, 108, 0, - 0, 109, 110, 111, 0, 112, 0, 0, 0, 113, - 0, 114, 115, 0, 0, 0, 0, 0, 0, 0, - 116, 117, 118, 0, 183, 0, 0, 0, 0, 119, - 0, 120, 0, 0, 0, 121, 0, 0, 122, 304, - 0, 123, 124, 0, 0, 0, 0, 0, 125, 126, - 0, 0, 127, 89, 0, 0, 0, 128, 0, 305, - 205, 306, 267, 307, 308, 0, 276, 277, 278, 0, - 309, 0, 0, 311, 312, 313, 0, 182, 279, 280, - 281, 282, 314, 90, 283, 0, 0, 0, 0, 0, - 284, 0, 0, 0, 285, 286, 0, 287, 0, 0, - 0, 0, 0, 0, 0, 92, 0, 0, 0, 288, - 0, 0, 0, 93, 94, 0, 0, 0, 0, 95, - 96, 97, 0, 289, 0, 290, 0, 291, 0, 0, - 293, 0, 98, 0, 0, 0, 0, 294, 0, 0, - 99, 0, 0, 0, 0, 0, 0, 100, 0, 0, - 295, 0, 296, 297, 102, 103, 0, 0, 0, 298, - 0, 0, 0, 299, 0, 0, 300, 0, 0, 0, - 0, 0, 104, 105, 301, 106, 302, 303, 0, 0, - 0, 0, 0, 0, 0, 108, 0, 0, 109, 110, - 111, 0, 112, 0, 0, 0, 113, 0, 114, 115, - 0, 0, 0, 0, 0, 0, 0, 116, 117, 118, - 0, 183, 0, 0, 0, 0, 119, 0, 120, 0, - 0, 0, 121, 0, 0, 122, 304, 0, 123, 124, - 0, 0, 0, 0, 0, 125, 126, 0, 0, 127, - 89, 0, 0, 0, 128, 0, 305, 205, 306, 267, - 307, 308, 0, 633, 277, 278, 0, 309, 0, 0, - 311, 312, 313, 0, 182, 634, 635, 636, 637, 314, - 90, 283, 0, 0, 0, 0, 0, 284, 0, 0, - 0, 0, 0, 0, 287, 0, 0, 0, 0, 0, - 0, 0, 92, 0, 0, 0, 288, 0, 0, 0, - 93, 94, 0, 0, 0, 0, 95, 96, 97, 0, - 289, 0, 290, 0, 0, 0, 0, 293, 0, 98, - 0, 0, 0, 0, 638, 0, 0, 99, 0, 0, - 0, 0, 0, 0, 100, 0, 0, 639, 0, 296, - 297, 102, 103, 0, 0, 0, 640, 0, 0, 0, - 641, 0, 0, 300, 0, 0, 0, 0, 0, 104, - 105, 301, 106, 302, 303, 0, 0, 0, 0, 0, - 0, 0, 108, 0, 0, 109, 110, 111, 0, 112, - 0, 0, 0, 113, 0, 114, 115, 0, 0, 0, - 0, 0, 0, 0, 116, 117, 118, 0, 183, 0, - 0, 0, 0, 119, 0, 120, 0, 0, 0, 121, - 0, 0, 122, 304, 0, 123, 124, 0, 0, 0, - 0, 0, 125, 126, 0, 0, 127, 89, 0, 0, - 0, 128, 0, 305, 205, 642, 267, 307, 308, 0, - 633, 277, 278, 0, 643, 0, 0, 644, 645, 646, - 0, 182, 634, 635, 636, 637, 647, 90, 283, 0, - 0, 0, 0, 0, 284, 0, 0, 0, 0, 0, - 0, 287, 0, 0, 0, 0, 0, 0, 0, 92, - 0, 0, 0, 288, 0, 0, 0, 93, 94, 0, - 0, 0, 0, 95, 96, 97, 0, 289, 0, 290, - 0, 0, 0, 0, 293, 0, 98, 0, 0, 0, - 0, 638, 0, 0, 99, 0, 0, 0, 0, 0, - 0, 100, 0, 0, 639, 0, 296, 297, 102, 103, - 0, 0, 0, 640, 0, 0, 0, 641, 0, 0, - 300, 0, 0, 0, 0, 0, 104, 105, 301, 106, - 302, 303, 0, 0, 0, 0, 0, 0, 0, 108, - 0, 0, 109, 110, 111, 0, 112, 0, 0, 0, - 113, 0, 114, 115, 0, 0, 0, 0, 0, 0, - 0, 116, 117, 118, 0, 183, 0, 0, 0, 0, - 119, 0, 120, 0, 0, 0, 121, 0, 0, 122, - 304, 0, 123, 124, 0, 0, 0, 0, 0, 125, - 126, 0, 0, 127, 89, 0, 0, 0, 128, 0, - 305, 205,-32768, 267, 307, 308, 0, 1161, 277, 278, - 0, 643, 0, 0, 644, 645, 646, 0, 0, 1162, - 1163, 1164, 1165, 647, 90, 283, 0, 0, 0, 0, - 0, 284, 0, 0, 0, 0, 0, 0, 287, 0, - 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, - 288, 0, 0, 0, 93, 94, 0, 0, 0, 0, - 95, 96, 97, 0, 289, 0, 290, 0, 0, 0, - 1166, 293, 0, 98, 0, 0, 0, 0, 0, 0, - 0, 99, 0, 0, 0, 0, 0, 0, 100, 0, - 0, 0, 0, 296, 297, 102, 103, 0, 0, 0, - 0, 0, 0, 0, 1167, 0, 0, 300, 0, 0, - 0, 0, 0, 104, 105, 301, 106, 302, 303, 0, - 0, 0, 0, 0, 0, 0, 108, 0, 0, 109, - 110, 111, 0, 112, 0, 0, 0, 113, 0, 114, - 115, 0, 0, 0, 0, 0, 0, 0, 116, 117, - 118, 0, 0, 0, 0, 0, 0, 119, 0, 120, - 0, 0, 0, 121, 0, 0, 122, 304, 0, 123, - 124, 0, 0, 0, 0, 0, 125, 126, 0, 0, - 127, 89, 0, 0, 0, 128, 0, 305, 205, 1168, - 267, 307, 308, 0, 1161, 277, 278, 0, 1169, 0, - 0, 1170, 1171, 1172, 0, 0, 1162, 1163, 1164, 1165, - 1173, 90, 283, 0, 0, 0, 0, 0, 284, 0, - 0, 0, 0, 0, 0, 287, 0, 0, 0, 0, - 0, 0, 0, 92, 0, 0, 0, 288, 0, 0, - 0, 93, 94, 0, 0, 0, 0, 95, 96, 97, - 0, 289, 0, 290, 0, 0, 0, 1166, 293, 0, - 98, 0, 0, 0, 0, 0, 0, 0, 99, 0, - 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, - 296, 297, 102, 103, 0, 0, 0, 0, 0, 0, - 0, 1167, 0, 0, 300, 0, 0, 0, 0, 0, - 104, 105, 301, 106, 302, 303, 0, 0, 0, 0, - 0, 0, 0, 108, 0, 0, 109, 110, 111, 0, - 112, 0, 0, 0, 113, 0, 114, 115, 0, 0, - 0, 0, 0, 0, 0, 116, 117, 118, 0, 0, - 0, 0, 0, 0, 119, 0, 120, 0, 0, 0, - 121, 0, 0, 122, 304, 0, 123, 124, 0, 0, - 0, 0, 0, 125, 126, 0, 0, 127, 89, 0, - 0, 0, 128, 0, 305, 205,-32768, 267, 307, 308, - 0, 585, 277, 278, 0, 1169, 0, 0, 1170, 1171, - 1172, 0, 182, 0, 0, 0, 0, 1173, 90, 283, - 0, 0, 0, 0, 0, 284, 0, 0, 0, 0, - 0, 0, 287, 0, 0, 0, 0, 0, 0, 0, - 92, 0, 0, 0, 288, 0, 0, 0, 93, 94, - 0, 0, 0, 0, 95, 96, 97, 0, 289, 0, - 290, 0, 0, 0, 0, 293, 0, 98, 0, 0, - 0, 0, 586, 0, 0, 99, 0, 0, 0, 0, - 0, 0, 100, 0, 0, 587, 0, 296, 297, 102, - 103, 0, 0, 0, 588, 0, 0, 0, 0, 0, - 0, 300, 0, 0, 0, 0, 0, 104, 105, 301, - 106, 302, 303, 0, 0, 0, 0, 0, 0, 0, - 108, 0, 0, 109, 110, 111, 0, 112, 0, 0, - 0, 113, 0, 114, 115, 0, 0, 0, 0, 0, - 0, 0, 116, 117, 118, 0, 183, 0, 0, 0, - 0, 119, 0, 120, 0, 0, 0, 121, 0, 0, - 122, 304, 0, 123, 124, 0, 0, 0, 0, 0, - 125, 126, 0, 0, 127, 89, 0, 0, 0, 128, - 0, 305, 205, 589, 267, 307, 308, 0, 585, 277, - 278, 0, 590, 0, 0, 591, 0, 0, 0, 182, - 0, 0, 0, 0, 592, 90, 283, 0, 0, 0, - 0, 0, 284, 0, 0, 0, 0, 0, 0, 287, - 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, - 0, 288, 0, 0, 0, 93, 94, 0, 0, 0, - 0, 95, 96, 97, 0, 289, 0, 290, 0, 0, - 0, 0, 293, 0, 98, 0, 0, 0, 0, 586, - 0, 0, 99, 0, 0, 0, 0, 0, 0, 100, - 0, 0, 587, 0, 296, 297, 102, 103, 0, 0, - 0, 588, 0, 0, 0, 0, 0, 0, 300, 0, - 0, 0, 0, 0, 104, 105, 301, 106, 302, 303, - 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, - 109, 110, 111, 0, 112, 0, 0, 0, 113, 0, - 114, 115, 0, 0, 0, 0, 0, 0, 0, 116, - 117, 118, 0, 183, 0, 0, 0, 0, 119, 0, - 120, 0, 0, 0, 121, 0, 0, 122, 304, 0, - 123, 124, 0, 0, 0, 0, 0, 125, 126, 0, - 0, 127, 89, 0, 0, 0, 128, 0, 305, 205, --32768, 267, 307, 308, 0, 934, 277, 278, 0, 590, - 0, 0, 591, 0, 0, 0, 0, 0, 0, 0, - 0, 592, 90, 283, 0, 0, 0, 0, 0, 284, - 0, 0, 0, 0, 0, 0, 287, 0, 0, 0, - 0, 0, 0, 0, 92, 0, 0, 0, 288, 0, - 0, 0, 93, 94, 0, 0, 0, 0, 95, 96, - 97, 0, 289, 0, 290, 0, 935, 0, 936, 293, - 0, 98, 0, 0, 0, 0, 0, 0, 0, 99, - 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, - 0, 296, 297, 102, 103, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 300, 0, 0, 0, 0, - 0, 104, 105, 301, 106, 302, 303, 0, 0, 0, - 0, 0, 0, 0, 108, 0, 0, 109, 110, 111, - 0, 112, 0, 0, 0, 113, 0, 114, 115, 0, - 0, 0, 0, 0, 0, 0, 116, 117, 118, 0, - 0, 0, 0, 0, 0, 119, 0, 120, 0, 0, - 0, 121, 0, 0, 122, 304, 0, 123, 124, 0, - 0, 0, 0, 0, 125, 126, 0, 0, 127, 89, - 0, 0, 0, 128, 0, 305, 205, 937, 267, 307, - 308, 0, 934, 277, 278, 0, 938, 0, 0, 939, - 940, 941, 0, 0, 0, 0, 0, 0, 942, 90, - 283, 0, 0, 0, 1133, 0, 284, 0, 0, 1134, - 0, 0, 0, 287, 0, 0, 0, 0, 0, 0, - 0, 92, 0, 0, 0, 288, 0, 0, 0, 93, - 94, 0, 0, 0, 0, 95, 96, 97, 0, 289, - 0, 290, 0, 0, 0, 936, 293, 0, 98, 0, - 0, 0, 0, 1135, 0, 0, 99, 0, 1136, 0, - 0, 0, 0, 100, 1137, 0, 0, 0, 296, 297, - 102, 103, 0, 0, 1138, 0, 0, 0, 0, 0, - 0, 0, 300, 0, 0, 0, 0, 0, 104, 105, - 301, 106, 302, 303, 0, 0, 0, 0, 0, 0, - 0, 108, 0, 0, 109, 110, 111, 0, 112, 0, - 0, 0, 113, 0, 114, 115, 0, 0, 0, 0, - 0, 0, 0, 116, 117, 118, 0, 0, 0, 0, - 0, 0, 119, 0, 120, 0, 0, 0, 121, 0, - 0, 122, 304, 0, 123, 124, 0, 0, 0, 1140, - 0, 125, 126, 0, 0, 127, 89, 0, 0, 0, - 128, 1141, 305, 205,-32768, 267, 307, 308, 0, 0, - 0, 0, 0, 938, 0, 0, 939, 940, 941, 0, - 0, 0, 0, 0, 0, 942, 90, 0, 0, 0, - 0, 0, 0, 91, 0, 1142, 0, 0, 0, 0, - 1143, 1144, 1145, 1146, 1147, 1148, 1149, 0, 92, 0, - 0, 0, 0, 0, 1150, 0, 93, 94, 0, 0, - 0, 0, 95, 96, 97, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, - 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, - 100, 0, 0, 0, 0, 101, 0, 102, 103, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 104, 105, 0, 106, 0, - 107, 0, 0, 0, 0, 0, 0, 0, 108, 0, - 0, 109, 110, 111, 0, 112, 0, 0, 0, 113, - 0, 114, 115, 0, 0, 0, 0, 0, 90, 283, - 116, 117, 118, 0, 0, 424, 0, 0, 0, 119, - 0, 120, 287, 0, 0, 121, 0, 0, 122, 986, - 92, 123, 124, 89, 288, 0, 0, 0, 125, 126, - 0, 0, 127, 0, 0, 96, 97, 128, 0, 129, - 205, 258, 267, 0, 987, 293, 236, 237, 238, 239, - 988, 241, 242, 90, 0, 0, 543, 0, 0, 0, - 91, 0, 100, 0, 0, 0, 0, 425, 297, 0, - 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, - 0, 0, 233, 93, 94, 0, 0, 104, 0, 95, - 96, 97, 426, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, - 99, 234, 0, 0, 0, 0, 0, 100, 0, 0, - 0, 0, 101, 0, 102, 103, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 104, 105, 0, 106, 0, 107, 0, 0, - 0, 0, 0, 0, 0, 108, 0, 0, 109, 110, - 111, 427, 112, 0, 0, 0, 113, 0, 114, 115, - 0, 0, 0, 0, 0, 0, 0, 116, 117, 118, - 89, 0, 0, 0, 0, 0, 119, 0, 120, 0, - 0, 0, 121, 0, 0, 122, 0, 0, 123, 124, - 0, 0, 0, 0, 0, 125, 126, 0, 0, 127, - 90, 0, 0, 0, 128, 0, 129, 91, 235, 0, - 0, 0, 0, 236, 237, 238, 239, 240, 241, 242, - 0, 0, 92, 0, 0, 0, 0, 0, 0, 233, - 93, 94, 0, 0, 0, 0, 95, 96, 97, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, - 0, 0, 0, 0, 0, 0, 0, 99, 234, 0, - 0, 0, 0, 0, 100, 0, 0, 0, 0, 101, - 0, 102, 103, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, - 105, 0, 106, 0, 107, 0, 0, 0, 0, 0, - 0, 0, 108, 0, 0, 109, 110, 111, 0, 112, - 0, 0, 0, 113, 0, 114, 115, 89, 0, 0, - 0, 0, 0, 0, 116, 117, 118, 0, 0, 0, - 0, 0, 0, 119, 0, 120, 0, 0, 0, 121, - 0, 182, 122, 0, 0, 123, 124, 90, 0, 0, - 0, 0, 125, 126, 91, 0, 127, 0, 0, 0, - 0, 128, 0, 129, 0, 235, 0, 0, 0, 92, - 236, 237, 238, 239, 240, 241, 242, 93, 94, 0, - 0, 0, 0, 95, 96, 97, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, - 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, - 0, 100, 0, 0, 0, 0, 101, 0, 102, 103, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 104, 105, 0, 106, - 0, 107, 0, 0, 0, 0, 0, 0, 0, 108, - 0, 0, 109, 110, 111, 0, 112, 89, 0, 0, - 113, 0, 114, 115, 0, 0, 0, 0, 0, 0, - 0, 116, 117, 118, 0, 183, 0, 0, 0, 0, - 119, 0, 120, 0, 0, 0, 121, 90, 0, 122, - 0, 0, 123, 124, 91, 0, 0, 0, 0, 125, - 126, 0, 0, 127, 0, 0, 0, 0, 128, 92, - 129, 0, 0, 0, 307, 0, 0, 93, 94, 0, - 0, 0, 478, 95, 96, 97, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, - 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, - 0, 100, 0, 0, 0, 0, 101, 0, 102, 103, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 104, 105, 0, 106, - 0, 107, 0, 0, 0, 0, 89, 0, 0, 108, - 0, 0, 109, 110, 111, 0, 112, 0, 0, 0, - 113, 0, 114, 115, 0, 0, 0, 0, 0, 0, - 0, 116, 117, 118, 0, 0, 90, 0, 0, 0, - 119, 0, 120, 91, 0, 0, 121, 0, 0, 122, - 0, 0, 123, 124, 0, 0, 0, 0, 92, 125, - 126, 0, 0, 127, 0, 0, 93, 94, 128, 0, - 129, 0, 95, 96, 97, 0, 0, 0, 0, 0, - 0, 0, 380, 0, 0, 98, 0, 0, 0, 0, - 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, - 100, 0, 0, 0, 0, 101, 0, 102, 103, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 104, 105, 0, 106, 0, - 107, 0, 0, 0, 0, 89, 0, 0, 108, 0, - 0, 109, 110, 111, 0, 112, 0, 0, 0, 113, - 0, 114, 115, 0, 0, 0, 0, 0, 0, 0, - 116, 117, 118, 0, 0, 90, 0, 0, 0, 119, - 0, 120, 91, 0, 0, 121, 0, 0, 122, 0, - 0, 123, 124, 0, 0, 0, 0, 92, 125, 126, - 0, 0, 127, 0, 0, 93, 94, 128, 0, 129, - 0, 95, 96, 97, 0, 0, 0, 0, 0, 0, - 0, 701, 0, 0, 98, 0, 0, 0, 0, 0, - 0, 0, 99, 0, 0, 0, 0, 0, 0, 100, - 0, 0, 0, 0, 101, 0, 102, 103, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 104, 105, 0, 106, 0, 107, - 0, 0, 0, 0, 89, 0, 0, 108, 0, 0, - 109, 110, 111, 0, 112, 0, 0, 0, 113, 0, - 114, 115, 0, 0, 0, 0, 0, 0, 0, 116, - 117, 118, 0, 0, 90, 0, 0, 0, 119, 0, - 120, 91, 0, 0, 121, 0, 0, 122, 0, 0, - 123, 124, 0, 0, 0, 0, 92, 125, 126, 0, - 0, 127, 0, 0, 93, 94, 128, 0, 129, 0, - 95, 96, 97, 0, 0, 0, 0, 0, 0, 0, - 917, 0, 0, 98, 0, 0, 0, 0, 0, 0, - 0, 99, 0, 0, 0, 0, 0, 0, 100, 0, - 0, 0, 0, 101, 0, 102, 103, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 104, 105, 0, 106, 0, 107, 0, - 0, 0, 0, 89, 0, 0, 108, 0, 0, 109, - 110, 111, 0, 112, 0, 0, 0, 113, 0, 114, - 115, 0, 0, 0, 0, 0, 0, 182, 116, 117, - 118, 0, 0, 90, 0, 0, 0, 119, 0, 120, - 91, 0, 0, 121, 0, 0, 122, 0, 0, 123, - 124, 0, 0, 0, 0, 92, 125, 126, 0, 0, - 127, 0, 0, 93, 94, 128, 0, 129, 0, 95, - 96, 97, 0, 0, 0, 0, 0, 0, 0, 1111, - 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, - 99, 0, 0, 0, 0, 0, 0, 100, 0, 0, - 0, 0, 101, 0, 102, 103, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 104, 105, 0, 106, 0, 107, 0, 0, - 0, 0, 0, 0, 0, 108, 0, 0, 109, 110, - 111, 0, 112, 89, 0, 0, 113, 0, 114, 115, - 0, 0, 0, 0, 0, 0, 0, 116, 117, 118, - 0, 183, 0, 0, 0, 0, 119, 0, 120, 0, - 0, 0, 121, 90, 0, 122, 0, 0, 123, 124, - 91, 0, 0, 0, 0, 125, 126, 0, 0, 127, - 0, 0, 0, 0, 128, 92, 129, 0, 0, 0, - 307, 0, 0, 93, 94, 0, 0, 0, 0, 95, - 96, 97, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, - 99, 0, 0, 0, 0, 0, 0, 100, 0, 0, - 0, 0, 101, 0, 102, 103, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 104, 105, 0, 106, 0, 107, 0, 0, - 0, 0, 0, 0, 0, 108, 0, 0, 109, 110, - 111, 0, 112, 0, 0, 0, 113, 0, 114, 115, - 0, 0, 0, 0, 0, 0, 0, 116, 117, 118, - 89, 0, 0, 0, 0, 0, 119, 0, 120, 0, - 0, 0, 121, 0, 0, 122, 0, 0, 123, 124, - 0, 616, 0, 617, 0, 125, 126, 0, 0, 127, - 90, 0, 0, 0, 128, 0, 129, 91, 0, 267, - 0, 0, 0, 0, 0, 0, 618, 0, 0, 0, - 619, 0, 92, 0, 0, 0, 0, 0, 0, 0, - 93, 94, 0, 0, 0, 0, 95, 96, 97, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, - 0, 620, 0, 0, 621, 622, 0, 99, 0, 0, - 0, 0, 0, 0, 100, 0, 0, 0, 623, 101, - 0, 102, 103, 0, 0, 624, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, - 105, 625, 106, 626, 107, 0, 0, 0, 0, 0, - 0, 0, 108, 627, 0, 109, 110, 111, 0, 112, - 0, 0, 0, 113, 0, 114, 115, 0, 0, 0, - 0, 0, 628, 0, 116, 117, 118, 0, 0, 89, - 0, 0, 0, 119, 0, 120, 0, 0, 0, 121, - 0, 0, 122, 277, 278, 123, 124, 0, 0, 0, - 0, 0, 125, 126, 0, 629, 127, 0, 0, 90, - 523, 128, 0, 129, 0, 0, 524, 0, 0, 0, - 0, 0, 0, 525, 0, 0, 0, 0, 0, 0, - 0, 92, 0, 0, 0, 0, 0, 0, 0, 93, - 94, 0, 0, 0, 0, 95, 96, 97, 0, 289, - 0, 290, 0, 0, 0, 0, 526, 0, 98, 0, - 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, - 0, 0, 0, 100, 0, 0, 0, 0, 101, 0, - 102, 103, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 300, 0, 0, 0, 0, 0, 104, 105, - 0, 106, 0, 107, 0, 0, 0, 0, 0, 0, - 0, 108, 0, 0, 109, 110, 111, 0, 112, 0, - 0, 0, 113, 0, 114, 115, 0, 0, 0, 89, - 0, 0, 0, 116, 117, 118, 0, 0, 0, 0, - 0, 0, 119, 0, 120, 500, 0, 0, 121, 0, - 501, 122, 0, 0, 123, 124, 0, 0, 0, 90, - 0, 125, 126, 0, 0, 127, 91, 0, 0, 0, - 128, 0, 129, 0, 0, 502, 0, 0, 0, 0, - 0, 92, 0, 0, 0, 0, 0, 0, 0, 93, - 94, 0, 0, 0, 0, 95, 96, 97, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, - 0, 0, 0, 0, 0, 503, 99, 0, 0, 0, - 0, 0, 0, 100, 0, 0, 0, 0, 101, 0, - 102, 103, 0, 0, 0, 0, 0, 504, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 104, 105, - 0, 106, 0, 107, 0, 0, 0, 0, 89, 0, - 0, 108, 0, 0, 109, 110, 111, 0, 112, 0, - 0, 0, 113, 0, 114, 115, 0, 0, 0, 0, - 0, 0, 182, 116, 117, 118, 0, 0, 90, 0, - 0, 0, 119, 0, 120, 91, 0, 0, 121, 0, - 0, 122, 0, 0, 123, 124, 0, 0, 0, 0, - 92, 125, 126, 0, 0, 127, 0, 0, 93, 94, - 128, 0, 129, 0, 95, 96, 97, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, - 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, - 0, 0, 100, 0, 0, 0, 0, 101, 0, 102, - 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 104, 105, 0, - 106, 0, 107, 0, 0, 0, 0, 89, 0, 0, - 108, 0, 0, 109, 110, 111, 0, 112, 0, 0, - 0, 113, 0, 114, 115, 0, 0, 0, 0, 0, - 0, 0, 116, 117, 118, 0, 183, 90, 0, 0, - 0, 119, 0, 120, 91, 0, 0, 121, 0, 0, - 122, 0, 0, 123, 124, 0, 0, 773, 0, 92, - 125, 126, 0, 0, 127, 0, 0, 93, 94, 128, - 0, 129, 0, 95, 96, 97, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, - 0, 0, 0, 0, 99, 0, 774, 0, 0, 0, - 0, 100, 0, 0, 0, 0, 101, 0, 102, 103, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 104, 105, 0, 106, - 0, 107, 0, 0, 0, 0, 89, 0, 0, 108, - 0, 0, 109, 110, 111, 0, 112, 0, 0, 0, - 113, 0, 114, 115, 0, 0, 0, 0, 0, 0, - 0, 116, 117, 118, 0, 0, 90, 0, 0, 0, - 119, 0, 120, 91, 0, 0, 121, 0, 0, 122, - 0, 0, 123, 124, 0, 0, 0, 0, 92, 125, - 126, 0, 0, 127, 0, 0, 93, 94, 128, 0, - 129, 0, 95, 96, 97, 192, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, - 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, - 100, 0, 0, 0, 0, 193, 0, 102, 103, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 104, 105, 0, 106, 0, - 107, 0, 0, 0, 0, 89, 0, 0, 108, 0, - 0, 109, 110, 111, 0, 112, 0, 0, 0, 113, - 0, 114, 115, 0, 0, 0, 0, 0, 0, 0, - 116, 117, 118, 0, 0, 90, 0, 0, 0, 119, - 0, 120, 91, 0, 0, 121, 0, 0, 122, 0, - 0, 123, 124, 0, 0, 0, 0, 92, 125, 126, - 0, 0, 127, 0, 0, 93, 94, 128, 0, 129, - 0, 95, 96, 97, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, - 0, 0, 99, 0, 0, 0, 0, 0, 0, 100, - 0, 0, 0, 0, 101, 0, 102, 103, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 104, 105, 0, 106, 0, 107, - 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, - 109, 110, 111, 0, 112, 89, 0, 0, 113, 0, - 114, 115, 0, 0, 0, 0, 0, 0, 0, 116, - 117, 118, 0, 0, 552, 0, 0, 0, 119, 0, - 120, 0, 0, 0, 121, 90, 0, 122, 0, 0, - 123, 124, 91, 0, 0, 0, 0, 125, 126, 0, - 0, 127, 0, 0, 0, 0, 128, 92, 129, 0, - 0, 0, 0, 0, 0, 93, 94, 0, 0, 0, - 0, 95, 96, 97, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, - 0, 0, 99, 0, 0, 0, 0, 0, 0, 100, - 0, 0, 0, 0, 101, 0, 102, 103, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 104, 105, 0, 106, 0, 107, - 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, - 109, 110, 111, 0, 112, 0, 0, 0, 113, 89, - 114, 115, 0, 0, 0, 1106, 0, 0, 0, 116, - 117, 118, 0, 0, 1002, 0, 0, 0, 119, 0, - 120, 0, 0, 0, 121, 0, 0, 122, 0, 90, - 123, 124, 0, 0, 0, 0, 91, 125, 126, 0, - 0, 127, 0, 0, 0, 0, 128, 0, 129, 0, - 0, 92, 0, 0, 0, 0, 0, 0, 0, 93, - 94, 0, 0, 0, 0, 95, 96, 97, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, - 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, - 0, 0, 0, 100, 0, 0, 0, 0, 101, 0, - 102, 103, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 104, 105, - 0, 106, 0, 107, 0, 0, 0, 0, 89, 0, - 0, 108, 0, 0, 109, 110, 111, 0, 112, 0, - 0, 0, 113, 0, 114, 115, 0, 0, 0, 0, - 0, 0, 0, 116, 117, 118, 0, 0, 90, 0, - 0, 0, 119, 0, 120, 91, 0, 0, 121, 0, - 0, 122, 0, 0, 123, 124, 0, 0, 0, 0, - 92, 125, 126, 0, 0, 127, 0, 0, 93, 94, - 128, 0, 129, 0, 95, 96, 97, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, - 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, - 0, 0, 100, 0, 0, 0, 0, 101, 0, 102, - 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 104, 105, 0, - 106, 0, 107, 0, 0, 0, 0, 89, 0, 0, - 108, 0, 0, 109, 110, 111, 0, 112, 0, 0, - 0, 113, 0, 114, 115, 0, 0, 0, 0, 0, - 0, 0, 116, 117, 118, 0, 0, 90, 0, 0, - 0, 119, 0, 120, 91, 0, 0, 121, 0, 0, - 122, 0, 0, 123, 124, 0, 0, 0, 0, 92, - 125, 126, 0, 0, 127, 0, 0, 93, 94, 128, - 0, 129, 0, 95, 96, 97, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, - 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, - 0, 100, 0, 0, 0, 0, 211, 0, 102, 103, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 104, 105, 0, 106, - 0, 107, 0, 0, 0, 0, 89, 0, 0, 108, - 0, 0, 109, 110, 111, 0, 112, 0, 0, 0, - 113, 0, 114, 115, 0, 0, 0, 0, 0, 0, - 0, 116, 117, 118, 0, 0, 90, 0, 0, 0, - 119, 0, 120, 91, 0, 0, 121, 0, 0, 122, - 0, 0, 123, 124, 0, 0, 0, 0, 92, 125, - 126, 0, 0, 127, 0, 0, 93, 94, 128, 0, - 129, 0, 95, 96, 97, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, - 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, - 100, 0, 0, 0, 0, 213, 0, 102, 103, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 104, 105, 0, 106, 0, - 107, 0, 0, 0, 0, 0, 0, 0, 108, 0, - 0, 109, 110, 111, 0, 112, 0, 0, 0, 113, - 0, 114, 115, 0, 0, 0, 277, 278, 0, 0, - 116, 117, 118, 0, 0, 0, 0, 0, 0, 119, - 0, 120, 90, 283, 0, 121, 0, 0, 122, 424, - 0, 123, 124, 0, 0, 0, 287, 0, 125, 126, - 277, 278, 127, 0, 92, 0, 0, 128, 288, 129, - 0, 0, 0, 0, 0, 0, 90, 283, 0, 96, - 97, 0, 289, 424, 290, 0, 0, 0, 0, 293, - 287, 0, 0, 0, 0, 0, 0, 0, 92, 0, - 0, 0, 288, 0, 0, 0, 100, 570, 0, 0, - 0, 425, 297, 96, 97, 0, 289, 0, 290, 0, - 0, 0, 0, 293, 0, 300, 0, 0, 0, 0, - 0, 104, 0, 301, 0, 302, 426, 0, 0, 0, - 100, 0, 0, 1, 0, 425, 297, 0, 2, 0, - 0, 0, 0, 0, 0, 0, 0, 3, 0, 300, - 4, 0, 5, 0, 0, 104, 0, 301, 0, 302, - 426, 0, 6, 0, 7, 0, 0, 0, 8, 9, - 10, 0, 0, 11, 0, 304, 0, 0, 0, 12, - 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 427, 205, 0, 267, 307, - 308, 0, 0, 0, 0, 14, 0, 0, 0, 304, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 15, 0, 16, 0, 17, 18, 0, 0, 427, - 205, 0, 267, 307, 308, 277, 278, 0, 0, 19, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 90, 283, 0, 0, 20, 0, 0, 424, 0, - 0, 0, 0, 21, 22, 287, 0, 0, 0, 0, - 23, 24, 0, 92, 0, 0, 0, 288, 0, 0, - 0, 25, 26, 27, 0, 0, 0, 28, 96, 97, - 0, 289, 0, 290, 0, 0, 0, 29, 293, 0, - 277, 278, 0, 0, 30, 0, 0, 0, 0, 0, - 31, 0, 0, 0, 32, 100, 90, 283, 0, 0, - 425, 297, 0, 424, 0, 0, 0, 0, 0, 0, - 287, 0, 0, 0, 300, 0, 0, 0, 92, 0, - 104, 0, 288, 0, 0, 426, 0, 0, 0, 0, - 0, 0, 0, 96, 97, 0, 289, 0, 290, 0, - 0, 0, 0, 293, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 100, 0, 0, 0, 0, 425, 297, 0, 0, 0, - 0, 0, 0, 740, 304, 0, 0, 0, 0, 300, - 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, - 426, 0, 0, 0, 427, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 304, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 427 +#define YYLAST 12730 + + +static const short yytable[] = {132, + 711, 223, 151, 346, 709, 262, 780, 244, 600, 713, + 185, 1008, 1009, 260, 194, 185, 791, 198, 1112, 253, + 488, 185, 1014, 1103, 324, 212, 214, 970, 185, 530, + 951, 857, 858, 859, 860, 861, 1051, 1328, 207, 722, + 184, 1429, 1430, 266, 1045, 195, 1424, 1046, 876, 470, + 695, 204, 337, 474, 464, 823, 707, 699, 216, 699, + 971, 500, 824, 491, 720, 492, 1279, 269, 1474, 1475, + 150, 824, 341, 1262, 1119, 824, 829, 1468, 831, 832, + 185, 471, 173, 824, 779, 347, 715, 1018, 500, 1511, + 1490, 502, 1455, 1543, 267, 809, 810, 811, 812, 799, + 493, 741, 756, 174, 169, 363, 269, 516, 1415, 364, + 219, 388, 1498, 397, 392, 1416, 1019, 170, 502, 824, + 821, 1499, 1500, 1473, 168, 414, 800, 1456, 517, 374, + 185, 503, 1120, 151, 151, 1055, 1544, 227, 229, 659, + 151, 185, 716, 175, 246, 1528, 444, 435, 185, 151, + 1512, 445, 151, 504, 151, 227, 229, 176, 503, 1469, + 222, 151, 151, 979, 1056, 1491, 825, -558, 914, 342, + 1476, 231, 152, 1513, 870, 825, 957, 185, 249, 825, + 504, 1210, 518, 660, 980, -558, 84, 825, 181, 1229, + 863, 208, 830, 959, 661, 446, 185, 1075, 85, 198, + 447, 224, 225, 1477, 339, 185, 448, 273, 230, 1425, + 205, 1573, 465, 205, 205, 1000, 449, 330, 177, 1388, + 254, 205, 255, 825, 981, 710, 345, 465, 494, 189, + 263, 1195, 1372, 201, 960, 348, 1218, 267, 982, 6, + 1052, 7, 1287, 198, 1153, 1154, 961, 560, 582, 267, + 962, 151, 1062, 1063, 1064, 1065, 1066, 1067, 1047, 873, + 203, 721, 13, 190, 561, 1572, 613, 151, 963, -526, + 151, 393, 1126, 385, 1127, 1128, 1129, 1130, 1131, 1132, + 948, 1023, 14, 654, 796, 655, 1288, -526, 1385, 497, + 498, 451, 919, 920, 567, 568, 569, 1289, 324, 797, + 1341, 577, 17, 452, 874, 86, 875, 1487, 6, 205, + 7, 1017, 1368, 584, 1443, 1370, 19, 267, 87, 382, + 1025, 1026, 1027, 1028, 1029, 1030, 798, 439, 199, 1060, + 656, 13, 657, 1386, 1049, 1387, 614, 453, 615, 484, + 185, -525, 454, 455, 456, 457, 458, 459, 460, 185, + 1450, 14, 473, 476, 476, 512, 461, 1516, 205, -525, + 1517, 727, 1518, 532, 1203, -784, 462, 1522, 246, 482, + 485, 17, 1010, 911, 151, 185, 1484, 218, 1485, 490, + 151, 864, 151, 542, 916, 19, 559, 1560, 864, 865, + 866, 867, 868, 1561, 1562, 600, 865, 866, 867, 868, + 869, 267, 1282, 1191, 1283, 551, 1357, 869, -556, 1031, + 1033, 1034, 530, 459, 460, 598, 530, 728, 729, 1523, + 975, 1042, 461, 1524, 978, 205, -556, -784, 736, 1102, + 737, 758, -791, 758, 758, 758, 758, 220, 738, 630, + 739, 652, 550, 600, 232, 750, 1220, 751, 554, 1284, + 555, 1285, 1312, 1313, 1314, 1315, 1316, 1317, 1068, 1070, + 818, 819, 1276, 704, 1232, 704, 1332, 264, 247, 820, + 1278, 724, 725, 726, 1286, 766, 1290, 767, 261, 1291, + 1292, 1293, 1294, 1295, 1296, 1297, 1298, 270, 1436, 1302, + 777, 330, 778, 1206, 1207, 1208, 1307, 151, 435, 271, + 867, 868, 435, 172, 272, 274, 435, 133, 957, 869, + 435, 340, 167, 958, 435, 741, 742, 275, 435, 188, + 343, 344, 435, 196, 350, 959, 435, 1463, 1197, 1341, + 1225, 1226, 1227, 351, 1201, 173, 789, 352, 790, 1318, + 803, 354, 804, 185, 1319, 1320, 1321, 1322, 1323, 1324, + 1325, 355, 776, 815, 357, 1378, 174, 359, 1326, 776, + 362, 816, 817, 818, 819, 732, 960, 1148, 1149, 1116, + 366, 1117, 820, 768, 1324, 1325, 1150, 367, 961, 704, + 369, 371, 962, 1326, 372, 598, 598, 598, 598, 736, + 777, 1118, 1155, 1397, 375, 465, 175, 1198, 376, 777, + 963, 1303, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, + 176, 1412, 378, 324, 324, 260, 260, 777, 1391, 1304, + 1392, 1444, 985, 1445, 324, 1211, 1390, 407, 757, 379, + 759, 760, 761, 762, 445, 864, 384, 386, 652, 652, + 652, 652, 652, 865, 866, 867, 868, 814, 1453, 408, + 1454, 1444, 984, 1486, 869, 652, 395, 378, 1036, 1497, + 758, 758, 390, 394, 409, 97, 398, 1254, 881, 413, + 399, 177, 884, 1255, 400, 1545, 887, 1546, 446, 1554, + 890, 1555, 1256, 447, 893, 1013, 402, 403, 896, 448, + 1257, 100, 899, 185, -32768, 185, 902, 404, 421, 1016, + 405, 1258, 816, 817, 818, 819, 484, 417, 704, 419, + 420, 1259, 423, 820, 151, 1344, 410, 926, 442, 926, + 928, 929, 151, 905, 440, 910, 1260, 947, 1448, 922, + 443, 559, 926, 462, 956, 1534, 482, 1489, 467, 1299, + 185, 535, 468, 1050, 536, 469, 532, 486, 1053, 1054, + 532, 1113, 496, 17, 537, 513, 521, 533, 973, 246, + 995, 995, 246, 547, 538, 539, 151, 548, 151, 1004, + 969, 556, 563, 559, 451, 565, 994, 994, 1365, 267, + 1011, 1012, 924, 570, 540, -32768, 452, 578, 583, 815, + 931, 602, 1348, 865, 866, 867, 868, 816, 817, 818, + 819, 598, 598, 579, 869, 580, 330, 330, 820, 1358, + 598, 598, 598, 598, 598, 598, 581, 330, 461, 699, + 453, 712, 610, 611, 445, 454, 455, 456, 457, 458, + 459, 460, 612, 324, 1001, 1318, 1003, 714, 718, 461, + 1319, 1320, 1321, 1322, 1323, 1324, 1325, 652, 720, 731, + 598, 733, 734, 1373, 1326, 735, 744, 1400, 749, 652, + 652, 652, 652, 652, 652, 745, 746, 752, 446, 747, + 1346, 755, 1134, 447, 1347, 1071, 763, 764, 765, -32768, + 770, 769, 1077, 1078, 984, 1080, 1081, 771, 1083, 1084, + 781, 1086, 1087, 784, 1089, 1090, 772, 1092, 1093, 787, + 1095, 1096, 185, 1098, 1099, 1107, 788, 785, 704, 815, + 792, 794, 793, 795, 801, 1409, 1135, 816, 817, 818, + 819, 1136, 802, 805, 806, 1504, 807, 1137, 820, 813, + 828, 947, 910, 947, 947, 947, 947, 947, 947, 447, + 827, 835, 1318, 808, 822, 559, 559, 1319, 1320, 1321, + 1322, 1323, 1324, 1325, 151, 229, 834, 847, 1179, 849, + 850, 1326, 836, 90, 451, 912, 851, 852, 853, 815, + 1442, 854, 855, 856, 871, 872, 452, 816, 817, 818, + 819, 879, 1190, 880, 864, 92, 339, 1274, 820, 932, + 953, 1024, 865, 866, 867, 868, 1305, 882, 883, 885, + 96, 97, 918, 869, 886, 974, 888, 1420, 976, 998, + 453, 889, 1140, 1466, 1467, 891, 892, 1428, 457, 458, + 459, 460, 1160, 894, 1141, 895, 330, 100, 897, 461, + 451, 913, 898, 900, 572, 573, 1005, 901, 949, 1488, + 950, 820, 452, 1037, 1105, 1039, 1212, 1040, 1041, 1043, + 1214, 869, 104, 1044, 1557, 1076, 1104, 1079, 1142, 1082, + 1109, 479, 1085, 1143, 1144, 1145, 1146, 1147, 1148, 1149, + 1088, 652, 1091, 1094, 1097, 1100, -32768, 1150, 1108, 1233, + 1114, 1121, 1122, 837, 457, 458, 459, 460, 838, 839, + 840, 841, 842, 843, 844, 461, -32768, 1123, 130, 1125, + 185, 130, 630, 1152, 1322, 1323, 1324, 1325, -791, 130, + 1156, 1157, 151, 130, 130, 1326, 130, 151, 1159, 1177, + 130, 947, 1178, 1182, 130, 130, 1184, 130, 1187, 947, + 910, 1188, 1189, 947, 1192, 947, 1194, 595, 947, 947, + 947, 947, 947, 947, 947, 947, 1196, 1199, 947, 1200, + 1231, 1202, 151, 1263, 1204, 947, 1205, 1209, 1213, 1217, + 445, 1219, 1221, 649, 229, 229, 229, 229, 229, 229, + 1222, 1223, 1224, 1228, 1230, 1237, 1238, 1239, 1240, 130, + 1269, 1241, 1242, 1243, 185, 1272, 1318, 1244, 1245, 1246, + 1343, 1247, -32768, -32768, 1322, 1323, 1324, 1325, 1248, 1333, + 1249, 1336, 1250, 1251, 446, 1326, 1398, 1399, 1265, 447, + 1252, 1266, 1268, 1270, 1335, 448, 1353, 1271, 1275, 1150, + 1356, 1329, 1281, 1306, 1309, 449, 1331, 1310, 1311, 130, + 1570, 1327, 130, 130, 1345, 1349, 130, 130, 1134, 130, + 130, 1350, 1351, 130, 1441, 1364, 1352, 130, 130, 1366, + 1354, 130, 1355, 130, 130, 130, 1136, 1359, 1360, 185, + 130, 130, 1361, 258, 1363, 228, 1371, 229, 236, 237, + 238, 239, 240, 241, 242, 1375, 130, 1380, 1379, 1382, + 1377, 1389, 1135, 257, 1393, 947, 1394, 1136, 1395, 910, + 1326, 1413, 1418, -32768, 1419, 130, 1526, 1421, 130, 1437, + 451, 1422, 1423, 1439, 130, 229, 1427, 595, 595, 595, + 595, 1446, 452, 1431, 229, 229, 229, 229, 229, 229, + 229, 229, 1432, 229, 1549, 1549, 1433, 1434, 1451, 1452, + 1457, 1462, 1479, 1482, 1483, 1493, 1494, 324, 1469, 1501, + 1502, 1505, 130, 1542, 1503, 1510, 453, 1140, 1536, 1565, + 130, 454, 455, 456, 457, 458, 459, 460, 1556, 1141, + 649, 649, 649, 649, 649, 461, 130, 185, 1566, 130, + 130, 1564, 1571, 1567, 1575, 1576, 217, 649, 1140, 743, + 514, 361, 968, 411, 1181, 248, 952, 947, 477, 1449, + 1141, 925, 927, -32768, 1180, 1308, 1509, 910, 1532, 429, + 1447, 1146, 1147, 1148, 1149, 1492, 1541, 1515, 1563, 997, + 996, 955, 1150, 210, 151, 349, 489, 704, 1186, 704, + 187, 389, 782, 151, 1142, 1465, 1527, 1551, 479, 383, + 1464, 1461, 1146, 1147, 1148, 1149, 259, 1550, 130, 130, + 1185, 215, 1558, 1150, 515, 1007, 134, 1535, 130, 229, + 1532, 697, 1552, 1559, 130, 1472, 135, 1369, 136, 1568, + 1215, 708, 130, 137, 698, 428, 256, 130, 915, 1496, + 138, 0, 139, 130, 130, 140, 445, 0, 0, 130, + 1264, 130, 1460, 0, 141, 130, 0, 0, 0, 0, + 0, 142, 0, 0, -314, 0, 0, 0, 1533, 574, + 0, 0, 0, 0, 0, 1521, 0, 0, 0, 0, + 0, 143, 0, 0, 0, 0, 0, 0, 144, 145, + 446, 0, 0, 595, 595, 447, 0, 146, 0, 0, + 330, 448, 595, 595, 595, 595, 595, 595, 130, 0, + 0, 0, 596, 0, 0, 0, 0, 0, 0, 0, + 1533, 0, 1569, 0, 0, 0, 429, 1521, 0, 0, + 0, 0, 130, 0, 130, 89, 0, 0, 650, 649, + 0, 0, 595, 0, 0, 0, 0, 0, 0, 0, + 0, 649, 649, 649, 649, 649, 649, 444, 0, 182, + 0, 0, 445, 0, 0, 90, 130, 0, 0, 0, + 0, 0, 91, 0, 0, 0, 0, 429, 0, 0, + 0, 0, 0, 0, 0, 0, 451, 92, 0, 0, + 0, 0, 0, 0, 0, 93, 94, 0, 452, 0, + 0, 95, 96, 97, 0, 0, 446, 0, 0, 0, + 0, 447, 130, 0, 98, 0, 0, 448, 0, 0, + 0, 130, 99, 0, 0, 0, 0, 449, 130, 100, + 0, 0, 453, 450, 101, 0, 102, 103, -32768, -32768, + 457, 458, 459, 460, 0, 0, 0, 0, 130, 0, + 0, 461, 0, 0, 104, 105, 0, 106, 0, 107, + 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, + 109, 110, 111, 0, 112, 0, 0, 0, 113, 0, + 114, 115, 596, 596, 596, 596, 0, 0, 0, 116, + 117, 118, 0, 183, 0, 0, 0, 0, 119, 0, + 120, 0, 451, 0, 121, 0, 0, 122, 0, 0, + 123, 124, 0, 0, 452, 0, 0, 125, 126, 0, + 0, 127, 1133, 0, 0, 0, 128, 1134, 129, 0, + 0, 0, 0, 0, 0, 650, 650, 650, 650, 650, + 0, 0, 0, 0, 0, 0, 0, 0, 453, 0, + 0, 906, 650, 454, 455, 456, 457, 458, 459, 460, + 0, 0, 130, 649, 130, 0, 0, 461, 0, 0, + 1061, 1135, 0, 0, 0, 130, 1136, 130, 0, 0, + 0, 0, 1137, 130, 0, 0, 130, 0, 130, 130, + 130, 130, 1138, 0, 0, 0, 0, 0, 1139, 0, + 130, 130, 0, 130, 0, 0, 0, 0, 1133, 130, + 0, 0, 0, 1134, 0, 130, 0, 0, 0, 130, + 0, 0, 0, 0, 944, 0, 0, 0, 130, 130, + 130, 130, 0, 0, 0, 130, 0, 130, 130, 0, + 0, 0, 130, 0, 0, 483, 0, 0, 429, 130, + 130, 0, 0, 0, 0, 0, 0, 1135, 0, 0, + 0, 0, 1136, 0, 0, 0, 0, 1140, 1137, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1138, 1141, + 0, 0, 0, 0, 1139, 429, 0, 0, 0, 0, + 0, 0, 1133, 0, 0, 0, 0, 1134, 596, 596, + 0, 0, 0, 0, 0, 0, 0, 596, 596, 596, + 596, 596, 596, 1142, 0, 0, 0, 0, 1143, 1144, + 1145, 1146, 1147, 1148, 1149, 0, 0, 0, 0, 0, + 0, 0, 1150, 0, 429, 1151, 0, 429, 0, 0, + 0, 1135, 0, 0, 650, 0, 1136, 596, 0, 0, + 0, 0, 1137, 1140, 0, 0, 650, 650, 650, 650, + 650, 650, 1138, 415, 0, 1141, 0, 0, 1139, 0, + 0, 130, 0, 0, 130, 0, 0, 130, 430, 0, + 0, 431, 0, 432, 433, 434, 438, 0, 0, 0, + 0, 429, 0, 444, 0, 0, 0, 0, 445, 1142, + 0, 0, 0, 0, 1143, 1144, 1145, 1146, 1147, 1148, + 1149, 0, 153, 0, 130, 130, 0, 0, 1150, 0, + 0, 1277, 0, 130, 154, 0, 0, 130, 944, 155, + 944, 944, 944, 944, 944, 944, 156, 1140, 157, 0, + 0, 158, 446, 0, 0, 0, 0, 447, 549, 1141, + 159, 130, 1175, 448, 0, 0, 0, 160, 0, 0, + 161, 0, 0, 449, 0, 0, 564, 0, 0, 450, + 0, 0, 0, 0, 0, 0, 0, 162, 163, 0, + 0, 0, 0, 1142, 164, 165, 0, 0, 1143, 1144, + 1145, 1146, 1147, 1148, 1149, 607, 0, 0, 0, 0, + 0, 0, 1150, 444, 0, 1396, 0, 0, 445, 0, + 0, 0, 0, 0, 0, 0, 632, 0, 0, 0, + 658, 0, 662, 0, 0, 666, 670, 674, 678, 682, + 686, 690, 694, 0, 696, 0, 0, 0, 451, 0, + 0, 429, 0, 0, 0, 0, 0, 0, 0, 0, + 452, 0, 446, 0, 0, 0, 0, 447, 0, 0, + 0, 0, 0, 448, 0, 0, 0, 0, 650, 130, + 0, 130, 0, 449, 0, 0, 0, 0, 0, 450, + 0, 130, 0, 0, 453, 0, 130, 0, 0, 454, + 455, 456, 457, 458, 459, 460, 0, 444, 0, 429, + 0, 0, 445, 461, 0, 0, 1553, 0, 0, 0, + 0, 0, 483, 0, 0, 429, 0, 0, 944, 0, + 0, 130, 0, 0, 0, 0, 944, 0, 0, 0, + 944, 0, 944, 946, 0, 944, 944, 944, 944, 944, + 944, 944, 944, 0, 0, 944, 446, 0, 451, 0, + 0, 447, 944, 130, 0, 0, 0, 448, 0, 130, + 452, 1175, 1175, 1175, 1175, 1175, 1175, 449, 429, 0, + 0, 0, 0, 450, 0, 607, 0, 607, 607, 0, + 0, 0, 0, 0, 846, 429, 0, 1342, 0, 0, + 0, 0, 0, 0, 453, 0, 429, 0, 0, 454, + 455, 456, 457, 458, 459, 460, 0, 0, 0, 0, + 0, 0, 0, 461, -586, 0, 0, 0, 0, 862, + 0, 0, 0, 0, 0, 0, 0, 0, 130, 0, + 0, 0, 0, 878, 0, 0, 0, 438, 0, 0, + 0, 438, 451, 0, 0, 438, 429, 0, 0, 438, + 0, 0, 429, 438, 452, 0, 0, 438, 0, 0, + 0, 438, 0, 0, 1175, 438, 0, 0, 0, 0, + 0, 0, 0, 0, 946, 0, 0, 0, 0, 0, + 0, 0, 944, 0, 0, 0, 0, 0, 453, 0, + 0, 429, 0, 454, 455, 456, 457, 458, 459, 460, + 0, 1134, 1175, 0, 0, 0, 0, 461, -585, 0, + 0, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 0, + 1175, 0, 0, 0, 0, 0, 0, 0, 0, 429, + 0, 0, 0, 0, 0, 0, 130, 946, 0, 946, + 946, 946, 946, 946, 946, 1135, 429, 429, 0, 0, + 1136, 0, 0, 0, 429, 0, 1137, 0, 130, 0, + 0, 946, 0, 0, 0, 0, 1015, 444, 0, 0, + 1537, 0, 445, 0, 0, 0, 0, 0, 0, 0, + 607, 0, 0, 130, 944, 0, 130, 0, 130, 429, + 429, 0, 130, 0, 0, 0, 1035, 0, 1538, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 429, + 0, 429, 0, 0, 0, 429, 446, 0, 597, 0, + 0, 447, 0, 0, 0, 0, 0, 448, 607, 0, + 0, 0, 0, 0, 0, 0, 0, 449, 0, 0, + 0, 1140, 0, 450, 651, 0, 1175, 0, 0, 0, + 0, 0, 0, 1141, 0, 444, 0, 0, 0, 0, + 445, 0, 0, 0, 0, 0, 0, 130, 0, 0, + 0, 0, 0, 0, 1539, 1101, 0, 0, 946, 0, + 0, 0, 0, 0, 0, 0, 0, 1142, 0, 0, + 0, 0, 0, -32768, -32768, 1146, 1147, 1148, 1149, 0, + 0, 0, 0, 0, 446, 0, 1150, 0, 0, 447, + 0, 0, 451, 0, 0, 448, 0, 0, 0, 130, + 0, 130, 0, 0, 452, 449, 0, 946, 0, 0, + 0, 450, 0, 0, 0, 946, 946, 0, 0, 946, + 0, 946, 0, 0, 946, 946, 946, 946, 946, 946, + 946, 946, 0, 0, 946, 0, 0, 0, 453, 0, + 0, 946, 0, 454, 455, 456, 457, 458, 459, 460, + 946, 946, 946, 946, 946, 946, 0, 461, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 597, 597, + 597, 597, 607, 607, 607, 0, 0, 0, 0, 0, + 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 452, 0, 0, 0, 0, 0, 0, 1216, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 607, + 607, 607, 444, 946, 783, 0, 0, 445, 0, 0, + 0, 651, 651, 651, 651, 651, 453, 0, 0, 0, + 0, 454, 455, 456, 457, 458, 459, 460, 651, 903, + 0, 0, 0, 0, 904, 461, 0, 0, 0, 0, + 0, 0, 0, 946, 0, 0, 0, 0, 0, 444, + 0, 446, 0, 946, 445, 0, 447, 0, 0, 946, + 0, 946, 448, 0, 444, 0, 0, 0, 0, 445, + 0, 0, 449, 0, 0, 0, 0, 0, 450, 0, + 0, 946, 0, 0, 0, 0, 0, 0, 0, 0, + 946, 946, 946, 946, 946, 946, 946, 946, 446, 946, + 945, 0, 0, 447, 0, 0, 0, 833, 0, 448, + 0, 0, 0, 446, 0, 0, 0, 0, 447, 449, + 0, 0, 0, 0, 448, 450, 0, 0, 0, 0, + 0, 0, 0, 0, 449, 0, 946, 0, 0, 0, + 450, 0, 0, 0, 0, 0, 0, 451, 0, 0, + 0, 0, 0, 0, 946, 0, 0, 0, 0, 452, + 0, 946, 0, 946, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 597, 597, 0, 0, 0, 0, + 0, 0, 0, 597, 597, 597, 597, 597, 597, 0, + 0, 0, 0, 453, 451, 0, 0, 0, 454, 455, + 456, 457, 458, 459, 460, 0, 452, 0, 1374, 451, + 0, 0, 461, 0, 0, 0, 946, 0, 946, 0, + 651, 452, 0, 597, 0, 946, 0, 0, 0, 0, + 0, 0, 651, 651, 651, 651, 651, 651, 0, 0, + 453, 1074, 0, 0, 0, 454, 455, 456, 457, 458, + 459, 460, 0, 0, 0, 453, 0, 0, 1253, 461, + 454, 455, 456, 457, 458, 459, 460, 0, 0, 0, + 0, 0, 0, 0, 461, 0, 0, 0, 0, 0, + 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 277, 278, 0, + 0, 0, 0, 0, 945, 0, 945, 945, 945, 945, + 945, 945, 0, 90, 523, 0, 0, 0, 0, 0, + 524, 0, 0, 0, 0, 0, 0, 525, 1176, 0, + 0, 0, 0, 0, 1133, 92, 1381, 0, 0, 1134, + 0, 0, 0, 93, 94, 0, 0, 0, 0, 95, + 96, 97, 0, 289, 0, 290, 0, 0, 0, 0, + 526, 0, 98, 0, 0, 0, 0, 0, 0, 0, + 99, 0, 0, 0, 0, 0, 0, 100, 0, 0, + 0, 0, 101, 1135, 102, 103, 0, 0, 1136, 0, + 0, 0, 0, 0, 1137, 0, 300, 0, 0, 0, + 0, 0, 104, 105, 1138, 106, 0, 107, 0, 0, + 1139, 0, 0, 0, 0, 108, 0, 0, 109, 110, + 111, 0, 112, 0, 1508, 0, 113, 0, 114, 115, + 0, 1134, 0, 0, 0, 0, 0, 116, 117, 118, + 0, 0, 0, 1529, 651, 1236, 119, 0, 120, 0, + 0, 0, 121, 0, 0, 122, 0, 0, 123, 124, + 0, 0, 0, 0, 0, 125, 126, 0, 0, 127, + 0, 0, 0, 0, 128, 1135, 129, 0, 1508, 1140, + 1136, 0, 0, 0, 0, 0, 1137, 0, 0, 0, + 0, 1141, 0, 0, 945, 0, 1138, 0, 0, 0, + 527, 0, 945, 1280, 444, 0, 945, 0, 945, 445, + 0, 945, 945, 945, 945, 945, 945, 945, 945, 1133, + 0, 945, 0, 0, 1134, 1142, 0, 0, 945, 0, + 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1176, 1176, 1176, + 1176, 1176, 1176, 0, 1150, 0, 0, 0, 0, 0, + 0, 0, 0, 446, 0, 0, 0, 0, 447, 0, + 0, 0, 0, 0, 448, 0, 0, 0, 1135, 0, + 0, 1140, 0, 1136, 449, 0, 0, 0, 0, 1137, + 450, 0, 0, 1141, 0, 0, 0, 0, 0, 1138, + 0, 0, 0, 0, 0, 1139, 0, 0, 0, 0, + 1362, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1142, 0, 0, + 0, 0, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 0, + 0, 0, 0, 0, 0, 0, 1150, 0, 0, 0, + 1176, 0, 0, 0, 0, 0, 0, 0, 0, 451, + 1280, 0, 0, 0, 0, 0, 1280, 0, 945, 0, + 0, 452, 0, 0, 1140, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1141, 0, 1176, 0, + 0, 0, 0, 0, 0, 0, 0, 1176, 1176, 1176, + 1176, 1176, 1176, 1176, 1176, 453, 1176, 0, 0, 0, + 454, 455, 456, 457, 458, 459, 460, 0, 0, 0, + 1142, 0, 0, 0, 461, 1143, 1144, 1145, 1146, 1147, + 1148, 1149, 0, 0, 0, 0, 0, 0, 0, 1150, + 0, 0, 0, 1435, 0, 0, 0, 0, 0, 0, + 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1280, 0, 276, 277, 278, 0, 0, 1280, 0, + 945, 0, 0, 0, 182, 279, 280, 281, 282, 0, + 90, 283, 0, 0, 0, 0, 0, 284, 0, 0, + 0, 285, 286, 0, 287, 0, 0, 0, 0, 0, + 0, 0, 92, 0, 0, 0, 288, 0, 0, 0, + 93, 94, 0, 0, 0, 0, 95, 96, 97, 0, + 289, 0, 290, 1280, 291, 1280, 292, 293, 0, 98, + 0, 0, 1176, 0, 294, 0, 0, 99, 0, 0, + 0, 0, 0, 0, 100, 0, 0, 295, 0, 296, + 297, 102, 103, 0, 0, 0, 298, 0, 0, 0, + 299, 0, 0, 300, 0, 0, 0, 0, 0, 104, + 105, 301, 106, 302, 303, 0, 0, 0, 0, 0, + 0, 0, 108, 0, 0, 109, 110, 111, 0, 112, + 0, 0, 0, 113, 0, 114, 115, 0, 0, 0, + 0, 0, 0, 0, 116, 117, 118, 0, 183, 0, + 0, 0, 0, 119, 0, 120, 0, 0, 0, 121, + 0, 0, 122, 304, 0, 123, 124, 0, 0, 0, + 0, 0, 125, 126, 0, 0, 127, 0, 0, 0, + 0, 128, 0, 305, 205, 306, 267, 307, 308, 89, + 0, 0, 0, 0, 309, 705, 0, 311, 312, 313, + 0, 0, 276, 277, 278, 0, 314, 706, 0, 0, + 0, 0, 0, 182, 279, 280, 281, 282, 0, 90, + 283, 0, 0, 0, 0, 0, 284, 0, 0, 0, + 285, 286, 0, 287, 0, 0, 0, 0, 0, 0, + 0, 92, 0, 0, 0, 288, 0, 0, 0, 93, + 94, 0, 0, 0, 0, 95, 96, 97, 0, 289, + 0, 290, 0, 291, 0, 292, 293, 0, 98, 0, + 0, 0, 0, 294, 0, 0, 99, 0, 0, 0, + 0, 0, 0, 100, 0, 0, 295, 0, 296, 297, + 102, 103, 0, 0, 0, 298, 0, 0, 0, 299, + 0, 0, 300, 0, 0, 0, 0, 0, 104, 105, + 301, 106, 302, 303, 0, 0, 0, 0, 0, 0, + 0, 108, 0, 0, 109, 110, 111, 0, 112, 0, + 0, 0, 113, 0, 114, 115, 0, 0, 0, 0, + 0, 0, 0, 116, 117, 118, 0, 183, 0, 0, + 0, 0, 119, 0, 120, 0, 0, 0, 121, 0, + 0, 122, 304, 0, 123, 124, 0, 0, 0, 0, + 0, 125, 126, 0, 0, 127, 0, 0, 0, 0, + 128, 0, 305, 205, 306, 267, 307, 308, 89, 0, + 0, 0, 0, 309, 0, 0, 311, 312, 313, 0, + 0, 276, 277, 278, 0, 314, 1032, 0, 0, 0, + 0, 0, 182, 279, 280, 281, 282, 0, 90, 283, + 0, 0, 0, 0, 0, 284, 0, 0, 0, 285, + 286, 0, 287, 0, 0, 0, 0, 0, 0, 0, + 92, 0, 0, 0, 288, 0, 0, 0, 93, 94, + 0, 0, 0, 0, 95, 96, 97, 0, 289, 0, + 290, 0, 291, 0, 292, 293, 0, 98, 0, 0, + 0, 0, 294, 0, 0, 99, 0, 0, 0, 0, + 0, 0, 100, 0, 0, 295, 0, 296, 297, 102, + 103, 0, 0, 0, 298, 0, 0, 0, 299, 0, + 0, 300, 0, 0, 0, 0, 0, 104, 105, 301, + 106, 302, 303, 0, 0, 0, 0, 0, 0, 0, + 108, 0, 0, 109, 110, 111, 0, 112, 0, 0, + 0, 113, 0, 114, 115, 0, 0, 0, 0, 0, + 0, 0, 116, 117, 118, 0, 183, 0, 0, 0, + 0, 119, 0, 120, 0, 0, 0, 121, 0, 0, + 122, 304, 0, 123, 124, 0, 0, 0, 0, 0, + 125, 126, 0, 0, 127, 0, 0, 0, 0, 128, + 0, 305, 205, 306, 267, 307, 308, 89, 0, 0, + 0, 0, 309, 0, 0, 311, 312, 313, 0, 0, + 1161, 277, 278, 0, 314, 1069, 0, 0, 0, 0, + 0, 0, 1162, 1163, 1164, 1165, 0, 90, 283, 0, + 0, 0, 0, 0, 284, 0, 0, 0, 0, 0, + 0, 287, 0, 0, 0, 0, 0, 0, 0, 92, + 0, 0, 0, 288, 0, 0, 0, 93, 94, 0, + 0, 0, 0, 95, 96, 97, 0, 289, 0, 290, + 0, 0, 0, 1166, 293, 0, 98, 0, 0, 0, + 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, + 0, 100, 0, 0, 0, 0, 296, 297, 102, 103, + 0, 0, 0, 0, 0, 0, 0, 1167, 0, 0, + 300, 0, 0, 0, 0, 0, 104, 105, 301, 106, + 302, 303, 0, 0, 0, 0, 0, 0, 0, 108, + 0, 0, 109, 110, 111, 0, 112, 0, 0, 0, + 113, 0, 114, 115, 0, 0, 0, 0, 0, 0, + 0, 116, 117, 118, 0, 0, 0, 0, 0, 0, + 119, 0, 120, 0, 0, 0, 121, 0, 0, 122, + 304, 0, 123, 124, 0, 0, 0, 0, 0, 125, + 126, 0, 0, 127, 0, 89, 0, 0, 128, 0, + 305, 205, 1168, 267, 307, 308, 0, 0, 934, 277, + 278, 1169, 0, 0, 1170, 1171, 1172, 0, 0, 0, + 0, 0, 0, 1173, 1410, 90, 283, 0, 0, 0, + 0, 0, 284, 0, 0, 0, 0, 0, 0, 287, + 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, + 0, 288, 0, 0, 0, 93, 94, 0, 0, 0, + 0, 95, 96, 97, 0, 289, 0, 290, 0, 935, + 0, 936, 293, 0, 98, 0, 0, 0, 0, 0, + 0, 0, 99, 0, 0, 0, 0, 0, 0, 100, + 0, 0, 0, 0, 296, 297, 102, 103, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, + 0, 0, 0, 0, 104, 105, 301, 106, 302, 303, + 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, + 109, 110, 111, 0, 112, 0, 0, 0, 113, 0, + 114, 115, 0, 0, 0, 0, 0, 0, 0, 116, + 117, 118, 0, 0, 0, 0, 0, 0, 119, 0, + 120, 0, 0, 0, 121, 0, 0, 122, 304, 0, + 123, 124, 0, 0, 0, 0, 0, 125, 126, 0, + 0, 127, 0, 0, 0, 0, 128, 0, 305, 205, + 937, 267, 307, 308, 0, 89, 0, 0, 0, 938, + 0, 0, 939, 940, 941, 603, 0, 0, 276, 277, + 278, 942, 1300, 0, 0, 0, 0, 0, 0, 182, + 279, 280, 281, 282, 0, 90, 283, 0, 0, 0, + 0, 0, 284, 0, 0, 0, 285, 286, 0, 287, + 0, 0, 604, 0, 0, 0, 0, 92, 0, 0, + 0, 288, 0, 0, 0, 93, 94, 605, 0, 0, + 0, 95, 96, 97, 0, 289, 0, 290, 0, 291, + 0, 292, 293, 0, 98, 0, 0, 0, 0, 294, + 0, 0, 99, 0, 0, 0, 0, 0, 0, 100, + 0, 0, 295, 0, 296, 297, 102, 103, 0, 606, + 0, 298, 0, 0, 0, 299, 0, 0, 300, 0, + 0, 0, 0, 0, 104, 105, 301, 106, 302, 303, + 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, + 109, 110, 111, 0, 112, 0, 0, 0, 113, 0, + 114, 115, 0, 0, 0, 0, 0, 0, 0, 116, + 117, 118, 0, 183, 0, 0, 0, 0, 119, 0, + 120, 0, 0, 0, 121, 0, 0, 122, 304, 0, + 123, 124, 0, 0, 0, 0, 0, 125, 126, 0, + 0, 127, 0, 0, 0, 0, 128, 0, 305, 205, + 306, 267, 307, 308, 0, 89, 0, 0, 0, 309, + 0, 0, 311, 312, 313, 1020, 0, 0, 276, 277, + 278, 314, 0, 0, 0, 0, 0, 0, 0, 182, + 279, 280, 281, 282, 0, 90, 283, 0, 0, 0, + 0, 0, 284, 0, 0, 0, 285, 286, 0, 287, + 0, 0, 604, 0, 0, 0, 0, 92, 0, 0, + 0, 288, 0, 0, 0, 93, 94, 1021, 0, 0, + 0, 95, 96, 97, 0, 289, 0, 290, 0, 291, + 0, 292, 293, 0, 98, 0, 0, 0, 0, 294, + 0, 0, 99, 0, 0, 0, 0, 0, 0, 100, + 0, 0, 295, 0, 296, 297, 102, 103, 0, 1022, + 0, 298, 0, 0, 0, 299, 0, 0, 300, 0, + 0, 0, 0, 0, 104, 105, 301, 106, 302, 303, + 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, + 109, 110, 111, 0, 112, 0, 0, 0, 113, 0, + 114, 115, 0, 0, 0, 0, 0, 0, 0, 116, + 117, 118, 0, 183, 0, 0, 0, 0, 119, 0, + 120, 0, 0, 0, 121, 0, 0, 122, 304, 0, + 123, 124, 0, 0, 0, 0, 0, 125, 126, 0, + 0, 127, 0, 0, 0, 0, 128, 0, 305, 205, + 306, 267, 307, 308, 0, 89, 0, 0, 0, 309, + 0, 0, 311, 312, 313, 1057, 0, 0, 276, 277, + 278, 314, 0, 0, 0, 0, 0, 0, 0, 182, + 279, 280, 281, 282, 0, 90, 283, 0, 0, 0, + 0, 0, 284, 0, 0, 0, 285, 286, 0, 287, + 0, 0, 604, 0, 0, 0, 0, 92, 0, 0, + 0, 288, 0, 0, 0, 93, 94, 1058, 0, 0, + 0, 95, 96, 97, 0, 289, 0, 290, 0, 291, + 0, 292, 293, 0, 98, 0, 0, 0, 0, 294, + 0, 0, 99, 0, 0, 0, 0, 0, 0, 100, + 0, 0, 295, 0, 296, 297, 102, 103, 0, 1059, + 0, 298, 0, 0, 0, 299, 0, 0, 300, 0, + 0, 0, 0, 0, 104, 105, 301, 106, 302, 303, + 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, + 109, 110, 111, 0, 112, 0, 0, 0, 113, 0, + 114, 115, 0, 0, 0, 0, 0, 0, 0, 116, + 117, 118, 0, 183, 0, 0, 0, 0, 119, 0, + 120, 0, 0, 0, 121, 0, 0, 122, 304, 0, + 123, 124, 0, 0, 0, 0, 0, 125, 126, 0, + 0, 127, 89, 0, 0, 0, 128, 0, 305, 205, + 306, 267, 307, 308, 0, 276, 277, 278, 0, 309, + 0, 0, 311, 312, 313, 0, 182, 279, 280, 281, + 282, 314, 90, 283, 0, 0, 0, 0, 0, 284, + 0, 0, 0, 285, 286, 0, 287, 0, 0, 0, + 0, 0, 0, 0, 92, 0, 0, 0, 288, 0, + 0, 0, 93, 94, 0, 0, 0, 0, 95, 96, + 97, 0, 289, 0, 290, 0, 291, 0, 292, 293, + 0, 98, 0, 0, 0, 0, 294, 0, 0, 99, + 0, 0, 0, 0, 0, 0, 100, 0, 0, 295, + 0, 296, 297, 102, 103, 0, 0, 0, 298, 0, + 0, 0, 299, 0, 0, 300, 0, 0, 0, 0, + 0, 104, 105, 301, 106, 302, 303, 0, 0, 0, + 0, 0, 0, 0, 108, 0, 0, 109, 110, 111, + 0, 112, 0, 0, 0, 113, 0, 114, 115, 0, + 0, 0, 0, 0, 0, 0, 116, 117, 118, 0, + 183, 0, 0, 0, 0, 119, 0, 120, 0, 0, + 0, 121, 0, 0, 122, 304, 0, 123, 124, 0, + 0, 0, 0, 0, 125, 126, 0, 0, 127, 89, + 0, 667, 0, 128, 668, 305, 205, 306, 267, 307, + 308, 0, 276, 277, 278, 0, 309, 310, 0, 311, + 312, 313, 0, 182, 279, 280, 281, 282, 314, 90, + 283, 0, 0, 0, 0, 0, 284, 0, 0, 0, + 285, 286, 0, 287, 0, 0, 0, 0, 0, 0, + 0, 92, 0, 0, 0, 288, 0, 0, 0, 93, + 94, 0, 0, 0, 0, 95, 96, 97, 0, 289, + 0, 290, 0, 291, 0, 0, 293, 0, 98, 0, + 0, 0, 0, 294, 0, 0, 99, 0, 0, 0, + 0, 0, 0, 100, 0, 0, 295, 0, 296, 297, + 102, 103, 0, 0, 0, 298, 0, 0, 0, 299, + 0, 0, 300, 0, 0, 0, 0, 0, 104, 105, + 301, 106, 302, 303, 0, 0, 0, 0, 0, 0, + 0, 108, 0, 0, 109, 110, 111, 0, 112, 0, + 0, 0, 113, 0, 114, 115, 0, 0, 0, 0, + 0, 0, 0, 116, 117, 118, 0, 183, 0, 0, + 0, 0, 119, 0, 120, 0, 0, 0, 121, 0, + 0, 122, 304, 0, 123, 124, 0, 0, 0, 0, + 0, 125, 126, 0, 0, 127, 89, 0, 671, 0, + 128, 672, 305, 205, 306, 267, 307, 308, 0, 276, + 277, 278, 0, 309, 0, 0, 311, 312, 313, 0, + 182, 279, 280, 281, 282, 669, 90, 283, 0, 0, + 0, 0, 0, 284, 0, 0, 0, 285, 286, 0, + 287, 0, 0, 0, 0, 0, 0, 0, 92, 0, + 0, 0, 288, 0, 0, 0, 93, 94, 0, 0, + 0, 0, 95, 96, 97, 0, 289, 0, 290, 0, + 291, 0, 0, 293, 0, 98, 0, 0, 0, 0, + 294, 0, 0, 99, 0, 0, 0, 0, 0, 0, + 100, 0, 0, 295, 0, 296, 297, 102, 103, 0, + 0, 0, 298, 0, 0, 0, 299, 0, 0, 300, + 0, 0, 0, 0, 0, 104, 105, 301, 106, 302, + 303, 0, 0, 0, 0, 0, 0, 0, 108, 0, + 0, 109, 110, 111, 0, 112, 0, 0, 0, 113, + 0, 114, 115, 0, 0, 0, 0, 0, 0, 0, + 116, 117, 118, 0, 183, 0, 0, 0, 0, 119, + 0, 120, 0, 0, 0, 121, 0, 0, 122, 304, + 0, 123, 124, 0, 0, 0, 0, 0, 125, 126, + 0, 0, 127, 89, 0, 675, 0, 128, 676, 305, + 205, 306, 267, 307, 308, 0, 276, 277, 278, 0, + 309, 0, 0, 311, 312, 313, 0, 182, 279, 280, + 281, 282, 673, 90, 283, 0, 0, 0, 0, 0, + 284, 0, 0, 0, 285, 286, 0, 287, 0, 0, + 0, 0, 0, 0, 0, 92, 0, 0, 0, 288, + 0, 0, 0, 93, 94, 0, 0, 0, 0, 95, + 96, 97, 0, 289, 0, 290, 0, 291, 0, 0, + 293, 0, 98, 0, 0, 0, 0, 294, 0, 0, + 99, 0, 0, 0, 0, 0, 0, 100, 0, 0, + 295, 0, 296, 297, 102, 103, 0, 0, 0, 298, + 0, 0, 0, 299, 0, 0, 300, 0, 0, 0, + 0, 0, 104, 105, 301, 106, 302, 303, 0, 0, + 0, 0, 0, 0, 0, 108, 0, 0, 109, 110, + 111, 0, 112, 0, 0, 0, 113, 0, 114, 115, + 0, 0, 0, 0, 0, 0, 0, 116, 117, 118, + 0, 183, 0, 0, 0, 0, 119, 0, 120, 0, + 0, 0, 121, 0, 0, 122, 304, 0, 123, 124, + 0, 0, 0, 0, 0, 125, 126, 0, 0, 127, + 89, 0, 679, 0, 128, 680, 305, 205, 306, 267, + 307, 308, 0, 276, 277, 278, 0, 309, 0, 0, + 311, 312, 313, 0, 182, 279, 280, 281, 282, 677, + 90, 283, 0, 0, 0, 0, 0, 284, 0, 0, + 0, 285, 286, 0, 287, 0, 0, 0, 0, 0, + 0, 0, 92, 0, 0, 0, 288, 0, 0, 0, + 93, 94, 0, 0, 0, 0, 95, 96, 97, 0, + 289, 0, 290, 0, 291, 0, 0, 293, 0, 98, + 0, 0, 0, 0, 294, 0, 0, 99, 0, 0, + 0, 0, 0, 0, 100, 0, 0, 295, 0, 296, + 297, 102, 103, 0, 0, 0, 298, 0, 0, 0, + 299, 0, 0, 300, 0, 0, 0, 0, 0, 104, + 105, 301, 106, 302, 303, 0, 0, 0, 0, 0, + 0, 0, 108, 0, 0, 109, 110, 111, 0, |