|
22 | 22 | #include "qgslogger.h"
|
23 | 23 | #include "qgsmessagelog.h"
|
24 | 24 |
|
| 25 | +#include <QElapsedTimer> |
25 | 26 | #include <QObject>
|
26 | 27 | #include <QSettings>
|
27 | 28 |
|
28 |
| - |
29 |
| -const int QgsPostgresFeatureIterator::sFeatureQueueSize = 2000; |
30 |
| - |
31 |
| - |
32 | 29 | QgsPostgresFeatureIterator::QgsPostgresFeatureIterator( QgsPostgresFeatureSource* source, bool ownSource, const QgsFeatureRequest& request )
|
33 | 30 | : QgsAbstractFeatureIteratorFromSource<QgsPostgresFeatureSource>( source, ownSource, request )
|
34 |
| - , mFeatureQueueSize( sFeatureQueueSize ) |
| 31 | + , mFeatureQueueSize( 1 ) |
35 | 32 | , mFetched( 0 )
|
36 | 33 | , mFetchGeometry( false )
|
37 | 34 | , mExpressionCompiled( false )
|
@@ -227,6 +224,9 @@ bool QgsPostgresFeatureIterator::fetchFeature( QgsFeature& feature )
|
227 | 224 |
|
228 | 225 | if ( mFeatureQueue.empty() && !mLastFetch )
|
229 | 226 | {
|
| 227 | + QElapsedTimer timer; |
| 228 | + timer.start(); |
| 229 | + |
230 | 230 | QString fetch = QString( "FETCH FORWARD %1 FROM %2" ).arg( mFeatureQueueSize ).arg( mCursorName );
|
231 | 231 | QgsDebugMsgLevel( QString( "fetching %1 features." ).arg( mFeatureQueueSize ), 4 );
|
232 | 232 |
|
@@ -262,6 +262,15 @@ bool QgsPostgresFeatureIterator::fetchFeature( QgsFeature& feature )
|
262 | 262 | } // for each row in queue
|
263 | 263 | }
|
264 | 264 | unlock();
|
| 265 | + |
| 266 | + if ( timer.elapsed() > 500 && mFeatureQueueSize > 1 ) |
| 267 | + { |
| 268 | + mFeatureQueueSize /= 2; |
| 269 | + } |
| 270 | + else if ( timer.elapsed() < 50 && mFeatureQueueSize < 10000 ) |
| 271 | + { |
| 272 | + mFeatureQueueSize *= 2; |
| 273 | + } |
265 | 274 | }
|
266 | 275 |
|
267 | 276 | if ( mFeatureQueue.empty() )
|
|
0 commit comments