@@ -3547,8 +3547,8 @@ OGRLayerH QgsOgrProviderUtils::setSubsetString( OGRLayerH layer, GDALDatasetH ds
3547
3547
}
3548
3548
else
3549
3549
{
3550
- QByteArray sqlPart1 = " SELECT " ;
3551
- QByteArray sqlPart3 = " * FROM " + quotedIdentifier ( layerName, mGDALDriverName )
3550
+ QByteArray sqlPart1 = " SELECT * " ;
3551
+ QByteArray sqlPart3 = " FROM " + quotedIdentifier ( layerName, mGDALDriverName )
3552
3552
+ " WHERE " + encoding->fromUnicode ( subsetString );
3553
3553
3554
3554
origFidAddAttempted = true ;
@@ -3560,15 +3560,15 @@ OGRLayerH QgsOgrProviderUtils::setSubsetString( OGRLayerH layer, GDALDatasetH ds
3560
3560
fidColumn = " FID" ;
3561
3561
}
3562
3562
3563
- QByteArray sql = sqlPart1 + fidColumn + " as orig_ogc_fid, " + sqlPart3;
3563
+ QByteArray sql = sqlPart1 + " , " + fidColumn + " as orig_ogc_fid" + sqlPart3;
3564
3564
QgsDebugMsg ( QString ( " SQL: %1" ).arg ( encoding->toUnicode ( sql ) ) );
3565
3565
subsetLayer = GDALDatasetExecuteSQL ( ds, sql.constData (), nullptr , nullptr );
3566
3566
3567
3567
// See https://lists.osgeo.org/pipermail/qgis-developer/2017-September/049802.html
3568
3568
// If execute SQL fails because it did not find the fidColumn, retry with hardcoded FID
3569
3569
if ( !subsetLayer )
3570
3570
{
3571
- QByteArray sql = sqlPart1 + " FID as orig_ogc_fid, " + sqlPart3;
3571
+ QByteArray sql = sqlPart1 + " , " + " FID as orig_ogc_fid" + sqlPart3;
3572
3572
QgsDebugMsg ( QString ( " SQL: %1" ).arg ( encoding->toUnicode ( sql ) ) );
3573
3573
subsetLayer = GDALDatasetExecuteSQL ( ds, sql.constData (), nullptr , nullptr );
3574
3574
}
@@ -3582,13 +3582,14 @@ OGRLayerH QgsOgrProviderUtils::setSubsetString( OGRLayerH layer, GDALDatasetH ds
3582
3582
}
3583
3583
}
3584
3584
3585
- // Check if first column is orig_ogc_fid
3585
+ // Check if last column is orig_ogc_fid
3586
3586
if ( origFidAddAttempted && subsetLayer )
3587
3587
{
3588
3588
OGRFeatureDefnH fdef = OGR_L_GetLayerDefn ( subsetLayer );
3589
- if ( OGR_FD_GetFieldCount ( fdef ) > 0 )
3589
+ int fieldCount = OGR_FD_GetFieldCount ( fdef );
3590
+ if ( fieldCount > 0 )
3590
3591
{
3591
- OGRFieldDefnH fldDef = OGR_FD_GetFieldDefn ( fdef, 0 );
3592
+ OGRFieldDefnH fldDef = OGR_FD_GetFieldDefn ( fdef, fieldCount - 1 );
3592
3593
origFidAdded = qstrcmp ( OGR_Fld_GetNameRef ( fldDef ), " orig_ogc_fid" ) == 0 ;
3593
3594
}
3594
3595
}
0 commit comments