Skip to content

Commit 2c49631

Browse files
committedNov 13, 2017
[OGR provider] Support 64bit FID (partially implemented per 8f3d44d in master) (fixes #16404)
1 parent e1f5348 commit 2c49631

File tree

2 files changed

+33
-1
lines changed

2 files changed

+33
-1
lines changed
 

‎src/providers/ogr/qgsogrprovider.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1807,7 +1807,7 @@ bool QgsOgrProvider::changeGeometryValues( const QgsGeometryMap &geometry_map )
18071807

18081808
for ( QgsGeometryMap::const_iterator it = geometry_map.constBegin(); it != geometry_map.constEnd(); ++it )
18091809
{
1810-
gdal::ogr_feature_unique_ptr theOGRFeature( mOgrLayer->GetFeature( static_cast<long>( FID_TO_NUMBER( it.key() ) ) ) );
1810+
gdal::ogr_feature_unique_ptr theOGRFeature( mOgrLayer->GetFeature( FID_TO_NUMBER( it.key() ) ) );
18111811
if ( !theOGRFeature )
18121812
{
18131813
pushError( tr( "OGR error changing geometry: feature %1 not found" ).arg( it.key() ) );

‎tests/src/python/test_provider_ogr_gpkg.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -600,6 +600,38 @@ def testGeopackageRefreshIfTableListUpdated(self):
600600
vl2.subLayers()
601601
self.assertEqual(vl2.dataProvider().subLayers(), ['0:test:0:Point:geom', '1:test2:0:Point:geom'])
602602

603+
def testGeopackageLargeFID(self):
604+
605+
tmpfile = os.path.join(self.basetestpath, 'testGeopackageLargeFID.gpkg')
606+
ds = ogr.GetDriverByName('GPKG').CreateDataSource(tmpfile)
607+
lyr = ds.CreateLayer('test', geom_type=ogr.wkbPoint)
608+
lyr.CreateField(ogr.FieldDefn('str_field', ogr.OFTString))
609+
ds = None
610+
611+
vl = QgsVectorLayer(u'{}'.format(tmpfile) + "|layername=" + "test", 'test', u'ogr')
612+
f = QgsFeature()
613+
f.setAttributes([1234567890123, None])
614+
self.assertTrue(vl.startEditing())
615+
self.assertTrue(vl.dataProvider().addFeatures([f]))
616+
self.assertTrue(vl.commitChanges())
617+
618+
got = [feat for feat in vl.getFeatures()][0]
619+
self.assertEqual(got['fid'], 1234567890123)
620+
621+
self.assertTrue(vl.startEditing())
622+
self.assertTrue(vl.changeGeometry(1234567890123, QgsGeometry.fromWkt('Point (3 50)')))
623+
self.assertTrue(vl.changeAttributeValue(1234567890123, 1, 'foo'))
624+
self.assertTrue(vl.commitChanges())
625+
626+
got = [feat for feat in vl.getFeatures()][0]
627+
self.assertEqual(got['str_field'], 'foo')
628+
got_geom = got.geometry()
629+
self.assertIsNotNone(got_geom)
630+
631+
self.assertTrue(vl.startEditing())
632+
self.assertTrue(vl.deleteFeature(1234567890123))
633+
self.assertTrue(vl.commitChanges())
634+
603635

604636
if __name__ == '__main__':
605637
unittest.main()

0 commit comments

Comments
 (0)
Please sign in to comment.