Sequence in the rules

From: Luis Sousa <llsousa(at)ualg(dot)pt>
To: pgsql-sql <pgsql-sql(at)postgresql(dot)org>
Subject: Sequence in the rules
Date: 2002-02-18 12:10:00
Message-ID: 3C70EF18.4090904@ualg.pt
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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 (
SELECT test1() 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

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message Rod Taylor 2002-02-18 12:40:16 Re: Function to split pg_trigger.tgargs
Previous Message D'laila Pereira 2002-02-18 07:51:32 all tables in a DB\?