]> granicus.if.org Git - postgis/commitdiff
Change "LANGUAGE c" to "LANGUAGE 'c'" for
authorPaul Ramsey <pramsey@cleverelephant.ca>
Fri, 3 Nov 2017 14:31:46 +0000 (14:31 +0000)
committerPaul Ramsey <pramsey@cleverelephant.ca>
Fri, 3 Nov 2017 14:31:46 +0000 (14:31 +0000)
new MVT functions to match all the other
functions

git-svn-id: http://svn.osgeo.org/postgis/trunk@16089 b70326c6-7e19-0410-871a-916f4a2858ee

postgis/mvt.c
postgis/mvt.h
postgis/postgis.sql.in

index 46e663682d0d5b15de2d4e70d839005dc60047bb..4cd5dbb66e0b6dbac7997704dd95522e8ba6baca 100644 (file)
@@ -845,45 +845,68 @@ void mvt_agg_transfn(struct mvt_agg_context *ctx)
        parse_values(ctx);
 }
 
-/**
- * Finalize aggregation.
- *
- * Encode keys and values and put the aggregated Layer message into
- * a Tile message and returns it packed as a bytea.
- */
-uint8_t *mvt_agg_finalfn(struct mvt_agg_context *ctx)
+static bytea *mvt_ctx_to_bytea(struct mvt_agg_context *ctx)
 {
-       VectorTile__Tile__Layer *layers[1];
-       VectorTile__Tile tile = VECTOR_TILE__TILE__INIT;
-       size_t len;
-       uint8_t *buf;
+       /* Fill out the file slot, if it's not already filled. */
+       /* We should only have a filled slow when all the work of building */
+       /* out the data is complete, so after a serialize/deserialize cycle */
+       /* or after a context combine */
+       if (!ctx->tile)
+       {
+               VectorTile__Tile__Layer **layers = ;
+               VectorTile__Tile tile = VECTOR_TILE__TILE__INIT;
+
+               POSTGIS_DEBUG(2, "mvt_agg_finalfn called");
+               POSTGIS_DEBUGF(2, "mvt_agg_finalfn n_features == %zd", ctx->layer->n_features);
+
+               /* Zero features => empty bytea output */
+               if (ctx->layer->n_features == 0)
+               {
+                       buf = palloc(VARHDRSZ);
+                       SET_VARSIZE(buf, VARHDRSZ);
+                       return buf;
+               }
 
-       POSTGIS_DEBUG(2, "mvt_agg_finalfn called");
-       POSTGIS_DEBUGF(2, "mvt_agg_finalfn n_features == %zd", ctx->layer->n_features);
+               encode_keys(ctx);
+               encode_values(ctx);
 
-       /* Zero features => empty bytea output */
-       if (ctx->layer->n_features == 0)
-       {
-               buf = palloc(VARHDRSZ);
-               SET_VARSIZE(buf, VARHDRSZ);
-               return buf;
+               int n_layers = 1;
+               ctx->tile = palloc(sizeof(VectorTile__Tile));
+               vector_tile__tile__init(ctx->tile);
+               ctx->tile->layers = palloc(sizeof(VectorTile__Tile__Layer*) * n_layers);
+               ctx->tile->layers[0] = ctx->layer;
+               ctx->tile->n_layers = n_layers;
        }
 
-       encode_keys(ctx);
-       encode_values(ctx);
+       /* Serialize the Tile */
+       size_t len = VARHDRSZ + vector_tile__tile__get_packed_size(ctx->tile);
+       bytea *ba = palloc(len);
+       vector_tile__tile__pack(ctx->tile, VARDATA(ba));
+       SET_VARSIZE(ba, len);
+       return ba;
+}
 
-       layers[0] = ctx->layer;
 
-       tile.n_layers = 1;
-       tile.layers = layers;
+bytea *mvt_ctx_serialize(struct mvt_agg_context *ctx)
+{
+       return mvt_ctx_to_bytea(ctx);
+}
 
-       len = vector_tile__tile__get_packed_size(&tile);
-       buf = palloc(sizeof(*buf) * (len + VARHDRSZ));
-       vector_tile__tile__pack(&tile, buf + VARHDRSZ);
+mvt_agg_context * mvt_ctx_deserialize(const bytea *ba)
+{
 
-       SET_VARSIZE(buf, VARHDRSZ + len);
+}
 
-       return buf;
+/**
+ * Finalize aggregation.
+ *
+ * Encode keys and values and put the aggregated Layer message into
+ * a Tile message and returns it packed as a bytea.
+ */
+bytea *mvt_agg_finalfn(struct mvt_agg_context *ctx)
+{
+       return mvt_ctx_to_bytea(ctx);
 }
 
+
 #endif
index 9f51054b127490c218ca74b67dafd091901a2f74..c14585c6cd547d023a9e72013d3e3c3c91c38392 100644 (file)
@@ -54,6 +54,7 @@ struct mvt_agg_context {
        HeapTupleHeader row;
        VectorTile__Tile__Feature *feature;
        VectorTile__Tile__Layer *layer;
+       VectorTile__Tile *tile;
        size_t features_capacity;
        struct mvt_kv_key *keys_hash;
        struct mvt_kv_string_value *string_values_hash;
index 5b969a9707b63643ad3589324134b48778a76ec1..847ef7f19ba47574f7820a40c8b3beb6beb31e91 100644 (file)
@@ -4450,31 +4450,31 @@ CREATE OR REPLACE FUNCTION ST_AsGeoJson(gj_version int4, geom geometry, maxdecim
 CREATE OR REPLACE FUNCTION pgis_asmvt_transfn(internal, anyelement)
        RETURNS internal
        AS 'MODULE_PATHNAME', 'pgis_asmvt_transfn'
-       LANGUAGE c IMMUTABLE _PARALLEL;
+       LANGUAGE 'c' IMMUTABLE _PARALLEL;
 
 -- Availability: 2.4.0
 CREATE OR REPLACE FUNCTION pgis_asmvt_transfn(internal, anyelement, text)
        RETURNS internal
        AS 'MODULE_PATHNAME', 'pgis_asmvt_transfn'
-       LANGUAGE c IMMUTABLE _PARALLEL;
+       LANGUAGE 'c' IMMUTABLE _PARALLEL;
 
 -- Availability: 2.4.0
 CREATE OR REPLACE FUNCTION pgis_asmvt_transfn(internal, anyelement, text, int4)
        RETURNS internal
        AS 'MODULE_PATHNAME', 'pgis_asmvt_transfn'
-       LANGUAGE c IMMUTABLE _PARALLEL;
+       LANGUAGE 'c' IMMUTABLE _PARALLEL;
 
 -- Availability: 2.4.0
 CREATE OR REPLACE FUNCTION pgis_asmvt_transfn(internal, anyelement, text, int4, text)
        RETURNS internal
        AS 'MODULE_PATHNAME', 'pgis_asmvt_transfn'
-       LANGUAGE c IMMUTABLE _PARALLEL;
+       LANGUAGE 'c' IMMUTABLE _PARALLEL;
 
 -- Availability: 2.4.0
 CREATE OR REPLACE FUNCTION pgis_asmvt_finalfn(internal)
        RETURNS bytea
        AS 'MODULE_PATHNAME', 'pgis_asmvt_finalfn'
-       LANGUAGE c IMMUTABLE _PARALLEL;
+       LANGUAGE 'c' IMMUTABLE _PARALLEL;
 
 -- Availability: 2.4.0
 CREATE AGGREGATE ST_AsMVT(anyelement)
@@ -4542,19 +4542,19 @@ CREATE OR REPLACE FUNCTION postgis_libprotobuf_version()
 CREATE OR REPLACE FUNCTION pgis_asgeobuf_transfn(internal, anyelement)
        RETURNS internal
        AS 'MODULE_PATHNAME', 'pgis_asgeobuf_transfn'
-       LANGUAGE c IMMUTABLE _PARALLEL;
+       LANGUAGE 'c' IMMUTABLE _PARALLEL;
 
 -- Availability: 2.4.0
 CREATE OR REPLACE FUNCTION pgis_asgeobuf_transfn(internal, anyelement, text)
        RETURNS internal
        AS 'MODULE_PATHNAME', 'pgis_asgeobuf_transfn'
-       LANGUAGE c IMMUTABLE _PARALLEL;
+       LANGUAGE 'c' IMMUTABLE _PARALLEL;
 
 -- Availability: 2.4.0
 CREATE OR REPLACE FUNCTION pgis_asgeobuf_finalfn(internal)
        RETURNS bytea
        AS 'MODULE_PATHNAME', 'pgis_asgeobuf_finalfn'
-       LANGUAGE c IMMUTABLE _PARALLEL;
+       LANGUAGE 'c' IMMUTABLE _PARALLEL;
 
 -- Availability: 2.4.0
 CREATE AGGREGATE ST_AsGeobuf(anyelement)