Hi everybody
I'm running on Postgresql 7.1.3.
I have four rules for update for a view, whose definition are:
-- UPDATE0
CREATE RULE "infoturno_r_update0" AS ON UPDATE TO "infoturno" DO INSTEAD NOTHING;
-- UPDATE1
CREATE RULE "infoturno_r_update1" AS ON UPDATE TO "infoturno" WHERE NEW.cod_disciplina != OLD.cod_disciplina OR
NEW.var!= OLD.var OR NEW.tipo != OLD.tipo OR NEW.turno != OLD.turno DO INSTEAD ( SELECT
infoturno_f_update1(OLD.id_e,NEW.cod_disciplina,NEW.var,NEW.tipo,NEW.turno,OLD.grau,OLD.curso,OLD.ramo,OLD."anoCurricular",OLD."anoLectivo")
AS ok; );
-- UPDATE2
CREATE RULE "infoturno_r_update2" AS ON UPDATE TO "infoturno" WHERE NEW.grau != OLD.grau OR NEW.curso !=
OLD.curso OR NEW.ramo != OLD.ramo OR NEW."anoCurricular" != OLD."anoCurricular" DO INSTEAD ( SELECT
infoturno_f_update2(OLD.id_e,OLD.grau,OLD.curso,OLD.ramo,OLD."anoCurricular",NEW.grau,NEW.curso,NEW.ramo,NEW."anoCurricular",OLD."anoLectivo")
AS ok; );
-- UPDATE3
CREATE RULE "infoturno_r_update3" AS ON UPDATE TO "infoturno" WHERE (NEW.cod_disciplina != OLD.cod_disciplina OR
NEW.var!= OLD.var OR NEW.tipo != OLD.tipo OR NEW.turno != OLD.turno) AND (NEW.grau != OLD.grau OR
NEW.curso!= OLD.curso OR NEW.ramo != OLD.ramo OR NEW."anoCurricular" != OLD."anoCurricular") DO INSTEAD (
SELECTtest1() AS ok1; SELECT test2() AS ok2; SELECT
infoturno_f_update1(OLD.id_e,NEW.cod_disciplina,NEW.var,NEW.tipo,NEW.turno,OLD.grau,OLD.curso,OLD.ramo,OLD."anoCurricular",OLD."anoLectivo")
AS ok; SELECT
infoturno_f_update2(OLD.id_e,OLD.grau,OLD.curso,OLD.ramo,OLD."anoCurricular",NEW.grau,NEW.curso,NEW.ramo,NEW."anoCurricular",OLD."anoLectivo")
AS ok; );
The rule infoturno_r_update3 must run both functions when that condition
happens, but the problem is that the first rule that is runned is
infoturno_r_update1. When it passes in the rule infoturno_r_update3, the
condition isn't already true, because the values were changed inside the
rule that runned.
How can I define that the first rule to be checked is
infoturno_r_update3 and then it tries the others ?
Thanks in advance.
PS: I hope it's clear the definition that I use for the rules.
Luis Sousa