[QGIS-Developer] OGR: sqlite with subset query, QgsOgrFeatureIterator::fetchFeature with SpatialFilterRect always returns feature with id 0

Sandro Mani manisandro at gmail.com
Sat Sep 2 14:27:32 PDT 2017


Hi Even


On 02.09.2017 21:49, Even Rouault wrote:
>
> There's a flow in your reproducer. You run OGR_DS_ExecuteSQL( ds, 
> subsetQuery, NULL, NULL ); but do not use the resulting result layer. 
> So basically this has no effect on the rest of your code (except a 
> memory leak).
>
Ah yes indeed!
>
> [...]
>
> The reason is that when issuing a SQL request there's no guarantee 
> that it will result in a set of rows with unique identifiers (think of 
> a join that could make several rows appear twice), so the FID on the 
> result set of ExecuteSQL() are just a sequence starting at 0.
>
Ok makes sense. Though as far as QGIS goes, is there a case where a 
subset query can result in duplicates?
>
> If you know that your request will result in a result set with real 
> FIDs you can use the following trick to get the FID column as a 
> regular column (renaming the ogc_fid as something else, since there's 
> special logic to ignre "ogc_fid as a regular field. If your FID field 
> name is already something else than this default "ogc_fid", then 
> you'll already get it as a regular field)
>
> $ ogrinfo poly.sqlite -sql "select ogc_fid as this_is_the_fid, * from 
> poly where ogc_fid = 10"
>
> INFO: Open of `poly.sqlite'
>
> using driver `SQLite' successful.
>
> Layer name: SELECT
>
> Geometry: Unknown (any)
>
> [...]
>
> Geometry Column = GEOMETRY
>
> this_is_the_fid: Integer (0.0)
>
> area: Real (0.0)
>
> eas_id: Integer64 (0.0)
>
> prfedea: String (0.0)
>
> OGRFeature(SELECT):0
>
> this_is_the_fid (Integer) = 10
>
> area (Real) = 5268.813
>
> eas_id (Integer64) = 170
>
> prfedea (String) = 35043413
>
> POLYGON ((479750.6875 4764702.0,479658.59375 4764670.0,479640.09375 
> 4764721.0,479735.90625 4764752.0,479750.6875 4764702.0))
>
Something like this [1] seems to fix the issue, don't know if it's the 
best way forward though?

Thanks
Sandro

[1] 
https://github.com/manisandro/QGIS/commit/e95eea6dfa3e7ce7d0c0796352fa39943be80031

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/qgis-developer/attachments/20170902/5b46a302/attachment-0001.html>


More information about the QGIS-Developer mailing list