diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2010-10-28 13:29:13 -0400 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2010-10-28 13:29:13 -0400 |
commit | 37e0a016547abb3526b685d7aacbd0a4d57f6937 (patch) | |
tree | a97052596a3de42195981c621fbaea774cada26c | |
parent | 8ce22dd4c51b6e8155889653c0116cad13877512 (diff) | |
download | postgresql-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.c | 5 |
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); } /* |