Mercurial > hg > orthanc-databases
changeset 656:5459bbd74cc6 sql-opti
test version: no FOR UPDATE, no PatientRecycling
author | Alain Mazy <am@orthanc.team> |
---|---|
date | Wed, 23 Apr 2025 16:38:51 +0200 (4 days ago) |
parents | bfa993553ed9 |
children | aa2e2d47465d |
files | PostgreSQL/Plugins/SQL/PrepareIndex.sql |
diffstat | 1 files changed, 32 insertions(+), 31 deletions(-) [+] |
line wrap: on
line diff
--- a/PostgreSQL/Plugins/SQL/PrepareIndex.sql Tue Apr 22 18:10:38 2025 +0200 +++ b/PostgreSQL/Plugins/SQL/PrepareIndex.sql Wed Apr 23 16:38:51 2025 +0200 @@ -539,45 +539,46 @@ is_new_series := 1; is_new_instance := 1; - -- Check if patient exists - SELECT internalid INTO patient_internal_id FROM "resources" WHERE publicId = patient_public_id; - IF NOT FOUND THEN - INSERT INTO "resources" VALUES (DEFAULT, 0, patient_public_id, NULL, 0) RETURNING internalid INTO patient_internal_id; - ELSE - is_new_patient := 0; - END IF; + BEGIN + INSERT INTO "resources" VALUES (DEFAULT, 0, patient_public_id, NULL, 0) RETURNING internalid INTO patient_internal_id; + EXCEPTION + WHEN unique_violation THEN + is_new_patient := 0; + SELECT internalid INTO patient_internal_id FROM "resources" WHERE publicId = patient_public_id; + END; - -- Check if study exists - SELECT internalid INTO study_internal_id FROM "resources" WHERE publicId = study_public_id; - IF NOT FOUND THEN - INSERT INTO "resources" VALUES (DEFAULT, 1, study_public_id, patient_internal_id, 0) RETURNING internalid INTO study_internal_id; - ELSE - is_new_study := 0; - END IF; + BEGIN + INSERT INTO "resources" VALUES (DEFAULT, 1, study_public_id, patient_internal_id, 0) RETURNING internalid INTO study_internal_id; + EXCEPTION + WHEN unique_violation THEN + is_new_study := 0; + SELECT internalid INTO study_internal_id FROM "resources" WHERE publicId = study_public_id; + END; - -- Check if series exists - SELECT internalid INTO series_internal_id FROM "resources" WHERE publicId = series_public_id; - IF NOT FOUND THEN - INSERT INTO "resources" VALUES (DEFAULT, 2, series_public_id, study_internal_id, 0) RETURNING internalid INTO series_internal_id; - ELSE - is_new_series := 0; - END IF; + BEGIN + INSERT INTO "resources" VALUES (DEFAULT, 2, series_public_id, study_internal_id, 0) RETURNING internalid INTO series_internal_id; + EXCEPTION + WHEN unique_violation THEN + is_new_series := 0; + SELECT internalid INTO series_internal_id FROM "resources" WHERE publicId = series_public_id; + END; - -- Check if instance exists - SELECT internalid INTO instance_internal_id FROM "resources" WHERE publicId = instance_public_id; - IF NOT FOUND THEN + BEGIN INSERT INTO "resources" VALUES (DEFAULT, 3, instance_public_id, series_internal_id, 0) RETURNING internalid INTO instance_internal_id; - ELSE - is_new_instance := 0; - END IF; + EXCEPTION + WHEN unique_violation THEN + is_new_instance := 0; + SELECT internalid INTO instance_internal_id FROM "resources" WHERE publicId = instance_public_id; + END; - IF is_new_instance > 0 THEN - -- Move the patient to the end of the recycling order. - PERFORM PatientAddedOrUpdated(patient_internal_id, 1); - END IF; + -- IF is_new_instance > 0 THEN + -- -- Move the patient to the end of the recycling order. + -- 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,