diff options
Diffstat (limited to 'src/backend/executor')
-rw-r--r-- | src/backend/executor/functions.c | 24 | ||||
-rw-r--r-- | src/backend/executor/spi.c | 19 |
2 files changed, 17 insertions, 26 deletions
diff --git a/src/backend/executor/functions.c b/src/backend/executor/functions.c index 5a7f4c0889f..3854978029b 100644 --- a/src/backend/executor/functions.c +++ b/src/backend/executor/functions.c @@ -9,7 +9,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/executor/functions.c,v 1.31 2000/01/26 05:56:22 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/executor/functions.c,v 1.32 2000/04/04 21:44:39 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -84,7 +84,6 @@ init_execution_state(FunctionCachePtr fcache, execution_state *nextes; execution_state *preves; List *queryTree_list, - *planTree_list, *qtl_item; int nargs = fcache->nargs; @@ -92,15 +91,17 @@ init_execution_state(FunctionCachePtr fcache, nextes = newes; preves = (execution_state *) NULL; - planTree_list = pg_parse_and_plan(fcache->src, fcache->argOidVect, - nargs, &queryTree_list, None, FALSE); + queryTree_list = pg_parse_and_rewrite(fcache->src, fcache->argOidVect, + nargs, FALSE); foreach(qtl_item, queryTree_list) { Query *queryTree = lfirst(qtl_item); - Plan *planTree = lfirst(planTree_list); + Plan *planTree; EState *estate; + planTree = pg_plan_query(queryTree); + if (!nextes) nextes = (execution_state *) palloc(sizeof(execution_state)); if (preves) @@ -141,8 +142,6 @@ init_execution_state(FunctionCachePtr fcache, nextes->estate = estate; preves = nextes; nextes = (execution_state *) NULL; - - planTree_list = lnext(planTree_list); } return newes; @@ -151,15 +150,12 @@ init_execution_state(FunctionCachePtr fcache, static TupleDesc postquel_start(execution_state *es) { -#ifdef FUNC_UTIL_PATCH - /* * Do nothing for utility commands. (create, destroy...) DZ - * 30-8-1996 */ if (es->qd->operation == CMD_UTILITY) return (TupleDesc) NULL; -#endif return ExecutorStart(es->qd, es->estate); } @@ -168,12 +164,10 @@ postquel_getnext(execution_state *es) { int feature; -#ifdef FUNC_UTIL_PATCH if (es->qd->operation == CMD_UTILITY) { - /* - * Process an utility command. (create, destroy...) DZ - + * Process a utility command. (create, destroy...) DZ - * 30-8-1996 */ ProcessUtility(es->qd->parsetree->utilityStmt, es->qd->dest); @@ -181,7 +175,6 @@ postquel_getnext(execution_state *es) CommandCounterIncrement(); return (TupleTableSlot *) NULL; } -#endif feature = (LAST_POSTQUEL_COMMAND(es)) ? EXEC_RETONE : EXEC_RUN; @@ -191,15 +184,12 @@ postquel_getnext(execution_state *es) static void postquel_end(execution_state *es) { -#ifdef FUNC_UTIL_PATCH - /* * Do nothing for utility commands. (create, destroy...) DZ - * 30-8-1996 */ if (es->qd->operation == CMD_UTILITY) return; -#endif ExecutorEnd(es->qd, es->estate); } diff --git a/src/backend/executor/spi.c b/src/backend/executor/spi.c index 7c65c66814f..016d15ae8ac 100644 --- a/src/backend/executor/spi.c +++ b/src/backend/executor/spi.c @@ -3,7 +3,7 @@ * spi.c * Server Programming Interface * - * $Id: spi.c,v 1.44 1999/12/16 22:19:44 wieck Exp $ + * $Id: spi.c,v 1.45 2000/04/04 21:44:39 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -622,7 +622,6 @@ _SPI_execute(char *src, int tcount, _SPI_plan *plan) List *queryTree_list; List *planTree_list; List *queryTree_list_item; - List *ptlist; QueryDesc *qdesc; Query *queryTree; Plan *planTree; @@ -645,18 +644,20 @@ _SPI_execute(char *src, int tcount, _SPI_plan *plan) nargs = plan->nargs; argtypes = plan->argtypes; } - ptlist = planTree_list = - pg_parse_and_plan(src, argtypes, nargs, &queryTree_list, None, FALSE); + + queryTree_list = pg_parse_and_rewrite(src, argtypes, nargs, FALSE); _SPI_current->qtlist = queryTree_list; + planTree_list = NIL; + foreach(queryTree_list_item, queryTree_list) { queryTree = (Query *) lfirst(queryTree_list_item); - planTree = lfirst(planTree_list); - planTree_list = lnext(planTree_list); - islastquery = (planTree_list == NIL); /* assume lists are same - * len */ + islastquery = (lnext(queryTree_list_item) == NIL); + + planTree = pg_plan_query(queryTree); + planTree_list = lappend(planTree_list, planTree); if (queryTree->commandType == CMD_UTILITY) { @@ -707,7 +708,7 @@ _SPI_execute(char *src, int tcount, _SPI_plan *plan) } plan->qtlist = queryTree_list; - plan->ptlist = ptlist; + plan->ptlist = planTree_list; return res; } |