PostGIS  3.2.2dev-r@@SVN_REVISION@@

◆ parse_jsonb()

static uint32_t* parse_jsonb ( mvt_agg_context ctx,
Jsonb *  jb,
uint32_t *  tags 
)
static

Definition at line 509 of file mvt.c.

511 {
512  JsonbIterator *it;
513  JsonbValue v;
514  bool skipNested = false;
515  JsonbIteratorToken r;
516  uint32_t k;
517 
518  if (!JB_ROOT_IS_OBJECT(jb))
519  return tags;
520 
521  it = JsonbIteratorInit(&jb->root);
522 
523  while ((r = JsonbIteratorNext(&it, &v, skipNested)) != WJB_DONE)
524  {
525  skipNested = true;
526 
527  if (r == WJB_KEY && v.type != jbvNull)
528  {
529 
530  k = get_key_index_with_size(ctx, v.val.string.val, v.val.string.len);
531  if (k == UINT32_MAX)
532  {
533  char *key;
534  uint32_t newSize = ctx->keys_hash_i + 1;
535 
536  key = palloc(v.val.string.len + 1);
537  memcpy(key, v.val.string.val, v.val.string.len);
538  key[v.val.string.len] = '\0';
539 
540  tags = repalloc(tags, newSize * 2 * sizeof(*tags));
541  k = add_key(ctx, key);
542  }
543 
544  r = JsonbIteratorNext(&it, &v, skipNested);
545 
546  if (v.type == jbvString)
547  {
548  char *value = palloc(v.val.string.len + 1);
549  memcpy(value, v.val.string.val, v.val.string.len);
550  value[v.val.string.len] = '\0';
551  add_value_as_string(ctx, value, tags, k);
552  ctx->row_columns++;
553  }
554  else if (v.type == jbvBool)
555  {
556  MVT_PARSE_VALUE(bool_values_hash,
557  v.val.boolean,
558  sizeof(protobuf_c_boolean),
559  bool_value,
560  VECTOR_TILE__TILE__VALUE__TEST_ONEOF_BOOL_VALUE);
561  ctx->row_columns++;
562  }
563  else if (v.type == jbvNumeric)
564  {
565  char *str;
566  double d;
567  long l;
568  str = DatumGetCString(DirectFunctionCall1(numeric_out,
569  PointerGetDatum(v.val.numeric)));
570  d = strtod(str, NULL);
571  l = strtol(str, NULL, 10);
572 
573  if (fabs(d - (double)l) > FLT_EPSILON)
574  {
575  MVT_PARSE_VALUE(double_values_hash,
576  d,
577  sizeof(double),
578  double_value,
579  VECTOR_TILE__TILE__VALUE__TEST_ONEOF_DOUBLE_VALUE);
580  }
581  else
582  {
584  }
585  ctx->row_columns++;
586  }
587  }
588  }
589 
590  return tags;
591 }
char * r
Definition: cu_in_wkt.c:24
#define str(s)
#define UINT32_MAX
Definition: lwin_wkt_lex.c:343
static uint32_t get_key_index_with_size(mvt_agg_context *ctx, const char *name, size_t size)
Definition: mvt.c:268
#define MVT_PARSE_INT_VALUE(value)
Definition: mvt.c:425
static uint32_t add_key(mvt_agg_context *ctx, char *name)
Definition: mvt.c:277
#define MVT_PARSE_VALUE(hash, newvalue, size, pfvaluefield, pftype)
Definition: mvt.c:401
static void add_value_as_string(mvt_agg_context *ctx, char *value, uint32_t *tags, uint32_t k)
Definition: mvt.c:488
int value
Definition: genraster.py:62
uint32_t keys_hash_i
Definition: mvt.h:94
uint32_t row_columns
Definition: mvt.h:96

References add_key(), add_value_as_string(), get_key_index_with_size(), mvt_agg_context::keys_hash_i, MVT_PARSE_INT_VALUE, MVT_PARSE_VALUE, r, mvt_agg_context::row_columns, str, UINT32_MAX, and genraster::value.

Referenced by parse_values().

Here is the call graph for this function:
Here is the caller graph for this function: