11/* Some tests:
22SET @id = NULL;
3- CALL upsert_dc_group_v2(@id, NULL, 'nt', 17192, 1, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
4- SELECT * FROM DataCollectionGroup WHERE dataCollectionGroupId = @id;
5- CALL upsert_dc_group_v2(@id, NULL, 'nt', 17192, 1, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'my funny comment','/dls/i03/data/2017/nt17192-1/jpegs/test.png');
3+ CALL upsert_dc_group_v3(@id, NULL, 'cm', 14451, 1, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'funny comment','/dls/i03/data/2024/cm14451-1/jpegs/test.png', NULL);
64SELECT * FROM DataCollectionGroup WHERE dataCollectionGroupId = @id;
75
8- SET @id = NULL;
9- CALL upsert_dc_group_v2(@id, 403, NULL, NULL, NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'my very funny comment','/dls/i03/data/2007/nt20-1/jpegs/test.png');
106*/
117
128DELIMITER ;;
@@ -29,7 +25,7 @@ CREATE OR REPLACE DEFINER=`ispyb_root`@`%` PROCEDURE `upsert_dc_group_v3`(
2925 p_actualContainerSlotInSC integer (10 ),
3026 p_comments varchar (1024 ),
3127 p_xtalSnapshotFullPath varchar (255 ),
32- p_scanParameters longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
28+ p_scanParameters longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
3329 )
3430 MODIFIES SQL DATA
3531 COMMENT ' Inserts or updates info about data collection group (p_id).
@@ -42,10 +38,11 @@ Note: In order to associate the data collection group with a sample, one of the
4238* p_actualContainerBarcode + p_actualSampleSlotInContainer
4339Returns: Record ID in p_id.'
4440BEGIN
45- DECLARE row_proposal_id int (10 ) unsigned DEFAULT NULL ;
46- DECLARE row_sample_id int (10 ) unsigned DEFAULT NULL ;
41+ DECLARE row_proposal_id int (10 ) unsigned DEFAULT NULL ;
42+ DECLARE row_sample_id int (10 ) unsigned DEFAULT NULL ;
43+ DECLARE row_experiment_id int (10 ) unsigned DEFAULT NULL ;
4744
48- IF p_sessionId IS NULL AND p_proposalCode IS NOT NULL AND p_proposalNumber IS NOT NULL AND p_sessionNumber IS NOT NULL THEN
45+ IF p_sessionId IS NULL AND p_proposalCode IS NOT NULL AND p_proposalNumber IS NOT NULL AND p_sessionNumber IS NOT NULL THEN
4946 SELECT max (bs .sessionid ), p .proposalId INTO p_sessionId, row_proposal_id
5047 FROM Proposal p INNER JOIN BLSession bs ON p .proposalid = bs .proposalid
5148 WHERE p .proposalCode = p_proposalCode AND p .proposalNumber = p_proposalNumber AND bs .visit_number = p_sessionNumber;
@@ -54,36 +51,39 @@ BEGIN
5451 IF p_id IS NOT NULL OR p_sessionId IS NOT NULL THEN
5552 -- set p_sampleId if not already set
5653 IF p_sessionId IS NOT NULL AND p_sampleId IS NULL AND p_sampleBarcode IS NOT NULL THEN
57- IF row_proposal_id IS NULL THEN
58- SELECT proposalId INTO row_proposal_id
59- FROM BLSession
60- WHERE sessionId = p_sessionId;
54+ IF row_proposal_id IS NULL THEN
55+ SELECT proposalId INTO row_proposal_id
56+ FROM BLSession
57+ WHERE sessionId = p_sessionId;
58+ END IF;
59+ SELECT max (bls .blSampleId ) INTO p_sampleId
60+ FROM BLSample bls
61+ INNER JOIN Container c on c .containerId = bls .containerId
62+ INNER JOIN Dewar d on d .dewarId = c .dewarId
63+ INNER JOIN Shipping s on s .shippingId = d .shippingId
64+ WHERE bls .code = p_sampleBarcode AND s .proposalId = row_proposal_id;
6165 END IF;
62- SELECT max (bls .blSampleId ) INTO p_sampleId
63- FROM BLSample bls
64- INNER JOIN Container c on c .containerId = bls .containerId
65- INNER JOIN Dewar d on d .dewarId = c .dewarId
66- INNER JOIN Shipping s on s .shippingId = d .shippingId
67- WHERE bls .code = p_sampleBarcode AND s .proposalId = row_proposal_id;
68- END IF;
6966
70- IF p_sampleId IS NULL AND (p_actualContainerBarcode IS NOT NULL ) AND (p_actualSampleSlotInContainer IS NOT NULL ) THEN
71- SELECT max (bls .blSampleId ) INTO p_sampleId
72- FROM BLSample bls
73- INNER JOIN Container c on c .containerId = bls .containerId
74- WHERE c .barcode = p_actualContainerBarcode AND bls .location = p_actualSampleSlotInContainer;
75- END IF;
67+ IF p_sampleId IS NULL AND (p_actualContainerBarcode IS NOT NULL ) AND (p_actualSampleSlotInContainer IS NOT NULL ) THEN
68+ SELECT max (bls .blSampleId ) INTO p_sampleId
69+ FROM BLSample bls
70+ INNER JOIN Container c on c .containerId = bls .containerId
71+ WHERE c .barcode = p_actualContainerBarcode AND bls .location = p_actualSampleSlotInContainer;
72+ END IF;
73+
74+ SELECT experimentTypeId INTO row_experiment_id FROM ExperimentType WHERE name = p_experimenttype;
7675
77- INSERT INTO DataCollectionGroup (datacollectionGroupId, sessionId, blsampleId, experimenttype, starttime, endtime,
76+ INSERT INTO DataCollectionGroup (datacollectionGroupId, sessionId, blsampleId, experimenttype, experimentTypeId, starttime, endtime,
7877 crystalClass, detectorMode, actualSampleBarcode, actualSampleSlotInContainer, actualContainerBarcode, actualContainerSlotInSC,
7978 comments, xtalSnapshotFullPath, scanParameters)
80- VALUES (p_id, p_sessionId, p_sampleId, p_experimenttype, p_starttime, p_endtime, p_crystalClass, p_detectorMode,
79+ VALUES (p_id, p_sessionId, p_sampleId, p_experimenttype, row_experiment_id, p_starttime, p_endtime, p_crystalClass, p_detectorMode,
8180 p_actualSampleBarcode, p_actualSampleSlotInContainer, p_actualContainerBarcode, p_actualContainerSlotInSC,
8281 p_comments, p_xtalSnapshotFullPath, p_scanParameters)
8382 ON DUPLICATE KEY UPDATE
8483 sessionId = IFNULL(p_sessionId, sessionId),
8584 blsampleId = IFNULL(p_sampleId, blsampleId),
8685 experimenttype = IFNULL(p_experimenttype, experimenttype),
86+ experimentTypeId = row_experiment_id,
8787 starttime = IFNULL(p_starttime, starttime),
8888 endtime = IFNULL(p_endtime, endtime),
8989 crystalClass = IFNULL(p_crystalClass, crystalClass),
@@ -96,11 +96,11 @@ BEGIN
9696 xtalSnapshotFullPath = IFNULL(p_xtalSnapshotFullPath, xtalSnapshotFullPath),
9797 scanParameters = IFNULL (p_scanParameters, scanParameters);
9898
99- IF p_id IS NULL THEN
100- SET p_id = LAST_INSERT_ID();
99+ IF p_id IS NULL THEN
100+ SET p_id = LAST_INSERT_ID();
101101 END IF;
102- ELSE
103- SIGNAL SQLSTATE ' 45000' SET MYSQL_ERRNO= 1644 , MESSAGE_TEXT= ' Mandatory argument(s) are NULL: p_id OR p_sessionId OR a valid session described by (p_proposalCode and p_proposalNumber and p_sessionNumber) must be non-NULL.' ;
104- END IF;
105- END;;
102+ ELSE
103+ SIGNAL SQLSTATE ' 45000' SET MYSQL_ERRNO= 1644 , MESSAGE_TEXT= ' Mandatory argument(s) are NULL: p_id OR p_sessionId OR a valid session described by (p_proposalCode and p_proposalNumber and p_sessionNumber) must be non-NULL.' ;
104+ END IF;
105+ END;;
106106DELIMITER ;
0 commit comments