74 lines
2.0 KiB
MySQL
74 lines
2.0 KiB
MySQL
|
ALTER TABLE `vn2008`.`department`
|
||
|
ADD COLUMN `parentFk` INT UNSIGNED NULL AFTER `sons`,
|
||
|
ADD COLUMN `path` VARCHAR(255) NULL AFTER `parentFk`,
|
||
|
CHANGE COLUMN `sons` `sons` DECIMAL(10,0) NOT NULL DEFAULT '0' ;
|
||
|
|
||
|
USE `vn`;
|
||
|
CREATE
|
||
|
OR REPLACE ALGORITHM = UNDEFINED
|
||
|
DEFINER = `root`@`%`
|
||
|
SQL SECURITY DEFINER
|
||
|
VIEW `department` AS
|
||
|
SELECT
|
||
|
`b`.`department_id` AS `id`,
|
||
|
`b`.`name` AS `name`,
|
||
|
`b`.`production` AS `isProduction`,
|
||
|
`b`.`parentFk` AS `parentFk`,
|
||
|
`b`.`path` AS `path`,
|
||
|
`b`.`lft` AS `lft`,
|
||
|
`b`.`rgt` AS `rgt`,
|
||
|
`b`.`isSelected` AS `isSelected`,
|
||
|
`b`.`depth` AS `depth`,
|
||
|
`b`.`sons` AS `sons`
|
||
|
FROM
|
||
|
`vn2008`.`department` `b`;
|
||
|
|
||
|
DROP TRIGGER IF EXISTS `vn2008`.`department_AFTER_DELETE`;
|
||
|
|
||
|
DELIMITER $$
|
||
|
USE `vn2008`$$
|
||
|
CREATE DEFINER = CURRENT_USER TRIGGER `vn2008`.`department_AFTER_DELETE`
|
||
|
AFTER DELETE ON `department` FOR EACH ROW
|
||
|
BEGIN
|
||
|
UPDATE vn.department_recalc SET isChanged = TRUE;
|
||
|
END$$
|
||
|
DELIMITER ;
|
||
|
|
||
|
DROP TRIGGER IF EXISTS `vn2008`.`department_BEFORE_INSERT`;
|
||
|
|
||
|
DELIMITER $$
|
||
|
USE `vn2008`$$
|
||
|
CREATE DEFINER = CURRENT_USER TRIGGER `vn2008`.`department_BEFORE_INSERT`
|
||
|
BEFORE INSERT ON `department` FOR EACH ROW
|
||
|
BEGIN
|
||
|
UPDATE vn.department_recalc SET isChanged = TRUE;
|
||
|
END$$
|
||
|
DELIMITER ;
|
||
|
|
||
|
DROP TRIGGER IF EXISTS `vn2008`.`department_AFTER_UPDATE`;
|
||
|
|
||
|
DELIMITER $$
|
||
|
USE `vn2008`$$
|
||
|
CREATE DEFINER = CURRENT_USER TRIGGER `vn2008`.`department_AFTER_UPDATE`
|
||
|
AFTER UPDATE ON `department` FOR EACH ROW
|
||
|
BEGIN
|
||
|
IF !(OLD.parentFk <=> NEW.parentFk) THEN
|
||
|
UPDATE vn.department_recalc SET isChanged = TRUE;
|
||
|
END IF;
|
||
|
END$$
|
||
|
DELIMITER ;
|
||
|
|
||
|
CREATE TABLE `vn`.`department_recalc` (
|
||
|
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||
|
`isChanged` TINYINT(4) NOT NULL,
|
||
|
PRIMARY KEY (`id`));
|
||
|
|
||
|
INSERT INTO `vn`.`department_recalc` (`id`, `isChanged`) VALUES ('1', '0');
|
||
|
|
||
|
|
||
|
ALTER TABLE `vn2008`.`department`
|
||
|
CHANGE COLUMN `lft` `lft` INT(11) NULL ,
|
||
|
CHANGE COLUMN `rgt` `rgt` INT(11) NULL ;
|
||
|
|
||
|
UPDATE vn.department SET lft = NULL, rgt = NULL;
|