From e115e6df08b81aa323da00430152aea931cf2388 Mon Sep 17 00:00:00 2001 From: Alessandro Pasotti Date: Mon, 3 Jun 2024 09:44:07 +0200 Subject: [PATCH] Fix request NoGeom flag when sort needs geom --- src/app/qgsattributetabledialog.cpp | 8 +++++--- src/gui/attributetable/qgsattributetablemodel.cpp | 9 +++------ 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/app/qgsattributetabledialog.cpp b/src/app/qgsattributetabledialog.cpp index c2bca62e693..df51db20bf8 100644 --- a/src/app/qgsattributetabledialog.cpp +++ b/src/app/qgsattributetabledialog.cpp @@ -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() ); } diff --git a/src/gui/attributetable/qgsattributetablemodel.cpp b/src/gui/attributetable/qgsattributetablemodel.cpp index a22024db18d..a7500cf0712 100644 --- a/src/gui/attributetable/qgsattributetablemodel.cpp +++ b/src/gui/attributetable/qgsattributetablemodel.cpp @@ -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 );