557{
558 JsonbIterator *it;
559 JsonbValue v;
560 bool skipNested = false;
561 JsonbIteratorToken
r;
562 uint32_t k;
563
564 if (!JB_ROOT_IS_OBJECT(jb))
565 return;
566
567 it = JsonbIteratorInit(&jb->root);
568
569 while ((
r = JsonbIteratorNext(&it, &v, skipNested)) != WJB_DONE)
570 {
571 skipNested = true;
572
573 if (
r == WJB_KEY && v.type != jbvNull)
574 {
575
578 {
579 char *key = palloc(v.val.string.len + 1);
580 memcpy(key, v.val.string.val, v.val.string.len);
581 key[v.val.string.len] = '\0';
583 }
584
585 r = JsonbIteratorNext(&it, &v, skipNested);
586
587 if (v.type == jbvString)
588 {
589 char *
value = palloc(v.val.string.len + 1);
590 memcpy(value, v.val.string.val, v.val.string.len);
591 value[v.val.string.len] =
'\0';
593 }
594 else if (v.type == jbvBool)
595 {
597 v.val.boolean,
598 sizeof(protobuf_c_boolean),
599 bool_value,
600 VECTOR_TILE__TILE__VALUE__TEST_ONEOF_BOOL_VALUE);
601 }
602 else if (v.type == jbvNumeric)
603 {
605 double d;
606 long l;
607 str = DatumGetCString(DirectFunctionCall1(numeric_out,
608 PointerGetDatum(v.val.numeric)));
609 d = strtod(
str, NULL);
610 l = strtol(
str, NULL, 10);
611
612 if (fabs(d - (double)l) > FLT_EPSILON)
613 {
615 d,
616 sizeof(double),
617 double_value,
618 VECTOR_TILE__TILE__VALUE__TEST_ONEOF_DOUBLE_VALUE);
619 }
620 else
621 {
623 }
624 }
625 }
626 }
627}
static uint32_t get_key_index_with_size(mvt_agg_context *ctx, const char *name, size_t size)
#define MVT_PARSE_INT_VALUE(value)
static uint32_t add_key(mvt_agg_context *ctx, char *name)
#define MVT_PARSE_VALUE(hash, newvalue, size, pfvaluefield, pftype)
static void add_value_as_string(mvt_agg_context *ctx, struct feature_builder *feature, char *value, uint32_t k)