mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-17 00:04:02 -04:00
Geopackage: fix crash when deleting raster layers
This commit is contained in:
parent
f867b65cd2
commit
4d3c7e558b
@ -577,7 +577,7 @@ bool QgsGeoPackageRasterLayerItem::executeDeleteLayer( QString &errCause )
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Remove table
|
// Remove table
|
||||||
char *errmsg = NULL;
|
char *errmsg = nullptr;
|
||||||
char *sql = sqlite3_mprintf(
|
char *sql = sqlite3_mprintf(
|
||||||
"DROP table %w;"
|
"DROP table %w;"
|
||||||
"DELETE FROM gpkg_contents WHERE table_name = '%q';"
|
"DELETE FROM gpkg_contents WHERE table_name = '%q';"
|
||||||
@ -596,20 +596,21 @@ bool QgsGeoPackageRasterLayerItem::executeDeleteLayer( QString &errCause )
|
|||||||
);
|
);
|
||||||
sqlite3_free( sql );
|
sqlite3_free( sql );
|
||||||
// Remove from optional tables, may silently fail
|
// Remove from optional tables, may silently fail
|
||||||
for ( const auto tableName : QStringList()
|
QStringList optionalTables;
|
||||||
<< QStringLiteral( "gpkg_extensions" )
|
optionalTables << QStringLiteral( "gpkg_extensions" )
|
||||||
<< QStringLiteral( "gpkg_metadata_reference" ) )
|
<< QStringLiteral( "gpkg_metadata_reference" );
|
||||||
|
for ( const auto tableName : optionalTables )
|
||||||
{
|
{
|
||||||
char *sql = sqlite3_mprintf( "DELETE FROM table %w WHERE table_name = '%q",
|
char *sql = sqlite3_mprintf( "DELETE FROM table %w WHERE table_name = '%q",
|
||||||
tableName.toUtf8().constData(),
|
tableName.toUtf8().constData(),
|
||||||
layerName.toUtf8().constData() );
|
layerName.toUtf8().constData() );
|
||||||
status = sqlite3_exec(
|
sqlite3_exec(
|
||||||
handle, /* An open database */
|
handle, /* An open database */
|
||||||
sql, /* SQL to be evaluated */
|
sql, /* SQL to be evaluated */
|
||||||
NULL, /* Callback function */
|
NULL, /* Callback function */
|
||||||
NULL, /* 1st argument to callback */
|
NULL, /* 1st argument to callback */
|
||||||
NULL /* Error msg written here */
|
NULL /* Error msg written here */
|
||||||
);
|
);
|
||||||
sqlite3_free( sql );
|
sqlite3_free( sql );
|
||||||
}
|
}
|
||||||
if ( status == SQLITE_OK )
|
if ( status == SQLITE_OK )
|
||||||
@ -618,9 +619,9 @@ bool QgsGeoPackageRasterLayerItem::executeDeleteLayer( QString &errCause )
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
errCause = tr( "There was an error deleting the layer: %1" ).arg( errmsg );
|
errCause = tr( "There was an error deleting the layer: %1" ).arg( QString::fromUtf8( errmsg ) );
|
||||||
sqlite3_free( errmsg );
|
|
||||||
}
|
}
|
||||||
|
sqlite3_free( errmsg );
|
||||||
}
|
}
|
||||||
sqlite3_close( handle );
|
sqlite3_close( handle );
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user