@@ -44,6 +44,8 @@ QgsOgrFeatureIterator::QgsOgrFeatureIterator( QgsOgrFeatureSource *source, bool
44
44
, mFilterFids( mRequest .filterFids() )
45
45
, mFilterFidsIt( mFilterFids .constBegin() )
46
46
, mSharedDS( source->mSharedDS )
47
+ , mFirstFieldIsFid( source->mFirstFieldIsFid )
48
+ , mFieldsWithoutFid( source->mFieldsWithoutFid )
47
49
{
48
50
// Since connection timeout for OGR connections is problematic and can lead to crashes, disable for now.
49
51
mRequest .setTimeout ( -1 );
@@ -82,6 +84,15 @@ QgsOgrFeatureIterator::QgsOgrFeatureIterator( QgsOgrFeatureSource *source, bool
82
84
mOgrOrigLayer = mOgrLayer ;
83
85
mOgrLayerWithFid = QgsOgrProviderUtils::setSubsetString ( mOgrLayer , mConn ->ds , mSource ->mEncoding , QString (), true , &mOrigFidAdded );
84
86
mOgrLayer = QgsOgrProviderUtils::setSubsetString ( mOgrLayer , mConn ->ds , mSource ->mEncoding , mSource ->mSubsetString , true , &mOrigFidAdded );
87
+
88
+ OGRFeatureDefnH fdef = OGR_L_GetLayerDefn ( mOgrLayer );
89
+ QByteArray fidColumn ( OGR_L_GetFIDColumn ( mOgrLayer ) );
90
+ mFirstFieldIsFid = !fidColumn.isEmpty () && OGR_FD_GetFieldIndex ( fdef, fidColumn ) < 0 ;
91
+
92
+ mFieldsWithoutFid .clear ();
93
+ for ( int i = ( mFirstFieldIsFid ) ? 1 : 0 ; i < mSource ->mFields .size (); i++ )
94
+ mFieldsWithoutFid .append ( mSource ->mFields .at ( i ) );
95
+
85
96
if ( !mOgrLayer )
86
97
{
87
98
close ();
@@ -404,15 +415,15 @@ bool QgsOgrFeatureIterator::close()
404
415
405
416
void QgsOgrFeatureIterator::getFeatureAttribute ( OGRFeatureH ogrFet, QgsFeature &f, int attindex ) const
406
417
{
407
- if ( mSource -> mFirstFieldIsFid && attindex == 0 )
418
+ if ( mFirstFieldIsFid && attindex == 0 )
408
419
{
409
420
f.setAttribute ( 0 , static_cast <qint64>( OGR_F_GetFID ( ogrFet ) ) );
410
421
return ;
411
422
}
412
423
413
- int attindexWithoutFid = ( mSource -> mFirstFieldIsFid ) ? attindex - 1 : attindex;
424
+ int attindexWithoutFid = ( mFirstFieldIsFid ) ? attindex - 1 : attindex;
414
425
bool ok = false ;
415
- QVariant value = QgsOgrUtils::getOgrFeatureAttribute ( ogrFet, mSource -> mFieldsWithoutFid , attindexWithoutFid, mSource ->mEncoding , &ok );
426
+ QVariant value = QgsOgrUtils::getOgrFeatureAttribute ( ogrFet, mFieldsWithoutFid , attindexWithoutFid, mSource ->mEncoding , &ok );
416
427
if ( !ok )
417
428
return ;
418
429
0 commit comments