Skip to content

Commit

Permalink
Fix encoding of raster geopackage with a layername provided + add test
Browse files Browse the repository at this point in the history
  • Loading branch information
nirvn committed Jan 31, 2021
1 parent 60f172e commit 4b84330
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 2 deletions.
7 changes: 6 additions & 1 deletion src/core/providers/gdal/qgsgdalproviderbase.cpp
Expand Up @@ -377,7 +377,12 @@ QString QgsGdalProviderBase::encodeGdalUri( const QVariantMap &parts )
{
QString path = parts.value( QStringLiteral( "path" ) ).toString();
QString layerName = parts.value( QStringLiteral( "layerName" ) ).toString();
QString uri = path + ( !layerName.isEmpty() ? QStringLiteral( "|%1" ).arg( layerName ) : QString() );
QString uri;

if ( !layerName.isEmpty() && path.endsWith( QStringLiteral( "gpkg" ) ) )
uri = QStringLiteral( "GPKG:%1:%2" ).arg( path, layerName );
else
uri = path + ( !layerName.isEmpty() ? QStringLiteral( "|%1" ).arg( layerName ) : QString() );

const QStringList openOptions = parts.value( QStringLiteral( "openOptions" ) ).toStringList();

Expand Down
2 changes: 1 addition & 1 deletion tests/src/core/testqgsgdalprovider.cpp
Expand Up @@ -117,7 +117,7 @@ void TestQgsGdalProvider::encodeUri()
QCOMPARE( QgsProviderRegistry::instance()->encodeUri( QStringLiteral( "gdal" ), parts ), QStringLiteral( "/home/user/test.gpkg" ) );

parts.insert( QStringLiteral( "layerName" ), QStringLiteral( "layername" ) );
QCOMPARE( QgsProviderRegistry::instance()->encodeUri( QStringLiteral( "gdal" ), parts ), QStringLiteral( "/home/user/test.gpkg|layername" ) );
QCOMPARE( QgsProviderRegistry::instance()->encodeUri( QStringLiteral( "gdal" ), parts ), QStringLiteral( "GPKG:/home/user/test.gpkg:layername" ) );
}

void TestQgsGdalProvider::scaleDataType()
Expand Down
21 changes: 21 additions & 0 deletions tests/src/python/test_provider_gdal.py
Expand Up @@ -81,6 +81,27 @@ def testRasterBlock(self):
block = raster_layer.dataProvider().block(1, extent, 3, 1)
self.checkBlockContents(block, full_content[row * 3:row * 3 + 3])

def testDecodeEncodeUriGpkg(self):
"""Test decodeUri/encodeUri geopackage support"""

uri = '/my/raster.gpkg'
parts = QgsProviderRegistry.instance().decodeUri('gdal', uri)
self.assertEqual(parts, {'path': '/my/raster.gpkg', 'layerName': None})
encodedUri = QgsProviderRegistry.instance().encodeUri('gdal', parts)
self.assertEqual(encodedUri, uri)

uri = 'GPKG:/my/raster.gpkg'
parts = QgsProviderRegistry.instance().decodeUri('gdal', uri)
self.assertEqual(parts, {'path': '/my/raster.gpkg', 'layerName': None})
encodedUri = QgsProviderRegistry.instance().encodeUri('gdal', parts)
self.assertEqual(encodedUri, '/my/raster.gpkg')

uri = 'GPKG:/my/raster.gpkg:mylayer'
parts = QgsProviderRegistry.instance().decodeUri('gdal', uri)
self.assertEqual(parts, {'path': '/my/raster.gpkg', 'layerName': 'mylayer'})
encodedUri = QgsProviderRegistry.instance().encodeUri('gdal', parts)
self.assertEqual(encodedUri, uri)

def testDecodeEncodeUriOptions(self):
"""Test decodeUri/encodeUri options support"""

Expand Down

0 comments on commit 4b84330

Please sign in to comment.