File tree Expand file tree Collapse file tree 1 file changed +16
-1
lines changed Expand file tree Collapse file tree 1 file changed +16
-1
lines changed Original file line number Diff line number Diff line change @@ -6951,10 +6951,25 @@ void QgisApp::changeDataSource( QgsMapLayer *layer )
6951
6951
if ( uri.isValid() )
6952
6952
{
6953
6953
bool layerIsValid( layer->isValid() );
6954
+ // Store subset string form vlayer if we are fixing a bad layer
6955
+ QgsVectorLayer *vlayer = qobject_cast<QgsVectorLayer *>( layer );
6956
+ QString subsetString;
6957
+ // Get the subset string directly from the data provider because
6958
+ // layer's method will return a null string from invalid layers
6959
+ if ( !layerIsValid && vlayer && vlayer->dataProvider() &&
6960
+ vlayer->dataProvider()->supportsSubsetString() &&
6961
+ !vlayer->dataProvider()->subsetString( ).isEmpty() )
6962
+ {
6963
+ subsetString = vlayer->dataProvider()->subsetString();
6964
+ }
6954
6965
layer->setDataSource( uri.uri, layer->name(), uri.providerKey, QgsDataProvider::ProviderOptions() );
6955
- // Re-apply style
6966
+ // Re-apply original style and subset string when fixing bad layers
6956
6967
if ( !( layerIsValid || layer->originalXmlProperties().isEmpty() ) )
6957
6968
{
6969
+ if ( ! subsetString.isEmpty() )
6970
+ {
6971
+ vlayer->setSubsetString( subsetString );
6972
+ }
6958
6973
QgsReadWriteContext context;
6959
6974
context.setPathResolver( QgsProject::instance()->pathResolver() );
6960
6975
context.setProjectTranslator( QgsProject::instance() );
You can’t perform that action at this time.
0 commit comments