89 lines
4.1 KiB
SQL
89 lines
4.1 KiB
SQL
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`;
|