Skip to content

Commit 2122c3d

Browse files
author
Nikita Glukhov
committed
Add JsonValueInitXxx()
1 parent 9fee610 commit 2122c3d

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed

src/include/utils/json_generic.h

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include "postgres.h"
1919
#include "access/compression.h"
2020
#include "lib/stringinfo.h"
21+
#include "utils/builtins.h"
2122
#include "utils/expandeddatum.h"
2223
#include "utils/jsonb.h"
2324

@@ -365,6 +366,60 @@ JsonValueInitBinary(JsonValue *val, JsonContainer *cont)
365366
return val;
366367
}
367368

369+
static inline JsonbValue *
370+
JsonValueInitString(JsonbValue *jbv, const char *str)
371+
{
372+
jbv->type = jbvString;
373+
jbv->val.string.len = strlen(str);
374+
jbv->val.string.val = memcpy(palloc(jbv->val.string.len + 1), str,
375+
jbv->val.string.len + 1);
376+
return jbv;
377+
}
378+
379+
static inline JsonbValue *
380+
JsonValueInitStringWithLen(JsonbValue *jbv, const char *str, int len)
381+
{
382+
jbv->type = jbvString;
383+
jbv->val.string.val = str;
384+
jbv->val.string.len = len;
385+
return jbv;
386+
}
387+
388+
static inline JsonbValue *
389+
JsonValueInitText(JsonbValue *jbv, text *txt)
390+
{
391+
jbv->type = jbvString;
392+
jbv->val.string.val = VARDATA_ANY(txt);
393+
jbv->val.string.len = VARSIZE_ANY_EXHDR(txt);
394+
return jbv;
395+
}
396+
397+
static inline JsonbValue *
398+
JsonValueInitNumeric(JsonbValue *jbv, Numeric num)
399+
{
400+
jbv->type = jbvNumeric;
401+
jbv->val.numeric = num;
402+
return jbv;
403+
}
404+
405+
static inline JsonbValue *
406+
JsonValueInitInteger(JsonbValue *jbv, int64 i)
407+
{
408+
jbv->type = jbvNumeric;
409+
jbv->val.numeric = DatumGetNumeric(DirectFunctionCall1(
410+
int8_numeric, Int64GetDatum(i)));
411+
return jbv;
412+
}
413+
414+
static inline JsonbValue *
415+
JsonValueInitFloat(JsonbValue *jbv, float4 f)
416+
{
417+
jbv->type = jbvNumeric;
418+
jbv->val.numeric = DatumGetNumeric(DirectFunctionCall1(
419+
float4_numeric, Float4GetDatum(f)));
420+
return jbv;
421+
}
422+
368423
extern Json *JsonValueToJson(JsonValue *val);
369424
extern JsonValue *JsonToJsonValue(Json *json, JsonValue *jv);
370425
extern JsonValue *JsonValueUnpackBinary(const JsonValue *jbv);

0 commit comments

Comments
 (0)