Skip to content

Commit f69c1cf

Browse files
authoredJan 22, 2018
Merge pull request #6130 from elpaso/bugfix-17915-geopackage-delete-wrong-layer
[bugfix] Fixes 17915 geopackage delete wrong layer
2 parents 5016142 + f235e93 commit f69c1cf

File tree

2 files changed

+65
-57
lines changed

2 files changed

+65
-57
lines changed
 

‎src/providers/ogr/qgsgeopackagedataitems.cpp

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -379,11 +379,11 @@ bool QgsGeoPackageCollectionItem::deleteGeoPackageRasterLayer( const QString &ur
379379
layerName.toUtf8().constData(),
380380
layerName.toUtf8().constData() );
381381
status = sqlite3_exec(
382-
database.get(), /* An open database */
383-
sql, /* SQL to be evaluated */
384-
nullptr, /* Callback function */
385-
nullptr, /* 1st argument to callback */
386-
&errmsg /* Error msg written here */
382+
database.get(), /* An open database */
383+
sql, /* SQL to be evaluated */
384+
nullptr, /* Callback function */
385+
nullptr, /* 1st argument to callback */
386+
&errmsg /* Error msg written here */
387387
);
388388
sqlite3_free( sql );
389389
// Remove from optional tables, may silently fail
@@ -396,11 +396,11 @@ bool QgsGeoPackageCollectionItem::deleteGeoPackageRasterLayer( const QString &ur
396396
tableName.toUtf8().constData(),
397397
layerName.toUtf8().constData() );
398398
( void )sqlite3_exec(
399-
database.get(), /* An open database */
399+
database.get(), /* An open database */
400400
sql, /* SQL to be evaluated */
401-
nullptr, /* Callback function */
402-
nullptr, /* 1st argument to callback */
403-
nullptr /* Error msg written here */
401+
nullptr, /* Callback function */
402+
nullptr, /* 1st argument to callback */
403+
nullptr /* Error msg written here */
404404
);
405405
sqlite3_free( sql );
406406
}
@@ -409,34 +409,34 @@ bool QgsGeoPackageCollectionItem::deleteGeoPackageRasterLayer( const QString &ur
409409
char *sql = sqlite3_mprintf( "DELETE FROM gpkg_2d_gridded_coverage_ancillary WHERE tile_matrix_set_name = '%q'",
410410
layerName.toUtf8().constData() );
411411
( void )sqlite3_exec(
412-
database.get(), /* An open database */
412+
database.get(), /* An open database */
413413
sql, /* SQL to be evaluated */
414-
nullptr, /* Callback function */
415-
nullptr, /* 1st argument to callback */
416-
nullptr /* Error msg written here */
414+
nullptr, /* Callback function */
415+
nullptr, /* 1st argument to callback */
416+
nullptr /* Error msg written here */
417417
);
418418
sqlite3_free( sql );
419419
}
420420
{
421421
char *sql = sqlite3_mprintf( "DELETE FROM gpkg_2d_gridded_tile_ancillary WHERE tpudt_name = '%q'",
422422
layerName.toUtf8().constData() );
423423
( void )sqlite3_exec(
424-
database.get(), /* An open database */
424+
database.get(), /* An open database */
425425
sql, /* SQL to be evaluated */
426-
nullptr, /* Callback function */
427-
nullptr, /* 1st argument to callback */
428-
nullptr /* Error msg written here */
426+
nullptr, /* Callback function */
427+
nullptr, /* 1st argument to callback */
428+
nullptr /* Error msg written here */
429429
);
430430
sqlite3_free( sql );
431431
}
432432
// Vacuum
433433
{
434434
( void )sqlite3_exec(
435-
database.get(), /* An open database */
435+
database.get(), /* An open database */
436436
"VACUUM", /* SQL to be evaluated */
437-
nullptr, /* Callback function */
438-
nullptr, /* 1st argument to callback */
439-
nullptr /* Error msg written here */
437+
nullptr, /* Callback function */
438+
nullptr, /* 1st argument to callback */
439+
nullptr /* Error msg written here */
440440
);
441441
}
442442

‎src/providers/ogr/qgsogrprovider.cpp

Lines changed: 44 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -5741,57 +5741,65 @@ QGISEXTERN bool deleteLayer( const QString &uri, QString &errCause )
57415741
subsetString,
57425742
ogrGeometryType );
57435743

