From: Tom Lane Date: Thu, 28 Oct 2010 17:29:13 +0000 (-0400) Subject: Save a few cycles in plpgsql simple-expression initialization. X-Git-Tag: REL9_1_ALPHA2~11 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=37e0a016547abb3526b685d7aacbd0a4d57f6937;p=postgresql Save a few cycles in plpgsql simple-expression initialization. Instead of using ExecPrepareExpr, call ExecInitExpr. The net change here is that we don't apply expression_planner() to the expression tree. There is no need to do so, because that tree is extracted from a fully planned plancache entry, so all the needed work is already done. This reduces the setup costs by about a factor of 2 according to some simple tests. Oversight noted while fooling around with the simple-expression code for previous fix. --- diff --git a/src/pl/plpgsql/src/pl_exec.c b/src/pl/plpgsql/src/pl_exec.c index 1f40f3cf69..4e9afd360b 100644 --- a/src/pl/plpgsql/src/pl_exec.c +++ b/src/pl/plpgsql/src/pl_exec.c @@ -4577,10 +4577,11 @@ exec_eval_simple_expr(PLpgSQL_execstate *estate, */ if (expr->expr_simple_lxid != curlxid) { - expr->expr_simple_state = ExecPrepareExpr(expr->expr_simple_expr, - simple_eval_estate); + oldcontext = MemoryContextSwitchTo(simple_eval_estate->es_query_cxt); + expr->expr_simple_state = ExecInitExpr(expr->expr_simple_expr, NULL); expr->expr_simple_in_use = false; expr->expr_simple_lxid = curlxid; + MemoryContextSwitchTo(oldcontext); } /*