diff --git a/src/sql/engine/expr/ob_expr_frame_info.cpp b/src/sql/engine/expr/ob_expr_frame_info.cpp index bf82cfb5cd..f9f9f1c9b1 100644 --- a/src/sql/engine/expr/ob_expr_frame_info.cpp +++ b/src/sql/engine/expr/ob_expr_frame_info.cpp @@ -635,6 +635,9 @@ int ObTempExpr::eval(ObExecContext &exec_ctx, const ObNewRow &row, ObObj &result ObTempExprCtxReplaceGuard exec_ctx_backup_guard(exec_ctx, *temp_expr_ctx); OZ(rt_exprs_.at(expr_idx_).eval(*temp_expr_ctx, res_datum)); OZ(res_datum->to_obj(result, rt_exprs_.at(expr_idx_).obj_meta_)); + if (!exec_ctx.use_temp_expr_ctx_cache()) { + temp_expr_ctx->~ObTempExprCtx(); + } LOG_TRACE("temp expr result", K(result), K(row), K(rt_exprs_)); } diff --git a/src/sql/engine/ob_exec_context.h b/src/sql/engine/ob_exec_context.h index bb12df0a7e..0618e79257 100644 --- a/src/sql/engine/ob_exec_context.h +++ b/src/sql/engine/ob_exec_context.h @@ -469,6 +469,7 @@ public: ObExecFeedbackInfo &get_feedback_info() { return fb_info_; }; void set_cur_rownum(int64_t cur_rownum) { cur_row_num_ = cur_rownum; } int64_t get_cur_rownum() { return cur_row_num_; } + bool use_temp_expr_ctx_cache() const { return use_temp_expr_ctx_cache_; } private: int build_temp_expr_ctx(const ObTempExpr &temp_expr, ObTempExprCtx *&temp_expr_ctx); int set_phy_op_ctx_ptr(uint64_t index, void *phy_op);