From 9076e64afb7910eb526543e4f33f3935602a5c16 Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Sat, 26 Jun 2021 10:27:18 +1000 Subject: [PATCH] If all layer names are the same, remove them from the sub layer uris --- .../providers/ogr/qgsogrprovidermetadata.cpp | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/core/providers/ogr/qgsogrprovidermetadata.cpp b/src/core/providers/ogr/qgsogrprovidermetadata.cpp index 8628bc9811d..e87e594d509 100644 --- a/src/core/providers/ogr/qgsogrprovidermetadata.cpp +++ b/src/core/providers/ogr/qgsogrprovidermetadata.cpp @@ -1077,6 +1077,26 @@ QList QgsOgrProviderMetadata::querySublayers( const res << QgsOgrProviderUtils::querySubLayerList( i, i == 0 ? firstLayer.get() : layer.get(), driverName, flags, false, uri, false, feedback ); } + + // if all layernames are equal, we remove them from the uris + QSet< QString > layerNames; + for ( const QgsProviderSublayerDetails &details : std::as_const( res ) ) + { + const QVariantMap parts = decodeUri( details.uri() ); + layerNames.insert( parts.value( QStringLiteral( "layerName" ) ).toString() ); + } + + if ( layerNames.count() == 1 ) + { + // all layer names are the same, so remove them from uris + for ( int i = 0; i < res.size(); ++i ) + { + QVariantMap parts = decodeUri( res.at( i ).uri() ); + parts.remove( QStringLiteral( "layerName" ) ); + res[ i ].setUri( encodeUri( parts ) ); + } + } + return res; } }