Mercurial > hg > orthanc-databases
diff MySQL/Plugins/MySQLIndex.cpp @ 424:95c413106a66 improve-delete
Introduced a procedure to delete resources (to be tested)
author | Alain Mazy <am@osimis.io> |
---|---|
date | Wed, 13 Sep 2023 13:32:54 +0200 |
parents | 91124cc8a8c7 |
children | f4244c7e2725 |
line wrap: on
line diff
--- a/MySQL/Plugins/MySQLIndex.cpp Mon Aug 14 10:16:53 2023 +0200 +++ b/MySQL/Plugins/MySQLIndex.cpp Wed Sep 13 13:32:54 2023 +0200 @@ -317,7 +317,27 @@ t.Commit(); } - if (revision != 7) + if (revision == 7) + { + DatabaseManager::Transaction t(manager, TransactionType_ReadWrite); + + // Install the "CreateInstance" extension + std::string query; + + Orthanc::EmbeddedResources::GetFileResource + (query, Orthanc::EmbeddedResources::MYSQL_DELETE_RESOURCES); + + // Need to escape arobases: Don't use "t.GetDatabaseTransaction().ExecuteMultiLines()" here + db.ExecuteMultiLines(query, true); + + revision = 8; + SetGlobalIntegerProperty(manager, MISSING_SERVER_IDENTIFIER, Orthanc::GlobalProperty_DatabasePatchLevel, revision); + + t.Commit(); + } + + + if (revision != 8) { LOG(ERROR) << "MySQL plugin is incompatible with database schema revision: " << revision; throw Orthanc::OrthancException(Orthanc::ErrorCode_Database); @@ -453,29 +473,43 @@ } } - { - DatabaseManager::CachedStatement dropTemporaryTable( - STATEMENT_FROM_HERE, manager, - "DROP TEMPORARY TABLE IF EXISTS DeletedResources"); - dropTemporaryTable.Execute(); - } + // { + // DatabaseManager::CachedStatement dropTemporaryTable( + // STATEMENT_FROM_HERE, manager, + // "DROP TEMPORARY TABLE IF EXISTS DeletedResources"); + // dropTemporaryTable.Execute(); + // } + + // { + // DatabaseManager::CachedStatement lookupResourcesToDelete( + // STATEMENT_FROM_HERE, manager, + // "CREATE TEMPORARY TABLE DeletedResources SELECT * FROM (SELECT internalId, resourceType, publicId FROM Resources WHERE internalId=${id} OR parentId=${id} OR parentId IN (SELECT internalId FROM Resources WHERE parentId=${id}) OR parentId IN (SELECT internalId FROM Resources WHERE parentId IN (SELECT internalId FROM Resources WHERE parentId=${id}))) AS t"); + // lookupResourcesToDelete.SetParameterType("id", ValueType_Integer64); + + // Dictionary args; + // args.SetIntegerValue("id", id); + // lookupResourcesToDelete.Execute(args); + // } + + // { + // DatabaseManager::CachedStatement deleteHierarchy( + // STATEMENT_FROM_HERE, manager, + // "DELETE FROM Resources WHERE internalId IN (SELECT internalId FROM DeletedResources)"); + // deleteHierarchy.Execute(); + // } + { - DatabaseManager::CachedStatement lookupResourcesToDelete( + DatabaseManager::CachedStatement deleteResources( STATEMENT_FROM_HERE, manager, - "CREATE TEMPORARY TABLE DeletedResources SELECT * FROM (SELECT internalId, resourceType, publicId FROM Resources WHERE internalId=${id} OR parentId=${id} OR parentId IN (SELECT internalId FROM Resources WHERE parentId=${id}) OR parentId IN (SELECT internalId FROM Resources WHERE parentId IN (SELECT internalId FROM Resources WHERE parentId=${id}))) AS t"); - lookupResourcesToDelete.SetParameterType("id", ValueType_Integer64); + "CALL DeleteResources(${id})"); + + deleteResources.SetParameterType("id", ValueType_Integer64); Dictionary args; args.SetIntegerValue("id", id); - lookupResourcesToDelete.Execute(args); - } - - { - DatabaseManager::CachedStatement deleteHierarchy( - STATEMENT_FROM_HERE, manager, - "DELETE FROM Resources WHERE internalId IN (SELECT internalId FROM DeletedResources)"); - deleteHierarchy.Execute(); + + deleteResources.Execute(args); } SignalDeletedResources(output, manager);