Fix request NoGeom flag when sort needs geom

This commit is contained in:
Alessandro Pasotti 2024-06-03 09:44:07 +02:00
parent dd7d2af08c
commit e115e6df08
2 changed files with 8 additions and 9 deletions

View File

@ -217,16 +217,18 @@ QgsAttributeTableDialog::QgsAttributeTableDialog( QgsVectorLayer *layer, QgsAttr
{
request.setFilterExpression( filterExpression );
}
if ( !needsGeom )
request.setFlags( Qgis::FeatureRequestFlag::NoGeometry );
if ( !needsGeom && ( !mLayer || !QgsExpression( mLayer->attributeTableConfig().sortExpression() ).needsGeometry() ) )
{
request.setFlags( Qgis::FeatureRequestFlag::NoGeometry );
}
// Initialize dual view
if ( mLayer )
{
request.setSubsetOfAttributes( mMainView->requiredAttributes( mLayer ) );
mMainView->init( mLayer, QgisApp::instance()->mapCanvas(), request, editorContext, false );
QgsAttributeTableConfig config = mLayer->attributeTableConfig();
const QgsAttributeTableConfig config = mLayer->attributeTableConfig();
mMainView->setAttributeTableConfig( config );
mFeatureFilterWidget->init( mLayer, editorContext, mMainView, QgisApp::instance()->messageBar(), QgsMessageBar::defaultMessageTimeout() );
}

View File

@ -1053,12 +1053,9 @@ void QgsAttributeTableModel::prefetchSortData( const QString &expressionString,
widgetData = getWidgetData( cache.sortFieldIndex );
}
QgsFeatureRequest request = QgsFeatureRequest( mFeatureRequest )
.setSubsetOfAttributes( cache.sortCacheAttributes );
// If expression does not need geometry set NoGeometry flag
if ( !cache.sortCacheExpression.needsGeometry() )
request.setFlags( request.flags() | Qgis::FeatureRequestFlag::NoGeometry );
const QgsFeatureRequest request = QgsFeatureRequest( mFeatureRequest )
.setFlags( cache.sortCacheExpression.needsGeometry() ? Qgis::FeatureRequestFlag::NoFlags : Qgis::FeatureRequestFlag::NoGeometry )
.setSubsetOfAttributes( cache.sortCacheAttributes );
QgsFeatureIterator it = mLayerCache->getFeatures( request );