On Tue, Aug 23, 2022 at 4:48 PM Amit Langote <amitlangot...@gmail.com> wrote: > On Thu, Aug 18, 2022 at 12:46 PM Nikita Glukhov <n.glu...@postgrespro.ru> > wrote: > > The desciprion of the v7 patches: > > > > 0003 Add EEOP_SUBTRANS executor step > > v6 + new recursive JIT > > > > 0004 Split JsonExpr execution into steps > > simply rebase of v6 + used LLMBuildSwitch() in EEOP_JSONEXPR > > Will need to spend more time looking at these.
0004 adds the following to initJsonItemCoercions(): + /* When returning JSON types, no need to initialize coercions */ + /* XXX domain types on json/jsonb */ + if (returning->typid == JSONBOID || returning->typid == JSONOID) + return NULL; But maybe it's dead code, because 0001 has this: + if (jsexpr->returning->typid != JSONOID && + jsexpr->returning->typid != JSONBOID) + jsexpr->coercions = + initJsonItemCoercions(pstate, jsexpr->returning, + exprType(contextItemExpr)); + /* We need to handle RETURNING int etc. */ Is this a TODO and what does it mean? + * "JsonCoercion == NULL" means no cast is available. + * "JsonCoercion.expr == NULL" means no coercion is needed. As said in my previous email, I wonder if these cases are better handled by adding JSON_COERCION_ERROR and JSON_COERCION_NONE coercions? +/* Skip calling ExecEvalJson() on a JsonExpr? */ ExecEvalJsonExpr() Will look more. -- Thanks, Amit Langote EDB: http://www.enterprisedb.com