[postgis-tickets] r15358 - Fix ST_AsMVT string value encoding redundancy
bjorn at wololo.org
bjorn at wololo.org
Fri Apr 21 09:58:56 PDT 2017
Author: bjornharrtell
Date: 2017-04-21 09:58:56 -0700 (Fri, 21 Apr 2017)
New Revision: 15358
Modified:
trunk/postgis/mvt.c
trunk/regress/mvt.sql
trunk/regress/mvt_expected
Log:
Fix ST_AsMVT string value encoding redundancy
References #3741
Modified: trunk/postgis/mvt.c
===================================================================
--- trunk/postgis/mvt.c 2017-04-21 16:38:33 UTC (rev 15357)
+++ trunk/postgis/mvt.c 2017-04-21 16:58:56 UTC (rev 15358)
@@ -43,7 +43,7 @@
};
struct mvt_kv_string_value {
- char *string_value;
+ const char *string_value;
uint32_t id;
UT_hash_handle hh;
};
@@ -389,14 +389,14 @@
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 @@
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;
Modified: trunk/regress/mvt.sql
===================================================================
--- trunk/regress/mvt.sql 2017-04-21 16:38:33 UTC (rev 15357)
+++ trunk/regress/mvt.sql 2017-04-21 16:58:56 UTC (rev 15358)
@@ -81,16 +81,22 @@
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;
Modified: trunk/regress/mvt_expected
===================================================================
--- trunk/regress/mvt_expected 2017-04-21 16:38:33 UTC (rev 15357)
+++ trunk/regress/mvt_expected 2017-04-21 16:58:56 UTC (rev 15358)
@@ -23,6 +23,7 @@
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
More information about the postgis-tickets
mailing list