From f499311a163d979ad616dd46c9b825da0b109d17 Mon Sep 17 00:00:00 2001 From: alexandre Date: Wed, 4 Jan 2023 08:36:55 +0100 Subject: [PATCH] refs #4951 changed triggers and added checkLength --- db/changes/230201/00-triggersXDiario.sql | 83 ++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 db/changes/230201/00-triggersXDiario.sql diff --git a/db/changes/230201/00-triggersXDiario.sql b/db/changes/230201/00-triggersXDiario.sql new file mode 100644 index 000000000..3efed0f76 --- /dev/null +++ b/db/changes/230201/00-triggersXDiario.sql @@ -0,0 +1,83 @@ +DROP TRIGGER IF EXISTS vn.XDiario_beforeUpdate; +USE vn; + +DELIMITER $$ +$$ +CREATE DEFINER=`root`@`localhost` TRIGGER `vn`.`XDiario_beforeUpdate` + BEFORE UPDATE ON `XDiario` + FOR EACH ROW +BEGIN + IF NOT NEW.SUBCTA <=> OLD.SUBCTA THEN + IF NOT util.checkLength(NEW.SUBCTA, 10) THEN + CALL util.throw('INVALID_LENGTH'); + END IF; + END IF; + IF NOT NEW.CONTRA <=> OLD.CONTRA THEN + IF NOT util.checkLength(NEW.CONTRA, 10) THEN + CALL util.throw('INVALID_LENGTH'); + END IF; + END IF; + IF NOT NEW.FECHA <=> OLD.FECHA THEN + CALL XDiario_checkDate(NEW.FECHA); + END IF; + IF NOT NEW.FECHA_EX <=> OLD.FECHA_EX THEN + CALL XDiario_checkDate(NEW.FECHA_EX); + END IF; + IF NOT NEW.FECHA_OP <=> OLD.FECHA_OP THEN + CALL XDiario_checkDate(NEW.FECHA_OP); + END IF; + IF NOT NEW.FECHA_RT <=> OLD.FECHA_RT THEN + CALL XDiario_checkDate(NEW.FECHA_RT); + END IF; + IF NOT NEW.FECREGCON <=> OLD.FECREGCON THEN + CALL XDiario_checkDate(NEW.FECREGCON); + END IF; +END$$ +DELIMITER ; + + +DROP TRIGGER IF EXISTS vn.XDiario_beforeInsert; +USE vn; + +DELIMITER $$ +$$ +CREATE DEFINER=`root`@`localhost` TRIGGER `vn`.`XDiario_beforeInsert` + BEFORE INSERT ON `XDiario` + FOR EACH ROW +BEGIN + IF NOT util.checkLength(NEW.SUBCTA, 10) THEN + CALL util.throw('INVALID_LENGTH'); + END IF; + IF NOT util.checkLength(NEW.CONTRA, 10) THEN + CALL util.throw('INVALID_LENGTH'); + END IF; + CALL XDiario_checkDate(NEW.FECHA); + CALL XDiario_checkDate(NEW.FECHA_EX); + CALL XDiario_checkDate(NEW.FECHA_OP); + CALL XDiario_checkDate(NEW.FECHA_RT); + CALL XDiario_checkDate(NEW.FECREGCON); +END$$ +DELIMITER ; + + +DROP FUNCTION IF EXISTS `util`.`checkLength`; + +DELIMITER $$ +$$ +CREATE DEFINER=`root`@`localhost` FUNCTION `util`.`checkLength`(vString VARCHAR(10), vLength INT(11)) RETURNS tinyint(1) + DETERMINISTIC +BEGIN +/** + * Comprueba la longitud de un string + * + * @param vString String a comprobar + * @param vLength Longitud que debe tener + * @return Devuelve TRUE/FALSE en caso de que tenga la longitud correcta o no + */ + IF LENGTH(vString) <=> vLength THEN + RETURN TRUE; + END IF; + RETURN FALSE; +END$$ +DELIMITER ; +