mocha/sql/mysql/001-procedures/mocha_create_instance_of.sql
2023-10-31 11:47:27 -04:00

56 lines
1.6 KiB
SQL

DROP PROCEDURE IF EXISTS mocha_create_instance_of;
CREATE PROCEDURE mocha_create_instance_of
(
IN p_class_id INT,
IN p_global_identifier CHAR(32), -- the desired global identifier for the newly created instance
IN p_user_inst_id INT,
IN p_effective_date DATETIME
)
BEGIN
DECLARE next_inst_id INT;
DECLARE z_global_identifier CHAR(32);
DECLARE z_effective_date DATETIME;
SET next_inst_id=mocha_get_next_inst_id(p_class_id);
IF p_effective_date IS NULL THEN
SET z_effective_date = NOW();
ELSE
SET z_effective_date = p_effective_date;
END IF;
IF p_global_identifier IS NULL THEN
SET z_global_identifier=mocha_uuid_v4();
ELSE
SET z_global_identifier=p_global_identifier;
END IF;
-- insert record first
INSERT INTO mocha_instances
(class_id, inst_id, global_identifier)
VALUES
(p_class_id, next_inst_id, z_global_identifier);
-- then update relationship: Class.has Instance
CALL mocha_assign_relationship
(
mocha_get_instance_by_key(1, p_class_id),
mocha_get_instance_by_global_identifier('7EB41D3C2AE9488483A4E59441BCAEFB'),
mocha_get_instance_by_key(p_class_id, next_inst_id),
p_user_inst_id,
z_effective_date
);
-- then update relationship: Instance.for Class
CALL mocha_assign_relationship
(
mocha_get_instance_by_key(p_class_id, next_inst_id),
mocha_get_instance_by_global_identifier('494D5A6D04BE477B8763E3F57D0DD8C8'),
mocha_get_instance_by_key(1, p_class_id),
p_user_inst_id,
z_effective_date
);
END;