Skip to content

Commit

Permalink
[attributetable] Fix sorting with geometry expression
Browse files Browse the repository at this point in the history
Fix #57338
  • Loading branch information
elpaso committed Jun 2, 2024
1 parent f9d3ca3 commit 2fd22cd
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 8 deletions.
24 changes: 18 additions & 6 deletions src/gui/attributetable/qgsattributetablemodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1053,9 +1053,13 @@ void QgsAttributeTableModel::prefetchSortData( const QString &expressionString,
widgetData = getWidgetData( cache.sortFieldIndex );
}

const QgsFeatureRequest request = QgsFeatureRequest( mFeatureRequest )
.setFlags( Qgis::FeatureRequestFlag::NoGeometry )
.setSubsetOfAttributes( cache.sortCacheAttributes );
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 );

QgsFeatureIterator it = mLayerCache->getFeatures( request );

QgsFeature f;
Expand Down Expand Up @@ -1094,9 +1098,17 @@ QString QgsAttributeTableModel::sortCacheExpression( unsigned long cacheIndex )

void QgsAttributeTableModel::setRequest( const QgsFeatureRequest &request )
{
mFeatureRequest = request;
if ( mLayer && !mLayer->isSpatial() )
mFeatureRequest.setFlags( mFeatureRequest.flags() | Qgis::FeatureRequestFlag::NoGeometry );
if ( mFeatureRequest.compare( request ) )
{
mFeatureRequest = request;
if ( mLayer && !mLayer->isSpatial() )
mFeatureRequest.setFlags( mFeatureRequest.flags() | Qgis::FeatureRequestFlag::NoGeometry );
// Prefetch data for sorting, resetting all caches
for ( unsigned long i = 0; i < mSortCaches.size(); ++i )
{
prefetchSortData( sortCacheExpression( i ), i );
}
}
}

const QgsFeatureRequest &QgsAttributeTableModel::request() const
Expand Down
1 change: 1 addition & 0 deletions src/gui/attributetable/qgsdualview.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -419,6 +419,7 @@ void QgsDualView::setFilterMode( QgsAttributeTableFilterModel::FilterMode filter
mFilterModel->disconnectFilterModeConnections();

mMasterModel->setRequest( request );

whileBlocking( mLayerCache )->setCacheGeometry( needsGeometry );
mMasterModel->loadLayer();
}
Expand Down
4 changes: 2 additions & 2 deletions src/gui/attributetable/qgsdualview.h
Original file line number Diff line number Diff line change
Expand Up @@ -410,8 +410,8 @@ class GUI_EXPORT QgsDualView : public QStackedWidget, private Ui::QgsDualViewBas
void initAttributeForm( const QgsFeature &feature );

/**
* Initializes widgets which depend on the attributes of this layer
*/
* Initializes widgets which depend on the attributes of this layer
*/
void columnBoxInit();
void initLayerCache( bool cacheGeometry );
void initModels( QgsMapCanvas *mapCanvas, const QgsFeatureRequest &request, bool loadFeatures );
Expand Down

0 comments on commit 2fd22cd

Please sign in to comment.