Mercurial > hg > orthanc-databases
changeset 572:6667bd31beaf find-refactoring
ReadOnly mode continued
author | Alain Mazy <am@orthanc.team> |
---|---|
date | Thu, 26 Sep 2024 17:24:29 +0200 |
parents | 77c8544bbd7d |
children | 523241efee57 |
files | PostgreSQL/Plugins/PostgreSQLIndex.cpp PostgreSQL/Plugins/SQL/PrepareIndex.sql |
diffstat | 2 files changed, 35 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/PostgreSQL/Plugins/PostgreSQLIndex.cpp Mon Sep 23 16:06:53 2024 +0200 +++ b/PostgreSQL/Plugins/PostgreSQLIndex.cpp Thu Sep 26 17:24:29 2024 +0200 @@ -43,6 +43,7 @@ static const GlobalProperty GlobalProperty_HasCreateInstance = GlobalProperty_DatabaseInternal1; static const GlobalProperty GlobalProperty_HasFastCountResources = GlobalProperty_DatabaseInternal2; static const GlobalProperty GlobalProperty_GetLastChangeIndex = GlobalProperty_DatabaseInternal3; + static const GlobalProperty GlobalProperty_HasComputeStatisticsReadOnly = GlobalProperty_DatabaseInternal4; } @@ -206,6 +207,15 @@ // apply all idempotent changes that are in the PrepareIndexV2 ApplyPrepareIndex(t, manager); } + + if (!LookupGlobalIntegerProperty(property, manager, MISSING_SERVER_IDENTIFIER, + Orthanc::GlobalProperty_HasComputeStatisticsReadOnly) || + property != 1) + { + // apply all idempotent changes that are in the PrepareIndex. In this case, we are just interested by + // ComputeStatisticsReadOnly() that does not need to be uninstalled in case of downgrade. + ApplyPrepareIndex(t, manager); + } } t.Commit(); @@ -243,7 +253,7 @@ { DatabaseManager::CachedStatement statement( STATEMENT_FROM_HERE, manager, - "SELECT * FROM UpdateSingleStatistic(0)"); + "SELECT * FROM ComputeStatisticsReadOnly(0)"); statement.Execute(); @@ -264,7 +274,7 @@ { DatabaseManager::CachedStatement statement( STATEMENT_FROM_HERE, manager, - "SELECT * FROM UpdateSingleStatistic(1)"); + "SELECT * FROM ComputeStatisticsReadOnly(1)"); statement.Execute(); @@ -648,7 +658,7 @@ { DatabaseManager::StandaloneStatement statement( manager, - std::string("SELECT * FROM UpdateSingleStatistic(") + boost::lexical_cast<std::string>(resourceType + 2) + ")"); // For an explanation of the "+ 2" below, check out "PrepareIndex.sql" + std::string("SELECT * FROM ComputeStatisticsReadOnly(") + boost::lexical_cast<std::string>(resourceType + 2) + ")"); // For an explanation of the "+ 2" below, check out "PrepareIndex.sql" statement.Execute();
--- a/PostgreSQL/Plugins/SQL/PrepareIndex.sql Mon Sep 23 16:06:53 2024 +0200 +++ b/PostgreSQL/Plugins/SQL/PrepareIndex.sql Thu Sep 26 17:24:29 2024 +0200 @@ -545,7 +545,28 @@ PERFORM PatientAddedOrUpdated(patient_internal_id, 1); END IF; END; +$body$ LANGUAGE plpgsql; +-- function to compute a statistic in a ReadOnly transaction +CREATE OR REPLACE FUNCTION ComputeStatisticsReadOnly( + IN statistics_key INTEGER, + OUT accumulated_value BIGINT +) RETURNS BIGINT AS $body$ + +DECLARE + current_value BIGINT; + +BEGIN + + SELECT VALUE from GlobalIntegers + INTO current_value + WHERE key = statistics_key; + + SELECT sum(value) + current_value FROM GlobalIntegersChanges + INTO accumulated_value + WHERE key = statistics_key; + +END; $body$ LANGUAGE plpgsql; @@ -559,3 +580,4 @@ INSERT INTO GlobalProperties VALUES (11, 3); -- GlobalProperty_HasCreateInstance -- this is actually the 3rd version of HasCreateInstance INSERT INTO GlobalProperties VALUES (12, 1); -- GlobalProperty_HasFastCountResources INSERT INTO GlobalProperties VALUES (13, 1); -- GlobalProperty_GetLastChangeIndex +INSERT INTO GlobalProperties VALUES (14, 1); -- GlobalProperty_HasComputeStatisticsReadOnly