]> granicus.if.org Git - postgresql/commitdiff
Save a few cycles in plpgsql simple-expression initialization.
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 28 Oct 2010 17:29:13 +0000 (13:29 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 28 Oct 2010 17:29:13 +0000 (13:29 -0400)
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.

src/pl/plpgsql/src/pl_exec.c

index 1f40f3cf69234ff650ece2ccb09791f8e075ec1a..4e9afd360b116239b2ce5b50a2693be2b326f871 100644 (file)
@@ -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);
        }
 
        /*