-- Script de création de la base -- -- $Id: createdb.sql,v 1.2 2005/05/20 08:44:31 seb Exp $ -- ======================================================================== -- Table contenant les scores -- ======================================================================== CREATE TABLE blamd ( login VARCHAR(32) NOT NULL UNIQUE, create TIMESTAMP NOT NULL DEFAULT now(), maj TIMESTAMP NOT NULL DEFAULT now() CHECK(create<=maj), ua VARCHAR(128) NOT NULL, count INTEGER NOT NULL DEFAULT 0 CHECK(count>=0), score INTEGER NOT NULL DEFAULT 0 ); -- ======================================================================== -- Trigger mettant à jour la date en cas de modification -- ======================================================================== CREATE OR REPLACE FUNCTION blamd_majfunc() RETURNS OPAQUE AS ' BEGIN NEW.maj := ''now()''; RETURN NEW; END; ' LANGUAGE 'plpgsql'; CREATE TRIGGER blamd_majtrig BEFORE UPDATE ON blamd FOR EACH ROW EXECUTE PROCEDURE blamd_majfunc(); -- ======================================================================== -- Fonction de mise à jour du score d'une personne -- 1: varchar: Login de la personne -- 2: integer: Score à ajouter à la personne -- 3: varchar: User agent utilisé par la personne -- ======================================================================== CREATE OR REPLACE FUNCTION blamd_update(varchar,integer,varchar) RETURNS INTEGER AS ' BEGIN IF NOT EXISTS( SELECT 1 FROM blamd WHERE login=$1 ) THEN INSERT INTO blamd (login,ua) VALUES ($1,$2); END IF; UPDATE blamd SET count=count+1, score=score+$2, ua=$3 WHERE login=$1; RETURN 1; END; ' LANGUAGE 'plpgsql'; -- ======================================================================== GRANT select,insert,update ON blamd TO web; GRANT select,insert,update ON blamd TO "www-data";