5744+
57445745
GDALDatasetH hDS = GDALOpenEx( filePath.toLocal8Bit().data(), GDAL_OF_RASTER | GDAL_OF_VECTOR | GDAL_OF_UPDATE, nullptr, nullptr, nullptr );
57455746
if ( hDS && ( ! layerName.isEmpty() || layerIndex != -1 ) )
57465747
{
5747-
if ( layerIndex == -1 )
5748+
// If we have got a name we convert it into an index
5749+
if ( ! layerName.isEmpty() )
57485750
{
5751+
layerIndex = -1;
57495752
for ( int i = 0; i < GDALDatasetGetLayerCount( hDS ); i++ )
57505753
{
57515754
OGRLayerH hL = GDALDatasetGetLayer( hDS, i );
57525755
if ( layerName == QString( OGR_L_GetName( hL ) ) )
57535756
{
57545757
layerIndex = i;
5758+
break;
57555759
}
57565760
}
57575761
}
5758-
OGRErr error = GDALDatasetDeleteLayer( hDS, layerIndex );
5759-
switch ( error )
5762+
// Do delete!
5763+
if ( layerIndex != -1 )
57605764
{
5761-
case OGRERR_NOT_ENOUGH_DATA:
5762-
errCause = QObject::tr( "Not enough data to deserialize" );
5763-
break;
5764-
case OGRERR_NOT_ENOUGH_MEMORY:
5765-
errCause = QObject::tr( "Not enough memory" );
5766-
break;
5767-
case OGRERR_UNSUPPORTED_GEOMETRY_TYPE:
5768-
errCause = QObject::tr( "Unsupported geometry type" );
5769-
break;
5770-
case OGRERR_UNSUPPORTED_OPERATION:
5771-
errCause = QObject::tr( "Unsupported operation" );
5772-
break;
5773-
case OGRERR_CORRUPT_DATA:
5774-
errCause = QObject::tr( "Corrupt data" );
5775-
break;
5776-
case OGRERR_FAILURE:
5777-
errCause = QObject::tr( "Failure" );
5778-
break;
5779-
case OGRERR_UNSUPPORTED_SRS:
5780-
errCause = QObject::tr( "Unsupported SRS" );
5781-
break;
5782-
case OGRERR_INVALID_HANDLE:
5783-
errCause = QObject::tr( "Invalid handle" );
5784-
break;
5785-
case OGRERR_NON_EXISTING_FEATURE:
5786-
errCause = QObject::tr( "Non existing feature" );
5787-
break;
5788-
default:
5789-
case OGRERR_NONE:
5790-
errCause = QObject::tr( "Success" );
5791-
break;
5765+
OGRErr error = GDALDatasetDeleteLayer( hDS, layerIndex );
5766+
switch ( error )
5767+
{
5768+
case OGRERR_NOT_ENOUGH_DATA:
5769+
errCause = QObject::tr( "Not enough data to deserialize" );
5770+
break;
5771+
case OGRERR_NOT_ENOUGH_MEMORY:
5772+
errCause = QObject::tr( "Not enough memory" );
5773+
break;
5774+
case OGRERR_UNSUPPORTED_GEOMETRY_TYPE:
5775+
errCause = QObject::tr( "Unsupported geometry type" );
5776+
break;
5777+
case OGRERR_UNSUPPORTED_OPERATION:
5778+
errCause = QObject::tr( "Unsupported operation" );
5779+
break;
5780+
case OGRERR_CORRUPT_DATA:
5781+
errCause = QObject::tr( "Corrupt data" );
5782+
break;
5783+
case OGRERR_FAILURE:
5784+
errCause = QObject::tr( "Failure" );
5785+
break;
5786+
case OGRERR_UNSUPPORTED_SRS:
5787+
errCause = QObject::tr( "Unsupported SRS" );
5788+
break;
5789+
case OGRERR_INVALID_HANDLE:
5790+
errCause = QObject::tr( "Invalid handle" );
5791+
break;
5792+
case OGRERR_NON_EXISTING_FEATURE:
5793+
errCause = QObject::tr( "Non existing feature" );
5794+
break;
5795+
default:
5796+
case OGRERR_NONE:
5797+
errCause = QObject::tr( "Success" );
5798+
break;
5799+
}
5800+
errCause = QObject::tr( "GDAL result code: %1" ).arg( errCause );
5801+
return error == OGRERR_NONE;
57925802
}
5793-
errCause = QObject::tr( "GDAL result code: %1" ).arg( errCause );
5794-
return error == OGRERR_NONE;
57955803
}
57965804
// This should never happen:
57975805
errCause = QObject::tr( "Layer not found: %1" ).arg( uri );

0 commit comments

Comments
 (0)
Please sign in to comment.