[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