Skip to content

Commit 05c1a77

Browse files
committed
Fix WFS SortBy support for OGR layers (#4878)
1 parent 88ec351 commit 05c1a77

File tree

1 file changed

+28
-2
lines changed

1 file changed

+28
-2
lines changed

mapogr.cpp

+28-2
Original file line numberDiff line numberDiff line change
@@ -1376,7 +1376,32 @@ static int msOGRFileWhichShapes(layerObj *layer, rectObj rect,
13761376
}
13771377
else
13781378
{
1379-
pszLayerDef = msStringConcatenate(pszLayerDef, "SELECT * FROM \"");
1379+
const char* pszGeometryColumn;
1380+
int i;
1381+
pszLayerDef = msStringConcatenate(pszLayerDef, "SELECT ");
1382+
for(i = 0; i < layer->numitems; i++)
1383+
{
1384+
if( i > 0 )
1385+
pszLayerDef = msStringConcatenate(pszLayerDef, ", ");
1386+
pszLayerDef = msStringConcatenate(pszLayerDef, "\"");
1387+
pszLayerDef = msStringConcatenate(pszLayerDef, layer->items[i]);
1388+
pszLayerDef = msStringConcatenate(pszLayerDef, "\"");
1389+
}
1390+
1391+
pszLayerDef = msStringConcatenate(pszLayerDef, ", ");
1392+
pszGeometryColumn = OGR_L_GetGeometryColumn(psInfo->hLayer);
1393+
if( pszGeometryColumn != NULL && pszGeometryColumn[0] != '\0' )
1394+
{
1395+
pszLayerDef = msStringConcatenate(pszLayerDef, "\"");
1396+
pszLayerDef = msStringConcatenate(pszLayerDef, pszGeometryColumn);
1397+
pszLayerDef = msStringConcatenate(pszLayerDef, "\"");
1398+
}
1399+
else
1400+
{
1401+
/* Add ", *" so that we still have an hope to get the geometry */
1402+
pszLayerDef = msStringConcatenate(pszLayerDef, "*");
1403+
}
1404+
pszLayerDef = msStringConcatenate(pszLayerDef, " FROM \"");
13801405
pszLayerDef = msStringConcatenate(pszLayerDef, OGR_FD_GetName(OGR_L_GetLayerDefn(psInfo->hLayer)));
13811406
pszLayerDef = msStringConcatenate(pszLayerDef, "\" ORDER BY ");
13821407
}
@@ -1395,15 +1420,16 @@ static int msOGRFileWhichShapes(layerObj *layer, rectObj rect,
13951420

13961421
ACQUIRE_OGR_LOCK;
13971422
psInfo->hLayer = OGR_DS_ExecuteSQL( psInfo->hDS, pszLayerDef, NULL, NULL );
1398-
msFree(pszLayerDef);
13991423
RELEASE_OGR_LOCK;
14001424
if( psInfo->hLayer == NULL ) {
14011425
msSetError(MS_OGRERR,
14021426
"ExecuteSQL(%s) failed.\n%s",
14031427
"msOGRFileWhichShapes()",
14041428
pszLayerDef, CPLGetLastErrorMsg() );
1429+
msFree(pszLayerDef);
14051430
return MS_FAILURE;
14061431
}
1432+
msFree(pszLayerDef);
14071433
}
14081434

14091435
/* ------------------------------------------------------------------

0 commit comments

Comments
 (0)