|
18 | 18 | #include "postgres.h"
|
19 | 19 | #include "access/compression.h"
|
20 | 20 | #include "lib/stringinfo.h"
|
| 21 | +#include "utils/builtins.h" |
21 | 22 | #include "utils/expandeddatum.h"
|
22 | 23 | #include "utils/jsonb.h"
|
23 | 24 |
|
@@ -365,6 +366,60 @@ JsonValueInitBinary(JsonValue *val, JsonContainer *cont)
|
365 | 366 | return val;
|
366 | 367 | }
|
367 | 368 |
|
| 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 | + |
368 | 423 | extern Json *JsonValueToJson(JsonValue *val);
|
369 | 424 | extern JsonValue *JsonToJsonValue(Json *json, JsonValue *jv);
|
370 | 425 | extern JsonValue *JsonValueUnpackBinary(const JsonValue *jbv);
|
|
0 commit comments