head 1.39; access; symbols release_4_2:1.39 aix_ok:1.38 Version_2_1:1.34 Version_2:1.27 C_Demo_1:1.6; locks; strict; comment @ * @; 1.39 date 94.02.07.11.35.29; author aoki; state Exp; branches; next 1.38; 1.38 date 93.01.16.03.14.59; author aoki; state Exp; branches; next 1.37; 1.37 date 92.07.24.01.54.21; author mer; state Exp; branches; next 1.36; 1.36 date 91.11.14.11.07.31; author glass; state Exp; branches; next 1.35; 1.35 date 91.08.15.17.45.09; author caetta; state Exp; branches; next 1.34; 1.34 date 90.10.01.07.46.08; author cimarron; state Exp; branches; next 1.33; 1.33 date 90.10.01.01.15.19; author cimarron; state Exp; branches; next 1.32; 1.32 date 90.08.18.15.29.51; author cimarron; state Exp; branches; next 1.31; 1.31 date 90.08.17.13.56.52; author hong; state Exp; branches; next 1.30; 1.30 date 90.08.13.20.58.21; author hong; state Exp; branches; next 1.29; 1.29 date 90.08.08.08.21.57; author cimarron; state Exp; branches; next 1.28; 1.28 date 90.08.01.14.35.48; author sp; state Exp; branches; next 1.27; 1.27 date 90.07.02.20.30.19; author cimarron; state Version_2; branches; next 1.26; 1.26 date 90.06.07.18.20.18; author cimarron; state Exp; branches; next 1.25; 1.25 date 90.06.06.20.37.54; author kemnitz; state Exp; branches; next 1.24; 1.24 date 90.03.31.18.54.18; author cimarron; state Exp; branches; next 1.23; 1.23 date 90.03.13.11.57.52; author cimarron; state Exp; branches; next 1.22; 1.22 date 90.03.13.08.01.47; author cimarron; state Exp; branches; next 1.21; 1.21 date 90.03.12.16.26.06; author cimarron; state Exp; branches; next 1.20; 1.20 date 90.03.01.15.39.42; author cimarron; state Exp; branches; next 1.19; 1.19 date 90.02.23.19.45.32; author cimarron; state Exp; branches; next 1.18; 1.18 date 90.02.01.13.51.37; author cimarron; state Exp; branches; next 1.17; 1.17 date 90.01.31.17.38.25; author cimarron; state Exp; branches; next 1.16; 1.16 date 90.01.30.23.25.57; author sp; state Exp; branches; next 1.15; 1.15 date 90.01.30.16.47.09; author jamesb; state Exp; branches; next 1.14; 1.14 date 89.11.02.18.05.35; author cimarron; state Exp; branches; next 1.13; 1.13 date 89.10.31.12.20.14; author mao; state Exp; branches; next 1.12; 1.12 date 89.10.20.19.52.15; author cimarron; state Exp; branches; next 1.11; 1.11 date 89.10.17.13.44.50; author cimarron; state Exp; branches; next 1.10; 1.10 date 89.10.12.16.44.21; author cimarron; state Exp; branches; next 1.9; 1.9 date 89.10.05.16.59.15; author cimarron; state Exp; branches; next 1.8; 1.8 date 89.09.18.20.25.22; author cimarron; state Exp; branches; next 1.7; 1.7 date 89.09.18.08.19.48; author cimarron; state Exp; branches; next 1.6; 1.6 date 89.09.05.17.05.52; author mao; state C_Demo_1; branches; next 1.5; 1.5 date 89.08.31.14.09.52; author cimarron; state Exp; branches; next 1.4; 1.4 date 89.08.30.12.59.48; author cimarron; state Exp; branches; next 1.3; 1.3 date 89.08.29.22.38.03; author cimarron; state Exp; branches; next 1.2; 1.2 date 89.08.24.17.04.21; author cimarron; state Exp; branches; next 1.1; 1.1 date 89.08.09.18.01.07; author cimarron; state Exp; branches; next ; desc @Executor support header file. Was src/executor/einternal.h but these definitions are too widely needed.. Eventually this file should be reorganized -cim @ 1.39 log @proto fixes @ text @/* ---------------------------------------------------------------- * FILE * executor.h * * DESCRIPTION * support for the POSTGRES executor module * * $Header: /faerie/aoki/postgres/src/backend/executor/RCS/executor.h,v 1.38 1993/01/16 03:14:59 aoki Exp aoki $" * ---------------------------------------------------------------- */ #ifndef ExecutorIncluded #define ExecutorIncluded /* ---------------------------------------------------------------- * #includes * ---------------------------------------------------------------- */ #include #include #include "tmp/postgres.h" #include "nodes/pg_lisp.h" /* ---------------- * executor debugging definitions are kept in a separate file * so people can customize what debugging they want to see and not * have this information clobbered every time a new version of * executor.h is checked in -cim 10/26/89 * ---------------- */ #include "executor/execdebug.h" #include "access/ftup.h" #include "access/heapam.h" #include "access/htup.h" #include "access/istrat.h" #include "access/itup.h" #include "access/skey.h" #include "access/tqual.h" #include "catalog/catname.h" #include "catalog/syscache.h" #include "executor/execdefs.h" #include "executor/tuptable.h" #include "parse.h" #include "storage/buf.h" #include "tmp/miscadmin.h" #include "tmp/simplelists.h" #include "fmgr.h" #include "utils/log.h" #include "utils/mcxt.h" #include "utils/memutils.h" #include "utils/rel.h" #include "catalog/pg_index.h" #include "catalog/pg_proc.h" #include "catalog/pg_type.h" #include "catalog/pg_aggregate.h" #include "access/printtup.h" #include "nodes/primnodes.h" #include "nodes/plannodes.h" #include "nodes/execnodes.h" #include "parser/parsetree.h" #include "rules/prs2.h" #include "rules/prs2stub.h" #include "tcop/dest.h" #include "storage/smgr.h" /* ---------------- * .h files made from running pgdecs over generated .c files in obj/lib/C * ---------------- */ #include "nodes/primnodes.a.h" #include "nodes/plannodes.a.h" #include "nodes/execnodes.a.h" #include "executor/execshmem.h" #include "executor/execmisc.h" /* * public executor functions * * XXX reorganize me. */ #include "executor/externs.h" /* ---------------------------------------------------------------- * the end * ---------------------------------------------------------------- */ #endif ExecutorIncluded @ 1.38 log @removed references to utils/fmgr.h and parser/parse.h @ text @d8 1 a8 1 * $Header: /home2/aoki/postgres/src/backend/executor/RCS/executor.h,v 1.37 1992/07/24 01:54:21 mer Exp aoki $" a43 2 #include "executor/recursion.h" #include "executor/recursion_a.h" @ 1.37 log @don't need both string.h and strings.h @ text @d8 1 a8 1 * $Header: /private/mer/pg/src/lib/H/executor/RCS/executor.h,v 1.36 1991/11/14 11:07:31 glass Exp mer $" d47 1 a47 1 #include "parser/parse.h" d51 1 a51 1 #include "utils/fmgr.h" @ 1.36 log @fixes due to prototypes @ text @d8 1 a8 1 * $Header: RCS/executor.h,v 1.35 91/08/15 17:45:09 caetta Exp Locker: glass $" a19 1 #include @ 1.35 log @more aggregates...ho, hum... @ text @d8 1 a8 1 * $Header: lib/H/executor/RCS/executor.h,v 1.34 90/10/01 07:46:08 cimarron Exp Locker: caetta $" d71 2 d82 1 d89 1 a89 29 #include "executor/aggregate.h" #include "executor/x_append.h" #include "executor/x_debug.h" #include "executor/x_endnode.h" #include "executor/x_eutils.h" #include "executor/x_execam.h" #include "executor/x_execfmgr.h" #include "executor/x_execinit.h" #include "executor/x_execmain.h" #include "executor/x_execmmgr.h" #include "executor/x_execstats.h" #include "executor/x_exist.h" #include "executor/hashjoin.h" #include "executor/x_indexscan.h" #include "executor/x_initnode.h" #include "executor/x_material.h" #include "executor/x_mergejoin.h" #include "executor/x_nestloop.h" #include "executor/x_parallel.h" #include "executor/x_procnode.h" #include "executor/x_qual.h" #include "executor/recursive.h" #include "executor/x_result.h" #include "executor/x_scan.h" #include "executor/x_seqscan.h" #include "executor/x_sort.h" #include "executor/x_tuples.h" #include "executor/x_unique.h" #include "executor/x_xdebug.h" @ 1.34 log @converted everything to use the new TupleTableSlot abstractions @ text @d8 1 a8 1 * $Header: RCS/executor.h,v 1.33 90/10/01 01:15:19 cimarron Exp $" d61 1 d86 1 @ 1.33 log @*** empty log message *** @ text @d8 1 a8 1 * $Header: RCS/executor.h,v 1.32 90/08/18 15:29:51 cimarron Exp Locker: cimarron $" @ 1.32 log @moved lots of stuff to execmisc.h @ text @d8 1 a8 1 * $Header: RCS/executor.h,v 1.30 90/08/13 20:58:21 hong Exp Locker: hong $" a98 1 #include "executor/x_main.h" @ 1.31 log @modification for parallel query processing @ text @d21 1 d23 1 a23 1 #include "tmp/c.h" d35 3 d39 1 d41 1 a41 2 #include "tmp/align.h" #include "storage/buf.h" d43 1 a43 1 #include "tmp/clib.h" d45 2 d48 4 a52 4 #include "access/ftup.h" #include "access/heapam.h" #include "access/htup.h" #include "access/itup.h" d55 1 a55 4 #include "parser/parse.h" #include "tmp/pmod.h" #include "executor/recursion_a.h" #include "executor/recursion.h" a56 4 #include "tmp/simplelists.h" #include "strings.h" #include "catalog/syscache.h" #include "access/tqual.h" d79 1 a79 222 /* ---------------------------------------------------------------- * executor shared memory segment header definition * * After the executor's shared memory segment is allocated * the initial bytes are initialized to contain 2 pointers. * the first pointer points to the "low" end of the available * area and the second points to the "high" end. * * When part of the shared memory is reserved by a call to * ExecSMAlloc(), the "low" pointer is advanced to point * beyond the newly allocated area to the available free * area. If an allocation would cause "low" to exceed "high", * then the allocation fails and an error occurrs. * * Note: Since no heap management is done, there is no * provision for freeing shared memory allocated via ExecSMAlloc() * other than wipeing out the entire space with ExecSMClean(). * ---------------------------------------------------------------- */ typedef struct ExecSMHeaderData { Pointer low; /* pointer to low water mark */ Pointer high; /* pointer to high water mark */ } ExecSMHeaderData; typedef ExecSMHeaderData *ExecSMHeader; /* ---------------------------------------------------------------- * #define macros * XXX some of the macro definitions are copied to * tcop/pfrag.c in order to break up this catch-all * .h file. * ---------------------------------------------------------------- */ /* ---------------- * the reverse alignment macros are for use with the executor * shared memory allocator's ExecSMHighAlloc routine which * allocates memory from the high-area "down" to the low-area. * In this case we need alignment in the "other" direction than * provided by SHORTALIGN and LONGALIGN * ---------------- */ #define REVERSESHORTALIGN(LEN)\ (((long)(LEN)) & ~01) #ifndef sun #define REVERSELONGALIGN(LEN)\ (((long)(LEN)) & ~03) #else #define REVERSELONGALIGN(LEN) REVERSESHORTALIGN(LEN) #endif /* ---------------- * miscellany * ---------------- */ #define ExecCNull(Cptr) (Cptr == NULL) #define ExecCTrue(bval) (bval != 0) #define ExecCFalse(bval) (bval == 0) #define ExecCNot(bval) \ (ExecCFalse(bval) ? EXEC_C_TRUE : EXEC_C_FALSE) #define ExecRevDir(direction) (direction - 1) /* ---------------- * query descriptor accessors * ---------------- */ #define GetOperation(queryDesc) (List) CAR(queryDesc) #define QdGetParseTree(queryDesc) (List) CAR(CDR(queryDesc)) #define QdGetPlan(queryDesc) (Plan) CAR(CDR(CDR(queryDesc))) #define QdGetState(queryDesc) (EState) CAR(CDR(CDR(CDR(queryDesc)))) #define QdGetFeature(queryDesc) (List) CAR(CDR(CDR(CDR(CDR(queryDesc))))) #define QdSetState(queryDesc, s) \ (CAR(CDR(CDR(CDR(queryDesc)))) = (List) s) #define QdSetFeature(queryDesc, f) \ (CAR(CDR(CDR(CDR(CDR(queryDesc))))) = (List) f) /* ---------------- * query feature accessors * ---------------- */ #define FeatureGetCommand(feature) CAR(feature) #define FeatureGetCount(feature) CAR(CDR(feature)) #define QdGetCommand(queryDesc) FeatureGetCommand(QdGetFeature(queryDesc)) #define QdGetCount(queryDesc) FeatureGetCount(QdGetFeature(queryDesc)) /* ---------------- * parse tree accessors * ---------------- */ #define parse_tree_root(parse_tree) \ CAR(parse_tree) #define parse_tree_target_list(parse_tree) \ CAR(CDR(parse_tree)) #define parse_tree_qualification(parse_tree) \ CAR(CDR(CDR(parse_tree))) #define parse_tree_root_num_levels(parse_tree_root) \ CAR(parse_tree_root) #define parse_tree_root_command_type(parse_tree_root) \ CAR(CDR(parse_tree_root)) #define parse_tree_root_result_relation(parse_tree_root) \ CAR(CDR(CDR(parse_tree_root))) #define parse_tree_root_range_table(parse_tree_root) \ CAR(CDR(CDR(CDR(parse_tree_root)))) #define parse_tree_root_priority(parse_tree_root) \ CAR(CDR(CDR(CDR(CDR(parse_tree_root))))) #define parse_tree_root_rule_info(parse_tree_root) \ CAR(CDR(CDR(CDR(CDR(CDR((parse_tree_root))))))) #define parse_tree_range_table(parse_tree) \ parse_tree_root_range_table(parse_tree_root(parse_tree)) #define parse_tree_result_relation(parse_tree) \ parse_tree_root_result_relation(parse_tree_root(parse_tree)) /* ---------------- * macros to determine node types * ---------------- */ #define ExecIsRoot(node) LispNil #define ExecIsResult(node) IsA(node,Result) #define ExecIsExistential(node) IsA(node,Existential) #define ExecIsAppend(node) IsA(node,Append) #define ExecIsParallel(node) IsA(node,Parallel) #define ExecIsRecursive(node) IsA(node,Recursive) #define ExecIsNestLoop(node) IsA(node,NestLoop) #define ExecIsMergeJoin(node) IsA(node,MergeJoin) #define ExecIsHashJoin(node) IsA(node,HashJoin) #define ExecIsSeqScan(node) IsA(node,SeqScan) #define ExecIsIndexScan(node) IsA(node,IndexScan) #define ExecIsMaterial(node) IsA(node,Material) #define ExecIsSort(node) IsA(node,Sort) #define ExecIsUnique(node) IsA(node,Unique) #define ExecIsHash(node) IsA(node,Hash) #define ExecIsScanTemp(node) IsA(node,ScanTemp) /* ---------------------------------------------------------------- * debugging structures * ---------------------------------------------------------------- */ /* ---------------- * ExecAllocDebugData is used by ExecAllocDebug() and ExecFreeDebug() * to keep track of memory allocation. * ---------------- */ typedef struct ExecAllocDebugData { Pointer pointer; Size size; String routine; String file; int line; SLNode Link; } ExecAllocDebugData; /* ---------------- * DebugVariable is a structure holding a string * specifying the name of a debugging variable and * a pointer specifying the address of the object * holding the variable's value. This is used only * in debug.c * ---------------- */ typedef struct DebugVariable { String debug_variable; Pointer debug_address; } DebugVariable; typedef DebugVariable *DebugVariablePtr; /* ---------------------------------------------------------------- * externs * ---------------------------------------------------------------- */ /* * miscellany */ extern Relation amopen(); extern Relation AMopen(); extern Relation amopenr(); extern HeapScanDesc ambeginscan(); extern HeapTuple amgetnext(); extern char * amgetattr(); extern RuleLock aminsert(); extern RuleLock amdelete(); extern RuleLock amreplace(); extern GeneralInsertIndexResult AMinsert(); extern GeneralRetrieveIndexResult AMgettuple(); extern HeapTuple RelationGetHeapTupleByItemPointer(); extern Pointer get_cs_ResultTupleSlot(); extern Pointer get_css_ScanTupleSlot(); extern bool ExecIsInitialized; extern Const ConstTrue; extern Const ConstFalse; extern SLList ExecAllocDebugList; extern int _debug_hook_id_; extern HookNode _debug_hooks_[]; @ 1.30 log @to reduce levels of include nestings @ text @d8 1 a8 1 * $Header: RCS/executor.h,v 1.29 90/08/08 08:21:57 cimarron Exp Locker: hong $" d22 2 a23 2 #include "c.h" #include "pg_lisp.h" d32 1 a32 1 #include "execdebug.h" d34 6 a39 6 #include "istrat.h" #include "skey.h" #include "align.h" #include "buf.h" #include "catname.h" #include "clib.h" d42 13 a54 13 #include "fmgr.h" #include "ftup.h" #include "heapam.h" #include "htup.h" #include "itup.h" #include "log.h" #include "mcxt.h" #include "parse.h" #include "pmod.h" #include "recursion_a.h" #include "recursion.h" #include "rel.h" #include "simplelists.h" d56 2 a57 2 #include "syscache.h" #include "tqual.h" d63 5 a67 5 #include "printtup.h" #include "primnodes.h" #include "plannodes.h" #include "execnodes.h" #include "parsetree.h" d69 2 a70 2 #include "prs2.h" #include "prs2stub.h" d76 3 a78 3 #include "primnodes.a.h" #include "plannodes.a.h" #include "execnodes.a.h" a107 26 * parallel fragment definition * * The parallel optimiser returns a FragmentInfo structure * which contains an array of fragment structures which * the executor executes in parallel. The Fragment structure * contains a pair of pointers - one to a current node in * the query plan and one to a replacement parallel node. * * ExecuteFragements() executes the fragment plans and replaces * the corresponding nodes in the query plan with materialized * results. * ---------------------------------------------------------------- */ typedef struct FragmentData { Plan current; /* pointer to node in query plan */ Plan replacement; /* pointer to parallel replacement node */ } FragmentData; typedef FragmentData *Fragment; typedef struct FragmentInfo { Fragment fragments; /* fragments to execute in parallel */ int numFragments; /* size of fragements array */ } FragmentInfo; /* ---------------------------------------------------------------- d109 3 d230 1 @ 1.29 log @reorganized some header files @ text @d8 1 a8 1 * $Header: RCS/executor.h,v 1.28 90/08/01 14:35:48 sp Exp Locker: cimarron $" d34 1 @ 1.28 log @Include "prs2.h" and "prs2stub.h" @ text @d8 1 a8 1 * $Header: RCS/executor.h,v 1.27 90/07/02 20:30:19 cimarron Exp $" a34 1 #include "anum.h" a36 1 #include "cat.h" a52 1 #include "rproc.h" d57 4 @ 1.27 log @reorganized headers and extern include files. @ text @d8 1 a8 1 * $Header: RCS/executor.h,v 1.26 90/06/07 18:20:18 cimarron Exp $" d66 3 @ 1.26 log @made changes to simplify header include files @ text @d8 1 a8 1 * $Header: RCS/executor.h,v 1.24 90/03/31 18:54:18 cimarron Exp $" d25 9 d41 2 a42 1 #include "execdefs.h" a67 9 * executor debugging definitions are kept in a separate file * so people can customize what debugging they want to see and not * have this information clobbered every time a new version of * executor.h is checked in -cim 10/26/89 * ---------------- */ #include "execdebug.h" /* ---------------- d307 3 d321 2 d324 11 a334 11 #include "executor/append.h" #include "executor/debug.h" #include "executor/endnode.h" #include "executor/eutils.h" #include "executor/execam.h" #include "executor/execfmgr.h" #include "executor/execinit.h" #include "executor/execmain.h" #include "executor/execmmgr.h" #include "executor/execstats.h" #include "executor/exist.h" d336 9 a344 9 #include "executor/indexscan.h" #include "executor/initnode.h" #include "executor/main.h" #include "executor/material.h" #include "executor/mergejoin.h" #include "executor/nestloop.h" #include "executor/parallel.h" #include "executor/procnode.h" #include "executor/qual.h" d346 7 a352 7 #include "executor/result.h" #include "executor/scan.h" #include "executor/seqscan.h" #include "executor/sort.h" #include "executor/tuples.h" #include "executor/unique.h" #include "executor/xdebug.h" @ 1.25 log @Added sparc stuff for LONGALIGH @ text @d8 1 a8 1 * $Header: RCS/executor.h,v 1.24 90/03/31 18:54:18 cimarron Exp Locker: kemnitz $" d25 1 a25 1 #include "access.h" d29 1 a29 1 #include "catalog.h" a49 1 #include "tuple.h" d143 1 a143 3 #if defined(sun) && ! defined(sparc) #define REVERSELONGALIGN(LEN) REVERSESHORTALIGN(LEN) #else d146 2 @ 1.24 log @moved #defines shared by executor and tcop to other places (execdefs.h) @ text @d8 1 a8 1 * $Header: RCS/executor.h,v 1.23 90/03/13 11:57:52 cimarron Exp $" d144 3 a146 1 #ifndef sun a148 2 #else #define REVERSELONGALIGN(LEN) REVERSESHORTALIGN(LEN) @ 1.23 log @fixed a structure defn problem @ text @d8 1 a8 1 * $Header: RCS/executor.h,v 1.22 90/03/13 08:01:47 cimarron Exp $" d32 1 a126 73 /* ---------------------------------------------------------------- * constant #defines * ---------------------------------------------------------------- */ /* ---------------- * memory management defines * ---------------- */ #define M_STATIC 0 /* Static allocation mode */ #define M_DYNAMIC 1 /* Dynamic allocation mode */ /* ---------------- * executor scan direction definitions * ---------------- */ #define EXEC_FRWD 1 /* Scan forward */ #define EXEC_BKWD -1 /* Scan backward */ /* ---------------- * ExecutePlan() tuplecount definitions * ---------------- */ #define ALL_TUPLES 0 /* return all tuples */ #define ONE_TUPLE 1 /* return only one tuple */ /* ---------------- * boolean value returned by C routines * ---------------- */ #define EXEC_C_TRUE 1 /* C language boolean truth constant */ #define EXEC_C_FALSE 0 /* C language boolean false constant */ /* ---------------- * constants used by ExecMain * ---------------- */ #define EXEC_START 1 #define EXEC_END 2 #define EXEC_DUMP 3 #define EXEC_FOR 4 #define EXEC_BACK 5 #define EXEC_FDEBUG 6 #define EXEC_BDEBUG 7 #define EXEC_DEBUG 8 #define EXEC_RETONE 9 #define EXEC_RESULT 10 #define EXEC_INSERT_RULE 11 #define EXEC_DELETE_RULE 12 #define EXEC_DELETE_REINSERT_RULE 13 #define EXEC_MAKE_RULE_EARLY 14 #define EXEC_MAKE_RULE_LATE 15 #define EXEC_INSERT_CHECK_RULE 16 #define EXEC_DELETE_CHECK_RULE 17 /* ---------------- * Merge Join states * ---------------- */ #define EXEC_MJ_INITIALIZE 1 #define EXEC_MJ_JOINMARK 2 #define EXEC_MJ_JOINTEST 3 #define EXEC_MJ_JOINTUPLES 4 #define EXEC_MJ_NEXTOUTER 5 #define EXEC_MJ_TESTOUTER 6 #define EXEC_MJ_NEXTINNER 7 #define EXEC_MJ_SKIPINNER 8 #define EXEC_MJ_SKIPOUTER 9 @ 1.22 log @*** empty log message *** @ text @d8 1 a8 1 * $Header: RCS/executor.h,v 1.21 90/03/12 16:26:06 cimarron Exp $" d339 16 @ 1.21 log @Integration Checkin @ text @d8 1 a8 1 * $Header: RCS/executor.h,v 1.20 90/03/01 15:39:42 cimarron Exp $" a374 1 d376 1 d379 6 d386 1 d403 1 @ 1.20 log @general changes to add parallelism support, in-memory relations, and various code cleanups. @ text @d8 1 a8 1 * $Header: RCS/executor.h,v 1.19 90/02/23 19:45:32 cimarron Exp $" d27 1 d74 19 d94 4 d99 2 d206 18 a226 1 d291 1 a291 1 CAR(CDR(CDR(CDR(CDRCDR((parse_tree_root)))))) @ 1.19 log @changed some Qd macros. @ text @d8 1 a8 1 * $Header: RCS/executor.h,v 1.18 90/02/01 13:51:37 cimarron Exp Locker: cimarron $" d320 1 @ 1.18 log @added support for hooks, unique, parallel and material nodes @ text @d8 1 a8 1 * $Header: RCS/executor.h,v 1.17 90/01/31 17:38:25 cimarron Exp Locker: cimarron $" d213 5 a217 2 #define QdGetCommand(queryDesc) CAR(QdGetFeature(queryDesc)) #define QdGetCount(queryDesc) CAR(CDR(QdGetFeature(queryDesc))) @ 1.17 log @added unique, material and parallel node definitions -cim @ text @d8 1 a8 1 * $Header: RCS/executor.h,v 1.14 89/11/02 18:05:35 cimarron Exp $" d321 3 @ 1.16 log @removed the #include of rulemgr.h, executor/rulemgr.h and executor/rulelocks.h (these files have been removed) @ text @d8 1 a8 1 * $Header: RCS/executor.h,v 1.15 90/01/30 16:47:09 jamesb Exp Locker: sp $" d30 1 d44 1 d73 2 d76 28 d263 1 d270 1 d272 1 d275 4 d280 15 a294 1 /* ---------------------------------------------------------------- d320 2 d333 1 d336 1 d345 1 a345 369 /* ---------------------------------------------------------------- * shit whose time is to die * (but we keep it around for reference purposes) * ---------------------------------------------------------------- */ #ifdef TIMETODIE #ifdef NOTYET /* ---------------- * Merge Join Macros * ---------------- */ #define MJGetOuterTuple(node) GetMJOuterTuple(get_state(node)) #define MJSetOuterTuple(node,value) setf(MJGetOuterTuple(node),value) #define MJGetTupType(node) GetMJTupType(get_state(node)) #define MJSetTupType(node,value) setf(MJGetTupType(node),value) #define MJGetTupValue(node) GetMJTupValue(get_state(node)) #define MJSetTupValue(node,value) setf(MJGetTupValue(node),value) #define MJGetBufferPage(node) GetMJBufferPage(get_state(node)) #define MJSetBufferPage(node,value) setf(MJGetBufferPage(node),value) #define MJGetOSortopI(node) GetMJOSortopI(get_state(node)) #define MJSetOSortopI(node,value) setf(MJGetOSortopI(node),value) #define MJGetISortopO(node) GetMJISortopO(get_state(node)) #define MJSetISortopO(node,value) setf(MJGetISortopO(node),value) #define MJGetMarkFlag(node) GetMJMarkFlag(get_state(node)) #define MJSetMarkFlag(node,value) setf(MJGetMarkFlag(node),value) #define MJGetFrwdMarkPos(node) GetMJFrwdMarkPos(get_state(node)) #define MJSetFrwdMarkPos(node,value) setf(MJGetFrwdMarkPos(node),value) #define MJGetBkwdMarkPos(node) GetMJBkwdMarkPos(get_state(node)) #define MJSetBkwdMarkPos(node,value) setf(MJGetBkwdMarkPos(node),value) #define MJGetMarkPos(node) \ (execDirection == EXEC_FRWD ? \ MJGetFrwdMarkPos(node) : MJGetBkwdMarkPos(node)) #define MJSetMarkPos(node,scanPos) \ (execDirection == EXEC_FRWD ? \ MJSetFrwdMarkPos(node,scanPos) : MJSetBkwdMarkPos(node,scanPos)) #endif NOTYET #ifdef NOTYET /* ---------------- * sort node defines * ---------------- */ #define SortGetSortedFlag(node) GetSortFlag(get_state(node)) #define SortSetSortedFlag(node,value) setf(SortGetSortedFlag (node),value) #define SortGetSortKeys(node) GetSortKeys(get_state(node)) #define SortSetSortKeys(node,value) setf(SortGetSortKeys(node),value) #endif NOTYET #ifdef NOTYET /* * index scan constants * * Offset definitions to access fields in 'states' of index nodes. */ #define EXEC_INDEXSCAN_IndexPtr 0 #define EXEC_INDEXSCAN_RuleFlag 1 #define EXEC_INDEXSCAN_RuleDesc 2 /* * seqscan constants * * The folowing offsets are used to access state information from the * 'states' field of the seqscan nodes */ #define EXEC_SEQSCAN_RuleFlag 0 #define EXEC_SEQSCAN_RuleDesc 1 /* * rule lock constants */ #define EXEC_EARLY 0 #define EXEC_LATE 1 #define EXEC_REFUSE 2 #define EXEC_ALWAYS 3 #endif NOTYET /* ---------------- * index scan accessor macros * * IGetRelID(node) get the id of the relation to be scanned * IGetRelDesc(node) get the relation descriptor from relation id * IGetScanDesc(node) get the scan descriptor from relation id * IGetQual(node) get the qualification clause * IGetTarget(node) get the target list * IGetRuleFlag(node) get the flag indicating rule activation * ISetRuleFlag(node, value) set the flag indicating rule activation * IGetRuleDesc(node) get rule descriptor * ISetRuleDesc(node, value) set rule descriptor * IGetIndices(node) get indices * IGetIndexPtr(node) get index pointer * ISetIndexPtr(node, value) set index pointer * IGetIndexQual(node) get index qualifications * ---------------- */ #define IGetRelID(node) get_scanrelid(node) #define IGetRelDesc(node) ExecGetRelDesc(IGetRelID(node)) #define IGetScanDesc(node) ExecGetScanDesc(IGetRelID(node)) #define IGetQual(node) get_qpqual(node) #define IGetTarget(node) get_qptargetlist(node) #define IGetRuleFlag(node) \ ExecGetStates(EXEC_INDEXSCAN_RuleFlag, get_states(node)) #define ISetRuleFlag(node, value) \ ExecSetStates(EXEC_INDEXSCAN_RuleFlag, get_states(node)), value) #define IGetRuleDesc(node) \ ExecGetStates(EXEC_INDEXSCAN_RuleDesc, get_states(node)) #define ISetRuleDesc(node, value) \ ExecSetStates(EXEC_INDEXSCAN_RuleDesc, get_states(node), value) #define IGetIndices(node) get_indxid(node) #define IGetIndexPtr(node) \ ExecGetStates(EXEC_INDEXSCAN_IndexPtr, get_states(node)) #define ISetIndexPtr(node, value) \ ExecSetStates(EXEC_INDEXSCAN_IndexPtr, get_states(node), value) #define IGetIndexQual(node) \ getindxqual(node) /* * XXX automatic conversion failed on this one but we might not need it * -cim 8/4/89 * * get the scan descriptor from index id = (relDesc, scanDesc) * * #define IGetIScanDesc,indexID (),ExecGetScanDesc (indexID) */ /* ---------------- * append node macros * ---------------- */ #define append_nplans_is_valid(nplans) \ (nplans > 0) #define append_whichplan_is_valid(whichplan, nplans) \ (whichplan >= 0 && whichplan < nplans) #define append_initialized_is_valid(initialized) \ (lispVectorp(initialized)) #define append_plans_is_valid(plans) \ (lispAtomp(plans)) #define append_rtentries_is_valid(rtentries) \ (lispAtomp(rtentries)) /* ---------------- * nest loop macros * ---------------- */ #define NLGetOuterTuple(node) GetNLOuterTuple(get_state(node)) #define NLSetOuterTuple(node,value) \ setf(NLGetOuterTuple(node), ppreserve (value)) #define NLGetPortalFlag(node) GetNLPortalFlag(get_state(node)) #define NLSetPortalFlag(node,value) setf(NLGetPortalFlag(node), value) #define NLGetTupType(node) GetNLTupType(get_state(node)) #define NLSetTupType(node,value) setf(NLGetTupType(node), value) #define NLGetTupValue(node) GetNLTupValue(get_state(node)) #define NLSetTupValue(node,value) setf(NLGetTupValue(node), value) /* ---------------- * scan/relation descriptor accessors * ---------------- */ #define SGetScanDesc(node) \ ExecGetScanDesc(get_scanrelid(node)) #define SSetScanDesc(node, scanDesc) \ ExecSetScanDesc(get_scanrelid(node), scanDesc) #define SGetRelDesc(node) \ ExecGetRelDesc(get_scanrelid(node)) #define SSetRelDesc(node,relDesc) \ ExecSetRelDesc(get_scanrelid(node), relDesc) /* ---------------- * Get/Set scan/relation descriptor from index id * ---------------- */ #define SGetIScanDesc(indexID) ExecGetScanDesc(indexID) #define SSetIScanDesc(indexID,indexDesc) ExecSetScanDesc(indexID, indexDesc) #define SGetIRelDesc(indexID) ExecGetRelDesc(indexID) #define SSetIRelDesc(indexID) ExecSetRelDesc(indexID) /* ---------------- * access state information of SCAN nodes * ---------------- */ #define SGetBufferPage(node) GetScanBufferPage(get_state(node)) #define SSetBufferPage(node,value) setf(SGetBufferPage(node),value) #define SGetTupType(node) GetScanTupType(get_state(node)) #define SSetTupType(node,value) setf(SGetTupType(node),value) #define SGetTupValue(node) GetScanTupValue(get_state(node)) #define SSetTupValue(node,value) setf(SGetTupValue(node),value) #define SGetOldRelId(node) GetScanOldRelId(get_state(node)) #define SSetOldRelId(node,value) setf(SGetOldRelId(node),value) /* * this is the attr types for tuples being scanned, not those returned * according to the target list */ #define SGetScanType(node) \ ExecGetTypeInfo(ExecGetRelDesc(get_scanrelid(node))) #define SGetRuleFlag(node) GetScanRuleFlag(get_state(node)) #define SSetRuleFlag(node,value) setf(SGetRuleFlag(node),value) #define SGetRuleDesc(node) GetScanRuleDesc(get_state (node)) #define SSetRuleDesc(node,value) setf(SGetRuleDesc(node),value) #define SGetProcLeftFlag(node) GetScanProcLeftFlag(get_state (node)) #define SSetProcLeftFlag(node,value) setf(SGetProcLeftFlag(node),value) #define SGetIndexPtr(node) GetScanIndexPtr(get_state (node)) #define SSetIndexPtr(node,value) setf(SGetIndexPtr(node),value) #define SGetSkeys(node) GetScanSkeys(get_state (node)) #define SSetSkeys(node,value) setf(SGetSkeys(node),value) #define SGetSkeysCount(node) GetScanSkeysCount(get_state (node)) #define SSetSkeysCount(node,value) setf(SGetSkeysCount(node),value) /* ---------------- * get/set index id pointed by the index ptr * ---------------- */ #define SGetIndexID(indexPtr,node) \ nth(indexPtr, get_indxid(node)) #define SSetIndexID(indexPtr,node,value) \ setf(SGetIndexPtr(indexPtr, get_indxid(node)), value) /* ---------------- * sequential scan node accessors * ---------------- */ #define SGetRelID(node) get_scanrelid(node) #define SGetQual(node) get_qpqual(node) #define SGetTarget(node) get_qptargetlist(node) /* ---------------- * result node accessors * ---------------- */ #define ResGetLoop(node) get_Loop(get_resstate(node)) #define ResSetLoop(node,value) set_Loop(get_resstate(node), value) #define ResGetLeftTuple(node) get_LeftTuple(get_resstate(node)) #define ResSetLeftTuple(node,value) set_LeftTuple(get_resstate(node), value) #define ResGetTupType(node) get_TupType(get_resstate(node)) #define ResSetTupType(node,value) set_TupType(get_resstate(node), value) #define ResGetTupValue(node) get_TupValue(get_resstate(node)) #define ResSetTupValue(node,value) set_TupValue(get_resstate(node), value) #define ResGetLevel(node) get_Level(get_resstate(node)) #define ResSetLevel(node,value) set_Level(get_resstate(node), value) /* ---------------- * Retrieve/Construct the components in relation ID. * Relation ID which is the relation name * is changed into (RelDesc ScanDesc) * after initialization. * ---------------- */ #define ExecMakeRelID(relDesc,scanDesc) \ lispList(relDesc,scanDesc) #define ExecGetRelDesc(relID) \ (CAR(relID)) #define ExecSetRelDesc(relID,relDesc) \ (ExecGetRelDesc(relID) = (relDesc))) #define ExecGetScanDesc(relID) \ (CAR(CDR(relID))) #define ExecSetScanDesc(relID,relDesc) \ (ExecGetScanDesc(relID) = (relDesc)) /* ---------------- * Things for tuple tid. * * (initializtion is in in executor.c as follows) * extern List _qual_tuple_tid_ = 0; * extern List _qual_tuple_ = LispNil; * extern List _result_relation_ = LispNil; * extern List _resdesc_ = LispNil; * ---------------- */ extern int _qual_tuple_tid_; extern List _qual_tuple_; extern Relation _result_relation_; extern List _resdesc_; /* ---------------- * Global variables * * TODO * Put into root node to allow concurrent executors * * initializtion is in in executor.c as follows: * * extern List execDirection = EXEC_FRWD; * extern List execTime = 0; * extern List execOwner = 0; * extern List execSPlanInfo = LispNil; * extern List execErrorMssg = LispNil; * extern List execRangeTbl = LispNil; * extern List _relation_relation_ = LispNil; * ---------------- */ extern int execDirection; extern int execTime; extern int execOwner; extern char *execErrorMssg; extern List execSPlanInfo; extern List execRangeTbl; extern Relation _relation_relation_; /* ---------------- * Variables global to all concurrent executors * ---------------- * * Queue of rule plans that want to be run as a Now time qual transacation * (initializtion is in in executor.c as follows) * * extern List _rule_now_plans_queue_ = LispNil; * * Queue of rule plans that want to be run as a Self Time qual transaction * * extern List _rule_self_plans_queue_ = LispNil; */ #endif TIMETODIE @ 1.15 log @provided for Recursive node @ text @d8 1 a8 1 * $Header: RCS/executor.h,v 1.14 89/11/02 18:05:35 cimarron Exp Locker: jamesb $" a42 1 #include "rulemgr.h" a283 2 #include "executor/rulelocks.h" #include "executor/rulemgr.h" @ 1.14 log @added support for Merge Joins in the executor @ text @d8 1 a8 1 * $Header: RCS/executor.h,v 1.12 89/10/20 19:52:15 cimarron Exp $" d39 2 d232 1 d283 1 @ 1.13 log @#undef TUPLECOUNT -- causes bad pointer accesses on decstations. @ text @d8 1 a8 1 * $Header: RCS/executor.h,v 1.12 89/10/20 19:52:15 cimarron Exp Locker: mao $" d25 1 d30 1 d33 1 d36 1 d53 10 a62 1 /* d64 1 d76 1 a76 5 * TUPLECOUNT is a #define which, if set, will have the * executor keep track of tuple counts. This might be * causing some problems with the decstation stuff so * you might want to undefine this if you are doing work * on the decs - cim 10/20/89 a79 7 /* #define TUPLECOUNT 1 */ #undef TUPLECOUNT /* * memory management defines */ d83 4 d90 4 d97 1 a97 1 /* d99 1 a100 1 d104 1 a104 16 /* * attribute constants and definitions */ #ifdef vax #define EXEC_MAXATTR 1584 #endif #ifndef vax #define EXEC_MAXATTR 1600 /* Max # attributes */ #endif #define EXEC_T_CTID -1 #define EXEC_I_TID -3 #define EXEC_T_LOCK -2 /* d106 1 a107 1 d127 3 a129 3 /* ---------------------------------------------------------------- * #defines * ---------------------------------------------------------------- d131 9 d141 6 a146 1 /* ---------------- a236 1 @ 1.12 log @Added a #define TUPLECOUNT to control the inclusion of the tuple counting stuff. -cim @ text @d8 1 a8 1 * $Header: RCS/executor.h,v 1.11 89/10/17 13:44:50 cimarron Exp $" d70 2 a71 1 #define TUPLECOUNT 1 @ 1.11 log @changes to support MergeJoins in the executor. @ text @d8 1 a8 1 * $Header: RCS/executor.h,v 1.10 89/10/12 16:44:21 cimarron Exp $" d60 11 @ 1.10 log @pre-sort checkin for spyros. Sorts still don't work but functionality is almost there.. @ text @d8 1 a8 1 * $Header: RCS/executor.h,v 1.9 89/10/05 16:59:15 cimarron Exp $" d110 1 a118 32 #ifdef NOTYET /* * index scan constants * * Offset definitions to access fields in 'states' of index nodes. */ #define EXEC_INDEXSCAN_IndexPtr 0 #define EXEC_INDEXSCAN_RuleFlag 1 #define EXEC_INDEXSCAN_RuleDesc 2 /* * seqscan constants * * The folowing offsets are used to access state information from the * 'states' field of the seqscan nodes */ #define EXEC_SEQSCAN_RuleFlag 0 #define EXEC_SEQSCAN_RuleDesc 1 /* * rule lock constants */ #define EXEC_EARLY 0 #define EXEC_LATE 1 #define EXEC_REFUSE 2 #define EXEC_ALWAYS 3 #endif NOTYET d209 1 a209 1 #define ExecIsMergeJoin(node) IsA(node,MergeSort) d218 57 d333 6 d340 3 d344 5 a348 3 /* ---------------------------------------------------------------- * externs * ---------------------------------------------------------------- d351 2 a352 17 /* * miscellany */ extern Relation amopen(); extern Relation AMopen(); extern Relation amopenr(); extern HeapScanDesc ambeginscan(); extern HeapTuple amgetnext(); extern char * amgetattr(); extern RuleLock aminsert(); extern RuleLock amdelete(); extern RuleLock amreplace(); extern GeneralInsertIndexResult AMinsert(); extern GeneralRetrieveIndexResult AMgettuple(); extern HeapTuple RelationGetHeapTupleByItemPointer(); d354 2 a355 5 extern Const ConstTrue; extern Const ConstFalse; /* * public executor functions d358 4 a361 18 #include "executor/append.h" #include "executor/endnode.h" #include "executor/eutils.h" #include "executor/exist.h" #include "executor/indexscan.h" #include "executor/initnode.h" #include "executor/main.h" #include "executor/mergejoin.h" #include "executor/nestloop.h" #include "executor/procnode.h" #include "executor/qual.h" #include "executor/result.h" #include "executor/rulelocks.h" #include "executor/rulemgr.h" #include "executor/scan.h" #include "executor/seqscan.h" #include "executor/sort.h" #include "executor/tuples.h" d363 1 a363 5 /* ---------------------------------------------------------------- * shit whose time is to die * (but we keep it around for reference purposes) * ---------------------------------------------------------------- */ a364 1 #ifdef TIMETODIE @ 1.9 log @added code to support mirroring of heap updates to index relations @ text @d8 1 a8 1 * $Header: RCS/executor.h,v 1.8 89/09/18 20:25:22 cimarron Exp $" d37 1 @ 1.8 log @added dummy interfaces for parallel optimiser and made some misc changes.. @ text @d8 1 a8 1 * $Header: RCS/executor.h,v 1.7 89/09/18 08:19:48 cimarron Exp $" d29 1 d36 1 a146 22 /* * Constants taken from RuleLock.h */ #define RuleLockTypeWrite 0 /* Rule lock Write 0 */ #define RuleLockTypeRead1 1 /* Rule lock Write 1 */ #define RuleLockTypeRead2 2 /* Rule Lock Read 2 */ #define RuleLockTypeRead3 3 /* Rule Lock Read 3 */ /* * RuleLockIntermediate.ruletype is one of the following */ #define RuleTypeRetrieve 0 /* Retrieve rule */ #define RuleTypeReplace 1 /* Replace rule */ #define RuleTypeAppend 2 /* Append rule */ #define RuleTypeDelete 3 /* Delete rule */ #define RuleTypeRefuseRetrieve 4 /* Refuse retrieve rule */ #define RuleTypeRefuseReplace 5 /* Refuse replace rule */ #define RuleTypeRefuseAppend 6 /* Refuse append rule */ #define RuleTypeRefuseDelete 7 /* Refuse delete rule */ a246 19 #ifdef NOTYET /* ---------------- * index scan accessor macros * * IGetRelID(node) get the id of the relation to be scanned * IGetRelDesc(node) get the relation descriptor from relation id * IGetScanDesc(node) get the scan descriptor from relation id * IGetQual(node) get the qualification clause * IGetTarget(node) get the target list * IGetRuleFlag(node) get the flag indicating rule activation * ISetRuleFlag(node, value) set the flag indicating rule activation * IGetRuleDesc(node) get rule descriptor * ISetRuleDesc(node, value) set rule descriptor * IGetIndices(node) get indices * IGetIndexPtr(node) get index pointer * ISetIndexPtr(node, value) set index pointer * IGetIndexQual(node) get index qualifications * ---------------- */ a247 40 #define IGetRelID(node) get_scanrelid(node) #define IGetRelDesc(node) ExecGetRelDesc(IGetRelID(node)) #define IGetScanDesc(node) ExecGetScanDesc(IGetRelID(node)) #define IGetQual(node) get_qpqual(node) #define IGetTarget(node) get_qptargetlist(node) #define IGetRuleFlag(node) \ ExecGetStates(EXEC_INDEXSCAN_RuleFlag, get_states(node)) #define ISetRuleFlag(node, value) \ ExecSetStates(EXEC_INDEXSCAN_RuleFlag, get_states(node)), value) #define IGetRuleDesc(node) \ ExecGetStates(EXEC_INDEXSCAN_RuleDesc, get_states(node)) #define ISetRuleDesc(node, value) \ ExecSetStates(EXEC_INDEXSCAN_RuleDesc, get_states(node), value) #define IGetIndices(node) get_indxid(node) #define IGetIndexPtr(node) \ ExecGetStates(EXEC_INDEXSCAN_IndexPtr, get_states(node)) #define ISetIndexPtr(node, value) \ ExecSetStates(EXEC_INDEXSCAN_IndexPtr, get_states(node), value) #define IGetIndexQual(node) \ getindxqual(node) /* * XXX automatic conversion failed on this one but we might not need it * -cim 8/4/89 * * get the scan descriptor from index id = (relDesc, scanDesc) * * #define IGetIScanDesc,indexID (),ExecGetScanDesc (indexID) */ #endif NOTYET d327 1 d364 57 @ 1.7 log @added index scan support. @ text @d8 1 a8 1 * $Header: RCS/executor.h,v 1.5 89/08/31 14:09:52 cimarron Exp $" d29 1 d198 6 a205 13 * * BEWARE: the query "feature" can contain different sorts * of things depending on the operation. In particular, * in the case of "retrieve into", it is a list * * ('result intoRelationDesc) * * where 'result == lispInteger(EXEC_RESULT) and * intoRelationDesc == lispInteger(relation descriptor) * * It can also contain other stuff.. * * this is a real crappy interface.. we should fix it soon -cim 8/29/89 a209 3 #define QdGetIntoRelation(queryDesc) \ ((Relation) CInteger(CAR(CDR(QdGetFeature(queryDesc))))) @ 1.6 log @Working version of C-only demo @ text @d25 1 a25 1 #include "parse.h" d27 1 a27 2 #include "rel.h" #include "anum.h" d29 1 a29 1 #include "catalog.h" d31 3 d36 1 a37 2 #include "tqual.h" #include "pmod.h" d64 2 a65 2 #define EXEC_FRWD 0 /* Scan forward */ #define EXEC_BKWD 1 /* Scan backward */ d406 1 d411 3 d415 3 a426 1 #include "executor/error.h" @ 1.5 log @added a #include "tuples.h" needed by qual.c @ text @d8 1 a8 1 * $Header: RCS/executor.h,v 1.4 89/08/30 12:59:48 cimarron Exp $" @ 1.4 log @append nodes now work, provided plans are correct @ text @d8 1 a8 1 * $Header: RCS/executor.h,v 1.3 89/08/29 22:38:03 cimarron Exp $" d34 1 a276 87 * sequential scan node accessors * ---------------- */ #define SGetRelID(node) get_scanrelid(node) #define SGetQual(node) get_qpqual(node) #define SGetTarget(node) get_qptargetlist(node) #endif NOTYET #ifdef NOTYET /* ---------------- * scan/relation descriptor accessors * ---------------- */ #define SGetScanDesc(node) \ ExecGetScanDesc(get_scanrelid(node)) #define SSetScanDesc(node, scanDesc) \ ExecSetScanDesc(get_scanrelid(node), scanDesc) #define SGetRelDesc(node) \ ExecGetRelDesc(get_scanrelid(node)) #define SSetRelDesc(node,relDesc) \ ExecSetRelDesc(get_scanrelid(node), relDesc) /* ---------------- * Get/Set scan/relation descriptor from index id * ---------------- */ #define SGetIScanDesc(indexID) ExecGetScanDesc(indexID) #define SSetIScanDesc(indexID,indexDesc) ExecSetScanDesc(indexID, indexDesc) #define SGetIRelDesc(indexID) ExecGetRelDesc(indexID) #define SSetIRelDesc(indexID) ExecSetRelDesc(indexID) /* ---------------- * access state information of SCAN nodes * ---------------- */ #define SGetBufferPage(node) GetScanBufferPage(get_state(node)) #define SSetBufferPage(node,value) setf(SGetBufferPage(node),value) #define SGetTupType(node) GetScanTupType(get_state(node)) #define SSetTupType(node,value) setf(SGetTupType(node),value) #define SGetTupValue(node) GetScanTupValue(get_state(node)) #define SSetTupValue(node,value) setf(SGetTupValue(node),value) #define SGetOldRelId(node) GetScanOldRelId(get_state(node)) #define SSetOldRelId(node,value) setf(SGetOldRelId(node),value) /* * this is the attr types for tuples being scanned, not those returned * according to the target list */ #define SGetScanType(node) \ ExecGetTypeInfo(ExecGetRelDesc(get_scanrelid(node))) #define SGetRuleFlag(node) GetScanRuleFlag(get_state(node)) #define SSetRuleFlag(node,value) setf(SGetRuleFlag(node),value) #define SGetRuleDesc(node) GetScanRuleDesc(get_state (node)) #define SSetRuleDesc(node,value) setf(SGetRuleDesc(node),value) #define SGetProcLeftFlag(node) GetScanProcLeftFlag(get_state (node)) #define SSetProcLeftFlag(node,value) setf(SGetProcLeftFlag(node),value) #define SGetIndexPtr(node) GetScanIndexPtr(get_state (node)) #define SSetIndexPtr(node,value) setf(SGetIndexPtr(node),value) #define SGetSkeys(node) GetScanSkeys(get_state (node)) #define SSetSkeys(node,value) setf(SGetSkeys(node),value) #define SGetSkeysCount(node) GetScanSkeysCount(get_state (node)) #define SSetSkeysCount(node,value) setf(SGetSkeysCount(node),value) /* ---------------- * get/set index id pointed by the index ptr * ---------------- */ #define SGetIndexID(indexPtr,node) \ nth(indexPtr, get_indxid(node)) #define SSetIndexID(indexPtr,node,value) \ setf(SGetIndexPtr(indexPtr, get_indxid(node)), value) #endif NOTYET #ifdef NOTYET /* ---------------- a334 2 a336 23 * nest loop macros * ---------------- */ #define NLGetOuterTuple(node) GetNLOuterTuple(get_state(node)) #define NLSetOuterTuple(node,value) \ setf(NLGetOuterTuple(node), ppreserve (value)) #define NLGetPortalFlag(node) GetNLPortalFlag(get_state(node)) #define NLSetPortalFlag(node,value) setf(NLGetPortalFlag(node), value) #define NLGetTupType(node) GetNLTupType(get_state(node)) #define NLSetTupType(node,value) setf(NLGetTupType(node), value) #define NLGetTupValue(node) GetNLTupValue(get_state(node)) #define NLSetTupValue(node,value) setf(NLGetTupValue(node), value) #endif NOTYET #ifdef NOTYET /* ---------------- d395 1 a395 24 #ifdef NOTYET /* ---------------- * append node macros * ---------------- */ #define append_nplans_is_valid(nplans) \ (nplans > 0) #define append_whichplan_is_valid(whichplan, nplans) \ (whichplan >= 0 && whichplan < nplans) #define append_initialized_is_valid(initialized) \ (lispVectorp(initialized)) #define append_plans_is_valid(plans) \ (lispAtomp(plans)) #define append_rtentries_is_valid(rtentries) \ (lispAtomp(rtentries)) #endif NOTYET /* ---------------------------------------------------------------- d439 1 d444 117 @ 1.3 log @update queries checkin.. @ text @d8 1 a8 1 * $Header: RCS/executor.h,v 1.2 89/08/24 17:04:21 cimarron Exp $" d35 1 @ 1.2 log @seqscans with quals checkin @ text @d8 1 a8 1 * $Header$" d196 13 d211 5 a215 2 #define QdGetCommand(queryDesc) CAR(QdGetFeature(queryDesc)) #define QdGetCount(queryDesc) CAR(CDR(QdGetFeature(queryDesc))) @ 1.1 log @Initial revision @ text @d7 2 a10 1 static char *RCS_ID = "$Header$"; d22 1 d24 1 d28 1 d30 1 d33 2 d208 15 d226 7 d237 1 a237 1 CAR(CDR(CDR(CAR(CDR(parse_tree))))) a239 22 * Retrieve/Construct the components in relation ID. * Relation ID which is the relation name * is changed into (RelDesc ScanDesc) * after initialization. * ---------------- */ #define ExecMakeRelID(relDesc,scanDesc) \ lispList(relDesc,scanDesc) #define ExecGetRelDesc(relID) \ (CAR(relID)) #define ExecSetRelDesc(relID,relDesc) \ (ExecGetRelDesc(relID) = (relDesc))) #define ExecGetScanDesc(relID) \ (CAR(CDR(relID))) #define ExecSetScanDesc(relID,relDesc) \ (ExecGetScanDesc(relID) = (relDesc)) /* ---------------- a255 5 #ifdef TIMETODIE /* ---------------- * result node accessors * ---------------- */ a256 14 #define ResGetLoop(node) get_Loop(get_resstate(node)) #define ResSetLoop(node,value) set_Loop(get_resstate(node), value) #define ResGetLeftTuple(node) get_LeftTuple(get_resstate(node)) #define ResSetLeftTuple(node,value) set_LeftTuple(get_resstate(node), value) #define ResGetTupType(node) get_TupType(get_resstate(node)) #define ResSetTupType(node,value) set_TupType(get_resstate(node), value) #define ResGetTupValue(node) get_TupValue(get_resstate(node)) #define ResSetTupValue(node,value) set_TupValue(get_resstate(node), value) #define ResGetLevel(node) get_Level(get_resstate(node)) #define ResSetLevel(node,value) set_Level(get_resstate(node), value) #endif TIMETODIE a269 1 a511 2 d521 5 a525 3 extern Relation amopenr(); extern Bool ExprTrue; extern Bool ExprFalse; d527 3 a532 1 extern List ExecMain(); /* main */ d534 19 a552 5 extern List ExecGetSPlanTuple(); /* einternal */ extern void ExecSetSPlanTuple(); /* einternal */ extern List ExecGetSPlanType(); /* einternal */ extern void ExecSetSPlanType(); /* einternal */ extern List ExecInitSPlanInfo(); /* einternal */ d554 4 a557 9 extern List make_const(); /* einternal */ extern Expr ExecEvalVar(); /* einternal */ extern Expr ExecEvalOper(); /* einternal */ extern Expr ExecEvalFunc(); /* einternal */ extern Expr ExecEvalNot(); /* einternal */ extern Expr ExecEvalParam(); /* einternal */ extern Expr ExecEvalOr(); /* einternal */ extern List ExecQual(); /* einternal */ extern Expr ExecEvalExpr(); /* einternal */ d559 1 a559 2 extern List LispOr(); /* einternal */ extern Expr ExecMakeVarConst(); /* einternal */ d561 4 a564 3 extern List ExecOpenR(); /* eutils */ extern List ExecBeginScan(); /* eutils */ extern List GetIDFromRangeTbl(); /* eutils */ d566 10 a575 5 extern List ExecIndexScan(); /* indexscan */ extern List IndexNext(); /* indexscan */ extern List UseNextIndex(); /* indexscan */ extern List OpenScanIndices(); /* indexscan */ extern List MakeSkeys(); /* indexscan */ d577 9 a585 7 extern List InitPlan(); /* main */ extern List EndPlan(); /* main */ extern List ExecutePlan(); /* main */ extern List ExecAppend(); /* main */ extern List ExecRetrieve(); /* main */ extern List ExecDel(); /* main */ extern List ExecReplace(); /* main */ d587 2 a588 9 extern List GetMJOuterTuple(); /* mergejoin */ extern List GetMJTupType(); /* mergejoin */ extern List GetMJTupValue(); /* mergejoin */ extern List GetMJBufferPage(); /* mergejoin */ extern List GetMJOSortopI(); /* mergejoin */ extern List GetMJISortopO(); /* mergejoin */ extern List GetMJMarkFlag(); /* mergejoin */ extern List GetMJFrwdMarkPos(); /* mergejoin */ extern List GetMJBkwdarkPos(); /* mergejoin */ d590 2 a591 13 extern List ExecMergeJoin(); /* mergejoin */ extern List ExecInitMergeJoin(); /* mergejoin */ extern List ExecEndMergeJoin(); /* mergejoin */ extern List MergeSync(); /* mergejoin */ extern List RevScan(); /* mergejoin */ extern List DirScan(); /* mergejoin */ extern List SkipInner(); /* mergejoin */ extern List SkipOuter(); /* mergejoin */ extern List InnerSkipQual(); /* mergejoin */ extern List OuterSkipQual(); /* mergejoin */ extern List MJFormOSortopI(); /* mergejoin */ extern List MJFormISortopO(); /* mergejoin */ extern List Compare(); /* mergejoin */ d593 2 a594 4 extern List GetNLOuterTuple(); /* nestloop */ extern List GetNLTupType(); /* nestloop */ extern List GetNLTupValue(); /* nestloop */ extern List GetNLPortalFlag(); /* nestloop */ d596 2 a597 39 extern List ExecProcNode(); /* procnode */ extern List ExecRuleLocks (); /* rulelocks */ extern List exec_make_intermediate_locks (); /* rulelocks */ extern List exec_set_lock(); /* rulelocks */ extern List exec_run_plan(); /* rulelocks */ extern List exec_set_rule_default(); /* rulelocks */ extern List exec_determine_always(); /* rulelocks */ extern List GetRes(); /* result */ extern List ExecResult(); /* result */ extern List ExecInitResult(); /* result */ extern List ExecEndResult(); /* result */ extern List GetScanTupType(); /* scan */ extern List GetScanTupValue(); /* scan */ extern List GetScanRuleFlag(); /* scan */ extern List GetScanRuleDesc(); /* scan */ extern List GetScanProcLeftFlag(); /* scan */ extern List GetScanOldRelId(); /* scan */ extern List GetScanLispIndexPtr(); /* scan */ extern List GetScanSkeys(); /* scan */ extern List GetScanSkeysCount(); /* scan */ extern List GetSortFlag(); /* sort */ extern List GetSortKeys(); /* sort */ extern AttributePtr ExecGetTupType(); /* tuples */ extern AttributePtr ExecTypeFromTL(); /* tuples */ extern List ExecTargetList(); /* qual */ /* ---------------------------------------------------------------- * shit whose time is to die * ---------------------------------------------------------------- */ #ifdef TIMETODIE @