7#include "utils/fmgrprotos.h"
72 if (v.
val.array.rawScalar)
79 elog(
ERROR,
"unexpected jsonb token: %d", r);
93 return newRV((SV *)
av);
112 v.
val.string.val, v.
val.string.len,
118 return newRV((SV *) hv);
122 elog(
ERROR,
"unexpected jsonb token: %d", r);
131 SSize_t pcount = av_len(in) + 1;
136 for (
i = 0;
i < pcount;
i++)
138 SV **
value = av_fetch(in,
i, FALSE);
160 (void) hv_iterinit(obj);
162 while ((
val = hv_iternextsv(obj, &kstr, &klen)))
165 key.val.string.len = klen;
222 double nval = SvNV(in);
232 (
errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),
233 errmsg(
"cannot convert infinity to jsonb")));
236 (
errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),
237 errmsg(
"cannot convert NaN to jsonb")));
248 out.
val.string.len = strlen(out.
val.string.val);
257 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
258 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 SV * JsonbValue_to_SV(JsonbValue *jbv)
static SV * Jsonb_to_SV(JsonbContainer *jsonb)
PG_FUNCTION_INFO_V1(jsonb_to_plperl)
static JsonbValue * HV_to_JsonbValue(HV *obj, JsonbParseState **jsonb_state)
static JsonbValue * SV_to_JsonbValue(SV *obj, JsonbParseState **ps, bool is_elem)
Datum jsonb_to_plperl(PG_FUNCTION_ARGS)
static JsonbValue * AV_to_JsonbValue(AV *in, JsonbParseState **jsonb_state)
Datum plperl_to_jsonb(PG_FUNCTION_ARGS)
JsonbValue * pushJsonbValue(JsonbParseState **pstate, JsonbIteratorToken seq, JsonbValue *jbval)
JsonbIterator * JsonbIteratorInit(JsonbContainer *container)
JsonbIteratorToken JsonbIteratorNext(JsonbIterator **it, JsonbValue *val, bool skipNested)
Jsonb * JsonbValueToJsonb(JsonbValue *val)
void pfree(void *pointer)
char * pnstrdup(const char *in, Size len)
static Numeric DatumGetNumeric(Datum X)
static Datum NumericGetDatum(Numeric X)
static char * sv2cstr(SV *sv)
static SV * cstr2sv(const char *str)
static Datum PointerGetDatum(const void *X)
static Datum ObjectIdGetDatum(Oid X)
static char * DatumGetCString(Datum X)
static Datum CStringGetDatum(const char *X)
static Datum Int32GetDatum(int32 X)