#Issue284 finally done

parent 55306082
...@@ -15,13 +15,6 @@ ALTER TABLE student MODIFY gender CHAR(1) DEFAULT NULL; ...@@ -15,13 +15,6 @@ ALTER TABLE student MODIFY gender CHAR(1) DEFAULT NULL;
ALTER TABLE student MODIFY country CHAR(2) DEFAULT NULL; ALTER TABLE student MODIFY country CHAR(2) DEFAULT NULL;
ALTER TABLE student MODIFY lang VARCHAR(5) DEFAULT NULL; ALTER TABLE student MODIFY lang VARCHAR(5) DEFAULT NULL;
CREATE TABLE IF NOT EXISTS stu_off (
id_stu int(11) NOT NULL,
id_off int(11) DEFAULT NULL,
CONSTRAINT fk_stu_off FOREIGN KEY (id_stu) REFERENCES student (id),
CONSTRAINT fk_off_stu FOREIGN KEY (id_off) REFERENCES supervisor (id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE IF NOT EXISTS sup_off ( CREATE TABLE IF NOT EXISTS sup_off (
id_sup int(11) NOT NULL, id_sup int(11) NOT NULL,
id_off int(11) DEFAULT NULL, id_off int(11) DEFAULT NULL,
...@@ -38,6 +31,10 @@ UPDATE supervisor ...@@ -38,6 +31,10 @@ UPDATE supervisor
SET role = 'therapist' SET role = 'therapist'
WHERE id NOT IN (SELECT admin FROM office WHERE admin IS NOT NULL); WHERE id NOT IN (SELECT admin FROM office WHERE admin IS NOT NULL);
UPDATE supervisor
SET role = 'tutor'
WHERE id_off IS NULL;
DELIMITER $$ DELIMITER $$
DROP PROCEDURE IF EXISTS supervisor_adapt $$ DROP PROCEDURE IF EXISTS supervisor_adapt $$
CREATE PROCEDURE supervisor_adapt() CREATE PROCEDURE supervisor_adapt()
...@@ -75,8 +72,8 @@ BEGIN ...@@ -75,8 +72,8 @@ BEGIN
DELIMITER ; DELIMITER ;
CALL supervisor_adapt(); CALL supervisor_adapt();
INSERT INTO stu_off (id_stu, id_off) INSERT IGNORE INTO stu_sup (id_stu,id_sup)
SELECT id, id_off SELECT id,id_off
FROM student; FROM student;
INSERT INTO sup_off (id_sup, id_off) INSERT INTO sup_off (id_sup, id_off)
...@@ -90,4 +87,3 @@ ALTER TABLE supervisor DROP FOREIGN KEY supervisor_ibfk_1; ...@@ -90,4 +87,3 @@ ALTER TABLE supervisor DROP FOREIGN KEY supervisor_ibfk_1;
ALTER TABLE supervisor DROP COLUMN id_off; ALTER TABLE supervisor DROP COLUMN id_off;
DROP TABLE office; DROP TABLE office;
# Changes # Changes
#Database changes #Database changes
#Para actualizar instalaciones antiguas ejecutar en vagrant/roles/database/files
SET foreign_key_checks = 0; # mysql -u root -p pictodb < upgrade.sql
#Add role column
ALTER TABLE supervisor ADD role enum('tutor','therapist','office','admin') NOT NULL;
#Add nullable to table supervisor
ALTER TABLE supervisor MODIFY name VARCHAR(40) DEFAULT NULL;
ALTER TABLE supervisor MODIFY surname VARCHAR(60) DEFAULT NULL;
ALTER TABLE supervisor MODIFY gender CHAR(1) DEFAULT NULL;
ALTER TABLE supervisor MODIFY postal_code CHAR(10) DEFAULT NULL;
ALTER TABLE supervisor MODIFY lang VARCHAR(5) DEFAULT NULL;
#Add nullable to table student
ALTER TABLE student MODIFY name VARCHAR(40) DEFAULT NULL;
ALTER TABLE student MODIFY surname VARCHAR(60) DEFAULT NULL;
ALTER TABLE student MODIFY birthdate DATE DEFAULT NULL;
ALTER TABLE student MODIFY gender CHAR(1) DEFAULT NULL;
ALTER TABLE student MODIFY country CHAR(2) DEFAULT NULL;
ALTER TABLE student MODIFY lang VARCHAR(5) DEFAULT NULL;
#Create the tables
CREATE TABLE IF NOT EXISTS stu_off (
id_stu int(11) NOT NULL,
id_off int(11) DEFAULT NULL,
CONSTRAINT fk_stu_off FOREIGN KEY (id_stu) REFERENCES student (id),
CONSTRAINT fk_off_stu FOREIGN KEY (id_off) REFERENCES supervisor (id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE IF NOT EXISTS sup_off (
id_sup int(11) NOT NULL,
id_off int(11) DEFAULT NULL,
CONSTRAINT fk_sup_off FOREIGN KEY (id_sup) REFERENCES supervisor (id),
CONSTRAINT fk_off_sup FOREIGN KEY (id_off) REFERENCES supervisor (id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
#Update roles
UPDATE supervisor
SET role = 'office'
WHERE id IN (SELECT admin FROM office WHERE admin IS NOT NULL);
UPDATE supervisor
SET role = 'therapist'
WHERE id NOT IN (SELECT admin FROM office WHERE admin IS NOT NULL);
#Insert the offices into supervisor table and change the elements of the table stu_sup
DELIMITER $$
DROP PROCEDURE IF EXISTS supervisor_adapt $$
CREATE PROCEDURE supervisor_adapt()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE id_admin INT;
DECLARE id_off_actual INT;
DECLARE name_sup VARCHAR(80);
DECLARE office CURSOR FOR SELECT id,name,admin FROM pictodb.office;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN office;
read_loop: LOOP
FETCH office INTO id_off_actual,name_sup,id_admin;
IF done THEN
LEAVE read_loop;
END IF;
UPDATE supervisor SET name = name_sup, surname = '',role = 'office'
WHERE id = id_admin;
UPDATE student SET id_off = id_admin WHERE id_off = id_off_actual;
UPDATE supervisor SET id_off = id_admin WHERE id_off = id_off_actual;
END LOOP;
CLOSE office;
END $$
DELIMITER ;
CALL supervisor_adapt();
#Insert into stu_off
INSERT INTO stu_off (id_stu, id_off)
SELECT id, id_off
FROM student;
#Insert into sup_off
INSERT INTO sup_off (id_sup, id_off)
SELECT id, id_off
FROM supervisor;
#Delete id_off column from student and supervisor
ALTER TABLE student DROP FOREIGN KEY student_ibfk_1;
ALTER TABLE student DROP COLUMN id_off;
ALTER TABLE supervisor DROP FOREIGN KEY supervisor_ibfk_1;
ALTER TABLE supervisor DROP COLUMN id_off;
#Delete office table
DROP TABLE office;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment