SET @has_exams_subject := ( SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'exams' AND COLUMN_NAME = 'subject_id' );--> statement-breakpoint SET @sql := IF(@has_exams_subject = 0, 'ALTER TABLE `exams` ADD `subject_id` varchar(128);', 'SELECT 1');--> statement-breakpoint PREPARE stmt FROM @sql;--> statement-breakpoint EXECUTE stmt;--> statement-breakpoint DEALLOCATE PREPARE stmt;--> statement-breakpoint SET @has_exams_grade := ( SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'exams' AND COLUMN_NAME = 'grade_id' );--> statement-breakpoint SET @sql := IF(@has_exams_grade = 0, 'ALTER TABLE `exams` ADD `grade_id` varchar(128);', 'SELECT 1');--> statement-breakpoint PREPARE stmt FROM @sql;--> statement-breakpoint EXECUTE stmt;--> statement-breakpoint DEALLOCATE PREPARE stmt;--> statement-breakpoint SET @has_kp_anchor := ( SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'knowledge_points' AND COLUMN_NAME = 'anchor_text' );--> statement-breakpoint SET @sql := IF(@has_kp_anchor = 0, 'ALTER TABLE `knowledge_points` ADD `anchor_text` varchar(255);', 'SELECT 1');--> statement-breakpoint PREPARE stmt FROM @sql;--> statement-breakpoint EXECUTE stmt;--> statement-breakpoint DEALLOCATE PREPARE stmt;--> statement-breakpoint SET @has_exams_subject_fk := ( SELECT COUNT(*) FROM information_schema.TABLE_CONSTRAINTS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'exams' AND CONSTRAINT_NAME = 'exams_subject_id_subjects_id_fk' AND CONSTRAINT_TYPE = 'FOREIGN KEY' );--> statement-breakpoint SET @sql := IF(@has_exams_subject_fk = 0, 'ALTER TABLE `exams` ADD CONSTRAINT `exams_subject_id_subjects_id_fk` FOREIGN KEY (`subject_id`) REFERENCES `subjects`(`id`) ON DELETE no action ON UPDATE no action;', 'SELECT 1');--> statement-breakpoint PREPARE stmt FROM @sql;--> statement-breakpoint EXECUTE stmt;--> statement-breakpoint DEALLOCATE PREPARE stmt;--> statement-breakpoint SET @has_exams_grade_fk := ( SELECT COUNT(*) FROM information_schema.TABLE_CONSTRAINTS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'exams' AND CONSTRAINT_NAME = 'exams_grade_id_grades_id_fk' AND CONSTRAINT_TYPE = 'FOREIGN KEY' );--> statement-breakpoint SET @sql := IF(@has_exams_grade_fk = 0, 'ALTER TABLE `exams` ADD CONSTRAINT `exams_grade_id_grades_id_fk` FOREIGN KEY (`grade_id`) REFERENCES `grades`(`id`) ON DELETE no action ON UPDATE no action;', 'SELECT 1');--> statement-breakpoint PREPARE stmt FROM @sql;--> statement-breakpoint EXECUTE stmt;--> statement-breakpoint DEALLOCATE PREPARE stmt;--> statement-breakpoint SET @has_exams_subject_idx := ( SELECT COUNT(*) FROM information_schema.STATISTICS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'exams' AND INDEX_NAME = 'exams_subject_idx' );--> statement-breakpoint SET @sql := IF(@has_exams_subject_idx = 0, 'CREATE INDEX `exams_subject_idx` ON `exams` (`subject_id`);', 'SELECT 1');--> statement-breakpoint PREPARE stmt FROM @sql;--> statement-breakpoint EXECUTE stmt;--> statement-breakpoint DEALLOCATE PREPARE stmt;--> statement-breakpoint SET @has_exams_grade_idx := ( SELECT COUNT(*) FROM information_schema.STATISTICS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'exams' AND INDEX_NAME = 'exams_grade_idx' );--> statement-breakpoint SET @sql := IF(@has_exams_grade_idx = 0, 'CREATE INDEX `exams_grade_idx` ON `exams` (`grade_id`);', 'SELECT 1');--> statement-breakpoint PREPARE stmt FROM @sql;--> statement-breakpoint EXECUTE stmt;--> statement-breakpoint DEALLOCATE PREPARE stmt;--> statement-breakpoint INSERT IGNORE INTO `roles` (`id`, `name`, `created_at`, `updated_at`) SELECT UUID(), LOWER(TRIM(`role`)), NOW(), NOW() FROM `users` WHERE `role` IS NOT NULL AND TRIM(`role`) <> '';--> statement-breakpoint INSERT IGNORE INTO `users_to_roles` (`user_id`, `role_id`) SELECT `users`.`id`, `roles`.`id` FROM `users` INNER JOIN `roles` ON `roles`.`name` = LOWER(TRIM(`users`.`role`)) WHERE `users`.`role` IS NOT NULL AND TRIM(`users`.`role`) <> '';--> statement-breakpoint ALTER TABLE `users` DROP COLUMN `role`;