ALTER TABLE hems_operations
    ADD COLUMN IF NOT EXISTS mission_id BINARY(16) NULL;

SET @fk_exists := (
    SELECT COUNT(1)
    FROM information_schema.table_constraints
    WHERE table_schema = DATABASE()
      AND table_name = 'hems_operations'
      AND constraint_type = 'FOREIGN KEY'
      AND constraint_name = 'fk_hems_operations_mission'
);
SET @fk_sql := IF(
    @fk_exists = 0,
    'ALTER TABLE hems_operations ADD CONSTRAINT fk_hems_operations_mission FOREIGN KEY (mission_id) REFERENCES missions(id) ON UPDATE CASCADE ON DELETE SET NULL',
    'SELECT 1'
);
PREPARE stmt_fk FROM @fk_sql;
EXECUTE stmt_fk;
DEALLOCATE PREPARE stmt_fk;

SET @idx_exists := (
    SELECT COUNT(1)
    FROM information_schema.statistics
    WHERE table_schema = DATABASE()
      AND table_name = 'hems_operations'
      AND index_name = 'uidx_hems_operations_mission_id'
);
SET @idx_sql := IF(
    @idx_exists = 0,
    'ALTER TABLE hems_operations ADD UNIQUE INDEX uidx_hems_operations_mission_id (mission_id)',
    'SELECT 1'
);
PREPARE stmt_idx FROM @idx_sql;
EXECUTE stmt_idx;
DEALLOCATE PREPARE stmt_idx;
