PostGIS 3.7.0dev-r@@SVN_REVISION@@
Loading...
Searching...
No Matches

◆ parse_values()

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

Definition at line 668 of file mvt.c.

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

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: