aboutsummaryrefslogtreecommitdiff
path: root/src/backend/executor/execMain.c
diff options
context:
space:
mode:
authorVadim B. Mikheev <vadim4o@yahoo.com>1998-02-13 03:26:53 +0000
committerVadim B. Mikheev <vadim4o@yahoo.com>1998-02-13 03:26:53 +0000
commit1a105cefbd4769a1ef857f94a71faed6cb76717b (patch)
tree2c9b0cf10965e5e1d31106451552aad0c7c7e18d /src/backend/executor/execMain.c
parent13637df458b1d5a4f773bd17d3b894d9ff27197b (diff)
downloadpostgresql-1a105cefbd4769a1ef857f94a71faed6cb76717b.tar.gz
postgresql-1a105cefbd4769a1ef857f94a71faed6cb76717b.zip
Support for subselects.
ExecReScan for nodeAgg, nodeHash, nodeHashjoin, nodeNestloop and nodeResult. Fixed ExecReScan for nodeMaterial. Get rid of #ifdef INDEXSCAN_PATCH. Get rid of ExecMarkPos and ExecRestrPos in nodeNestloop.
Diffstat (limited to 'src/backend/executor/execMain.c')
-rw-r--r--src/backend/executor/execMain.c40
1 files changed, 12 insertions, 28 deletions
diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c
index c4bea118db6..8702ede2483 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.41 1998/02/10 04:00:45 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.42 1998/02/13 03:26:38 vadim Exp $
*
*-------------------------------------------------------------------------
*/
@@ -110,7 +110,14 @@ ExecutorStart(QueryDesc *queryDesc, EState *estate)
/* sanity checks */
Assert(queryDesc != NULL);
-
+
+ if (queryDesc->plantree->nParamExec > 0)
+ {
+ estate->es_param_exec_vals = (ParamExecData*)
+ palloc (queryDesc->plantree->nParamExec * sizeof (ParamExecData));
+ memset (estate->es_param_exec_vals, 0 , queryDesc->plantree->nParamExec * sizeof (ParamExecData));
+ }
+
result = InitPlan(queryDesc->operation,
queryDesc->parsetree,
queryDesc->plantree,
@@ -177,31 +184,6 @@ ExecutorRun(QueryDesc *queryDesc, EState *estate, int feature, int count)
estate->es_processed = 0;
estate->es_lastoid = InvalidOid;
-#if 0
-
- /*
- * It doesn't work in common case (i.g. if function has a aggregate).
- * Now we store parameter values before ExecutorStart. - vadim
- * 01/22/97
- */
-#ifdef INDEXSCAN_PATCH
-
- /*
- * If the plan is an index scan and some of the scan key are function
- * arguments rescan the indices after the parameter values have been
- * stored in the execution state. DZ - 27-8-1996
- */
- if ((nodeTag(plan) == T_IndexScan) &&
- (((IndexScan *) plan)->indxstate->iss_RuntimeKeyInfo != NULL))
- {
- ExprContext *econtext;
-
- econtext = ((IndexScan *) plan)->scan.scanstate->cstate.cs_ExprContext;
- ExecIndexReScan((IndexScan *) plan, econtext, plan);
- }
-#endif
-#endif
-
switch (feature)
{
@@ -1246,7 +1228,8 @@ ExecAttrDefault(Relation rel, HeapTuple tuple)
econtext->ecxt_outertuple = NULL; /* outer tuple slot */
econtext->ecxt_relation = NULL; /* relation */
econtext->ecxt_relid = 0; /* relid */
- econtext->ecxt_param_list_info = NULL; /* param list info */
+ econtext->ecxt_param_list_info = NULL; /* param list info */
+ econtext->ecxt_param_exec_vals = NULL; /* exec param values */
econtext->ecxt_range_table = NULL; /* range table */
for (i = 0; i < ndef; i++)
{
@@ -1322,6 +1305,7 @@ ExecRelCheck(Relation rel, HeapTuple tuple)
econtext->ecxt_relation = rel; /* relation */
econtext->ecxt_relid = 0; /* relid */
econtext->ecxt_param_list_info = NULL; /* param list info */
+ econtext->ecxt_param_exec_vals = NULL; /* exec param values */
econtext->ecxt_range_table = rtlist; /* range table */
for (i = 0; i < ncheck; i++)