From e3c6d479b7a79820882b0f858283f7b8decb39ba Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Mon, 9 Sep 2019 15:41:00 +0200 Subject: [PATCH] OGR GPKG: fix potential SELECT ambiguity for 'id' column (fixes #5858) When using a GeoPackage table that has a 'id' column, in some circumstances, MapServer composes internally a SELECT statement, but fails to prefix the id column with the table name, which causes an ambiguity when joining with the spatial index RTree table that has also a id column. --- mapogr.cpp | 3 +- msautotest/wxs/data/test.gpkg | Bin 0 -> 98304 bytes .../wxs/expected/wfs_ogr_gpkg_issue_5858.xml | 34 ++++++++++ msautotest/wxs/wfs_ogr_gpkg.map | 63 ++++++++++++++++++ 4 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 msautotest/wxs/data/test.gpkg create mode 100644 msautotest/wxs/expected/wfs_ogr_gpkg_issue_5858.xml create mode 100644 msautotest/wxs/wfs_ogr_gpkg.map diff --git a/mapogr.cpp b/mapogr.cpp index 7eb90ccb2a..1df3b0ab46 100644 --- a/mapogr.cpp +++ b/mapogr.cpp @@ -76,7 +76,7 @@ typedef struct ms_ogr_file_info_t { char *pszRowId; int bIsOKForSQLCompose; bool bHasSpatialIndex; // used only for spatialite for now - char* pszTablePrefix; // prefix to qualify field names. used only for spatialite for now when a join is done for spatial filtering. + char* pszTablePrefix; // prefix to qualify field names. used only for spatialite & gpkg for now when a join is done for spatial filtering. int bPaging; @@ -1386,6 +1386,7 @@ msOGRFileOpen(layerObj *layer, const char *connection ) if( have_gpkg_spatialite ) { psInfo->pszMainTableName = msStrdup( OGR_L_GetName(hLayer) ); + psInfo->pszTablePrefix = msStrdup( psInfo->pszMainTableName ); psInfo->pszSpatialFilterTableName = msStrdup( OGR_L_GetName(hLayer) ); psInfo->pszSpatialFilterGeometryColumn = msStrdup( OGR_L_GetGeometryColumn(hLayer) ); psInfo->dialect = "GPKG"; diff --git a/msautotest/wxs/data/test.gpkg b/msautotest/wxs/data/test.gpkg new file mode 100644 index 0000000000000000000000000000000000000000..60263f615e698c1cb4193e95bfbb40a1632130b3 GIT binary patch literal 98304 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 literal 0 HcmV?d00001 diff --git a/msautotest/wxs/expected/wfs_ogr_gpkg_issue_5858.xml b/msautotest/wxs/expected/wfs_ogr_gpkg_issue_5858.xml new file mode 100644 index 0000000000..896347c403 --- /dev/null +++ b/msautotest/wxs/expected/wfs_ogr_gpkg_issue_5858.xml @@ -0,0 +1,34 @@ +Content-Type: text/xml; charset=UTF-8 + + + + + + 2.000000,49.000000 2.000000,49.000000 + + + + + + + 2.000000,49.000000 2.000000,49.000000 + + + + + 2.000000,49.000000 + + + 1 + some place in France + + + + diff --git a/msautotest/wxs/wfs_ogr_gpkg.map b/msautotest/wxs/wfs_ogr_gpkg.map new file mode 100644 index 0000000000..8424ad410b --- /dev/null +++ b/msautotest/wxs/wfs_ogr_gpkg.map @@ -0,0 +1,63 @@ +# +# Test OGR GeoPackage support +# +# REQUIRES: SUPPORTS=WFS INPUT=OGR +# +# RUN_PARMS: wfs_ogr_gpkg_issue_5858.xml [MAPSERV] QUERY_STRING="map=[MAPFILE]&SERVICE=WFS&VERSION=1.0.0&REQUEST=GetFeature&TYPENAME=test&BBOX=-180,-90,180,90&MAXFEATURES=1" > [RESULT] + +MAP + +NAME WFS_OGR_GPKG +STATUS ON +SIZE 400 300 +EXTENT 6 30 21 50 +UNITS METERS +IMAGECOLOR 255 255 255 + +# +# Start of web interface definition +# + +WEB + + IMAGEPATH "tmp/" + IMAGEURL "/ms_tmp/" + + METADATA + "wfs_title" "Test simple wfs" + "wfs_onlineresource" "http://localhost/path/to/wfs_simple?" + "wfs_srs" "EPSG:4326" + "wfs_enable_request" "*" + END +END + +PROJECTION + "+proj=latlong +datum=WGS84" +END + +# +# Start of layer definitions +# + +LAYER + + NAME test + DATA test + CONNECTIONTYPE OGR + CONNECTION "./data/test.gpkg" + METADATA + "ows_title" "test" + "wfs_featureid" "id" + "gml_include_items" "all" + "gml_types" "auto" + END + TYPE POINT + STATUS ON + PROJECTION + "init=epsg:4326" + END + + TEMPLATE "wfs_ogr_gpkg.map" +END # Layer + +END # Map File