diff --git a/test/unit/datasource/postgis.cpp b/test/unit/datasource/postgis.cpp index f945f3763..f74ee1548 100644 --- a/test/unit/datasource/postgis.cpp +++ b/test/unit/datasource/postgis.cpp @@ -26,6 +26,7 @@ #include #include #include +#include #include /* @@ -303,6 +304,40 @@ TEST_CASE("postgis") { } } + SECTION("Postgis interpolates !@uservar! tokens in query") + { + mapnik::parameters params(base_params); + params["table"] = "(SELECT * FROM public.test" + " WHERE GeometryType(geom) = !@wantedGeomType!" + " LIMIT 1) AS data"; + auto ds = mapnik::datasource_cache::instance().create(params); + REQUIRE(ds != nullptr); + + mapnik::transcoder tr("utf8"); + mapnik::query qry(ds->envelope()); + qry.set_variables({{"wantedGeomType", tr.transcode("POINT")}}); + CHECK(qry.variables().count("wantedGeomType") == 1); + + auto featureset = ds->features(qry); + auto feature = featureset->next(); + CHECKED_IF(feature != nullptr) + { + auto const& geom = feature->get_geometry(); + CHECK(mapnik::geometry::geometry_type(geom) == mapnik::geometry::Point); + } + + qry.set_variables({{"wantedGeomType", tr.transcode("POLYGON")}}); + CHECK(qry.variables().count("wantedGeomType") == 1); + + featureset = ds->features(qry); + feature = featureset->next(); + CHECKED_IF(feature != nullptr) + { + auto const& geom = feature->get_geometry(); + CHECK(mapnik::geometry::geometry_type(geom) == mapnik::geometry::Polygon); + } + } + SECTION("Postgis query extent: full dataset") { //include schema to increase coverage