On Tue, Aug 23, 2022 at 4:48 PM Amit Langote <amitlangote09@gmail.com> wrote:
> On Thu, Aug 18, 2022 at 12:46 PM Nikita Glukhov <n.gluhov@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