Skip to content

Commit 39e0b7b

Browse files
committedNov 6, 2018
Restore subset string when fixing a bad layer
1 parent 7bf4e5b commit 39e0b7b

File tree

1 file changed

+16
-1
lines changed

1 file changed

+16
-1
lines changed
 

‎src/app/qgisapp.cpp‎

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6951,10 +6951,25 @@ void QgisApp::changeDataSource( QgsMapLayer *layer )
69516951
if ( uri.isValid() )
69526952
{
69536953
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+
}
69546965
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
69566967
if ( !( layerIsValid || layer->originalXmlProperties().isEmpty() ) )
69576968
{
6969+
if ( ! subsetString.isEmpty() )
6970+
{
6971+
vlayer->setSubsetString( subsetString );
6972+
}
69586973
QgsReadWriteContext context;
69596974
context.setPathResolver( QgsProject::instance()->pathResolver() );
69606975
context.setProjectTranslator( QgsProject::instance() );

0 commit comments

Comments
 (0)
Please sign in to comment.