mirror of
https://github.com/qgis/QGIS.git
synced 2025-03-02 00:02:12 -05:00
Fixes #16798 FilterFid feature requests with virtual layers
This commit is contained in:
parent
ac574e231a
commit
d0d88e440a
@ -63,6 +63,7 @@ QgsVirtualLayerFeatureIterator::QgsVirtualLayerFeatureIterator( QgsVirtualLayerF
|
||||
QString tableName = mSource->mTableName;
|
||||
|
||||
QStringList wheres;
|
||||
QString offset;
|
||||
QString subset = mSource->mSubset;
|
||||
if ( !subset.isNull() )
|
||||
{
|
||||
@ -105,6 +106,13 @@ QgsVirtualLayerFeatureIterator::QgsVirtualLayerFeatureIterator( QgsVirtualLayerF
|
||||
wheres << values;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( request.filterType() == QgsFeatureRequest::FilterFid )
|
||||
{
|
||||
offset = QStringLiteral( " LIMIT 1 OFFSET %1" ).arg( request.filterFid() );
|
||||
}
|
||||
}
|
||||
|
||||
if ( request.flags() & QgsFeatureRequest::SubsetOfAttributes )
|
||||
{
|
||||
@ -150,7 +158,14 @@ QgsVirtualLayerFeatureIterator::QgsVirtualLayerFeatureIterator( QgsVirtualLayerF
|
||||
}
|
||||
else
|
||||
{
|
||||
columns = QStringLiteral( "0" );
|
||||
if ( request.filterType() == QgsFeatureRequest::FilterFid )
|
||||
{
|
||||
columns = QStringLiteral( "%1" ).arg( request.filterFid() );
|
||||
}
|
||||
else
|
||||
{
|
||||
columns = QStringLiteral( "0" );
|
||||
}
|
||||
}
|
||||
Q_FOREACH ( int i, mAttributes )
|
||||
{
|
||||
@ -173,6 +188,11 @@ QgsVirtualLayerFeatureIterator::QgsVirtualLayerFeatureIterator( QgsVirtualLayerF
|
||||
mSqlQuery += " WHERE " + wheres.join( QStringLiteral( " AND " ) );
|
||||
}
|
||||
|
||||
if ( !offset.isEmpty() )
|
||||
{
|
||||
mSqlQuery += offset;
|
||||
}
|
||||
|
||||
mQuery.reset( new Sqlite::Query( mSource->mSqlite, mSqlQuery ) );
|
||||
|
||||
mFid = 0;
|
||||
@ -232,8 +252,15 @@ bool QgsVirtualLayerFeatureIterator::fetchFeature( QgsFeature &feature )
|
||||
|
||||
if ( mSource->mDefinition.uid().isNull() )
|
||||
{
|
||||
// no id column => autoincrement
|
||||
feature.setId( mFid++ );
|
||||
if ( mRequest.filterType() == QgsFeatureRequest::FilterFid )
|
||||
{
|
||||
feature.setId( mQuery->columnInt64( 0 ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
// no id column => autoincrement
|
||||
feature.setId( mFid++ );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user