Mercurial > hg > orthanc
changeset 6155:18fc493db0d2 attach-custom-data
removed redundancies between SQL scripts
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Mon, 02 Jun 2025 17:10:37 +0200 |
parents | 2ee32b4433a5 |
children | d6d8c8c2dcc4 |
files | OrthancServer/CMakeLists.txt OrthancServer/Sources/Database/PrepareDatabase.sql OrthancServer/Sources/Database/SQLiteDatabaseWrapper.cpp |
diffstat | 3 files changed, 33 insertions(+), 63 deletions(-) [+] |
line wrap: on
line diff
--- a/OrthancServer/CMakeLists.txt Mon Jun 02 16:34:30 2025 +0200 +++ b/OrthancServer/CMakeLists.txt Mon Jun 02 17:10:37 2025 +0200 @@ -253,7 +253,7 @@ INSTALL_TRACK_ATTACHMENTS_SIZE ${CMAKE_SOURCE_DIR}/Sources/Database/InstallTrackAttachmentsSize.sql INSTALL_LABELS_TABLE ${CMAKE_SOURCE_DIR}/Sources/Database/InstallLabelsTable.sql INSTALL_REVISION_AND_CUSTOM_DATA ${CMAKE_SOURCE_DIR}/Sources/Database/InstallRevisionAndCustomData.sql - INSTALL_KEY_VALUE_STORE_AND_QUEUES ${CMAKE_SOURCE_DIR}/Sources/Database/InstallKeyValueStoresAndQueues.sql + INSTALL_KEY_VALUE_STORES_AND_QUEUES ${CMAKE_SOURCE_DIR}/Sources/Database/InstallKeyValueStoresAndQueues.sql ) if (STANDALONE_BUILD)
--- a/OrthancServer/Sources/Database/PrepareDatabase.sql Mon Jun 02 16:34:30 2025 +0200 +++ b/OrthancServer/Sources/Database/PrepareDatabase.sql Mon Jun 02 17:10:37 2025 +0200 @@ -138,45 +138,11 @@ -- new in Orthanc 1.5.1 -------------------------- equivalent to InstallTrackAttachmentsSize.sql - -CREATE TABLE GlobalIntegers( - key INTEGER PRIMARY KEY, - value INTEGER); - -INSERT INTO GlobalProperties VALUES (6, 1); -- GlobalProperty_GetTotalSizeIsFast - -INSERT INTO GlobalIntegers SELECT 0, IFNULL(SUM(compressedSize), 0) FROM AttachedFiles; -INSERT INTO GlobalIntegers SELECT 1, IFNULL(SUM(uncompressedSize), 0) FROM AttachedFiles; - -CREATE TRIGGER AttachedFileIncrementSize -AFTER INSERT ON AttachedFiles -BEGIN - UPDATE GlobalIntegers SET value = value + new.compressedSize WHERE key = 0; - UPDATE GlobalIntegers SET value = value + new.uncompressedSize WHERE key = 1; -END; - -CREATE TRIGGER AttachedFileDecrementSize -AFTER DELETE ON AttachedFiles -BEGIN - UPDATE GlobalIntegers SET value = value - old.compressedSize WHERE key = 0; - UPDATE GlobalIntegers SET value = value - old.uncompressedSize WHERE key = 1; -END; - --------------------------------------------------- +${INSTALL_TRACK_ATTACHMENTS_SIZE} -- new in Orthanc 1.12.0 ------------------------- equivalent to InstallLabelsTable.sql - -CREATE TABLE Labels( - id INTEGER REFERENCES Resources(internalId) ON DELETE CASCADE, - label TEXT NOT NULL, - PRIMARY KEY(id, label) -- Prevents duplicates - ); - -CREATE INDEX LabelsIndex1 ON Labels(id); -CREATE INDEX LabelsIndex2 ON Labels(label); -- This index allows efficient lookups - --------------------------------------------------- +${INSTALL_LABELS_TABLE} -- new in Orthanc 1.12.8 ------------------------- equivalent to InstallRevisionAndCustomData.sql @@ -204,20 +170,7 @@ -- new in Orthanc 1.12.8 ------------------------- equivalent to InstallKeyValueStoresAndQueues.sql -CREATE TABLE KeyValueStores( - storeId TEXT NOT NULL, - key TEXT NOT NULL, - value BLOB NOT NULL, - PRIMARY KEY(storeId, key) -- Prevents duplicates - ); - -CREATE TABLE Queues ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - queueId TEXT NOT NULL, - value BLOB -); - -CREATE INDEX QueuesIndex ON Queues (queueId, id); +${INSTALL_KEY_VALUE_STORES_AND_QUEUES} ---------------------------------------------------
--- a/OrthancServer/Sources/Database/SQLiteDatabaseWrapper.cpp Mon Jun 02 16:34:30 2025 +0200 +++ b/OrthancServer/Sources/Database/SQLiteDatabaseWrapper.cpp Mon Jun 02 17:10:37 2025 +0200 @@ -39,6 +39,7 @@ #include <OrthancServerResources.h> #include <stdio.h> +#include <boost/algorithm/string/replace.hpp> #include <boost/lexical_cast.hpp> @@ -2576,6 +2577,25 @@ } + static void ExecuteEmbeddedScript(SQLite::Connection& db, + ServerResources::FileResourceId resourceId) + { + std::string script; + ServerResources::GetFileResource(script, resourceId); + db.Execute(script); + } + + + static void InjectEmbeddedScript(std::string& sql, + const std::string& name, + ServerResources::FileResourceId resourceId) + { + std::string script; + ServerResources::GetFileResource(script, resourceId); + boost::replace_all(sql, name, script); + } + + void SQLiteDatabaseWrapper::Open() { { @@ -2614,6 +2634,11 @@ LOG(INFO) << "Creating the database"; std::string query; ServerResources::GetFileResource(query, ServerResources::PREPARE_DATABASE); + + InjectEmbeddedScript(query, "${INSTALL_TRACK_ATTACHMENTS_SIZE}", ServerResources::INSTALL_TRACK_ATTACHMENTS_SIZE); + InjectEmbeddedScript(query, "${INSTALL_LABELS_TABLE}", ServerResources::INSTALL_LABELS_TABLE); + InjectEmbeddedScript(query, "${INSTALL_KEY_VALUE_STORES_AND_QUEUES}", ServerResources::INSTALL_KEY_VALUE_STORES_AND_QUEUES); + db_.Execute(query); } @@ -2648,18 +2673,14 @@ tmp != "1") { LOG(INFO) << "Installing the SQLite triggers to track the size of the attachments"; - std::string query; - ServerResources::GetFileResource(query, ServerResources::INSTALL_TRACK_ATTACHMENTS_SIZE); - db_.Execute(query); + ExecuteEmbeddedScript(db_, ServerResources::INSTALL_TRACK_ATTACHMENTS_SIZE); } // New in Orthanc 1.12.0 if (!db_.DoesTableExist("Labels")) { LOG(INFO) << "Installing the \"Labels\" table"; - std::string query; - ServerResources::GetFileResource(query, ServerResources::INSTALL_LABELS_TABLE); - db_.Execute(query); + ExecuteEmbeddedScript(db_, ServerResources::INSTALL_LABELS_TABLE); } // New in Orthanc 1.12.8 @@ -2667,18 +2688,14 @@ || tmp != "1") { LOG(INFO) << "Upgrading SQLite schema to support revision and customData"; - std::string query; - ServerResources::GetFileResource(query, ServerResources::INSTALL_REVISION_AND_CUSTOM_DATA); - db_.Execute(query); + ExecuteEmbeddedScript(db_, ServerResources::INSTALL_REVISION_AND_CUSTOM_DATA); } // New in Orthanc 1.12.8 if (!db_.DoesTableExist("KeyValueStores")) { LOG(INFO) << "Installing the \"KeyValueStores\" and \"Queues\" tables"; - std::string query; - ServerResources::GetFileResource(query, ServerResources::INSTALL_KEY_VALUE_STORE_AND_QUEUES); - db_.Execute(query); + ExecuteEmbeddedScript(db_, ServerResources::INSTALL_KEY_VALUE_STORES_AND_QUEUES); } }