summaryrefslogtreecommitdiff
path: root/src/include/executor/nodeSubplan.h
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2004-03-17 01:02:24 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2004-03-17 01:02:24 +0000
commitc1352052ef1d4eeb2eb1d822a207ddc2d106cb13 (patch)
treecc396212df36959c1220a953a009636477c615b2 /src/include/executor/nodeSubplan.h
parent2c7e47343449e2a4f7694d04a5a4284d89246699 (diff)
downloadpostgresql-c1352052ef1d4eeb2eb1d822a207ddc2d106cb13.tar.gz
Replace the switching function ExecEvalExpr() with a macro that jumps
directly to the appropriate per-node execution function, using a function pointer stored by ExecInitExpr. This speeds things up by eliminating one level of function call. The function-pointer technique also enables further small improvements such as only making one-time tests once (and then changing the function pointer). Overall this seems to gain about 10% on evaluation of simple expressions, which isn't earthshaking but seems a worthwhile gain for a relatively small hack. Per recent discussion on pghackers.
Diffstat (limited to 'src/include/executor/nodeSubplan.h')
-rw-r--r--src/include/executor/nodeSubplan.h5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/include/executor/nodeSubplan.h b/src/include/executor/nodeSubplan.h
index 0335f1ca8c..475a2bb618 100644
--- a/src/include/executor/nodeSubplan.h
+++ b/src/include/executor/nodeSubplan.h
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $PostgreSQL: pgsql/src/include/executor/nodeSubplan.h,v 1.19 2003/11/29 22:41:01 pgsql Exp $
+ * $PostgreSQL: pgsql/src/include/executor/nodeSubplan.h,v 1.20 2004/03/17 01:02:24 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -19,7 +19,8 @@
extern void ExecInitSubPlan(SubPlanState *node, EState *estate);
extern Datum ExecSubPlan(SubPlanState *node,
ExprContext *econtext,
- bool *isNull);
+ bool *isNull,
+ ExprDoneCond *isDone);
extern void ExecEndSubPlan(SubPlanState *node);
extern void ExecReScanSetParamPlan(SubPlanState *node, PlanState *parent);