Skip to content

Commit 36b720e

Browse files
authored
Prepare for 4.2.0 release (#239)
* Add script to perform LVM snapshot-based backup * Add grants files for new ispyb expeye roles * Add entry for new version 4.2.0 in HISTORY.rst * Bump version to 4.2.0 * Refresh schema files to v4.2.0
1 parent a27034e commit 36b720e

File tree

8 files changed

+415
-235
lines changed

8 files changed

+415
-235
lines changed

HISTORY.rst

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,24 @@ History
55
Unreleased / master
66
-------------------
77

8+
4.2.0 (2024-08-14)
9+
-------------------
10+
11+
Roles and permissions: grants files for new ispyb expeye roles
12+
13+
New or modified tables, columns, lookup values:
14+
15+
- New table ``ProcessedTomogram``
16+
- New rows for 'VMXm-Cartridge' and 'VMXm-Cartridge' in the ``ContainerType`` table
17+
- New FK column ``ownerId`` (references ``Person.personId``) in the ``BLSampleGroup`` table
18+
- New 'Metal ID' enum item in ``DiffractionPlan.experimentKind``
19+
- New 'Metal ID' enum item in ``DataCollectionGroup.experimentType``
20+
- New row for 'Metal ID' (for MX) in ``ExperimentType`` table
21+
22+
Stored procedures: ``upsert_dc_group_v3`` now populates ``DataCollectionGroup.experimentTypeId`` based on ``p_experimenttype``
23+
24+
New script to perform LVM snapshot-based backup
25+
826
4.1.0 (2024-03-26)
927
-------------------
1028

bin/mdb_lvm_backup.sh

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
#!/usr/bin/bash
2+
3+
# Fail on unset variables
4+
set -u
5+
6+
#
7+
# Assumptions - adapt as needed to your environment:
8+
#
9+
# - /mnt/snapshot/ exists
10+
# - The user running the script has relevant password-less sudo permissions
11+
# - The volume group is called VolGroup00
12+
# - The source logical volume name is called varlibmysql
13+
# - The snapshot logical volume name is called mariadb-backup
14+
15+
# Arguments:
16+
#
17+
# 1: Path to the final destination directory
18+
#
19+
20+
export DEST_DIR="${1:?arg not defined}"
21+
export LVM_SUPPRESS_FD_WARNINGS=1
22+
23+
# Make sure the destination directory exists and has a unique subdir
24+
export DEST_DIR_SUB="${DEST_DIR:?not defined}"/$(date +%Y-%m-%d_%H%M%S-%A)
25+
mkdir "${DEST_DIR_SUB:?not defined}"/
26+
27+
# The following lines are run from inside the mariadb client. The reason is
28+
# that the MariaDB "BACKUP STAGE" commands need to all run inside the same
29+
# connection, and the BACKUP STAGE END command needs to run after the lvcreate
30+
# command.
31+
32+
# shellcheck disable=SC2016
33+
mariadb -e '
34+
-- Ensure that all non-transactional tables are properly flushed to disk before
35+
-- the snapshot is done. Using BACKUP STAGE commands is also more efficient than
36+
-- using the FLUSH TABLES WITH READ LOCK command as this set of commands
37+
-- will not block or be blocked by write operations to transactional tables.
38+
BACKUP STAGE START;
39+
BACKUP STAGE BLOCK_COMMIT;
40+
41+
-- When using the LVM backup to set up a replication slave, we need to
42+
-- know the current replication position, so write this to a text file
43+
-- in case we need it later:
44+
system echo $(mariadb -Nse "SELECT @@global.gtid_binlog_pos") > ${DEST_DIR_SUB}/gtid_binlog_pos.txt
45+
46+
-- Create the actual snapshot
47+
system sudo /usr/sbin/lvcreate -l100%FREE -s -n mariadb-backup /dev/VolGroup00/varlibmysql
48+
49+
-- Complete the backup stage
50+
BACKUP STAGE END;'
51+
52+
# Copy the snapshot to other server/disk
53+
sudo mount /dev/VolGroup00/mariadb-backup /mnt/snapshot -o nouuid -t xfs
54+
sudo cp -pr /mnt/snapshot "${DEST_DIR_SUB:?not defined}"/.
55+
56+
# Dispose of the snapshot
57+
sudo umount /mnt/snapshot
58+
sudo /usr/sbin/lvremove --yes /dev/VolGroup00/mariadb-backup

grants/ispyb_expeye.sql

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
-- Create the Exp-eye Core API role.
2+
CREATE ROLE IF NOT EXISTS ispyb_expeye_core_role;
3+
4+
-- You must also create a database user and grant this role to them, e.g.
5+
-- CREATE USER ispyb_expeye_core@'%' IDENTIFIED BY 'the_password';
6+
-- GRANT ispyb_expeye_core_role to ispyb_expeye_core@'%';
7+
-- SET DEFAULT ROLE ispyb_expeye_core_role FOR ispyb_expeye_core@'%';
8+
9+
GRANT ispyb_propagation TO ispyb_expeye_core_role;
10+
11+
CREATE ROLE ispyb_expeye_acquisition_role;
12+
13+
GRANT SELECT, INSERT, UPDATE ON RobotAction TO ispyb_expeye_acquisition_role;
14+
GRANT SELECT, INSERT, UPDATE ON GridInfo TO ispyb_expeye_acquisition_role;
15+
GRANT SELECT, INSERT, UPDATE ON DataCollection TO ispyb_expeye_acquisition_role;
16+
GRANT SELECT, INSERT, UPDATE ON DataCollectionGroup TO ispyb_expeye_acquisition_role;
17+
GRANT SELECT, INSERT, UPDATE ON Position TO ispyb_expeye_acquisition_role;
18+
GRANT ispyb_expeye_acquisition_role TO ispyb_expeye_core_role;
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
-- Create the Exp-eye Samples API role.
2+
CREATE ROLE IF NOT EXISTS ispyb_expeye_samples_role;
3+
4+
-- You must also create a database user and grant this role to them, e.g.
5+
-- CREATE USER ispyb_expeye_samples@'%' IDENTIFIED BY 'the_password';
6+
-- GRANT ispyb_expeye_samples_role to ispyb_expeye_samples@'%';
7+
-- SET DEFAULT ROLE ispyb_expeye_samples_role FOR ispyb_expeye_core@'%';
8+
9+
GRANT SELECT ON Proposal TO ispyb_expeye_samples_role;
10+
GRANT SELECT ON BLSession TO ispyb_expeye_samples_role;
11+
12+
GRANT SELECT, INSERT, UPDATE, DELETE ON Shipping TO ispyb_expeye_samples_role;
13+
GRANT SELECT, INSERT, UPDATE, DELETE ON ShippingHasSession TO ispyb_expeye_samples_role;
14+
GRANT SELECT, INSERT, UPDATE, DELETE ON Project_has_Shipping TO ispyb_expeye_samples_role;
15+
16+
GRANT SELECT, INSERT, UPDATE, DELETE ON LabContact TO ispyb_expeye_samples_role;
17+
18+
GRANT SELECT, INSERT, UPDATE, DELETE ON Dewar TO ispyb_expeye_samples_role;
19+
GRANT SELECT, INSERT, UPDATE, DELETE ON DewarLocation TO ispyb_expeye_samples_role;
20+
GRANT SELECT, INSERT, UPDATE, DELETE ON DewarLocationList TO ispyb_expeye_samples_role;
21+
GRANT SELECT, INSERT, UPDATE, DELETE ON DewarRegistry TO ispyb_expeye_samples_role;
22+
GRANT SELECT, INSERT, UPDATE, DELETE ON DewarRegistry_has_Proposal TO ispyb_expeye_samples_role;
23+
GRANT SELECT, INSERT, UPDATE, DELETE ON DewarReport TO ispyb_expeye_samples_role;
24+
GRANT SELECT, INSERT, UPDATE ON DewarTransportHistory TO ispyb_expeye_samples_role;
25+
26+
GRANT SELECT, INSERT, UPDATE, DELETE ON Container TO ispyb_expeye_samples_role;
27+
GRANT SELECT, INSERT, UPDATE, DELETE ON ContainerInspection TO ispyb_expeye_samples_role;
28+
GRANT SELECT, INSERT, UPDATE, DELETE ON ContainerQueue TO ispyb_expeye_samples_role;
29+
GRANT SELECT, INSERT, UPDATE, DELETE ON ContainerQueueSample TO ispyb_expeye_samples_role;
30+
GRANT SELECT, INSERT, UPDATE, DELETE ON ContainerRegistry TO ispyb_expeye_samples_role;
31+
GRANT SELECT, INSERT, UPDATE, DELETE ON ContainerRegistry_has_Proposal TO ispyb_expeye_samples_role;
32+
GRANT SELECT, INSERT, UPDATE, DELETE ON ContainerReport TO ispyb_expeye_samples_role;
33+
GRANT SELECT, INSERT, UPDATE, DELETE ON ContainerType TO ispyb_expeye_samples_role;
34+
GRANT SELECT, INSERT, UPDATE ON ContainerHistory TO ispyb_expeye_samples_role;
35+
36+
GRANT SELECT ON ProcessingPipeline TO ispyb_expeye_samples_role;
37+
GRANT SELECT ON ProcessingPipelineCategory TO ispyb_expeye_samples_role;
38+
39+
GRANT SELECT, INSERT, UPDATE, DELETE ON BLSample TO ispyb_expeye_samples_role;
40+
GRANT SELECT, INSERT, UPDATE, DELETE ON BLSampleGroup TO ispyb_expeye_samples_role;
41+
GRANT SELECT, INSERT, UPDATE, DELETE ON BLSampleGroup_has_BLSample TO ispyb_expeye_samples_role;
42+
GRANT SELECT, INSERT, UPDATE, DELETE ON BLSubSample TO ispyb_expeye_samples_role;
43+
GRANT SELECT, INSERT, UPDATE, DELETE ON Project_has_BLSample TO ispyb_expeye_samples_role;
44+
45+
GRANT SELECT ON Protein TO ispyb_expeye_samples_role;
46+
GRANT SELECT ON Crystal TO ispyb_expeye_samples_role;
47+
48+
GRANT SELECT, INSERT, UPDATE, DELETE ON DiffractionPlan TO ispyb_expeye_samples_role;
49+
50+
GRANT SELECT ON ComponentType TO ispyb_expeye_samples_role;
51+
GRANT SELECT ON ComponentSubType TO ispyb_expeye_samples_role;
52+
GRANT SELECT, INSERT, UPDATE, DELETE ON Component_has_SubType TO ispyb_expeye_samples_role;

schemas/ispyb/lookups.sql

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
1111

1212
/*!40000 ALTER TABLE `AdminVar` DISABLE KEYS */;
13-
INSERT INTO `AdminVar` (`varId`, `name`, `value`) VALUES (4,'schemaVersion','4.1.0');
13+
INSERT INTO `AdminVar` (`varId`, `name`, `value`) VALUES (4,'schemaVersion','4.2.0');
1414
/*!40000 ALTER TABLE `AdminVar` ENABLE KEYS */;
1515

1616
/*!40000 ALTER TABLE `SchemaStatus` DISABLE KEYS */;
@@ -256,7 +256,13 @@ INSERT INTO `SchemaStatus` (`schemaStatusId`, `scriptName`, `schemaStatus`, `rec
256256
(285,'2024_03_20_Shipping_Dewar_externalIds.sql','DONE','2024-03-26 16:40:34'),
257257
(286,'2024_03_26_AdminVar_bump_version.sql','DONE','2024-03-26 16:40:34'),
258258
(287,'2024_03_26_AutoProc_index_refined_unit_cell.sql','DONE','2024-03-26 16:40:34'),
259-
(288,'2023_11_16_AdminVar_bump_version.sql','DONE','2024-03-26 16:47:25');
259+
(288,'2023_11_16_AdminVar_bump_version.sql','DONE','2024-03-26 16:47:25'),
260+
(289,'2024_05_14_DataCollectionGroup_experimentType.sql','DONE','2024-08-14 11:23:41'),
261+
(290,'2024_05_30_DiffractionPlan_experimentKind.sql','DONE','2024-08-14 11:23:41'),
262+
(291,'2024_07_08_BLSampleGroup_ownerId.sql','DONE','2024-08-14 11:23:41'),
263+
(292,'2024_07_16_ContainerType_insert_new.sql','DONE','2024-08-14 11:23:41'),
264+
(293,'2024_08_08_ProcessedTomogram.sql','DONE','2024-08-14 11:23:41'),
265+
(294,'2024_08_14_AdminVar_bump_version.sql','DONE','2024-08-14 11:23:41');
260266
/*!40000 ALTER TABLE `SchemaStatus` ENABLE KEYS */;
261267

262268
/*!40000 ALTER TABLE `ComponentType` DISABLE KEYS */;
@@ -325,7 +331,9 @@ INSERT INTO `ContainerType` (`containerTypeId`, `name`, `proposalType`, `active`
325331
(32,'Box','xpdf',1,25,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
326332
(33,'Puck-22','xpdf',1,22,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
327333
(34,'I22_Grid_81','saxs',1,81,9,1,1,1,1,0,0,-1),
328-
(35,'I22_Capillary_Rack_25','saxs',1,25,25,1,1,1,1,0,0,-1);
334+
(35,'I22_Capillary_Rack_25','saxs',1,25,25,1,1,1,1,0,0,-1),
335+
(36,'VMXm-Cartridge','mx',1,5,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
336+
(37,'VMXm-GridBox','mx',1,4,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
329337
/*!40000 ALTER TABLE `ContainerType` ENABLE KEYS */;
330338

331339
/*!40000 ALTER TABLE `ExperimentType` DISABLE KEYS */;
@@ -370,7 +378,8 @@ INSERT INTO `ExperimentType` (`experimentTypeId`, `name`, `proposalType`, `activ
370378
(39,'Serial Jet','mx',1),
371379
(40,'Still','mx',1),
372380
(41,'SSX-Chip','mx',1),
373-
(42,'SSX-Jet','mx',1);
381+
(42,'SSX-Jet','mx',1),
382+
(43,'Metal ID','mx',1);
374383
/*!40000 ALTER TABLE `ExperimentType` ENABLE KEYS */;
375384

376385
/*!40000 ALTER TABLE `InspectionType` DISABLE KEYS */;

schemas/ispyb/routines.sql

Lines changed: 38 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ DELIMITER ;
130130
/*!50003 SET character_set_results = utf8mb3 */ ;
131131
/*!50003 SET collation_connection = utf8mb3_general_ci */ ;
132132
DELIMITER ;;
133-
CREATE FUNCTION `retrieve_proposal_title`(p_proposal_code varchar(5), p_proposal_number int) RETURNS varchar(255) CHARSET latin1 COLLATE latin1_swedish_ci
133+
CREATE FUNCTION `retrieve_proposal_title`(p_proposal_code varchar(5), p_proposal_number int) RETURNS varchar(255) CHARSET latin1
134134
READS SQL DATA
135135
BEGIN
136136
DECLARE ret_title varchar(255);
@@ -155,7 +155,7 @@ DELIMITER ;
155155
/*!50003 SET character_set_results = utf8mb3 */ ;
156156
/*!50003 SET collation_connection = utf8mb3_general_ci */ ;
157157
DELIMITER ;;
158-
CREATE FUNCTION `retrieve_proposal_title_v2`(p_proposalCode varchar(5), p_proposalNumber int) RETURNS varchar(255) CHARSET latin1 COLLATE latin1_swedish_ci
158+
CREATE FUNCTION `retrieve_proposal_title_v2`(p_proposalCode varchar(5), p_proposalNumber int) RETURNS varchar(255) CHARSET latin1
159159
READS SQL DATA
160160
COMMENT 'Retrieve the title for a given proposal code and number.'
161161
BEGIN
@@ -206,7 +206,7 @@ DELIMITER ;
206206
/*!50003 SET character_set_results = utf8mb3 */ ;
207207
/*!50003 SET collation_connection = utf8mb3_general_ci */ ;
208208
DELIMITER ;;
209-
CREATE FUNCTION `root_replace`(p_str varchar(255), p_oldroot varchar(255), p_newroot varchar(255)) RETURNS varchar(255) CHARSET latin1 COLLATE latin1_swedish_ci
209+
CREATE FUNCTION `root_replace`(p_str varchar(255), p_oldroot varchar(255), p_newroot varchar(255)) RETURNS varchar(255) CHARSET latin1
210210
COMMENT 'Returns a varchar where the old root p_oldroot (the leftmost part) of p_str has been replaced with a new root p_newroot'
211211
BEGIN
212212
DECLARE path_len smallint unsigned DEFAULT LENGTH(p_oldroot);
@@ -9448,7 +9448,7 @@ CREATE PROCEDURE `upsert_dc_group_v3`(
94489448
p_sessionNumber int(10),
94499449
p_sampleId int(10) unsigned,
94509450
p_sampleBarcode varchar(45),
9451-
p_experimenttype varchar(45),
9451+
p_experimenttype varchar(45),
94529452
p_starttime datetime,
94539453
p_endtime datetime,
94549454
p_crystalClass varchar(20),
@@ -9459,53 +9459,57 @@ CREATE PROCEDURE `upsert_dc_group_v3`(
94599459
p_actualContainerSlotInSC integer(10),
94609460
p_comments varchar(1024),
94619461
p_xtalSnapshotFullPath varchar(255),
9462-
p_scanParameters longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
9462+
p_scanParameters longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin
94639463
)
94649464
MODIFIES SQL DATA
94659465
COMMENT 'Inserts or updates info about data collection group (p_id).\nMandatory columns:\nFor insert: Either p_sessionId or a valid session described by (p_proposalCode, p_proposalNumber, p_sessionNumber)\nFor update: p_id\nNote: In order to associate the data collection group with a sample, one of the following sets of parameters are required:\n* p_sampleId\n* p_proposalCode, p_proposalNumber, p_sessionNumber + p_sampleBarcode\n* p_actualContainerBarcode + p_actualSampleSlotInContainer\nReturns: Record ID in p_id.'
94669466
BEGIN
9467-
DECLARE row_proposal_id int(10) unsigned DEFAULT NULL;
9468-
DECLARE row_sample_id int(10) unsigned DEFAULT NULL;
9467+
DECLARE row_proposal_id int(10) unsigned DEFAULT NULL;
9468+
DECLARE row_sample_id int(10) unsigned DEFAULT NULL;
9469+
DECLARE row_experiment_id int(10) unsigned DEFAULT NULL;
94699470

9470-
IF p_sessionId IS NULL AND p_proposalCode IS NOT NULL AND p_proposalNumber IS NOT NULL AND p_sessionNumber IS NOT NULL THEN
9471+
IF p_sessionId IS NULL AND p_proposalCode IS NOT NULL AND p_proposalNumber IS NOT NULL AND p_sessionNumber IS NOT NULL THEN
94719472
SELECT max(bs.sessionid), p.proposalId INTO p_sessionId, row_proposal_id
94729473
FROM Proposal p INNER JOIN BLSession bs ON p.proposalid = bs.proposalid
94739474
WHERE p.proposalCode = p_proposalCode AND p.proposalNumber = p_proposalNumber AND bs.visit_number = p_sessionNumber;
94749475
END IF;
94759476

94769477
IF p_id IS NOT NULL OR p_sessionId IS NOT NULL THEN
9477-
9478+
94789479
IF p_sessionId IS NOT NULL AND p_sampleId IS NULL AND p_sampleBarcode IS NOT NULL THEN
9479-
IF row_proposal_id IS NULL THEN
9480-
SELECT proposalId INTO row_proposal_id
9481-
FROM BLSession
9482-
WHERE sessionId = p_sessionId;
9480+
IF row_proposal_id IS NULL THEN
9481+
SELECT proposalId INTO row_proposal_id
9482+
FROM BLSession
9483+
WHERE sessionId = p_sessionId;
9484+
END IF;
9485+
SELECT max(bls.blSampleId) INTO p_sampleId
9486+
FROM BLSample bls
9487+
INNER JOIN Container c on c.containerId = bls.containerId
9488+
INNER JOIN Dewar d on d.dewarId = c.dewarId
9489+
INNER JOIN Shipping s on s.shippingId = d.shippingId
9490+
WHERE bls.code = p_sampleBarcode AND s.proposalId = row_proposal_id;
94839491
END IF;
9484-
SELECT max(bls.blSampleId) INTO p_sampleId
9485-
FROM BLSample bls
9486-
INNER JOIN Container c on c.containerId = bls.containerId
9487-
INNER JOIN Dewar d on d.dewarId = c.dewarId
9488-
INNER JOIN Shipping s on s.shippingId = d.shippingId
9489-
WHERE bls.code = p_sampleBarcode AND s.proposalId = row_proposal_id;
9490-
END IF;
94919492

9492-
IF p_sampleId IS NULL AND (p_actualContainerBarcode IS NOT NULL) AND (p_actualSampleSlotInContainer IS NOT NULL) THEN
9493-
SELECT max(bls.blSampleId) INTO p_sampleId
9494-
FROM BLSample bls
9495-
INNER JOIN Container c on c.containerId = bls.containerId
9496-
WHERE c.barcode = p_actualContainerBarcode AND bls.location = p_actualSampleSlotInContainer;
9497-
END IF;
9493+
IF p_sampleId IS NULL AND (p_actualContainerBarcode IS NOT NULL) AND (p_actualSampleSlotInContainer IS NOT NULL) THEN
9494+
SELECT max(bls.blSampleId) INTO p_sampleId
9495+
FROM BLSample bls
9496+
INNER JOIN Container c on c.containerId = bls.containerId
9497+
WHERE c.barcode = p_actualContainerBarcode AND bls.location = p_actualSampleSlotInContainer;
9498+
END IF;
94989499

9499-
INSERT INTO DataCollectionGroup (datacollectionGroupId, sessionId, blsampleId, experimenttype, starttime, endtime,
9500+
SELECT experimentTypeId INTO row_experiment_id FROM ExperimentType WHERE name = p_experimenttype;
9501+
9502+
INSERT INTO DataCollectionGroup (datacollectionGroupId, sessionId, blsampleId, experimenttype, experimentTypeId, starttime, endtime,
95009503
crystalClass, detectorMode, actualSampleBarcode, actualSampleSlotInContainer, actualContainerBarcode, actualContainerSlotInSC,
95019504
comments, xtalSnapshotFullPath, scanParameters)
9502-
VALUES (p_id, p_sessionId, p_sampleId, p_experimenttype, p_starttime, p_endtime, p_crystalClass, p_detectorMode,
9505+
VALUES (p_id, p_sessionId, p_sampleId, p_experimenttype, row_experiment_id, p_starttime, p_endtime, p_crystalClass, p_detectorMode,
95039506
p_actualSampleBarcode, p_actualSampleSlotInContainer, p_actualContainerBarcode, p_actualContainerSlotInSC,
95049507
p_comments, p_xtalSnapshotFullPath, p_scanParameters)
95059508
ON DUPLICATE KEY UPDATE
95069509
sessionId = IFNULL(p_sessionId, sessionId),
95079510
blsampleId = IFNULL(p_sampleId, blsampleId),
95089511
experimenttype = IFNULL(p_experimenttype, experimenttype),
9512+
experimentTypeId = row_experiment_id,
95099513
starttime = IFNULL(p_starttime, starttime),
95109514
endtime = IFNULL(p_endtime, endtime),
95119515
crystalClass = IFNULL(p_crystalClass, crystalClass),
@@ -9518,13 +9522,13 @@ BEGIN
95189522
xtalSnapshotFullPath = IFNULL(p_xtalSnapshotFullPath, xtalSnapshotFullPath),
95199523
scanParameters = IFNULL (p_scanParameters, scanParameters);
95209524

9521-
IF p_id IS NULL THEN
9522-
SET p_id = LAST_INSERT_ID();
9525+
IF p_id IS NULL THEN
9526+
SET p_id = LAST_INSERT_ID();
95239527
END IF;
9524-
ELSE
9525-
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.';
9526-
END IF;
9527-
END ;;
9528+
ELSE
9529+
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.';
9530+
END IF;
9531+
END ;;
95289532
DELIMITER ;
95299533
/*!50003 SET sql_mode = @saved_sql_mode */ ;
95309534
/*!50003 SET character_set_client = @saved_cs_client */ ;

0 commit comments

Comments
 (0)