On Mon, Feb 27, 2023 at 4:45 PM Amit Langote <amitlangot...@gmail.com> wrote: > On Tue, Feb 21, 2023 at 2:25 AM Andres Freund <and...@anarazel.de> wrote: > > Evaluating N expressions for a json table isn't a good approach, both memory > > and CPU efficiency wise. > > Are you referring to JsonTableInitOpaque() initializing all these > sub-expressions of JsonTableParent, especially colvalexprs, using N > *independent* ExprStates? That could perhaps be made to work by > making JsonTableParent be an expression recognized by execExpr.c, so > that a single ExprState can store the steps for all its > sub-expressions, much like JsonExpr is. I'll give that a try, though > I wonder if the semantics of making this work in a single > ExecEvalExpr() call will mismatch that of the current way, because > different sub-expressions are currently evaluated under different APIs > of TableFuncRoutine.
I was looking at this and realized that using N ExprStates for various subsidiary expressions is not something specific to JSON_TABLE implementation. I mean we already have bunch of ExprStates being created in ExecInitTableFuncScan(): scanstate->ns_uris = ExecInitExprList(tf->ns_uris, (PlanState *) scanstate); scanstate->docexpr = ExecInitExpr((Expr *) tf->docexpr, (PlanState *) scanstate); scanstate->rowexpr = ExecInitExpr((Expr *) tf->rowexpr, (PlanState *) scanstate); scanstate->colexprs = ExecInitExprList(tf->colexprs, (PlanState *) scanstate); scanstate->coldefexprs = ExecInitExprList(tf->coldefexprs, (PlanState *) scanstate); Or maybe you're worried about jsonpath_exec.c using so many ExprStates *privately* to put into TableFuncScanState.opaque? -- Thanks, Amit Langote EDB: http://www.enterprisedb.com