>
>
>  jsonb_extract_xx_type just cares about the argtype, but
> 'explain select xx'  will still access the const->constvalue.
> const->constvalue is 0 which is set by makeNullConst currently,
> and it is ok for the current supported type.
>

The exception is numeric data type, the constvalue can't be 0.
so hack it with the below line.  maybe not good enough,  but I
have no better solution now.

+                       Const   *target =
 makeNullConst(fexpr->funcresulttype,
+
             -1,
+
             InvalidOid);
+                       /*
+                        * Since all the above functions are strict, we
can't input
+                        * a NULL value.
+                        */
+                       target->constisnull = false;
+
+                       Assert(target->constbyval || target->consttype ==
NUMERICOID);
+
+                       /* Mock a valid datum for !constbyval type. */
+                       if (fexpr->funcresulttype == NUMERICOID)
+                               target->constvalue =
DirectFunctionCall1(numeric_in, CStringGetDatum("0"));

-- 
Best Regards
Andy Fan

Attachment: v7-0001-optimize-casting-jsonb-to-a-given-type.patch
Description: Binary data

Reply via email to