Sequence in the rules - Mailing list pgsql-sql

From Luis Sousa
Subject Sequence in the rules
Date
Msg-id 3C70EF18.4090904@ualg.pt
Whole thread Raw
Responses Re: Sequence in the rules  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-sql
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



pgsql-sql by date:

Previous
From: "Christopher Kings-Lynne"
Date:
Subject: Function to split pg_trigger.tgargs
Next
From:
Date:
Subject: Need to change the size of a field