]> granicus.if.org Git - postgis/commitdiff
Fix ST_AsMVT string value encoding redundancy
authorBjörn Harrtell <bjorn@wololo.org>
Fri, 21 Apr 2017 16:58:56 +0000 (16:58 +0000)
committerBjörn Harrtell <bjorn@wololo.org>
Fri, 21 Apr 2017 16:58:56 +0000 (16:58 +0000)
References #3741

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

postgis/mvt.c
regress/mvt.sql
regress/mvt_expected

index 35ed11ed30d4cdd517a69c152a0afab07625df90..e8f722aa06d724419d70c532ac1ec8dfd7cb9fd7 100644 (file)
@@ -43,7 +43,7 @@ enum mvt_type {
 };
 
 struct mvt_kv_string_value {
-       char *string_value;
+       const char *string_value;
        uint32_t id;
        UT_hash_handle hh;
 };
@@ -389,14 +389,14 @@ static void parse_value_as_string(struct mvt_agg_context *ctx, Oid typoid,
        char *value = OidOutputFunctionCall(foutoid, datum);
        POSTGIS_DEBUGF(4, "parse_value_as_string value: %s", value);
        size_t size = strlen(value);
-       HASH_FIND(hh, ctx->string_values_hash, &value, size, kv);
+       HASH_FIND(hh, ctx->string_values_hash, value, size, kv);
        if (!kv) {
                POSTGIS_DEBUG(4, "parse_value_as_string value not found");
                kv = palloc(sizeof(*kv));
                POSTGIS_DEBUGF(4, "parse_value_as_string new hash key: %d", ctx->values_hash_i);
                kv->id = ctx->values_hash_i++;
                kv->string_value = value;
-               HASH_ADD(hh, ctx->string_values_hash, string_value, size, kv);
+               HASH_ADD_KEYPTR(hh, ctx->string_values_hash, kv->string_value, size, kv);
        }
        tags[c*2] = k - 1;
        tags[c*2+1] = kv->id;
@@ -449,11 +449,6 @@ static void parse_values(struct mvt_agg_context *ctx)
                                double_values_hash, double_value,
                                DatumGetFloat8, sizeof(double));
                        break;
-               case TEXTOID:
-                       MVT_PARSE_DATUM(char *, mvt_kv_string_value,
-                               string_values_hash, string_value,
-                               TextDatumGetCString, strlen(value));
-                       break;
                default:
                        parse_value_as_string(ctx, typoid, datum, tags, c, k);
                        break;
index 42fe8657d7058085aa330f23b671262651826b34..84a887f21a9c95f085241c3ebc43cb498a5f2069 100644 (file)
@@ -81,16 +81,22 @@ SELECT 'TA4', encode(ST_AsMVT('test', 4096, 'geom', q), 'base64') FROM (
     UNION
     SELECT 2 AS c1, ST_AsMVTGeom(ST_GeomFromText('POINT(25 17)'),
     ST_MakeBox2D(ST_Point(0, 0), ST_Point(4096, 4096)), 4096, 0, false) AS geom) AS q;
-SELECT 'TA5', encode(ST_AsMVT('test', 4096, 'geom', q), 'base64') FROM (SELECT 
+SELECT 'TA5', encode(ST_AsMVT('test', 4096, 'geom', q), 'base64') FROM (SELECT
     ST_AsMVTGeom(ST_GeomFromText('POINT(25 17)'),
     ST_MakeBox2D(ST_Point(0, 0), ST_Point(4096, 4096)), 4096, 0, false) AS geom, 1 AS c1, 'abcd'::text AS c2) AS q;
 SELECT 'TA6', encode(ST_AsMVT('test', 4096, 'geom', q), 'base64') FROM (SELECT 1 AS c1, -1 AS c2,
     ST_AsMVTGeom(ST_GeomFromText('POINT(25 17)'),
     ST_MakeBox2D(ST_Point(0, 0), ST_Point(4096, 4096)), 4096, 0, false) AS geom) AS q;
+SELECT 'TA7', encode(ST_AsMVT('test', 4096, 'geom', q), 'base64') FROM (
+    SELECT 'test' AS c1, ST_AsMVTGeom(ST_GeomFromText('POINT(25 17)'),
+    ST_MakeBox2D(ST_Point(0, 0), ST_Point(4096, 4096)), 4096, 0, false) AS geom
+    UNION
+    SELECT 'test' AS c1, ST_AsMVTGeom(ST_GeomFromText('POINT(26 18)'),
+    ST_MakeBox2D(ST_Point(0, 0), ST_Point(4096, 4096)), 4096, 0, false) AS geom) AS q;
 
 -- unsupported input
 SELECT 'TU2';
 SELECT encode(ST_AsMVT('test', 4096, 'geom', 1), 'base64');
 SELECT 'TU3';
 SELECT encode(ST_AsMVT('test', 4096, 'geom', q), 'base64')
-    FROM (SELECT NULL::integer AS c1, NULL AS geom) AS q;
\ No newline at end of file
+    FROM (SELECT NULL::integer AS c1, NULL AS geom) AS q;
index 5922be654e569fed73d130abd88b5261b8dfcdff..49695e78b27fa9d9c67b5deaead001b609cf1a73 100644 (file)
@@ -23,6 +23,7 @@ TA3|GhkKBHRlc3QSCBgBIgQJMt4/GgJjMSiAIHgC
 TA4|GjMKBHRlc3QSDBICAAAYASIECTLePxIMEgIAARgBIgQJMt4/GgJjMSICKAEiAigCKIAgeAI=
 TA5|Gi8KBHRlc3QSDhIEAAABARgBIgQJMt4/GgJjMRoCYzIiAigBIgYKBGFiY2QogCB4Ag==
 TA6|GisKBHRlc3QSDhIEAAABARgBIgQJMt4/GgJjMRoCYzIiAigBIgIwASiAIHgC
+TA7|GjMKBHRlc3QSDBICAAAYASIECTLePxIMEgIAABgBIgQJNNw/GgJjMSIGCgR0ZXN0KIAgeAI=
 TU2
 ERROR:  pgis_asmvt_transfn: parameter row cannot be other than a rowtype
 TU3