On Sat, 28 Sep 2002 19:20:43 -0400 (EDT), Bruce Momjian
<[EMAIL PROTECTED]> wrote:
>OK, that is a good example.  It would return the sum of the matching
>tags.  You are suggesting here that it would be better to take the
>result of the last matching tag command, right?

The examples were meant to support my previous suggestion of
explicitly marking the statement you want to be counted, something
like:

        CREATE VIEW twotables AS
        SELECT ... FROM table1 INNER JOIN table2 ON ... ;

        CREATE RULE twotables_insert AS     -- INSERT rule
        ON INSERT TO twotables 
        DO INSTEAD (
            COUNT INSERT INTO table1 VALUES (new.pk, new.col1);
            INSERT INTO table2 VALUES (new.pk, new.col2)
        ); 
        
        CREATE RULE twotables_update AS     -- UPDATE rule
        ON UPDATE TO twotables 
        DO INSTEAD (
            COUNT UPDATE table1 SET col1 = new.col1 WHERE pk = old.pk;
            UPDATE table2 SET col2 = new.col2 WHERE pk = old.pk
        ); 
        
        CREATE RULE twotables_delete AS     -- DELETE rule
        ON DELETE TO twotables 
        DO INSTEAD (
            COUNT DELETE FROM table1 WHERE pk = old.pk;
            DELETE FROM table2 WHERE pk = old.pk
        );

        CREATE VIEW visible AS
        SELECT ... FROM table3
        WHERE deleted = 0;

        CREATE RULE visible_delete AS     -- DELETE rule
        ON DELETE TO visible 
        DO INSTEAD 
            COUNT UPDATE table3
            SET deleted = 1
            WHERE pk = old.pk;

One argument against automatically "don't count non-INSTEAD rules and
count the last statement in INSTEAD rules": sql-createrule.html says:
| for view updates: there must be an unconditional INSTEAD rule [...]
| If you want to handle all the useful cases in conditional rules, you
| can; just add an unconditional DO INSTEAD NOTHING rule [...]
| Then make the conditional rules non-INSTEAD

        CREATE RULE v_update AS     -- UPDATE rule
        ON UPDATE TO v 
        DO INSTEAD NOTHING;

        CREATE RULE v_update2 AS     -- UPDATE rule
        ON UPDATE TO v WHERE <condition1>
        DO (
            COUNT ...
        ); 

        CREATE RULE v_update3 AS     -- UPDATE rule
        ON UPDATE TO v WHERE <condition2>
        DO (
            COUNT ...
        ); 

Servus
 Manfred

---------------------------(end of broadcast)---------------------------
TIP 3: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to [EMAIL PROTECTED] so that your
message can get through to the mailing list cleanly

Reply via email to