Skip to content

Commit 353e7ab

Browse files
committedJan 6, 2013
Postgres feature iterator fixes (rewind, FID filter, closing)
1 parent 5b00800 commit 353e7ab

File tree

2 files changed

+8
-10
lines changed

2 files changed

+8
-10
lines changed
 

‎src/providers/postgres/qgspostgresfeatureiterator.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ const int QgsPostgresFeatureIterator::sFeatureQueueSize = 2000;
3232
QgsPostgresFeatureIterator::QgsPostgresFeatureIterator( QgsPostgresProvider* p, const QgsFeatureRequest& request )
3333
: QgsAbstractFeatureIterator( request ), P( p )
3434
, mFeatureQueueSize( sFeatureQueueSize )
35-
, mUseQueue( true )
3635
{
3736
mCursorName = QString( "qgisf%1" ).arg( P->mProviderId );
3837

@@ -45,7 +44,6 @@ QgsPostgresFeatureIterator::QgsPostgresFeatureIterator( QgsPostgresProvider* p,
4544
else if ( request.filterType() == QgsFeatureRequest::FilterFid )
4645
{
4746
whereClause = P->whereClause( request.filterFid() );
48-
mUseQueue = false; // queue not necessary
4947
}
5048

5149
if ( !P->mSqlWhereClause.isEmpty() )
@@ -79,12 +77,12 @@ bool QgsPostgresFeatureIterator::nextFeature( QgsFeature& feature )
7977
if ( mClosed )
8078
return false;
8179

80+
#if 0
81+
// featureAtId used to have some special checks - necessary?
8282
if ( !mUseQueue )
8383
{
8484
QgsPostgresResult queryResult = P->mConnectionRO->PQexec( QString( "FETCH FORWARD 1 FROM %1" ).arg( mCursorName ) );
8585

86-
/*
87-
// TODO: really needed?
8886
int rows = queryResult.PQntuples();
8987
if ( rows == 0 )
9088
{
@@ -95,14 +93,15 @@ bool QgsPostgresFeatureIterator::nextFeature( QgsFeature& feature )
9593
else if ( rows != 1 )
9694
{
9795
QgsMessageLog::logMessage( tr( "found %1 features instead of just one." ).arg( rows ), tr( "PostGIS" ) );
98-
}*/
96+
}
9997

10098
bool gotit = getFeature( queryResult, 0, feature );
10199

102100
feature.setValid( gotit );
103101
feature.setFields( &P->mAttributeFields ); // allow name-based attribute lookups
104102
return gotit;
105103
}
104+
#endif
106105

107106
if ( mFeatureQueue.empty() )
108107
{
@@ -141,8 +140,7 @@ bool QgsPostgresFeatureIterator::nextFeature( QgsFeature& feature )
141140
if ( mFeatureQueue.empty() )
142141
{
143142
QgsDebugMsg( QString( "Finished after %1 features" ).arg( mFetched ) );
144-
P->mConnectionRO->closeCursor( mCursorName );
145-
mClosed = true;
143+
146144
if ( P->mFeaturesCounted < mFetched )
147145
{
148146
QgsDebugMsg( QString( "feature count adjusted from %1 to %2" ).arg( P->mFeaturesCounted ).arg( mFetched ) );
@@ -179,8 +177,9 @@ bool QgsPostgresFeatureIterator::rewind()
179177
return false;
180178

181179
// move cursor to first record
182-
P->mConnectionRO->PQexecNR( QString( "move 0 in %1" ).arg( mCursorName ) );
180+
P->mConnectionRO->PQexecNR( QString( "move absolute 0 in %1" ).arg( mCursorName ) );
183181
mFeatureQueue.empty();
182+
mFetched = 0;
184183

185184
return true;
186185
}
@@ -197,6 +196,7 @@ bool QgsPostgresFeatureIterator::close()
197196
mFeatureQueue.dequeue();
198197
}
199198

199+
mClosed = true;
200200
return true;
201201
}
202202

‎src/providers/postgres/qgspostgresfeatureiterator.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,6 @@ class QgsPostgresFeatureIterator : public QgsAbstractFeatureIterator
4949

5050
static const int sFeatureQueueSize;
5151

52-
//! Whether to use mFeatureQueue
53-
bool mUseQueue;
5452
};
5553

5654
#endif // QGSPOSTGRESFEATUREITERATOR_H

0 commit comments

Comments
 (0)