aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2010-10-28 13:29:13 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2010-10-28 13:29:13 -0400
commit37e0a016547abb3526b685d7aacbd0a4d57f6937 (patch)
treea97052596a3de42195981c621fbaea774cada26c
parent8ce22dd4c51b6e8155889653c0116cad13877512 (diff)
downloadpostgresql-37e0a016547abb3526b685d7aacbd0a4d57f6937.tar.gz
postgresql-37e0a016547abb3526b685d7aacbd0a4d57f6937.zip
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.
-rw-r--r--src/pl/plpgsql/src/pl_exec.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/pl/plpgsql/src/pl_exec.c b/src/pl/plpgsql/src/pl_exec.c
index 1f40f3cf692..4e9afd360b1 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);
}
/*