PostGIS  3.4.0dev-r@@SVN_REVISION@@

◆ parse_values()

static void parse_values ( mvt_agg_context ctx,
struct feature_builder feature 
)
static

Definition at line 669 of file mvt.c.

670 {
671  uint32_t i;
672  mvt_column_cache cc = ctx->column_cache;
673  uint32_t natts = (uint32_t) cc.tupdesc->natts;
674 
675  HeapTupleData tuple;
676 
677  POSTGIS_DEBUG(2, "parse_values called");
678 
679  /* Build a temporary HeapTuple control structure */
680  tuple.t_len = HeapTupleHeaderGetDatumLength(ctx->row);
681  ItemPointerSetInvalid(&(tuple.t_self));
682  tuple.t_tableOid = InvalidOid;
683  tuple.t_data = ctx->row;
684 
685  /* We use heap_deform_tuple as it costs only O(N) vs O(N^2) of GetAttributeByNum */
686  heap_deform_tuple(&tuple, cc.tupdesc, cc.values, cc.nulls);
687 
688  POSTGIS_DEBUGF(3, "parse_values natts: %d", natts);
689 
690  for (i = 0; i < natts; i++)
691  {
692  char *key;
693  Oid typoid;
694  uint32_t k;
695  Datum datum = cc.values[i];
696 
697  if (i == ctx->geom_index)
698  continue;
699 
700  if (i == ctx->id_index)
701  {
702  set_feature_id(ctx, feature, datum, cc.nulls[i]);
703  continue;
704  }
705 
706  if (cc.nulls[i])
707  {
708  POSTGIS_DEBUG(3, "parse_values isnull detected");
709  continue;
710  }
711 
712  key = TupleDescAttr(cc.tupdesc, i)->attname.data;
713  k = cc.column_keys_index[i];
714  typoid = cc.column_oid[i];
715 
716  if (k == UINT32_MAX && typoid != JSONBOID)
717  elog(ERROR, "parse_values: unexpectedly could not find parsed key name '%s'", key);
718  if (typoid == JSONBOID)
719  {
720  parse_jsonb(ctx, feature, DatumGetJsonbP(datum));
721  continue;
722  }
723 
724  switch (typoid)
725  {
726  case BOOLOID:
727  MVT_PARSE_DATUM(protobuf_c_boolean,
728  DatumGetBool,
729  bool_values_hash,
730  sizeof(protobuf_c_boolean),
731  bool_value,
732  VECTOR_TILE__TILE__VALUE__TEST_ONEOF_BOOL_VALUE);
733  break;
734  case INT2OID:
735  MVT_PARSE_INT_DATUM(int16_t, DatumGetInt16);
736  break;
737  case INT4OID:
738  MVT_PARSE_INT_DATUM(int32_t, DatumGetInt32);
739  break;
740  case INT8OID:
741  MVT_PARSE_INT_DATUM(int64_t, DatumGetInt64);
742  break;
743  case FLOAT4OID:
744  MVT_PARSE_DATUM(float,
745  DatumGetFloat4,
746  float_values_hash,
747  sizeof(float),
748  float_value,
749  VECTOR_TILE__TILE__VALUE__TEST_ONEOF_FLOAT_VALUE);
750  break;
751  case FLOAT8OID:
752  MVT_PARSE_DATUM(double,
753  DatumGetFloat8,
754  double_values_hash,
755  sizeof(double),
756  double_value,
757  VECTOR_TILE__TILE__VALUE__TEST_ONEOF_DOUBLE_VALUE);
758  break;
759  case TEXTOID:
760  add_value_as_string(ctx, feature, text_to_cstring(DatumGetTextP(datum)), k);
761  break;
762  case CSTRINGOID:
763  add_value_as_string(ctx, feature, DatumGetCString(datum), k);
764  break;
765  default:
766  parse_datum_as_string(ctx, feature, typoid, datum, k);
767  break;
768  }
769  }
770 }
#define UINT32_MAX
Definition: lwin_wkt_lex.c:343
#define MVT_PARSE_DATUM(type, datumfunc, hash, size, pfvaluefield, pftype)
Definition: mvt.c:495
#define MVT_PARSE_INT_DATUM(type, datumfunc)
Definition: mvt.c:501
static void parse_datum_as_string(mvt_agg_context *ctx, struct feature_builder *feature, Oid typoid, Datum datum, uint32_t k)
Definition: mvt.c:545
static void set_feature_id(mvt_agg_context *ctx, struct feature_builder *feature, Datum datum, bool isNull)
Sets the feature id.
Definition: mvt.c:633
static void add_value_as_string(mvt_agg_context *ctx, struct feature_builder *feature, char *value, uint32_t k)
Definition: mvt.c:536
static void parse_jsonb(mvt_agg_context *ctx, struct feature_builder *feature, Jsonb *jb)
Definition: mvt.c:557
uint32_t geom_index
Definition: mvt.h:72
uint32_t id_index
Definition: mvt.h:68
HeapTupleHeader row
Definition: mvt.h:74
mvt_column_cache column_cache
Definition: mvt.h:98
bool * nulls
Definition: mvt.h:53
TupleDesc tupdesc
Definition: mvt.h:54
uint32_t * column_keys_index
Definition: mvt.h:50
Datum * values
Definition: mvt.h:52
uint32_t * column_oid
Definition: mvt.h:51

References add_value_as_string(), mvt_agg_context::column_cache, mvt_column_cache::column_keys_index, mvt_column_cache::column_oid, mvt_agg_context::geom_index, mvt_agg_context::id_index, MVT_PARSE_DATUM, MVT_PARSE_INT_DATUM, mvt_column_cache::nulls, parse_datum_as_string(), parse_jsonb(), mvt_agg_context::row, set_feature_id(), mvt_column_cache::tupdesc, UINT32_MAX, and mvt_column_cache::values.

Referenced by mvt_agg_transfn().

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