Ignore:
Timestamp:
12/01/15 09:25:48 (9 years ago)
Author:
nanardon
Message:

Add filter based aliases (dynamics)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/LATMOS-Accounts/bin/la-sql-upgrade.in

    r1489 r1490  
    799799                USING btree 
    800800                  (lastday NULLS LAST); 
    801         ], 
    802     }, 
     801            }, 
     802        ], 
     803    }, 
     804    { 
     805        ver => 16, 
     806        sql => [ 
     807            q{ 
     808            ALTER TABLE aliases 
     809              ADD CONSTRAINT aliases_ikey_uniq UNIQUE(ikey); 
     810            CREATE OR REPLACE FUNCTION aliases_attr_update_ref() 
     811            RETURNS trigger AS 
     812            $BODY$begin 
     813 
     814            IF (TG_OP != 'INSERT') then 
     815            update "aliases" set date = now() where "aliases".ikey = old.okey; 
     816            end if; 
     817            IF (TG_OP != 'DELETE') then 
     818            update "aliases"  set date = now() where "aliases".ikey = new.okey; 
     819            end if; 
     820 
     821            IF (TG_OP = 'DELETE') then 
     822            return old; 
     823            ELSE 
     824            return new; 
     825            END IF; 
     826 
     827            END;$BODY$ 
     828            LANGUAGE plpgsql VOLATILE 
     829            COST 100; 
     830            }, 
     831            q{ 
     832            CREATE TABLE aliases_attributes_base 
     833            ( 
     834            CONSTRAINT aliases_attributes_base_pkey PRIMARY KEY (attr_key), 
     835            CONSTRAINT aliases_fkey FOREIGN KEY (okey) 
     836            REFERENCES aliases (ikey) MATCH SIMPLE 
     837            ON UPDATE CASCADE ON DELETE CASCADE 
     838            ) 
     839            INHERITS (attributes); 
     840            CREATE INDEX aliases_attributes_base_attr_fkey 
     841            ON aliases_attributes_base 
     842            USING btree 
     843            (attr); 
     844            CREATE INDEX aliases_attr_value_idx 
     845            ON aliases_attributes_base 
     846            USING btree 
     847            (value); 
     848            CREATE TRIGGER aliases_attr_update 
     849            AFTER INSERT OR UPDATE OR DELETE 
     850            ON aliases_attributes_base 
     851            FOR EACH ROW 
     852            EXECUTE PROCEDURE aliases_attr_update_ref(); 
     853            }, 
     854            q{ 
     855            CREATE OR REPLACE VIEW aliases_attributes AS  
     856            SELECT "user".name AS value, 
     857            'user'::text AS attr, 
     858            aliases.rev AS attr_key, 
     859            aliases.ikey AS okey 
     860            FROM aliases 
     861            JOIN "user" ON aliases.name = "user".name OR aliases.forward = ARRAY["user".name] 
     862            union all 
     863               select value, attr, attr_key, okey from aliases_attributes_base 
     864            UNION ALL 
     865                SELECT "aliases".name AS value, 
     866                'name'::text AS attr, 
     867                "aliases".rev AS attr_key, 
     868                "aliases".ikey AS okey 
     869                FROM "aliases"; 
     870 
     871           CREATE OR REPLACE RULE aliases_attributes_insert AS 
     872           ON INSERT TO aliases_attributes DO INSTEAD  INSERT INTO aliases_attributes_base (value, attr, okey) 
     873           VALUES (new.value, new.attr, new.okey); 
     874 
     875           CREATE OR REPLACE RULE aliases_attributes_update AS 
     876           ON UPDATE TO aliases_attributes DO INSTEAD  UPDATE aliases_attributes_base SET value = new.value, attr = new.attr, okey = new.okey 
     877           WHERE aliases_attributes_base.attr_key = old.attr_key AND aliases_attributes_base.attr = old.attr; 
     878 
     879           CREATE OR REPLACE RULE aliases_atttributes_delete AS 
     880           ON DELETE TO aliases_attributes DO INSTEAD  DELETE FROM aliases_attributes_base 
     881           WHERE aliases_attributes_base.attr_key = old.attr_key AND aliases_attributes_base.attr = old.attr; 
     882            } 
     883 
     884        ], 
     885    } 
    803886); 
    804887 
Note: See TracChangeset for help on using the changeset viewer.