From e5ba42c6297d5efffc852602457dcd5b4691de50 Mon Sep 17 00:00:00 2001 From: Karl Levik Date: Wed, 2 Dec 2020 17:41:26 +0000 Subject: [PATCH 1/9] Sprocs to retrieve SCM samples for id and for location+container barcode --- .../sp_retrieve_scm_sample.sql | 247 +++++++++++++++++ ...ple_for_container_barcode_and_location.sql | 252 ++++++++++++++++++ 2 files changed, 499 insertions(+) create mode 100644 schema/stored_programs/sp_retrieve_scm_sample.sql create mode 100644 schema/stored_programs/sp_retrieve_scm_sample_for_container_barcode_and_location.sql diff --git a/schema/stored_programs/sp_retrieve_scm_sample.sql b/schema/stored_programs/sp_retrieve_scm_sample.sql new file mode 100644 index 00000000..95d5d305 --- /dev/null +++ b/schema/stored_programs/sp_retrieve_scm_sample.sql @@ -0,0 +1,247 @@ +/* Tests: +CALL retrieve_scm_sample(398828, False, NULL)\G +CALL retrieve_scm_sample(398828, False, 'boaty')\G +CALL retrieve_scm_sample(398828, True, NULL)\G +CALL retrieve_scm_sample(398828, True, 'boaty')\G +*/ + +DELIMITER ;; + +CREATE OR REPLACE DEFINER=`ispyb_root`@`%` PROCEDURE `retrieve_scm_sample`(p_id int unsigned, p_useContainerSession boolean, p_authLogin varchar(45)) +READS SQL DATA +COMMENT 'Returns a single-row result-set with the sample for the given ID' +BEGIN + + IF p_id IS NOT NULL THEN + + IF p_useContainerSession = True THEN + + IF p_authLogin IS NOT NULL THEN + -- Authorise only if the person (p_authLogin) is a member of a session on the proposal. + + SELECT DISTINCT bls.blSampleId "sampleId", + pr.proteinId "materialId", + bls.containerId "containerId", + bls.diffractionPlanId "planId", + bs.sessionId "sessionId", + p.proposalId "proposalId", + + bls.name "sampleName", + bls.code "sampleCode", + bls.volume "sampleVolume", + bls.dimension1 "thickness", + bls.comments "sampleComments", + bls.location "sampleLocation", + bls.subLocation "sampleSubLocation", + bls.blSampleStatus "sampleStatus", + + pr.name "materialName", + pr.acronym "materialAcronym", + pr.sequence "materialFormula", + pr.density "materialDensity", + pr.safetyLevel "materialSafetyLevel", -- enum(GREEN, YELLOW, RED) + pr.description "materialChemicalDescription", + pr.molecularMass "materialMolecularMass", + compt.name "materialType", -- protein, DNA, RNA, small molecule, ... + conct.name "materialConcentrationType", + pr.isotropy "materialIsotropy", -- enum('isotropic','anisotropic') + + et.name "planExperimentType", + pc.name "planPurificationColumn", + plan.robotPlateTemperature "planRobotPlateTemperature", + plan.exposureTemperature "planExposureTemperature", + plan.transmission "planTransmission", + + p.proposalCode "proposalCode", + p.proposalNumber "proposalNumber", + bs.visit_number "sessionNumber" + FROM BLSample bls + INNER JOIN Container c ON c.containerId = bls.containerId + INNER JOIN BLSession bs ON c.sessionId = bs.sessionId + INNER JOIN Proposal p ON p.proposalId = bs.proposalId + INNER JOIN BLSession bs2 ON bs2.proposalId = p.proposalId + INNER JOIN Session_has_Person shp ON bs2.sessionId = shp.sessionId + INNER JOIN Person pe ON pe.personId = shp.personId + LEFT JOIN Crystal cr ON cr.crystalId = bls.crystalId + LEFT JOIN Protein pr ON pr.proteinId = cr.proteinId + LEFT JOIN ComponentType compt ON compt.componentTypeId = pr.componentTypeId + LEFT JOIN ConcentrationType conct ON conct.concentrationTypeId = pr.concentrationTypeId + LEFT JOIN DiffractionPlan plan ON plan.diffractionPlanId = bls.diffractionPlanId + LEFT JOIN ExperimentType et ON et.experimentTypeId = plan.experimentTypeId AND et.proposalType = 'scm' + LEFT JOIN PurificationColumn pc ON pc.purificationColumnId = plan.purificationColumnId + WHERE pe.login = p_authLogin AND bls.blSampleId = p_id; + + ELSE + + SELECT DISTINCT bls.blSampleId "sampleId", + pr.proteinId "materialId", + bls.containerId "containerId", + bls.diffractionPlanId "planId", + bs.sessionId "sessionId", + p.proposalId "proposalId", + + bls.name "sampleName", + bls.code "sampleCode", + bls.volume "sampleVolume", + bls.dimension1 "thickness", + bls.comments "sampleComments", + bls.location "sampleLocation", + bls.subLocation "sampleSubLocation", + bls.blSampleStatus "sampleStatus", + + pr.name "materialName", + pr.acronym "materialAcronym", + pr.sequence "materialFormula", + pr.density "materialDensity", + pr.safetyLevel "materialSafetyLevel", -- enum(GREEN, YELLOW, RED) + pr.description "materialChemicalDescription", + pr.molecularMass "materialMolecularMass", + compt.name "materialType", -- protein, DNA, RNA, small molecule, ... + conct.name "materialConcentrationType", + pr.isotropy "materialIsotropy", -- enum('isotropic','anisotropic') + + et.name "planExperimentType", + pc.name "planPurificationColumn", + plan.robotPlateTemperature "planRobotPlateTemperature", + plan.exposureTemperature "planExposureTemperature", + plan.transmission "planTransmission", + + p.proposalCode "proposalCode", + p.proposalNumber "proposalNumber", + bs.visit_number "sessionNumber" + FROM BLSample bls + INNER JOIN Container c ON c.containerId = bls.containerId + INNER JOIN BLSession bs ON c.sessionId = bs.sessionId + INNER JOIN Proposal p ON p.proposalId = bs.proposalId + LEFT JOIN Crystal cr ON cr.crystalId = bls.crystalId + LEFT JOIN Protein pr ON pr.proteinId = cr.proteinId + LEFT JOIN ComponentType compt ON compt.componentTypeId = pr.componentTypeId + LEFT JOIN ConcentrationType conct ON conct.concentrationTypeId = pr.concentrationTypeId + LEFT JOIN DiffractionPlan plan ON plan.diffractionPlanId = bls.diffractionPlanId + LEFT JOIN ExperimentType et ON et.experimentTypeId = plan.experimentTypeId AND et.proposalType = 'scm' + LEFT JOIN PurificationColumn pc ON pc.purificationColumnId = plan.purificationColumnId + WHERE bls.blSampleId = p_id; + + END IF; + + ELSE + + IF p_authLogin IS NOT NULL THEN + -- Authorise only if the person (p_authLogin) is a member of a session on the proposal. + + SELECT DISTINCT bls.blSampleId "sampleId", + pr.proteinId "materialId", + bls.containerId "containerId", + bls.diffractionPlanId "planId", + NULL "sessionId", + p.proposalId "proposalId", + + bls.name "sampleName", + bls.code "sampleCode", + bls.volume "sampleVolume", + bls.dimension1 "thickness", + bls.comments "sampleComments", + bls.location "sampleLocation", + bls.subLocation "sampleSubLocation", + bls.blSampleStatus "sampleStatus", + + pr.name "materialName", + pr.acronym "materialAcronym", + pr.sequence "materialFormula", + pr.density "materialDensity", + pr.safetyLevel "materialSafetyLevel", -- enum(GREEN, YELLOW, RED) + pr.description "materialChemicalDescription", + pr.molecularMass "materialMolecularMass", + compt.name "materialType", -- protein, DNA, RNA, small molecule, ... + conct.name "materialConcentrationType", + pr.isotropy "materialIsotropy", -- enum('isotropic','anisotropic') + + et.name "planExperimentType", + pc.name "planPurificationColumn", + plan.robotPlateTemperature "planRobotPlateTemperature", + plan.exposureTemperature "planExposureTemperature", + plan.transmission "planTransmission", + + p.proposalCode "proposalCode", + p.proposalNumber "proposalNumber", + NULL "sessionNumber" + FROM BLSample bls + INNER JOIN Container c ON c.containerId = bls.containerId + INNER JOIN Dewar d ON d.dewarId = c.dewarId + INNER JOIN Shipping s ON s.shippingId = d.shippingId + INNER JOIN Proposal p ON p.proposalId = s.proposalId + INNER JOIN BLSession bs ON bs.proposalId = p.proposalId + INNER JOIN Session_has_Person shp ON bs.sessionId = shp.sessionId + INNER JOIN Person pe ON pe.personId = shp.personId + LEFT JOIN Crystal cr ON cr.crystalId = bls.crystalId + LEFT JOIN Protein pr ON pr.proteinId = cr.proteinId + LEFT JOIN ComponentType compt ON compt.componentTypeId = pr.componentTypeId + LEFT JOIN ConcentrationType conct ON conct.concentrationTypeId = pr.concentrationTypeId + LEFT JOIN DiffractionPlan plan ON plan.diffractionPlanId = bls.diffractionPlanId + LEFT JOIN ExperimentType et ON et.experimentTypeId = plan.experimentTypeId AND et.proposalType = 'scm' + LEFT JOIN PurificationColumn pc ON pc.purificationColumnId = plan.purificationColumnId + WHERE pe.login = p_authLogin AND bls.blSampleId = p_id; + + ELSE + + SELECT DISTINCT bls.blSampleId "sampleId", + pr.proteinId "materialId", + bls.containerId "containerId", + bls.diffractionPlanId "planId", + NULL "sessionId", + p.proposalId "proposalId", + + bls.name "sampleName", + bls.code "sampleCode", + bls.volume "sampleVolume", + bls.dimension1 "thickness", + bls.comments "sampleComments", + bls.location "sampleLocation", + bls.subLocation "sampleSubLocation", + bls.blSampleStatus "sampleStatus", + + pr.name "materialName", + pr.acronym "materialAcronym", + pr.sequence "materialFormula", + pr.density "materialDensity", + pr.safetyLevel "materialSafetyLevel", -- enum(GREEN, YELLOW, RED) + pr.description "materialChemicalDescription", + pr.molecularMass "materialMolecularMass", + compt.name "materialType", -- protein, DNA, RNA, small molecule, ... + conct.name "materialConcentrationType", + pr.isotropy "materialIsotropy", -- enum('isotropic','anisotropic') + + et.name "planExperimentType", + pc.name "planPurificationColumn", + plan.robotPlateTemperature "planRobotPlateTemperature", + plan.exposureTemperature "planExposureTemperature", + plan.transmission "planTransmission", + + p.proposalCode "proposalCode", + p.proposalNumber "proposalNumber", + NULL "sessionNumber" + FROM BLSample bls + INNER JOIN Container c ON c.containerId = bls.containerId + INNER JOIN Dewar d ON d.dewarId = c.dewarId + INNER JOIN Shipping s ON s.shippingId = d.shippingId + INNER JOIN Proposal p ON p.proposalId = s.proposalId + LEFT JOIN Crystal cr ON cr.crystalId = bls.crystalId + LEFT JOIN Protein pr ON pr.proteinId = cr.proteinId + LEFT JOIN ComponentType compt ON compt.componentTypeId = pr.componentTypeId + LEFT JOIN ConcentrationType conct ON conct.concentrationTypeId = pr.concentrationTypeId + LEFT JOIN DiffractionPlan plan ON plan.diffractionPlanId = bls.diffractionPlanId + LEFT JOIN ExperimentType et ON et.experimentTypeId = plan.experimentTypeId AND et.proposalType = 'scm' + LEFT JOIN PurificationColumn pc ON pc.purificationColumnId = plan.purificationColumnId + WHERE bls.blSampleId = p_id; + + END IF; + + END IF; + + ELSE + SIGNAL SQLSTATE '45000' SET MYSQL_ERRNO=1644, MESSAGE_TEXT='Mandatory argument p_id can not be NULL'; + END IF; + +END;; + +DELIMITER ; \ No newline at end of file diff --git a/schema/stored_programs/sp_retrieve_scm_sample_for_container_barcode_and_location.sql b/schema/stored_programs/sp_retrieve_scm_sample_for_container_barcode_and_location.sql new file mode 100644 index 00000000..39e0a043 --- /dev/null +++ b/schema/stored_programs/sp_retrieve_scm_sample_for_container_barcode_and_location.sql @@ -0,0 +1,252 @@ +/* Tests: +CALL retrieve_scm_sample_for_container_barcode_and_location('VMXiSim-001', 1, False, NULL)\G +CALL retrieve_scm_sample_for_container_barcode_and_location('VMXiSim-001', 1, False, 'boaty')\G +CALL retrieve_scm_sample_for_container_barcode_and_location('VMXiSim-001', 1, True, NULL)\G +CALL retrieve_scm_sample_for_container_barcode_and_location('VMXiSim-001', 1, True, 'boaty')\G + +CALL retrieve_scm_sample_for_container_barcode_and_location('test_plate3', 1, False, NULL)\G +CALL retrieve_scm_sample_for_container_barcode_and_location('test_plate3', 1, False, 'boaty')\G + +*/ + +DELIMITER ;; + +CREATE OR REPLACE DEFINER=`ispyb_root`@`%` PROCEDURE `retrieve_scm_sample_for_container_barcode_and_location`(p_barcode varchar(45), p_location varchar(45), p_useContainerSession boolean, p_authLogin varchar(45)) +READS SQL DATA +COMMENT 'Returns a single-row result-set with the sample for the given ID' +BEGIN + + IF p_barcode IS NOT NULL AND p_location IS NOT NULL THEN + + IF p_useContainerSession = True THEN + + IF p_authLogin IS NOT NULL THEN + -- Authorise only if the person (p_authLogin) is a member of a session on the proposal. + + SELECT DISTINCT bls.blSampleId "sampleId", + pr.proteinId "materialId", + bls.containerId "containerId", + bls.diffractionPlanId "planId", + bs.sessionId "sessionId", + p.proposalId "proposalId", + + bls.name "sampleName", + bls.code "sampleCode", + bls.volume "sampleVolume", + bls.dimension1 "thickness", + bls.comments "sampleComments", + bls.location "sampleLocation", + bls.subLocation "sampleSubLocation", + bls.blSampleStatus "sampleStatus", + + pr.name "materialName", + pr.acronym "materialAcronym", + pr.sequence "materialFormula", + pr.density "materialDensity", + pr.safetyLevel "materialSafetyLevel", -- enum(GREEN, YELLOW, RED) + pr.description "materialChemicalDescription", + pr.molecularMass "materialMolecularMass", + compt.name "materialType", -- protein, DNA, RNA, small molecule, ... + conct.name "materialConcentrationType", + pr.isotropy "materialIsotropy", -- enum('isotropic','anisotropic') + + et.name "planExperimentType", + pc.name "planPurificationColumn", + plan.robotPlateTemperature "planRobotPlateTemperature", + plan.exposureTemperature "planExposureTemperature", + plan.transmission "planTransmission", + + p.proposalCode "proposalCode", + p.proposalNumber "proposalNumber", + bs.visit_number "sessionNumber" + FROM BLSample bls + INNER JOIN Container c ON c.containerId = bls.containerId + INNER JOIN BLSession bs ON c.sessionId = bs.sessionId + INNER JOIN Proposal p ON p.proposalId = bs.proposalId + INNER JOIN BLSession bs2 ON bs2.proposalId = p.proposalId + INNER JOIN Session_has_Person shp ON bs2.sessionId = shp.sessionId + INNER JOIN Person pe ON pe.personId = shp.personId + LEFT JOIN Crystal cr ON cr.crystalId = bls.crystalId + LEFT JOIN Protein pr ON pr.proteinId = cr.proteinId + LEFT JOIN ComponentType compt ON compt.componentTypeId = pr.componentTypeId + LEFT JOIN ConcentrationType conct ON conct.concentrationTypeId = pr.concentrationTypeId + LEFT JOIN DiffractionPlan plan ON plan.diffractionPlanId = bls.diffractionPlanId + LEFT JOIN ExperimentType et ON et.experimentTypeId = plan.experimentTypeId AND et.proposalType = 'scm' + LEFT JOIN PurificationColumn pc ON pc.purificationColumnId = plan.purificationColumnId + WHERE pe.login = p_authLogin AND c.barcode = p_barcode AND bls.location = p_location; + + ELSE + + SELECT DISTINCT bls.blSampleId "sampleId", + pr.proteinId "materialId", + bls.containerId "containerId", + bls.diffractionPlanId "planId", + bs.sessionId "sessionId", + p.proposalId "proposalId", + + bls.name "sampleName", + bls.code "sampleCode", + bls.volume "sampleVolume", + bls.dimension1 "thickness", + bls.comments "sampleComments", + bls.location "sampleLocation", + bls.subLocation "sampleSubLocation", + bls.blSampleStatus "sampleStatus", + + pr.name "materialName", + pr.acronym "materialAcronym", + pr.sequence "materialFormula", + pr.density "materialDensity", + pr.safetyLevel "materialSafetyLevel", -- enum(GREEN, YELLOW, RED) + pr.description "materialChemicalDescription", + pr.molecularMass "materialMolecularMass", + compt.name "materialType", -- protein, DNA, RNA, small molecule, ... + conct.name "materialConcentrationType", + pr.isotropy "materialIsotropy", -- enum('isotropic','anisotropic') + + et.name "planExperimentType", + pc.name "planPurificationColumn", + plan.robotPlateTemperature "planRobotPlateTemperature", + plan.exposureTemperature "planExposureTemperature", + plan.transmission "planTransmission", + + p.proposalCode "proposalCode", + p.proposalNumber "proposalNumber", + bs.visit_number "sessionNumber" + FROM BLSample bls + INNER JOIN Container c ON c.containerId = bls.containerId + INNER JOIN BLSession bs ON c.sessionId = bs.sessionId + INNER JOIN Proposal p ON p.proposalId = bs.proposalId + LEFT JOIN Crystal cr ON cr.crystalId = bls.crystalId + LEFT JOIN Protein pr ON pr.proteinId = cr.proteinId + LEFT JOIN ComponentType compt ON compt.componentTypeId = pr.componentTypeId + LEFT JOIN ConcentrationType conct ON conct.concentrationTypeId = pr.concentrationTypeId + LEFT JOIN DiffractionPlan plan ON plan.diffractionPlanId = bls.diffractionPlanId + LEFT JOIN ExperimentType et ON et.experimentTypeId = plan.experimentTypeId AND et.proposalType = 'scm' + LEFT JOIN PurificationColumn pc ON pc.purificationColumnId = plan.purificationColumnId + WHERE c.barcode = p_barcode AND bls.location = p_location; + + END IF; + + ELSE + + IF p_authLogin IS NOT NULL THEN + -- Authorise only if the person (p_authLogin) is a member of a session on the proposal. + + SELECT DISTINCT bls.blSampleId "sampleId", + pr.proteinId "materialId", + bls.containerId "containerId", + bls.diffractionPlanId "planId", + NULL "sessionId", + p.proposalId "proposalId", + + bls.name "sampleName", + bls.code "sampleCode", + bls.volume "sampleVolume", + bls.dimension1 "thickness", + bls.comments "sampleComments", + bls.location "sampleLocation", + bls.subLocation "sampleSubLocation", + bls.blSampleStatus "sampleStatus", + + pr.name "materialName", + pr.acronym "materialAcronym", + pr.sequence "materialFormula", + pr.density "materialDensity", + pr.safetyLevel "materialSafetyLevel", -- enum(GREEN, YELLOW, RED) + pr.description "materialChemicalDescription", + pr.molecularMass "materialMolecularMass", + compt.name "materialType", -- protein, DNA, RNA, small molecule, ... + conct.name "materialConcentrationType", + pr.isotropy "materialIsotropy", -- enum('isotropic','anisotropic') + + et.name "planExperimentType", + pc.name "planPurificationColumn", + plan.robotPlateTemperature "planRobotPlateTemperature", + plan.exposureTemperature "planExposureTemperature", + plan.transmission "planTransmission", + + p.proposalCode "proposalCode", + p.proposalNumber "proposalNumber", + NULL "sessionNumber" + FROM BLSample bls + INNER JOIN Container c ON c.containerId = bls.containerId + INNER JOIN Dewar d ON d.dewarId = c.dewarId + INNER JOIN Shipping s ON s.shippingId = d.shippingId + INNER JOIN Proposal p ON p.proposalId = s.proposalId + INNER JOIN BLSession bs ON bs.proposalId = p.proposalId + INNER JOIN Session_has_Person shp ON bs.sessionId = shp.sessionId + INNER JOIN Person pe ON pe.personId = shp.personId + LEFT JOIN Crystal cr ON cr.crystalId = bls.crystalId + LEFT JOIN Protein pr ON pr.proteinId = cr.proteinId + LEFT JOIN ComponentType compt ON compt.componentTypeId = pr.componentTypeId + LEFT JOIN ConcentrationType conct ON conct.concentrationTypeId = pr.concentrationTypeId + LEFT JOIN DiffractionPlan plan ON plan.diffractionPlanId = bls.diffractionPlanId + LEFT JOIN ExperimentType et ON et.experimentTypeId = plan.experimentTypeId AND et.proposalType = 'scm' + LEFT JOIN PurificationColumn pc ON pc.purificationColumnId = plan.purificationColumnId + WHERE pe.login = p_authLogin AND c.barcode = p_barcode AND bls.location = p_location; + + ELSE + + SELECT DISTINCT bls.blSampleId "sampleId", + pr.proteinId "materialId", + bls.containerId "containerId", + bls.diffractionPlanId "planId", + NULL "sessionId", + p.proposalId "proposalId", + + bls.name "sampleName", + bls.code "sampleCode", + bls.volume "sampleVolume", + bls.dimension1 "thickness", + bls.comments "sampleComments", + bls.location "sampleLocation", + bls.subLocation "sampleSubLocation", + bls.blSampleStatus "sampleStatus", + + pr.name "materialName", + pr.acronym "materialAcronym", + pr.sequence "materialFormula", + pr.density "materialDensity", + pr.safetyLevel "materialSafetyLevel", -- enum(GREEN, YELLOW, RED) + pr.description "materialChemicalDescription", + pr.molecularMass "materialMolecularMass", + compt.name "materialType", -- protein, DNA, RNA, small molecule, ... + conct.name "materialConcentrationType", + pr.isotropy "materialIsotropy", -- enum('isotropic','anisotropic') + + et.name "planExperimentType", + pc.name "planPurificationColumn", + plan.robotPlateTemperature "planRobotPlateTemperature", + plan.exposureTemperature "planExposureTemperature", + plan.transmission "planTransmission", + + p.proposalCode "proposalCode", + p.proposalNumber "proposalNumber", + NULL "sessionNumber" + FROM BLSample bls + INNER JOIN Container c ON c.containerId = bls.containerId + INNER JOIN Dewar d ON d.dewarId = c.dewarId + INNER JOIN Shipping s ON s.shippingId = d.shippingId + INNER JOIN Proposal p ON p.proposalId = s.proposalId + LEFT JOIN Crystal cr ON cr.crystalId = bls.crystalId + LEFT JOIN Protein pr ON pr.proteinId = cr.proteinId + LEFT JOIN ComponentType compt ON compt.componentTypeId = pr.componentTypeId + LEFT JOIN ConcentrationType conct ON conct.concentrationTypeId = pr.concentrationTypeId + LEFT JOIN DiffractionPlan plan ON plan.diffractionPlanId = bls.diffractionPlanId + LEFT JOIN ExperimentType et ON et.experimentTypeId = plan.experimentTypeId AND et.proposalType = 'scm' + LEFT JOIN PurificationColumn pc ON pc.purificationColumnId = plan.purificationColumnId + WHERE c.barcode = p_barcode AND bls.location = p_location; + + END IF; + + END IF; + + ELSE + SIGNAL SQLSTATE '45000' SET MYSQL_ERRNO=1644, MESSAGE_TEXT='Mandatory arguments p_barcode and p_location can not be NULL'; + END IF; + +END;; + + +DELIMITER ; \ No newline at end of file From 3d13c1c51ef410eb322c23bc5e5ab6630bde2c9b Mon Sep 17 00:00:00 2001 From: Karl Levik Date: Thu, 3 Dec 2020 11:04:49 +0000 Subject: [PATCH 2/9] Fix procedure comment --- ...p_retrieve_scm_sample_for_container_barcode_and_location.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/schema/stored_programs/sp_retrieve_scm_sample_for_container_barcode_and_location.sql b/schema/stored_programs/sp_retrieve_scm_sample_for_container_barcode_and_location.sql index 39e0a043..5915e34c 100644 --- a/schema/stored_programs/sp_retrieve_scm_sample_for_container_barcode_and_location.sql +++ b/schema/stored_programs/sp_retrieve_scm_sample_for_container_barcode_and_location.sql @@ -13,7 +13,7 @@ DELIMITER ;; CREATE OR REPLACE DEFINER=`ispyb_root`@`%` PROCEDURE `retrieve_scm_sample_for_container_barcode_and_location`(p_barcode varchar(45), p_location varchar(45), p_useContainerSession boolean, p_authLogin varchar(45)) READS SQL DATA -COMMENT 'Returns a single-row result-set with the sample for the given ID' +COMMENT 'Returns a single-row result-set (although can be multi-row if multiple samples per location in a container) with the sample for the given container barcode and sample location.' BEGIN IF p_barcode IS NOT NULL AND p_location IS NOT NULL THEN From 3e4bf76667577cf397c628491ec6204643a4466c Mon Sep 17 00:00:00 2001 From: Karl Levik Date: Thu, 3 Dec 2020 11:28:44 +0000 Subject: [PATCH 3/9] Sproc to retrieve SCM samples for container ID --- ..._retrieve_scm_samples_for_container_id.sql | 250 ++++++++++++++++++ 1 file changed, 250 insertions(+) create mode 100644 schema/stored_programs/sp_retrieve_scm_samples_for_container_id.sql diff --git a/schema/stored_programs/sp_retrieve_scm_samples_for_container_id.sql b/schema/stored_programs/sp_retrieve_scm_samples_for_container_id.sql new file mode 100644 index 00000000..d9aeebce --- /dev/null +++ b/schema/stored_programs/sp_retrieve_scm_samples_for_container_id.sql @@ -0,0 +1,250 @@ +/* Tests: +CALL retrieve_scm_samples_for_container_id(1335, False, NULL)\G + +CALL retrieve_scm_samples_for_container_id(34888, False, NULL)\G +CALL retrieve_scm_samples_for_container_id(34888, False, 'boaty')\G +CALL retrieve_scm_samples_for_container_id(34888, True, NULL)\G +CALL retrieve_scm_samples_for_container_id(34888, True, 'boaty')\G + +*/ + +DELIMITER ;; + +CREATE OR REPLACE DEFINER=`ispyb_root`@`%` PROCEDURE `retrieve_scm_samples_for_container_id`(p_containerId int unsigned, p_useContainerSession boolean, p_authLogin varchar(45)) +READS SQL DATA +COMMENT 'Returns a multi-row result-set with the samples for the given container ID' +BEGIN + + IF p_containerId IS NOT NULL THEN + + IF p_useContainerSession = True THEN + + IF p_authLogin IS NOT NULL THEN + -- Authorise only if the person (p_authLogin) is a member of a session on the proposal. + + SELECT DISTINCT bls.blSampleId "sampleId", + pr.proteinId "materialId", + bls.containerId "containerId", + bls.diffractionPlanId "planId", + bs.sessionId "sessionId", + p.proposalId "proposalId", + + bls.name "sampleName", + bls.code "sampleCode", + bls.volume "sampleVolume", + bls.dimension1 "thickness", + bls.comments "sampleComments", + bls.location "sampleLocation", + bls.subLocation "sampleSubLocation", + bls.blSampleStatus "sampleStatus", + + pr.name "materialName", + pr.acronym "materialAcronym", + pr.sequence "materialFormula", + pr.density "materialDensity", + pr.safetyLevel "materialSafetyLevel", -- enum(GREEN, YELLOW, RED) + pr.description "materialChemicalDescription", + pr.molecularMass "materialMolecularMass", + compt.name "materialType", -- protein, DNA, RNA, small molecule, ... + conct.name "materialConcentrationType", + pr.isotropy "materialIsotropy", -- enum('isotropic','anisotropic') + + et.name "planExperimentType", + pc.name "planPurificationColumn", + plan.robotPlateTemperature "planRobotPlateTemperature", + plan.exposureTemperature "planExposureTemperature", + plan.transmission "planTransmission", + + p.proposalCode "proposalCode", + p.proposalNumber "proposalNumber", + bs.visit_number "sessionNumber" + FROM BLSample bls + INNER JOIN Container c ON c.containerId = bls.containerId + INNER JOIN BLSession bs ON c.sessionId = bs.sessionId + INNER JOIN Proposal p ON p.proposalId = bs.proposalId + INNER JOIN BLSession bs2 ON bs2.proposalId = p.proposalId + INNER JOIN Session_has_Person shp ON bs2.sessionId = shp.sessionId + INNER JOIN Person pe ON pe.personId = shp.personId + LEFT JOIN Crystal cr ON cr.crystalId = bls.crystalId + LEFT JOIN Protein pr ON pr.proteinId = cr.proteinId + LEFT JOIN ComponentType compt ON compt.componentTypeId = pr.componentTypeId + LEFT JOIN ConcentrationType conct ON conct.concentrationTypeId = pr.concentrationTypeId + LEFT JOIN DiffractionPlan plan ON plan.diffractionPlanId = bls.diffractionPlanId + LEFT JOIN ExperimentType et ON et.experimentTypeId = plan.experimentTypeId AND et.proposalType = 'scm' + LEFT JOIN PurificationColumn pc ON pc.purificationColumnId = plan.purificationColumnId + WHERE pe.login = p_authLogin AND bls.containerId = p_containerId; + + ELSE + + SELECT DISTINCT bls.blSampleId "sampleId", + pr.proteinId "materialId", + bls.containerId "containerId", + bls.diffractionPlanId "planId", + bs.sessionId "sessionId", + p.proposalId "proposalId", + + bls.name "sampleName", + bls.code "sampleCode", + bls.volume "sampleVolume", + bls.dimension1 "thickness", + bls.comments "sampleComments", + bls.location "sampleLocation", + bls.subLocation "sampleSubLocation", + bls.blSampleStatus "sampleStatus", + + pr.name "materialName", + pr.acronym "materialAcronym", + pr.sequence "materialFormula", + pr.density "materialDensity", + pr.safetyLevel "materialSafetyLevel", -- enum(GREEN, YELLOW, RED) + pr.description "materialChemicalDescription", + pr.molecularMass "materialMolecularMass", + compt.name "materialType", -- protein, DNA, RNA, small molecule, ... + conct.name "materialConcentrationType", + pr.isotropy "materialIsotropy", -- enum('isotropic','anisotropic') + + et.name "planExperimentType", + pc.name "planPurificationColumn", + plan.robotPlateTemperature "planRobotPlateTemperature", + plan.exposureTemperature "planExposureTemperature", + plan.transmission "planTransmission", + + p.proposalCode "proposalCode", + p.proposalNumber "proposalNumber", + bs.visit_number "sessionNumber" + FROM BLSample bls + INNER JOIN Container c ON c.containerId = bls.containerId + INNER JOIN BLSession bs ON c.sessionId = bs.sessionId + INNER JOIN Proposal p ON p.proposalId = bs.proposalId + LEFT JOIN Crystal cr ON cr.crystalId = bls.crystalId + LEFT JOIN Protein pr ON pr.proteinId = cr.proteinId + LEFT JOIN ComponentType compt ON compt.componentTypeId = pr.componentTypeId + LEFT JOIN ConcentrationType conct ON conct.concentrationTypeId = pr.concentrationTypeId + LEFT JOIN DiffractionPlan plan ON plan.diffractionPlanId = bls.diffractionPlanId + LEFT JOIN ExperimentType et ON et.experimentTypeId = plan.experimentTypeId AND et.proposalType = 'scm' + LEFT JOIN PurificationColumn pc ON pc.purificationColumnId = plan.purificationColumnId + WHERE bls.containerId = p_containerId; + + END IF; + + ELSE + + IF p_authLogin IS NOT NULL THEN + -- Authorise only if the person (p_authLogin) is a member of a session on the proposal. + + SELECT DISTINCT bls.blSampleId "sampleId", + pr.proteinId "materialId", + bls.containerId "containerId", + bls.diffractionPlanId "planId", + NULL "sessionId", + p.proposalId "proposalId", + + bls.name "sampleName", + bls.code "sampleCode", + bls.volume "sampleVolume", + bls.dimension1 "thickness", + bls.comments "sampleComments", + bls.location "sampleLocation", + bls.subLocation "sampleSubLocation", + bls.blSampleStatus "sampleStatus", + + pr.name "materialName", + pr.acronym "materialAcronym", + pr.sequence "materialFormula", + pr.density "materialDensity", + pr.safetyLevel "materialSafetyLevel", -- enum(GREEN, YELLOW, RED) + pr.description "materialChemicalDescription", + pr.molecularMass "materialMolecularMass", + compt.name "materialType", -- protein, DNA, RNA, small molecule, ... + conct.name "materialConcentrationType", + pr.isotropy "materialIsotropy", -- enum('isotropic','anisotropic') + + et.name "planExperimentType", + pc.name "planPurificationColumn", + plan.robotPlateTemperature "planRobotPlateTemperature", + plan.exposureTemperature "planExposureTemperature", + plan.transmission "planTransmission", + + p.proposalCode "proposalCode", + p.proposalNumber "proposalNumber", + NULL "sessionNumber" + FROM BLSample bls + INNER JOIN Container c ON c.containerId = bls.containerId + INNER JOIN Dewar d ON d.dewarId = c.dewarId + INNER JOIN Shipping s ON s.shippingId = d.shippingId + INNER JOIN Proposal p ON p.proposalId = s.proposalId + INNER JOIN BLSession bs ON bs.proposalId = p.proposalId + INNER JOIN Session_has_Person shp ON bs.sessionId = shp.sessionId + INNER JOIN Person pe ON pe.personId = shp.personId + LEFT JOIN Crystal cr ON cr.crystalId = bls.crystalId + LEFT JOIN Protein pr ON pr.proteinId = cr.proteinId + LEFT JOIN ComponentType compt ON compt.componentTypeId = pr.componentTypeId + LEFT JOIN ConcentrationType conct ON conct.concentrationTypeId = pr.concentrationTypeId + LEFT JOIN DiffractionPlan plan ON plan.diffractionPlanId = bls.diffractionPlanId + LEFT JOIN ExperimentType et ON et.experimentTypeId = plan.experimentTypeId AND et.proposalType = 'scm' + LEFT JOIN PurificationColumn pc ON pc.purificationColumnId = plan.purificationColumnId + WHERE pe.login = p_authLogin AND bls.containerId = p_containerId; + + ELSE + + SELECT DISTINCT bls.blSampleId "sampleId", + pr.proteinId "materialId", + bls.containerId "containerId", + bls.diffractionPlanId "planId", + NULL "sessionId", + p.proposalId "proposalId", + + bls.name "sampleName", + bls.code "sampleCode", + bls.volume "sampleVolume", + bls.dimension1 "thickness", + bls.comments "sampleComments", + bls.location "sampleLocation", + bls.subLocation "sampleSubLocation", + bls.blSampleStatus "sampleStatus", + + pr.name "materialName", + pr.acronym "materialAcronym", + pr.sequence "materialFormula", + pr.density "materialDensity", + pr.safetyLevel "materialSafetyLevel", -- enum(GREEN, YELLOW, RED) + pr.description "materialChemicalDescription", + pr.molecularMass "materialMolecularMass", + compt.name "materialType", -- protein, DNA, RNA, small molecule, ... + conct.name "materialConcentrationType", + pr.isotropy "materialIsotropy", -- enum('isotropic','anisotropic') + + et.name "planExperimentType", + pc.name "planPurificationColumn", + plan.robotPlateTemperature "planRobotPlateTemperature", + plan.exposureTemperature "planExposureTemperature", + plan.transmission "planTransmission", + + p.proposalCode "proposalCode", + p.proposalNumber "proposalNumber", + NULL "sessionNumber" + FROM BLSample bls + INNER JOIN Container c ON c.containerId = bls.containerId + INNER JOIN Dewar d ON d.dewarId = c.dewarId + INNER JOIN Shipping s ON s.shippingId = d.shippingId + INNER JOIN Proposal p ON p.proposalId = s.proposalId + LEFT JOIN Crystal cr ON cr.crystalId = bls.crystalId + LEFT JOIN Protein pr ON pr.proteinId = cr.proteinId + LEFT JOIN ComponentType compt ON compt.componentTypeId = pr.componentTypeId + LEFT JOIN ConcentrationType conct ON conct.concentrationTypeId = pr.concentrationTypeId + LEFT JOIN DiffractionPlan plan ON plan.diffractionPlanId = bls.diffractionPlanId + LEFT JOIN ExperimentType et ON et.experimentTypeId = plan.experimentTypeId AND et.proposalType = 'scm' + LEFT JOIN PurificationColumn pc ON pc.purificationColumnId = plan.purificationColumnId + WHERE bls.containerId = p_containerId; + + END IF; + + END IF; + + ELSE + SIGNAL SQLSTATE '45000' SET MYSQL_ERRNO=1644, MESSAGE_TEXT='Mandatory argument p_containerId can not be NULL'; + END IF; + +END;; + +DELIMITER ; \ No newline at end of file From 4a4310ffc5758691f6c91848c3866b5902fd7b4a Mon Sep 17 00:00:00 2001 From: Karl Levik Date: Thu, 3 Dec 2020 15:49:12 +0000 Subject: [PATCH 4/9] Sproc to retrieve SCM container for id --- .../sp_retrieve_scm_container.sql | 157 ++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100644 schema/stored_programs/sp_retrieve_scm_container.sql diff --git a/schema/stored_programs/sp_retrieve_scm_container.sql b/schema/stored_programs/sp_retrieve_scm_container.sql new file mode 100644 index 00000000..52ab30fb --- /dev/null +++ b/schema/stored_programs/sp_retrieve_scm_container.sql @@ -0,0 +1,157 @@ +/* Tests: +CALL retrieve_scm_container(34888, False, NULL)\G +CALL retrieve_scm_container(34888, False, 'boaty')\G +CALL retrieve_scm_container(34888, True, NULL)\G +CALL retrieve_scm_container(34888, True, 'boaty')\G +*/ + +DELIMITER ;; + +CREATE OR REPLACE DEFINER=`ispyb_root`@`%` PROCEDURE `retrieve_scm_container`(p_id int unsigned, p_useContainerSession boolean, p_authLogin varchar(45)) +READS SQL DATA +COMMENT 'Returns a single-row result-set with the container for the given ID' +BEGIN + + IF p_id IS NOT NULL THEN + + IF p_useContainerSession = True THEN + + IF p_authLogin IS NOT NULL THEN + -- Authorise only if the person (p_authLogin) is a member of a session on the proposal. + + SELECT DISTINCT c.containerId "containerId", + c.dewarId "dewarId", + c.sessionId "sessionId", + p.proposalId "proposalId", + c.ownerId "ownerId", + -- what about owner login, givenName, familyName ???? + c.code "name", + c.containerType "type", + c.barcode "barcode", + c.beamlineLocation "beamline", + c.sampleChangerLocation "location", + c.containerStatus "status", + c.capacity "capacity", + c.storageTemperature "storageTemperature", + + p.proposalCode "proposalCode", + p.proposalNumber "proposalNumber", + bs.visit_number "sessionNumber", + + c.comments "comments", + c.experimentType "experimentType" + FROM Container c + JOIN BLSession bs ON bs.sessionId = c.sessionId + JOIN Proposal p ON p.proposalId = bs.proposalId + JOIN BLSession bs2 ON bs2.proposalId = p.proposalId + JOIN Session_has_Person shp ON shp.sessionId = bs2.sessionId + JOIN Person per on per.personId = shp.personId + WHERE c.containerId = p_id AND per.login = p_authLogin; + + ELSE + + SELECT c.containerId "containerId", + c.dewarId "dewarId", + c.sessionId "sessionId", + p.proposalId "proposalId", + c.ownerId "ownerId", + -- what about owner login, givenName, familyName ???? + c.code "name", + c.containerType "type", + c.barcode "barcode", + c.beamlineLocation "beamline", + c.sampleChangerLocation "location", + c.containerStatus "status", + c.capacity "capacity", + c.storageTemperature "storageTemperature", + + p.proposalCode "proposalCode", + p.proposalNumber "proposalNumber", + bs.visit_number "sessionNumber", + + c.comments "comments", + c.experimentType "experimentType" + FROM Container c + JOIN BLSession bs ON bs.sessionId = c.sessionId + JOIN Proposal p ON p.proposalId = bs.proposalId + WHERE c.containerId = p_id; + + + + END IF; + + ELSE + + IF p_authLogin IS NOT NULL THEN + -- Authorise only if the person (p_authLogin) is a member of a session on the proposal. + + SELECT DISTINCT c.containerId "containerId", + d.dewarId "dewarId", + c.sessionId "sessionId", + p.proposalId "proposalId", + c.ownerId "ownerId", + -- what about owner login, givenName, familyName ???? + c.code "name", + c.containerType "type", + c.barcode "barcode", + c.beamlineLocation "beamline", + c.sampleChangerLocation "location", + c.containerStatus "status", + c.capacity "capacity", + c.storageTemperature "storageTemperature", + + p.proposalCode "proposalCode", + p.proposalNumber "proposalNumber", + NULL "sessionNumber", + + c.comments "comments", + c.experimentType "experimentType" + FROM Container c + JOIN Dewar d ON c.dewarId = d.dewarId + JOIN Shipping s ON s.shippingId = d.shippingId + JOIN Proposal p ON p.proposalId = s.proposalId + JOIN BLSession bs2 ON bs2.proposalId = p.proposalId + JOIN Session_has_Person shp ON shp.sessionId = bs2.sessionId + JOIN Person per on per.personId = shp.personId + WHERE c.containerId = p_id AND per.login = p_authLogin; + + ELSE + + SELECT c.containerId "containerId", + d.dewarId "dewarId", + c.sessionId "sessionId", + p.proposalId "proposalId", + c.ownerId "ownerId", + -- what about owner login, givenName, familyName ???? + c.code "name", + c.containerType "type", + c.barcode "barcode", + c.beamlineLocation "beamline", + c.sampleChangerLocation "location", + c.containerStatus "status", + c.capacity "capacity", + c.storageTemperature "storageTemperature", + + p.proposalCode "proposalCode", + p.proposalNumber "proposalNumber", + NULL "sessionNumber", + + c.comments "comments", + c.experimentType "experimentType" + FROM Container c + JOIN Dewar d ON c.dewarId = d.dewarId + JOIN Shipping s ON s.shippingId = d.shippingId + JOIN Proposal p ON p.proposalId = s.proposalId + WHERE c.containerId = p_id; + + END IF; + + END IF; + + ELSE + SIGNAL SQLSTATE '45000' SET MYSQL_ERRNO=1644, MESSAGE_TEXT='Mandatory argument p_id can not be NULL'; + END IF; + +END;; + +DELIMITER ; \ No newline at end of file From 7076b89995d2bfc7e1e15658b9d4abea58c2b617 Mon Sep 17 00:00:00 2001 From: Karl Levik Date: Thu, 3 Dec 2020 15:55:43 +0000 Subject: [PATCH 5/9] Sproc tweaks to return Container.sessionId --- schema/stored_programs/sp_retrieve_scm_sample.sql | 8 ++++---- ...ieve_scm_sample_for_container_barcode_and_location.sql | 8 ++++---- .../sp_retrieve_scm_samples_for_container_id.sql | 8 ++++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/schema/stored_programs/sp_retrieve_scm_sample.sql b/schema/stored_programs/sp_retrieve_scm_sample.sql index 95d5d305..23490de7 100644 --- a/schema/stored_programs/sp_retrieve_scm_sample.sql +++ b/schema/stored_programs/sp_retrieve_scm_sample.sql @@ -23,7 +23,7 @@ BEGIN pr.proteinId "materialId", bls.containerId "containerId", bls.diffractionPlanId "planId", - bs.sessionId "sessionId", + c.sessionId "sessionId", p.proposalId "proposalId", bls.name "sampleName", @@ -77,7 +77,7 @@ BEGIN pr.proteinId "materialId", bls.containerId "containerId", bls.diffractionPlanId "planId", - bs.sessionId "sessionId", + c.sessionId "sessionId", p.proposalId "proposalId", bls.name "sampleName", @@ -133,7 +133,7 @@ BEGIN pr.proteinId "materialId", bls.containerId "containerId", bls.diffractionPlanId "planId", - NULL "sessionId", + c.sessionId "sessionId", p.proposalId "proposalId", bls.name "sampleName", @@ -188,7 +188,7 @@ BEGIN pr.proteinId "materialId", bls.containerId "containerId", bls.diffractionPlanId "planId", - NULL "sessionId", + c.sessionId "sessionId", p.proposalId "proposalId", bls.name "sampleName", diff --git a/schema/stored_programs/sp_retrieve_scm_sample_for_container_barcode_and_location.sql b/schema/stored_programs/sp_retrieve_scm_sample_for_container_barcode_and_location.sql index 5915e34c..b5530e2f 100644 --- a/schema/stored_programs/sp_retrieve_scm_sample_for_container_barcode_and_location.sql +++ b/schema/stored_programs/sp_retrieve_scm_sample_for_container_barcode_and_location.sql @@ -27,7 +27,7 @@ BEGIN pr.proteinId "materialId", bls.containerId "containerId", bls.diffractionPlanId "planId", - bs.sessionId "sessionId", + c.sessionId "sessionId", p.proposalId "proposalId", bls.name "sampleName", @@ -81,7 +81,7 @@ BEGIN pr.proteinId "materialId", bls.containerId "containerId", bls.diffractionPlanId "planId", - bs.sessionId "sessionId", + c.sessionId "sessionId", p.proposalId "proposalId", bls.name "sampleName", @@ -137,7 +137,7 @@ BEGIN pr.proteinId "materialId", bls.containerId "containerId", bls.diffractionPlanId "planId", - NULL "sessionId", + c.sessionId "sessionId", p.proposalId "proposalId", bls.name "sampleName", @@ -192,7 +192,7 @@ BEGIN pr.proteinId "materialId", bls.containerId "containerId", bls.diffractionPlanId "planId", - NULL "sessionId", + c.sessionId "sessionId", p.proposalId "proposalId", bls.name "sampleName", diff --git a/schema/stored_programs/sp_retrieve_scm_samples_for_container_id.sql b/schema/stored_programs/sp_retrieve_scm_samples_for_container_id.sql index d9aeebce..fe4eadf1 100644 --- a/schema/stored_programs/sp_retrieve_scm_samples_for_container_id.sql +++ b/schema/stored_programs/sp_retrieve_scm_samples_for_container_id.sql @@ -26,7 +26,7 @@ BEGIN pr.proteinId "materialId", bls.containerId "containerId", bls.diffractionPlanId "planId", - bs.sessionId "sessionId", + c.sessionId "sessionId", p.proposalId "proposalId", bls.name "sampleName", @@ -80,7 +80,7 @@ BEGIN pr.proteinId "materialId", bls.containerId "containerId", bls.diffractionPlanId "planId", - bs.sessionId "sessionId", + c.sessionId "sessionId", p.proposalId "proposalId", bls.name "sampleName", @@ -136,7 +136,7 @@ BEGIN pr.proteinId "materialId", bls.containerId "containerId", bls.diffractionPlanId "planId", - NULL "sessionId", + c.sessionId "sessionId", p.proposalId "proposalId", bls.name "sampleName", @@ -191,7 +191,7 @@ BEGIN pr.proteinId "materialId", bls.containerId "containerId", bls.diffractionPlanId "planId", - NULL "sessionId", + c.sessionId "sessionId", p.proposalId "proposalId", bls.name "sampleName", From d466e8327b3c5d7715dd92d705fd7294b20121bb Mon Sep 17 00:00:00 2001 From: Karl Levik Date: Thu, 3 Dec 2020 17:29:50 +0000 Subject: [PATCH 6/9] Sproc to retrieve SCM container for a given barcode --- .../sp_retrieve_scm_container_for_barcode.sql | 157 ++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100644 schema/stored_programs/sp_retrieve_scm_container_for_barcode.sql diff --git a/schema/stored_programs/sp_retrieve_scm_container_for_barcode.sql b/schema/stored_programs/sp_retrieve_scm_container_for_barcode.sql new file mode 100644 index 00000000..54643aae --- /dev/null +++ b/schema/stored_programs/sp_retrieve_scm_container_for_barcode.sql @@ -0,0 +1,157 @@ +/* Tests: + +CALL retrieve_scm_container_for_barcode('VMXiSim-001', False, NULL)\G +CALL retrieve_scm_container_for_barcode('VMXiSim-001', False, 'boaty')\G +CALL retrieve_scm_container_for_barcode('VMXiSim-001', True, NULL)\G +CALL retrieve_scm_container_for_barcode('VMXiSim-001', True, 'boaty')\G + +*/ + +DELIMITER ;; + +CREATE OR REPLACE DEFINER=`ispyb_root`@`%` PROCEDURE `retrieve_scm_container_for_barcode`(p_barcode varchar(45), p_useContainerSession boolean, p_authLogin varchar(45)) +READS SQL DATA +COMMENT 'Returns a single-row result-set with the container for the given barcode' +BEGIN + + IF p_barcode IS NOT NULL THEN + + IF p_useContainerSession = True THEN + + IF p_authLogin IS NOT NULL THEN + -- Authorise only if the person (p_authLogin) is a member of a session on the proposal. + + SELECT DISTINCT c.containerId "containerId", + c.dewarId "dewarId", + c.sessionId "sessionId", + p.proposalId "proposalId", + c.ownerId "ownerId", + -- what about owner login, givenName, familyName ???? + c.code "name", + c.containerType "type", + c.barcode "barcode", + c.beamlineLocation "beamline", + c.sampleChangerLocation "location", + c.containerStatus "status", + c.capacity "capacity", + c.storageTemperature "storageTemperature", + + p.proposalCode "proposalCode", + p.proposalNumber "proposalNumber", + bs.visit_number "sessionNumber", + + c.comments "comments", + c.experimentType "experimentType" + FROM Container c + JOIN BLSession bs ON bs.sessionId = c.sessionId + JOIN Proposal p ON p.proposalId = bs.proposalId + JOIN BLSession bs2 ON bs2.proposalId = p.proposalId + JOIN Session_has_Person shp ON shp.sessionId = bs2.sessionId + JOIN Person per on per.personId = shp.personId + WHERE c.barcode = p_barcode AND per.login = p_authLogin; + + ELSE + + SELECT c.containerId "containerId", + c.dewarId "dewarId", + c.sessionId "sessionId", + p.proposalId "proposalId", + c.ownerId "ownerId", + -- what about owner login, givenName, familyName ???? + c.code "name", + c.containerType "type", + c.barcode "barcode", + c.beamlineLocation "beamline", + c.sampleChangerLocation "location", + c.containerStatus "status", + c.capacity "capacity", + c.storageTemperature "storageTemperature", + + p.proposalCode "proposalCode", + p.proposalNumber "proposalNumber", + bs.visit_number "sessionNumber", + + c.comments "comments", + c.experimentType "experimentType" + FROM Container c + JOIN BLSession bs ON bs.sessionId = c.sessionId + JOIN Proposal p ON p.proposalId = bs.proposalId + WHERE c.barcode = p_barcode; + + END IF; + + ELSE + + IF p_authLogin IS NOT NULL THEN + -- Authorise only if the person (p_authLogin) is a member of a session on the proposal. + + SELECT DISTINCT c.containerId "containerId", + d.dewarId "dewarId", + c.sessionId "sessionId", + p.proposalId "proposalId", + c.ownerId "ownerId", + -- what about owner login, givenName, familyName ???? + c.code "name", + c.containerType "type", + c.barcode "barcode", + c.beamlineLocation "beamline", + c.sampleChangerLocation "location", + c.containerStatus "status", + c.capacity "capacity", + c.storageTemperature "storageTemperature", + + p.proposalCode "proposalCode", + p.proposalNumber "proposalNumber", + NULL "sessionNumber", + + c.comments "comments", + c.experimentType "experimentType" + FROM Container c + JOIN Dewar d ON c.dewarId = d.dewarId + JOIN Shipping s ON s.shippingId = d.shippingId + JOIN Proposal p ON p.proposalId = s.proposalId + JOIN BLSession bs2 ON bs2.proposalId = p.proposalId + JOIN Session_has_Person shp ON shp.sessionId = bs2.sessionId + JOIN Person per on per.personId = shp.personId + WHERE c.barcode = p_barcode AND per.login = p_authLogin; + + ELSE + + SELECT c.containerId "containerId", + d.dewarId "dewarId", + c.sessionId "sessionId", + p.proposalId "proposalId", + c.ownerId "ownerId", + -- what about owner login, givenName, familyName ???? + c.code "name", + c.containerType "type", + c.barcode "barcode", + c.beamlineLocation "beamline", + c.sampleChangerLocation "location", + c.containerStatus "status", + c.capacity "capacity", + c.storageTemperature "storageTemperature", + + p.proposalCode "proposalCode", + p.proposalNumber "proposalNumber", + NULL "sessionNumber", + + c.comments "comments", + c.experimentType "experimentType" + FROM Container c + JOIN Dewar d ON c.dewarId = d.dewarId + JOIN Shipping s ON s.shippingId = d.shippingId + JOIN Proposal p ON p.proposalId = s.proposalId + WHERE c.barcode = p_barcode; + + END IF; + + END IF; + + ELSE + SIGNAL SQLSTATE '45000' SET MYSQL_ERRNO=1644, MESSAGE_TEXT='Mandatory argument p_barcode can not be NULL'; + END IF; + +END;; + +DELIMITER ; \ No newline at end of file From aa38ff9ca7bfbf7cf15b4c6a924c7d9e70f4ae71 Mon Sep 17 00:00:00 2001 From: Karl Levik Date: Thu, 3 Dec 2020 17:59:42 +0000 Subject: [PATCH 7/9] Sproc to retrieve containers for given proposal/session --- ...sp_retrieve_scm_containers_for_session.sql | 162 ++++++++++++++++++ 1 file changed, 162 insertions(+) create mode 100644 schema/stored_programs/sp_retrieve_scm_containers_for_session.sql diff --git a/schema/stored_programs/sp_retrieve_scm_containers_for_session.sql b/schema/stored_programs/sp_retrieve_scm_containers_for_session.sql new file mode 100644 index 00000000..2a8c51b3 --- /dev/null +++ b/schema/stored_programs/sp_retrieve_scm_containers_for_session.sql @@ -0,0 +1,162 @@ +/* Tests: +CALL retrieve_scm_containers_for_session('cm', '14451', NULL, 'in_storage', NULL)\G +CALL retrieve_scm_containers_for_session('cm', '14451', NULL, 'in_storage', 'boaty')\G +CALL retrieve_scm_containers_for_session('cm', '14451', 99, 'in_storage', NULL)\G +CALL retrieve_scm_containers_for_session('cm', '14451', 99, 'in_storage', 'boaty')\G +*/ + +DELIMITER ;; + +CREATE OR REPLACE DEFINER=`ispyb_root`@`%` PROCEDURE `retrieve_scm_containers_for_session`( + p_proposalCode varchar(45), + p_proposalNumber varchar(45), + p_sessionNumber int unsigned, + p_status varchar(45), + p_authLogin varchar(45) +) +READS SQL DATA +COMMENT 'Returns a multi-row result-set with the containers for the given session defined by proposal code, proposal number and session number' +BEGIN + + IF p_proposalCode IS NOT NULL AND p_proposalNumber IS NOT NULL THEN + + IF p_sessionNumber IS NOT NULL THEN + + IF p_authLogin IS NOT NULL THEN + -- Authorise only if the person (p_authLogin) is a member of a session on the proposal. + + SELECT DISTINCT c.containerId "containerId", + c.dewarId "dewarId", + c.sessionId "sessionId", + p.proposalId "proposalId", + c.ownerId "ownerId", + -- what about owner login, givenName, familyName ???? + c.code "name", + c.containerType "type", + c.barcode "barcode", + c.beamlineLocation "beamline", + c.sampleChangerLocation "location", + c.containerStatus "status", + c.capacity "capacity", + c.storageTemperature "storageTemperature", + + p.proposalCode "proposalCode", + p.proposalNumber "proposalNumber", + bs.visit_number "sessionNumber", + + c.comments "comments", + c.experimentType "experimentType" + FROM Container c + JOIN BLSession bs ON bs.sessionId = c.sessionId + JOIN Proposal p ON p.proposalId = bs.proposalId + JOIN BLSession bs2 ON bs2.proposalId = p.proposalId + JOIN Session_has_Person shp ON shp.sessionId = bs2.sessionId + JOIN Person per on per.personId = shp.personId + WHERE p.proposalCode = p_proposalCode AND p.proposalNumber = p_proposalNumber AND bs.visit_number = p_sessionNumber AND c.containerStatus = p_status AND per.login = p_authLogin; + + ELSE + + SELECT c.containerId "containerId", + c.dewarId "dewarId", + c.sessionId "sessionId", + p.proposalId "proposalId", + c.ownerId "ownerId", + -- what about owner login, givenName, familyName ???? + c.code "name", + c.containerType "type", + c.barcode "barcode", + c.beamlineLocation "beamline", + c.sampleChangerLocation "location", + c.containerStatus "status", + c.capacity "capacity", + c.storageTemperature "storageTemperature", + + p.proposalCode "proposalCode", + p.proposalNumber "proposalNumber", + bs.visit_number "sessionNumber", + + c.comments "comments", + c.experimentType "experimentType" + FROM Container c + JOIN BLSession bs ON bs.sessionId = c.sessionId + JOIN Proposal p ON p.proposalId = bs.proposalId + WHERE p.proposalCode = p_proposalCode AND p.proposalNumber = p_proposalNumber AND bs.visit_number = p_sessionNumber AND c.containerStatus = p_status; + + + END IF; + + ELSE + + IF p_authLogin IS NOT NULL THEN + -- Authorise only if the person (p_authLogin) is a member of a session on the proposal. + + SELECT DISTINCT c.containerId "containerId", + d.dewarId "dewarId", + c.sessionId "sessionId", + p.proposalId "proposalId", + c.ownerId "ownerId", + -- what about owner login, givenName, familyName ???? + c.code "name", + c.containerType "type", + c.barcode "barcode", + c.beamlineLocation "beamline", + c.sampleChangerLocation "location", + c.containerStatus "status", + c.capacity "capacity", + c.storageTemperature "storageTemperature", + + p.proposalCode "proposalCode", + p.proposalNumber "proposalNumber", + NULL "sessionNumber", + + c.comments "comments", + c.experimentType "experimentType" + FROM Container c + JOIN Dewar d ON c.dewarId = d.dewarId + JOIN Shipping s ON s.shippingId = d.shippingId + JOIN Proposal p ON p.proposalId = s.proposalId + JOIN BLSession bs2 ON bs2.proposalId = p.proposalId + JOIN Session_has_Person shp ON shp.sessionId = bs2.sessionId + JOIN Person per on per.personId = shp.personId + WHERE p.proposalCode = p_proposalCode AND p.proposalNumber = p_proposalNumber AND c.containerStatus = p_status AND per.login = p_authLogin; + + ELSE + + SELECT c.containerId "containerId", + d.dewarId "dewarId", + c.sessionId "sessionId", + p.proposalId "proposalId", + c.ownerId "ownerId", + -- what about owner login, givenName, familyName ???? + c.code "name", + c.containerType "type", + c.barcode "barcode", + c.beamlineLocation "beamline", + c.sampleChangerLocation "location", + c.containerStatus "status", + c.capacity "capacity", + c.storageTemperature "storageTemperature", + + p.proposalCode "proposalCode", + p.proposalNumber "proposalNumber", + NULL "sessionNumber", + + c.comments "comments", + c.experimentType "experimentType" + FROM Container c + JOIN Dewar d ON c.dewarId = d.dewarId + JOIN Shipping s ON s.shippingId = d.shippingId + JOIN Proposal p ON p.proposalId = s.proposalId + WHERE p.proposalCode = p_proposalCode AND p.proposalNumber = p_proposalNumber AND c.containerStatus = p_status; + + END IF; + + END IF; + + ELSE + SIGNAL SQLSTATE '45000' SET MYSQL_ERRNO=1644, MESSAGE_TEXT='Mandatory argument p_id can not be NULL'; + END IF; + +END;; + +DELIMITER ; \ No newline at end of file From e2b8f453cb31bf396ebff3725ec03fc788677d66 Mon Sep 17 00:00:00 2001 From: Karl Levik Date: Fri, 4 Dec 2020 11:29:41 +0000 Subject: [PATCH 8/9] SELECT also container owner's login + fix error msg --- .../stored_programs/sp_retrieve_scm_container.sql | 12 ++++++++---- .../sp_retrieve_scm_container_for_barcode.sql | 12 ++++++++---- .../sp_retrieve_scm_containers_for_session.sql | 14 +++++++++----- 3 files changed, 25 insertions(+), 13 deletions(-) diff --git a/schema/stored_programs/sp_retrieve_scm_container.sql b/schema/stored_programs/sp_retrieve_scm_container.sql index 52ab30fb..9e723033 100644 --- a/schema/stored_programs/sp_retrieve_scm_container.sql +++ b/schema/stored_programs/sp_retrieve_scm_container.sql @@ -24,7 +24,7 @@ BEGIN c.sessionId "sessionId", p.proposalId "proposalId", c.ownerId "ownerId", - -- what about owner login, givenName, familyName ???? + per2.login "ownerUsername", c.code "name", c.containerType "type", c.barcode "barcode", @@ -46,6 +46,7 @@ BEGIN JOIN BLSession bs2 ON bs2.proposalId = p.proposalId JOIN Session_has_Person shp ON shp.sessionId = bs2.sessionId JOIN Person per on per.personId = shp.personId + LEFT JOIN Person per2 ON per2.personId = c.ownerId WHERE c.containerId = p_id AND per.login = p_authLogin; ELSE @@ -55,7 +56,7 @@ BEGIN c.sessionId "sessionId", p.proposalId "proposalId", c.ownerId "ownerId", - -- what about owner login, givenName, familyName ???? + per2.login "ownerUsername", c.code "name", c.containerType "type", c.barcode "barcode", @@ -74,6 +75,7 @@ BEGIN FROM Container c JOIN BLSession bs ON bs.sessionId = c.sessionId JOIN Proposal p ON p.proposalId = bs.proposalId + LEFT JOIN Person per2 ON per2.personId = c.ownerId WHERE c.containerId = p_id; @@ -90,7 +92,7 @@ BEGIN c.sessionId "sessionId", p.proposalId "proposalId", c.ownerId "ownerId", - -- what about owner login, givenName, familyName ???? + per2.login "ownerUsername", c.code "name", c.containerType "type", c.barcode "barcode", @@ -113,6 +115,7 @@ BEGIN JOIN BLSession bs2 ON bs2.proposalId = p.proposalId JOIN Session_has_Person shp ON shp.sessionId = bs2.sessionId JOIN Person per on per.personId = shp.personId + LEFT JOIN Person per2 ON per2.personId = c.ownerId WHERE c.containerId = p_id AND per.login = p_authLogin; ELSE @@ -122,7 +125,7 @@ BEGIN c.sessionId "sessionId", p.proposalId "proposalId", c.ownerId "ownerId", - -- what about owner login, givenName, familyName ???? + per2.login "ownerUsername", c.code "name", c.containerType "type", c.barcode "barcode", @@ -142,6 +145,7 @@ BEGIN JOIN Dewar d ON c.dewarId = d.dewarId JOIN Shipping s ON s.shippingId = d.shippingId JOIN Proposal p ON p.proposalId = s.proposalId + LEFT JOIN Person per2 ON per2.personId = c.ownerId WHERE c.containerId = p_id; END IF; diff --git a/schema/stored_programs/sp_retrieve_scm_container_for_barcode.sql b/schema/stored_programs/sp_retrieve_scm_container_for_barcode.sql index 54643aae..a6056716 100644 --- a/schema/stored_programs/sp_retrieve_scm_container_for_barcode.sql +++ b/schema/stored_programs/sp_retrieve_scm_container_for_barcode.sql @@ -26,7 +26,7 @@ BEGIN c.sessionId "sessionId", p.proposalId "proposalId", c.ownerId "ownerId", - -- what about owner login, givenName, familyName ???? + per2.login "ownerUsername", c.code "name", c.containerType "type", c.barcode "barcode", @@ -48,6 +48,7 @@ BEGIN JOIN BLSession bs2 ON bs2.proposalId = p.proposalId JOIN Session_has_Person shp ON shp.sessionId = bs2.sessionId JOIN Person per on per.personId = shp.personId + LEFT JOIN Person per2 ON per2.personId = c.ownerId WHERE c.barcode = p_barcode AND per.login = p_authLogin; ELSE @@ -57,7 +58,7 @@ BEGIN c.sessionId "sessionId", p.proposalId "proposalId", c.ownerId "ownerId", - -- what about owner login, givenName, familyName ???? + per2.login "ownerUsername", c.code "name", c.containerType "type", c.barcode "barcode", @@ -76,6 +77,7 @@ BEGIN FROM Container c JOIN BLSession bs ON bs.sessionId = c.sessionId JOIN Proposal p ON p.proposalId = bs.proposalId + LEFT JOIN Person per2 ON per2.personId = c.ownerId WHERE c.barcode = p_barcode; END IF; @@ -90,7 +92,7 @@ BEGIN c.sessionId "sessionId", p.proposalId "proposalId", c.ownerId "ownerId", - -- what about owner login, givenName, familyName ???? + per2.login "ownerUsername", c.code "name", c.containerType "type", c.barcode "barcode", @@ -113,6 +115,7 @@ BEGIN JOIN BLSession bs2 ON bs2.proposalId = p.proposalId JOIN Session_has_Person shp ON shp.sessionId = bs2.sessionId JOIN Person per on per.personId = shp.personId + LEFT JOIN Person per2 ON per2.personId = c.ownerId WHERE c.barcode = p_barcode AND per.login = p_authLogin; ELSE @@ -122,7 +125,7 @@ BEGIN c.sessionId "sessionId", p.proposalId "proposalId", c.ownerId "ownerId", - -- what about owner login, givenName, familyName ???? + per2.login "ownerUsername", c.code "name", c.containerType "type", c.barcode "barcode", @@ -142,6 +145,7 @@ BEGIN JOIN Dewar d ON c.dewarId = d.dewarId JOIN Shipping s ON s.shippingId = d.shippingId JOIN Proposal p ON p.proposalId = s.proposalId + LEFT JOIN Person per2 ON per2.personId = c.ownerId WHERE c.barcode = p_barcode; END IF; diff --git a/schema/stored_programs/sp_retrieve_scm_containers_for_session.sql b/schema/stored_programs/sp_retrieve_scm_containers_for_session.sql index 2a8c51b3..60e764f4 100644 --- a/schema/stored_programs/sp_retrieve_scm_containers_for_session.sql +++ b/schema/stored_programs/sp_retrieve_scm_containers_for_session.sql @@ -30,7 +30,7 @@ BEGIN c.sessionId "sessionId", p.proposalId "proposalId", c.ownerId "ownerId", - -- what about owner login, givenName, familyName ???? + per2.login "ownerUsername", c.code "name", c.containerType "type", c.barcode "barcode", @@ -52,6 +52,7 @@ BEGIN JOIN BLSession bs2 ON bs2.proposalId = p.proposalId JOIN Session_has_Person shp ON shp.sessionId = bs2.sessionId JOIN Person per on per.personId = shp.personId + LEFT JOIN Person per2 ON per2.personId = c.ownerId WHERE p.proposalCode = p_proposalCode AND p.proposalNumber = p_proposalNumber AND bs.visit_number = p_sessionNumber AND c.containerStatus = p_status AND per.login = p_authLogin; ELSE @@ -61,7 +62,7 @@ BEGIN c.sessionId "sessionId", p.proposalId "proposalId", c.ownerId "ownerId", - -- what about owner login, givenName, familyName ???? + per2.login "ownerUsername", c.code "name", c.containerType "type", c.barcode "barcode", @@ -80,6 +81,7 @@ BEGIN FROM Container c JOIN BLSession bs ON bs.sessionId = c.sessionId JOIN Proposal p ON p.proposalId = bs.proposalId + LEFT JOIN Person per2 ON per2.personId = c.ownerId WHERE p.proposalCode = p_proposalCode AND p.proposalNumber = p_proposalNumber AND bs.visit_number = p_sessionNumber AND c.containerStatus = p_status; @@ -95,7 +97,7 @@ BEGIN c.sessionId "sessionId", p.proposalId "proposalId", c.ownerId "ownerId", - -- what about owner login, givenName, familyName ???? + per2.login "ownerUsername", c.code "name", c.containerType "type", c.barcode "barcode", @@ -118,6 +120,7 @@ BEGIN JOIN BLSession bs2 ON bs2.proposalId = p.proposalId JOIN Session_has_Person shp ON shp.sessionId = bs2.sessionId JOIN Person per on per.personId = shp.personId + LEFT JOIN Person per2 ON per2.personId = c.ownerId WHERE p.proposalCode = p_proposalCode AND p.proposalNumber = p_proposalNumber AND c.containerStatus = p_status AND per.login = p_authLogin; ELSE @@ -127,7 +130,7 @@ BEGIN c.sessionId "sessionId", p.proposalId "proposalId", c.ownerId "ownerId", - -- what about owner login, givenName, familyName ???? + per2.login "ownerUsername", c.code "name", c.containerType "type", c.barcode "barcode", @@ -147,6 +150,7 @@ BEGIN JOIN Dewar d ON c.dewarId = d.dewarId JOIN Shipping s ON s.shippingId = d.shippingId JOIN Proposal p ON p.proposalId = s.proposalId + LEFT JOIN Person per2 ON per2.personId = c.ownerId WHERE p.proposalCode = p_proposalCode AND p.proposalNumber = p_proposalNumber AND c.containerStatus = p_status; END IF; @@ -154,7 +158,7 @@ BEGIN END IF; ELSE - SIGNAL SQLSTATE '45000' SET MYSQL_ERRNO=1644, MESSAGE_TEXT='Mandatory argument p_id can not be NULL'; + SIGNAL SQLSTATE '45000' SET MYSQL_ERRNO=1644, MESSAGE_TEXT='Mandatory arguments p_proposalCode and p_proposalNumber can not be NULL'; END IF; END;; From a097dd36b39de285f0a83072ceb1fa8d7fcf2aba Mon Sep 17 00:00:00 2001 From: Karl Levik Date: Fri, 4 Dec 2020 15:12:07 +0000 Subject: [PATCH 9/9] Retrieve experiment type from ExperimentType lookup table --- .../stored_programs/sp_retrieve_scm_container.sql | 13 ++++++++----- .../sp_retrieve_scm_container_for_barcode.sql | 12 ++++++++---- .../sp_retrieve_scm_containers_for_session.sql | 12 ++++++++---- 3 files changed, 24 insertions(+), 13 deletions(-) diff --git a/schema/stored_programs/sp_retrieve_scm_container.sql b/schema/stored_programs/sp_retrieve_scm_container.sql index 9e723033..70452ece 100644 --- a/schema/stored_programs/sp_retrieve_scm_container.sql +++ b/schema/stored_programs/sp_retrieve_scm_container.sql @@ -39,7 +39,7 @@ BEGIN bs.visit_number "sessionNumber", c.comments "comments", - c.experimentType "experimentType" + et.name "experimentType" FROM Container c JOIN BLSession bs ON bs.sessionId = c.sessionId JOIN Proposal p ON p.proposalId = bs.proposalId @@ -47,6 +47,7 @@ BEGIN JOIN Session_has_Person shp ON shp.sessionId = bs2.sessionId JOIN Person per on per.personId = shp.personId LEFT JOIN Person per2 ON per2.personId = c.ownerId + LEFT JOIN ExperimentType et ON et.experimentTypeId = c.experimentTypeId WHERE c.containerId = p_id AND per.login = p_authLogin; ELSE @@ -71,13 +72,13 @@ BEGIN bs.visit_number "sessionNumber", c.comments "comments", - c.experimentType "experimentType" + et.name "experimentType" FROM Container c JOIN BLSession bs ON bs.sessionId = c.sessionId JOIN Proposal p ON p.proposalId = bs.proposalId LEFT JOIN Person per2 ON per2.personId = c.ownerId + LEFT JOIN ExperimentType et ON et.experimentTypeId = c.experimentTypeId WHERE c.containerId = p_id; - END IF; @@ -107,7 +108,7 @@ BEGIN NULL "sessionNumber", c.comments "comments", - c.experimentType "experimentType" + et.name "experimentType" FROM Container c JOIN Dewar d ON c.dewarId = d.dewarId JOIN Shipping s ON s.shippingId = d.shippingId @@ -116,6 +117,7 @@ BEGIN JOIN Session_has_Person shp ON shp.sessionId = bs2.sessionId JOIN Person per on per.personId = shp.personId LEFT JOIN Person per2 ON per2.personId = c.ownerId + LEFT JOIN ExperimentType et ON et.experimentTypeId = c.experimentTypeId WHERE c.containerId = p_id AND per.login = p_authLogin; ELSE @@ -140,12 +142,13 @@ BEGIN NULL "sessionNumber", c.comments "comments", - c.experimentType "experimentType" + et.name "experimentType" FROM Container c JOIN Dewar d ON c.dewarId = d.dewarId JOIN Shipping s ON s.shippingId = d.shippingId JOIN Proposal p ON p.proposalId = s.proposalId LEFT JOIN Person per2 ON per2.personId = c.ownerId + LEFT JOIN ExperimentType et ON et.experimentTypeId = c.experimentTypeId WHERE c.containerId = p_id; END IF; diff --git a/schema/stored_programs/sp_retrieve_scm_container_for_barcode.sql b/schema/stored_programs/sp_retrieve_scm_container_for_barcode.sql index a6056716..fe742d8a 100644 --- a/schema/stored_programs/sp_retrieve_scm_container_for_barcode.sql +++ b/schema/stored_programs/sp_retrieve_scm_container_for_barcode.sql @@ -41,7 +41,7 @@ BEGIN bs.visit_number "sessionNumber", c.comments "comments", - c.experimentType "experimentType" + et.name "experimentType" FROM Container c JOIN BLSession bs ON bs.sessionId = c.sessionId JOIN Proposal p ON p.proposalId = bs.proposalId @@ -49,6 +49,7 @@ BEGIN JOIN Session_has_Person shp ON shp.sessionId = bs2.sessionId JOIN Person per on per.personId = shp.personId LEFT JOIN Person per2 ON per2.personId = c.ownerId + LEFT JOIN ExperimentType et ON et.experimentTypeId = c.experimentTypeId WHERE c.barcode = p_barcode AND per.login = p_authLogin; ELSE @@ -73,11 +74,12 @@ BEGIN bs.visit_number "sessionNumber", c.comments "comments", - c.experimentType "experimentType" + et.name "experimentType" FROM Container c JOIN BLSession bs ON bs.sessionId = c.sessionId JOIN Proposal p ON p.proposalId = bs.proposalId LEFT JOIN Person per2 ON per2.personId = c.ownerId + LEFT JOIN ExperimentType et ON et.experimentTypeId = c.experimentTypeId WHERE c.barcode = p_barcode; END IF; @@ -107,7 +109,7 @@ BEGIN NULL "sessionNumber", c.comments "comments", - c.experimentType "experimentType" + et.name "experimentType" FROM Container c JOIN Dewar d ON c.dewarId = d.dewarId JOIN Shipping s ON s.shippingId = d.shippingId @@ -116,6 +118,7 @@ BEGIN JOIN Session_has_Person shp ON shp.sessionId = bs2.sessionId JOIN Person per on per.personId = shp.personId LEFT JOIN Person per2 ON per2.personId = c.ownerId + LEFT JOIN ExperimentType et ON et.experimentTypeId = c.experimentTypeId WHERE c.barcode = p_barcode AND per.login = p_authLogin; ELSE @@ -140,12 +143,13 @@ BEGIN NULL "sessionNumber", c.comments "comments", - c.experimentType "experimentType" + et.name "experimentType" FROM Container c JOIN Dewar d ON c.dewarId = d.dewarId JOIN Shipping s ON s.shippingId = d.shippingId JOIN Proposal p ON p.proposalId = s.proposalId LEFT JOIN Person per2 ON per2.personId = c.ownerId + LEFT JOIN ExperimentType et ON et.experimentTypeId = c.experimentTypeId WHERE c.barcode = p_barcode; END IF; diff --git a/schema/stored_programs/sp_retrieve_scm_containers_for_session.sql b/schema/stored_programs/sp_retrieve_scm_containers_for_session.sql index 60e764f4..ef00ae63 100644 --- a/schema/stored_programs/sp_retrieve_scm_containers_for_session.sql +++ b/schema/stored_programs/sp_retrieve_scm_containers_for_session.sql @@ -45,7 +45,7 @@ BEGIN bs.visit_number "sessionNumber", c.comments "comments", - c.experimentType "experimentType" + et.name "experimentType" FROM Container c JOIN BLSession bs ON bs.sessionId = c.sessionId JOIN Proposal p ON p.proposalId = bs.proposalId @@ -53,6 +53,7 @@ BEGIN JOIN Session_has_Person shp ON shp.sessionId = bs2.sessionId JOIN Person per on per.personId = shp.personId LEFT JOIN Person per2 ON per2.personId = c.ownerId + LEFT JOIN ExperimentType et ON et.experimentTypeId = c.experimentTypeId WHERE p.proposalCode = p_proposalCode AND p.proposalNumber = p_proposalNumber AND bs.visit_number = p_sessionNumber AND c.containerStatus = p_status AND per.login = p_authLogin; ELSE @@ -77,11 +78,12 @@ BEGIN bs.visit_number "sessionNumber", c.comments "comments", - c.experimentType "experimentType" + et.name "experimentType" FROM Container c JOIN BLSession bs ON bs.sessionId = c.sessionId JOIN Proposal p ON p.proposalId = bs.proposalId LEFT JOIN Person per2 ON per2.personId = c.ownerId + LEFT JOIN ExperimentType et ON et.experimentTypeId = c.experimentTypeId WHERE p.proposalCode = p_proposalCode AND p.proposalNumber = p_proposalNumber AND bs.visit_number = p_sessionNumber AND c.containerStatus = p_status; @@ -112,7 +114,7 @@ BEGIN NULL "sessionNumber", c.comments "comments", - c.experimentType "experimentType" + et.name "experimentType" FROM Container c JOIN Dewar d ON c.dewarId = d.dewarId JOIN Shipping s ON s.shippingId = d.shippingId @@ -121,6 +123,7 @@ BEGIN JOIN Session_has_Person shp ON shp.sessionId = bs2.sessionId JOIN Person per on per.personId = shp.personId LEFT JOIN Person per2 ON per2.personId = c.ownerId + LEFT JOIN ExperimentType et ON et.experimentTypeId = c.experimentTypeId WHERE p.proposalCode = p_proposalCode AND p.proposalNumber = p_proposalNumber AND c.containerStatus = p_status AND per.login = p_authLogin; ELSE @@ -145,12 +148,13 @@ BEGIN NULL "sessionNumber", c.comments "comments", - c.experimentType "experimentType" + et.name "experimentType" FROM Container c JOIN Dewar d ON c.dewarId = d.dewarId JOIN Shipping s ON s.shippingId = d.shippingId JOIN Proposal p ON p.proposalId = s.proposalId LEFT JOIN Person per2 ON per2.personId = c.ownerId + LEFT JOIN ExperimentType et ON et.experimentTypeId = c.experimentTypeId WHERE p.proposalCode = p_proposalCode AND p.proposalNumber = p_proposalNumber AND c.containerStatus = p_status; END IF;