8 #include "utils/fmgrprotos.h"
73 if (v.
val.array.rawScalar)
80 elog(
ERROR,
"unexpected jsonb token: %d", r);
94 return newRV((SV *)
av);
113 v.
val.string.val, v.
val.string.len,
119 return newRV((SV *) hv);
123 elog(
ERROR,
"unexpected jsonb token: %d", r);
132 SSize_t pcount = av_len(in) + 1;
137 for (
i = 0;
i < pcount;
i++)
139 SV **
value = av_fetch(in,
i, FALSE);
161 (void) hv_iterinit(obj);
163 while ((
val = hv_iternextsv(obj, &kstr, &klen)))
166 key.val.string.len = klen;
223 double nval = SvNV(in);
233 (
errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),
234 errmsg(
"cannot convert infinity to jsonb")));
237 (
errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),
238 errmsg(
"cannot convert NaN to jsonb")));
249 out.
val.string.len = strlen(out.
val.string.val);
258 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
259 errmsg(
"cannot transform this Perl type to jsonb")));
Datum float8_numeric(PG_FUNCTION_ARGS)
Numeric int64_to_numeric(int64 val)
Datum numeric_out(PG_FUNCTION_ARGS)
Datum numeric_in(PG_FUNCTION_ARGS)
int errcode(int sqlerrcode)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
Datum Float8GetDatum(float8 X)
#define PG_GETARG_POINTER(n)
#define DirectFunctionCall1(func, arg1)
#define DirectFunctionCall3(func, arg1, arg2, arg3)
#define PG_RETURN_JSONB_P(x)
#define PG_GETARG_JSONB_P(x)
static JsonbValue * AV_to_JsonbValue(AV *in, JsonbParseState **jsonb_state)
static SV * Jsonb_to_SV(JsonbContainer *jsonb)
PG_FUNCTION_INFO_V1(jsonb_to_plperl)
static SV * JsonbValue_to_SV(JsonbValue *jbv)
static JsonbValue * SV_to_JsonbValue(SV *obj, JsonbParseState **ps, bool is_elem)
Datum jsonb_to_plperl(PG_FUNCTION_ARGS)
static JsonbValue * HV_to_JsonbValue(HV *obj, JsonbParseState **jsonb_state)
Datum plperl_to_jsonb(PG_FUNCTION_ARGS)
JsonbIterator * JsonbIteratorInit(JsonbContainer *container)
Jsonb * JsonbValueToJsonb(JsonbValue *val)
JsonbIteratorToken JsonbIteratorNext(JsonbIterator **it, JsonbValue *val, bool skipNested)
JsonbValue * pushJsonbValue(JsonbParseState **pstate, JsonbIteratorToken seq, JsonbValue *jbval)
char * pnstrdup(const char *in, Size len)
void pfree(void *pointer)
#define DatumGetNumeric(X)
#define NumericGetDatum(X)
static SV * cstr2sv(const char *str)
static char * sv2cstr(SV *sv)
#define CStringGetDatum(X)
#define ObjectIdGetDatum(X)
#define DatumGetCString(X)
#define PointerGetDatum(X)