From e62c4eb941c5b2e290675f8cab75758857c2a502 Mon Sep 17 00:00:00 2001 From: Alessandro Pasotti Date: Thu, 20 Sep 2018 09:17:28 +0200 Subject: [PATCH] Fix cannot deletete GPKG from raster on windows Fixes #17967 #19893 --- src/providers/ogr/qgsgeopackagedataitems.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/providers/ogr/qgsgeopackagedataitems.cpp b/src/providers/ogr/qgsgeopackagedataitems.cpp index 2f0e1eb9ece..35696b14ca1 100644 --- a/src/providers/ogr/qgsgeopackagedataitems.cpp +++ b/src/providers/ogr/qgsgeopackagedataitems.cpp @@ -32,6 +32,7 @@ #include "qgsvectorlayerexporter.h" #include "qgsgeopackagerasterwritertask.h" #include "qgstaskmanager.h" +#include "qgsproviderregistry.h" #include #include @@ -357,15 +358,16 @@ bool QgsGeoPackageCollectionItem::deleteGeoPackageRasterLayer( const QString &ur // Better safe than sorry if ( ! uri.isEmpty( ) ) { - QStringList pieces( uri.split( ':' ) ); - if ( pieces.size() != 3 ) + QVariantMap pieces( QgsProviderRegistry::instance()->decodeUri( QStringLiteral( "gdal" ), uri ) ); + QString baseUri = pieces[QStringLiteral( "path" )].toString(); + QString layerName = pieces[QStringLiteral( "layerName" )].toString(); + + if ( baseUri.isEmpty() || layerName.isEmpty() ) { errCause = QStringLiteral( "Layer URI is malformed: layer %1 cannot be deleted!" ).arg( uri ); } else { - QString baseUri = pieces.at( 1 ); - QString layerName = pieces.at( 2 ); sqlite3_database_unique_ptr database; int status = database.open_v2( baseUri, SQLITE_OPEN_READWRITE, nullptr ); if ( status != SQLITE_OK )