]> granicus.if.org Git - postgis/commitdiff
Cast smaller integer types to the destination type
authorBjörn Harrtell <bjorn@wololo.org>
Tue, 25 Apr 2017 21:39:58 +0000 (21:39 +0000)
committerBjörn Harrtell <bjorn@wololo.org>
Tue, 25 Apr 2017 21:39:58 +0000 (21:39 +0000)
Fixes #3741 and #3742

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

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

index d956e1d9b6551cbabcc76f231c55a24e009b606f..f2a20cfb7bab667626e218aaacd382b64c5168b0 100644 (file)
@@ -368,11 +368,13 @@ static void encode_values(struct mvt_agg_context *ctx)
 { \
        type value = datumfunc(datum); \
        if (value >= 0) { \
-               MVT_PARSE_VALUE(value, mvt_kv_uint_value, \
+               uint64_t cvalue = value; \
+               MVT_PARSE_VALUE(cvalue, mvt_kv_uint_value, \
                                uint_values_hash, uint_value, \
                                sizeof(uint64_t)) \
        } else { \
-               MVT_PARSE_VALUE(value, mvt_kv_sint_value, \
+               int64_t cvalue = value; \
+               MVT_PARSE_VALUE(cvalue, mvt_kv_sint_value, \
                                sint_values_hash, sint_value, \
                                sizeof(int64_t)) \
        } \
index ff81f46a38664a99c1fe69afd1556c7889c70f29..68b156d661b20e8c1ff8db9e18f7933d32968e02 100644 (file)
@@ -96,20 +96,15 @@ SELECT 'TA7', encode(ST_AsMVT('test', 4096, 'geom', q), 'base64') FROM (
     UNION
     SELECT 'othertest' 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;
--- TA8 results in incorrect encoding (redundant values) except in debug builds with specific logging
--- Memory allocation issues are suspected
---SELECT 'TA8', encode(ST_AsMVT('test', 4096, 'geom', q), 'base64') FROM (
---    SELECT 1 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 1 AS c1, ST_AsMVTGeom(ST_GeomFromText('POINT(26 18)'),
---    ST_MakeBox2D(ST_Point(0, 0), ST_Point(4096, 4096)), 4096, 0, false) AS geom
---    UNION
---    SELECT 2 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;
--- Expected output:
--- TA8|GkEKBHRlc3QSDBICAAAYASIECTLePxIMEgIAABgBIgQJNNw/EgwSAgABGAEiBAk03D8aAmMxIgIo
--- ASICKAIogCB4Ag==
+SELECT 'TA8', encode(ST_AsMVT('test', 4096, 'geom', q), 'base64') FROM (
+    SELECT 1::int 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 1::int AS c1, ST_AsMVTGeom(ST_GeomFromText('POINT(26 18)'),
+    ST_MakeBox2D(ST_Point(0, 0), ST_Point(4096, 4096)), 4096, 0, false) AS geom
+    UNION
+    SELECT 2::int 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';
index eb149db609de3e815c740035e1df2802899a240b..b90af1bdb143e51dee0578a9e30cad77c5df704d 100644 (file)
@@ -25,6 +25,8 @@ TA5|Gi8KBHRlc3QSDhIEAAABARgBIgQJMt4/GgJjMRoCYzIiAigBIgYKBGFiY2QogCB4Ag==
 TA6|GisKBHRlc3QSDhIEAAABARgBIgQJMt4/GgJjMRoCYzIiAigBIgIwASiAIHgC
 TA7|Gk4KBHRlc3QSDBICAAAYASIECTTcPxIMEgIAARgBIgQJMt4/EgwSAgABGAEiBAk03D8aAmMxIgsK
 CW90aGVydGVzdCIGCgR0ZXN0KIAgeAI=
+TA8|GkEKBHRlc3QSDBICAAAYASIECTLePxIMEgIAABgBIgQJNNw/EgwSAgABGAEiBAk03D8aAmMxIgIo
+ASICKAIogCB4Ag==
 TU2
 ERROR:  pgis_asmvt_transfn: parameter row cannot be other than a rowtype
 TU3