Skip to content

Commit d0d88e4

Browse files
committedNov 15, 2017
Fixes #16798 FilterFid feature requests with virtual layers
1 parent ac574e2 commit d0d88e4

File tree

1 file changed

+30
-3
lines changed

1 file changed

+30
-3
lines changed
 

‎src/providers/virtual/qgsvirtuallayerfeatureiterator.cpp

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ QgsVirtualLayerFeatureIterator::QgsVirtualLayerFeatureIterator( QgsVirtualLayerF
6363
QString tableName = mSource->mTableName;
6464

6565
QStringList wheres;
66+
QString offset;
6667
QString subset = mSource->mSubset;
6768
if ( !subset.isNull() )
6869
{
@@ -105,6 +106,13 @@ QgsVirtualLayerFeatureIterator::QgsVirtualLayerFeatureIterator( QgsVirtualLayerF
105106
wheres << values;
106107
}
107108
}
109+
else
110+
{
111+
if ( request.filterType() == QgsFeatureRequest::FilterFid )
112+
{
113+
offset = QStringLiteral( " LIMIT 1 OFFSET %1" ).arg( request.filterFid() );
114+
}
115+
}
108116

109117
if ( request.flags() & QgsFeatureRequest::SubsetOfAttributes )
110118
{
@@ -150,7 +158,14 @@ QgsVirtualLayerFeatureIterator::QgsVirtualLayerFeatureIterator( QgsVirtualLayerF
150158
}
151159
else
152160
{
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+
}
154169
}
155170
Q_FOREACH ( int i, mAttributes )
156171
{
@@ -173,6 +188,11 @@ QgsVirtualLayerFeatureIterator::QgsVirtualLayerFeatureIterator( QgsVirtualLayerF
173188
mSqlQuery += " WHERE " + wheres.join( QStringLiteral( " AND " ) );
174189
}
175190

191+
if ( !offset.isEmpty() )
192+
{
193+
mSqlQuery += offset;
194+
}
195+
176196
mQuery.reset( new Sqlite::Query( mSource->mSqlite, mSqlQuery ) );
177197

178198
mFid = 0;
@@ -232,8 +252,15 @@ bool QgsVirtualLayerFeatureIterator::fetchFeature( QgsFeature &feature )
232252

233253
if ( mSource->mDefinition.uid().isNull() )
234254
{
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+
}
237264
}
238265
else
239266
{

0 commit comments

Comments
 (0)
Please sign in to comment.