Skip to content

Commit 61e0d64

Browse files
author
cfarmer
committed
Ensures that features (properly) fetched from provider (via nextFeature)
are set as valid Ensures that only valid features are rendered on the map canvas git-svn-id: http://svn.osgeo.org/qgis/trunk/qgis@10272 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent 62787bc commit 61e0d64

File tree

7 files changed

+22
-3
lines changed

7 files changed

+22
-3
lines changed

src/core/qgsvectorlayer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3343,7 +3343,7 @@ void QgsVectorLayer::drawFeature( QPainter* p,
33433343
// used in all cases of the statement (otherwise they may get
33443344
// executed, but never used, in a bit of code where performance is
33453345
// critical).
3346-
3346+
if (! fet.isValid() ) { return; }
33473347
#if defined(Q_WS_X11)
33483348
bool needToTrim = false;
33493349
#endif

src/providers/gpx/qgsgpxprovider.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ int QgsGPXProvider::capabilities() const
129129

130130
bool QgsGPXProvider::nextFeature( QgsFeature& feature )
131131
{
132+
feature.setValid( false );
132133
bool result = false;
133134

134135
QgsAttributeList::const_iterator iter;
@@ -403,6 +404,10 @@ bool QgsGPXProvider::nextFeature( QgsFeature& feature )
403404

404405
}
405406
}
407+
if ( result )
408+
{
409+
feature.setValid( true );
410+
}
406411
return result;
407412
}
408413

src/providers/grass/qgsgrassprovider.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,7 @@ QString QgsGrassProvider::storageType() const
290290

291291
bool QgsGrassProvider::nextFeature( QgsFeature& feature )
292292
{
293+
feature.setValid( false );
293294
int cat, type, id;
294295
unsigned char *wkb;
295296
int wkbsize;
@@ -412,6 +413,8 @@ bool QgsGrassProvider::nextFeature( QgsFeature& feature )
412413

413414
setFeatureAttributes( mLayerId, cat, &feature, mAttributesToFetch );
414415

416+
feature.setValid( true );
417+
415418
return true;
416419
}
417420

src/providers/memory/qgsmemoryprovider.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ QString QgsMemoryProvider::storageType() const
6262

6363
bool QgsMemoryProvider::nextFeature( QgsFeature& feature )
6464
{
65+
feature.setValid( false );
6566
bool hasFeature = FALSE;
6667

6768
// option 1: using spatial index
@@ -128,8 +129,9 @@ bool QgsMemoryProvider::nextFeature( QgsFeature& feature )
128129
{
129130
feature = mSelectIterator.value();
130131
mSelectIterator++;
132+
feature.setValid( true );
131133
}
132-
134+
133135
return hasFeature;
134136
}
135137

src/providers/ogr/qgsogrprovider.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -341,6 +341,8 @@ bool QgsOgrProvider::featureAtId( int featureId,
341341

342342
bool QgsOgrProvider::nextFeature( QgsFeature& feature )
343343
{
344+
feature.setValid( false );
345+
344346
if ( !valid )
345347
{
346348
QgsLogger::warning( "Read attempt on an invalid shapefile data source" );
@@ -410,6 +412,7 @@ bool QgsOgrProvider::nextFeature( QgsFeature& feature )
410412
if ( fet )
411413
{
412414
OGR_F_Destroy( fet );
415+
feature.setValid( true );
413416
return true;
414417
}
415418
else

src/providers/postgres/qgspostgresprovider.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -568,6 +568,7 @@ void QgsPostgresProvider::select( QgsAttributeList fetchAttributes, QgsRectangle
568568

569569
bool QgsPostgresProvider::nextFeature( QgsFeature& feature )
570570
{
571+
feature.setValid( false );
571572
QString cursorName = QString( "qgisf%1" ).arg( providerId );
572573

573574
if ( !valid )
@@ -621,7 +622,8 @@ bool QgsPostgresProvider::nextFeature( QgsFeature& feature )
621622
feature.setAttributeMap( mFeatureQueue.front().attributeMap() );
622623

623624
mFeatureQueue.pop();
624-
625+
626+
feature.setValid( true );
625627
return true;
626628
}
627629

src/providers/wfs/qgswfsprovider.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ QgsWFSProvider::~QgsWFSProvider()
6565

6666
bool QgsWFSProvider::nextFeature( QgsFeature& feature )
6767
{
68+
feature.setValid( false );
69+
6870
while ( true ) //go through the loop until we find a feature in the filter
6971
{
7072
if ( mSelectedFeatures.size() == 0 || mFeatureIterator == mSelectedFeatures.end() )
@@ -92,6 +94,7 @@ bool QgsWFSProvider::nextFeature( QgsFeature& feature )
9294
{
9395
if ( feature.geometry() && feature.geometry()->intersects( mSpatialFilter ) )
9496
{
97+
feature.setValid( true );
9598
return true;
9699
}
97100
else
@@ -101,6 +104,7 @@ bool QgsWFSProvider::nextFeature( QgsFeature& feature )
101104
}
102105
else
103106
{
107+
feature.setValid( true );
104108
return true;
105109
}
106110
}

0 commit comments

Comments
 (0)