> > > 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
v7-0001-optimize-casting-jsonb-to-a-given-type.patch
Description: Binary data
