/* * ReScanExprContext * * Reset an expression context in preparation for a rescan of its * plan node. This requires calling any registered shutdown callbacks, * since any partially complete set-returning-functions must be canceled. * * Note we make no assumption about the caller's memory context. */ void ReScanExprContext(ExprContext *econtext) { /* Call any registered callbacks */ ShutdownExprContext(econtext, true); /* And clean up the memory used */ MemoryContextReset(econtext->ecxt_per_tuple_memory); }
/* ---------------- * FreeExprContext * * Free an expression context, including calling any remaining * shutdown callbacks. * * Since we free the temporary context used for expression evaluation, * any previously computed pass-by-reference expression result will go away! * * Note we make no assumption about the caller's memory context. * ---------------- */ void FreeExprContext(ExprContext *econtext) { EState *estate; /* Call any registered callbacks */ ShutdownExprContext(econtext); /* And clean up the memory used */ MemoryContextDelete(econtext->ecxt_per_tuple_memory); /* Unlink self from owning EState */ estate = econtext->ecxt_estate; estate->es_exprcontexts = list_delete_ptr(estate->es_exprcontexts, econtext); /* And delete the ExprContext node */ pfree(econtext); }
/* ---------------- * free_expr_ctx * * Free an expression context, including calling any remaining * shutdown callbacks. * * Since we free the temporary context used for expression evaluation, * any previously computed pass-by-reference expression result will go away! * * If isCommit is false, we are being called in error cleanup, and should * not call callbacks but only release memory. (It might be better to call * the callbacks and pass the isCommit flag to them, but that would require * more invasive code changes than currently seems justified.) * * Note we make no assumption about the caller's memory context. * ---------------- */ void free_expr_ctx(expr_ctx_n* econtext, bool isCommit) { exec_state_n* estate; /* Call any registered callbacks */ ShutdownExprContext(econtext, isCommit); /* And clean up the memory used */ mctx_delete(econtext->ecxt_per_tuple_memory); /* Unlink self from owning exec_state_n, if any */ estate = econtext->ecxt_estate; if (estate) estate->es_exprcontexts = list_delete_ptr(estate->es_exprcontexts, econtext); /* And delete the expr_ctx_n node */ pfree(econtext); }