@@ -63,6 +63,7 @@ QgsVirtualLayerFeatureIterator::QgsVirtualLayerFeatureIterator( QgsVirtualLayerF
63
63
QString tableName = mSource ->mTableName ;
64
64
65
65
QStringList wheres;
66
+ QString offset;
66
67
QString subset = mSource ->mSubset ;
67
68
if ( !subset.isNull () )
68
69
{
@@ -105,6 +106,13 @@ QgsVirtualLayerFeatureIterator::QgsVirtualLayerFeatureIterator( QgsVirtualLayerF
105
106
wheres << values;
106
107
}
107
108
}
109
+ else
110
+ {
111
+ if ( request.filterType () == QgsFeatureRequest::FilterFid )
112
+ {
113
+ offset = QStringLiteral ( " LIMIT 1 OFFSET %1" ).arg ( request.filterFid () );
114
+ }
115
+ }
108
116
109
117
if ( request.flags () & QgsFeatureRequest::SubsetOfAttributes )
110
118
{
@@ -150,7 +158,14 @@ QgsVirtualLayerFeatureIterator::QgsVirtualLayerFeatureIterator( QgsVirtualLayerF
150
158
}
151
159
else
152
160
{
153
- columns = QStringLiteral ( " 0" );
161
+ if ( request.filterType () == QgsFeatureRequest::FilterFid )
162
+ {
163
+ columns = QStringLiteral ( " %1" ).arg ( request.filterFid () );
164
+ }
165
+ else
166
+ {
167
+ columns = QStringLiteral ( " 0" );
168
+ }
154
169
}
155
170
Q_FOREACH ( int i, mAttributes )
156
171
{
@@ -173,6 +188,11 @@ QgsVirtualLayerFeatureIterator::QgsVirtualLayerFeatureIterator( QgsVirtualLayerF
173
188
mSqlQuery += " WHERE " + wheres.join ( QStringLiteral ( " AND " ) );
174
189
}
175
190
191
+ if ( !offset.isEmpty () )
192
+ {
193
+ mSqlQuery += offset;
194
+ }
195
+
176
196
mQuery .reset ( new Sqlite::Query ( mSource ->mSqlite , mSqlQuery ) );
177
197
178
198
mFid = 0 ;
@@ -232,8 +252,15 @@ bool QgsVirtualLayerFeatureIterator::fetchFeature( QgsFeature &feature )
232
252
233
253
if ( mSource ->mDefinition .uid ().isNull () )
234
254
{
235
- // no id column => autoincrement
236
- feature.setId ( mFid ++ );
255
+ if ( mRequest .filterType () == QgsFeatureRequest::FilterFid )
256
+ {
257
+ feature.setId ( mQuery ->columnInt64 ( 0 ) );
258
+ }
259
+ else
260
+ {
261
+ // no id column => autoincrement
262
+ feature.setId ( mFid ++ );
263
+ }
237
264
}
238
265
else
239
266
{
0 commit comments