Ver Fonte

Merge branch 'V3_SQL' into V3

Iñigo Valentin há 9 anos atrás
pai
commit
651be68703
2 ficheiros alterados com 786 adições e 76 exclusões
  1. 360 0
      sql/V2toV3.sql
  2. 426 76
      sql/setup.sql

+ 360 - 0
sql/V2toV3.sql

@@ -0,0 +1,360 @@
+DROP TABLE IF EXISTS route;
+CREATE TABLE route (
+  id       INT           AUTO_INCREMENT  PRIMARY KEY,
+  name     VARCHAR(32),
+  mins     INT
+);
+
+DROP TABLE IF EXISTS route_point;
+CREATE TABLE route_point (
+  id       INT      AUTO_INCREMENT        PRIMARY KEY,
+  route    INT      NOT NULL              DEFAULT 0,
+  part     INT      NOT NULL,
+  place_o  INT      REFERENCES place.id,
+  lat_o    DOUBLE,
+  lon_o    DOUBLE,
+  place_d  INT      REFERENCES place.id,
+  lat_d    DOUBLE,
+  lon_d    DOUBLE,
+  mins     INT,
+  visible  BOOLEAN  NOT NULL              DEFAULT 1
+);
+
+ALTER TABLE sponsor ADD local BOOLEAN NOT NULL DEFAULT 1;
+UPDATE sponsor SET local = 0 WHERE address_es IS NULL OR address_es = ''; 
+
+ALTER TABLE activity_itinerary ADD route INT
+ALTER TABLE activity_itinerary MODIFY place INT;
+
+ALTER TABLE festival_day ADD people INT NOT NULL DEFAULT 0;
+ALTER TABLE festival_day ADD max_people INT NOT NULL DEFAULT 0;
+
+ALTER TABLE festival_event ADD sponsor INT;
+ALTER TABLE festival_event ADD route INT;
+ALTER TABLE festival_event MODIFY place INT;
+
+ALTER TABLE version MODIFY section VARCHAR(128);
+
+ALTER TABLE sync DROP action;
+ALTER TABLE sync DROP section;
+ALTER TABLE sync DROP version_from;
+ALTER TABLE sync DROP version_to;
+ALTER TABLE sync DROP format;
+ALTER TABLE sync ADD synced BOOLEAN NOT NULL DEFAULT 0;
+
+
+# Populate table version
+DELETE FROM version;
+INSERT INTO version VALUES ('activity', 1);
+INSERT INTO version VALUES ('activity_comment', 1);
+INSERT INTO version VALUES ('activity_image', 1);
+INSERT INTO version VALUES ('activity_itinerary', 1);
+INSERT INTO version VALUES ('activity_tag', 1);
+INSERT INTO version VALUES ('album', 1);
+INSERT INTO version VALUES ('festival', 1);
+INSERT INTO version VALUES ('festival_day', 1);
+INSERT INTO version VALUES ('festival_event_city', 1);
+INSERT INTO version VALUES ('festival_event_gm', 1);
+INSERT INTO version VALUES ('festival_event_image', 1);
+INSERT INTO version VALUES ('festival_offer', 1);
+INSERT INTO version VALUES ('people', 1);
+INSERT INTO version VALUES ('photo', 1);
+INSERT INTO version VALUES ('photo_album', 1);
+INSERT INTO version VALUES ('photo_comment', 1);
+INSERT INTO version VALUES ('place', 1);
+INSERT INTO version VALUES ('post', 1);
+INSERT INTO version VALUES ('post_comment', 1);
+INSERT INTO version VALUES ('post_image', 1);
+INSERT INTO version VALUES ('post_tag', 1);
+INSERT INTO version VALUES ('settings', 1);
+INSERT INTO version VALUES ('sponsor', 1);
+
+
+# Triggers to update versions
+DELIMITER //
+
+CREATE OR REPLACE PROCEDURE version_up (IN section_name VARCHAR(128))
+  BEGIN
+    UPDATE version SET version = version + 1 WHERE section = section_name;
+  END//
+
+CREATE OR REPLACE TRIGGER version_i_activity AFTER INSERT ON activity FOR EACH ROW
+  BEGIN
+    CALL version_up('activity');
+  END//
+CREATE OR REPLACE TRIGGER version_d_activity AFTER DELETE ON activity FOR EACH ROW
+  BEGIN
+    CALL version_up('activity');
+  END//
+CREATE OR REPLACE TRIGGER version_u_activity AFTER UPDATE ON activity FOR EACH ROW
+  BEGIN
+    CALL version_up('activity');
+  END//
+CREATE OR REPLACE TRIGGER version_i_activity_comment AFTER INSERT ON activity_comment FOR EACH ROW
+  BEGIN
+    CALL version_up('activity_comment');
+  END//
+CREATE OR REPLACE TRIGGER version_d_activity_comment AFTER DELETE ON activity_comment FOR EACH ROW
+  BEGIN
+    CALL version_up('activity_comment');
+  END//
+CREATE OR REPLACE TRIGGER version_u_activity_comment AFTER UPDATE ON activity_comment FOR EACH ROW
+  BEGIN
+    CALL version_up('activity_comment');
+  END//
+CREATE OR REPLACE TRIGGER version_i_activity_image AFTER INSERT ON activity_image FOR EACH ROW
+  BEGIN
+    CALL version_up('activity_image');
+  END//
+CREATE OR REPLACE TRIGGER version_d_activity_image AFTER DELETE ON activity_image FOR EACH ROW
+  BEGIN
+    CALL version_up('activity_image');
+  END//
+CREATE OR REPLACE TRIGGER version_u_activity_image AFTER UPDATE ON activity_image FOR EACH ROW
+  BEGIN
+    CALL version_up('activity_image');
+  END//
+CREATE OR REPLACE TRIGGER version_i_activity_itinerary AFTER INSERT ON activity_itinerary FOR EACH ROW
+  BEGIN
+    CALL version_up('activity_itinerary');
+  END//
+CREATE OR REPLACE TRIGGER version_d_activity_itinerary AFTER DELETE ON activity_itinerary FOR EACH ROW
+  BEGIN
+    CALL version_up('activity_itinerary');
+  END//
+CREATE OR REPLACE TRIGGER version_u_activity_itinerary AFTER UPDATE ON activity_itinerary FOR EACH ROW
+  BEGIN
+    CALL version_up('activity_itinerary');
+  END//
+CREATE OR REPLACE TRIGGER version_i_activity_tag AFTER INSERT ON activity_tag FOR EACH ROW
+  BEGIN
+    CALL version_up('activity_tag');
+  END//
+CREATE OR REPLACE TRIGGER version_d_activity_tag AFTER DELETE ON activity_tag FOR EACH ROW
+  BEGIN
+    CALL version_up('activity_tag');
+  END//
+CREATE OR REPLACE TRIGGER version_u_activity_tag AFTER UPDATE ON activity_tag FOR EACH ROW
+  BEGIN
+    CALL version_up('activity_tag');
+  END//
+CREATE OR REPLACE TRIGGER version_i_album AFTER INSERT ON album FOR EACH ROW
+  BEGIN
+    CALL version_up('album');
+  END//
+CREATE OR REPLACE TRIGGER version_d_album AFTER DELETE ON album FOR EACH ROW
+  BEGIN
+    CALL version_up('album');
+  END//
+CREATE OR REPLACE TRIGGER version_u_album AFTER UPDATE ON album FOR EACH ROW
+  BEGIN
+    CALL version_up('album');
+  END//
+CREATE OR REPLACE TRIGGER version_i_festival AFTER INSERT ON festival FOR EACH ROW
+  BEGIN
+    CALL version_up('festival');
+  END//
+CREATE OR REPLACE TRIGGER version_d_festival AFTER DELETE ON festival FOR EACH ROW
+  BEGIN
+    CALL version_up('festival');
+  END//
+CREATE OR REPLACE TRIGGER version_u_festival AFTER UPDATE ON festival FOR EACH ROW
+  BEGIN
+    CALL version_up('festival');
+  END//
+CREATE OR REPLACE TRIGGER version_i_festival_day AFTER INSERT ON festival_day FOR EACH ROW
+  BEGIN
+    CALL version_up('festival_day');
+  END//
+CREATE OR REPLACE TRIGGER version_d_festival_day AFTER DELETE ON festival_day FOR EACH ROW
+  BEGIN
+    CALL version_up('festival_day');
+  END//
+CREATE OR REPLACE TRIGGER version_u_festival_day AFTER UPDATE ON festival_day FOR EACH ROW
+  BEGIN
+    CALL version_up('festival_day');
+  END//
+CREATE OR REPLACE TRIGGER version_i_festival_event AFTER INSERT ON festival_event FOR EACH ROW
+  BEGIN
+    IF NEW.gm = 0 THEN
+      CALL version_up('festival_event_city');
+    ELSE
+      CALL version_up('festival_event_gm');
+    END IF;
+  END//
+CREATE OR REPLACE TRIGGER version_d_festival_event AFTER DELETE ON festival_event FOR EACH ROW
+  BEGIN
+    IF OLD.gm = 0 THEN
+      CALL version_up('festival_event_city');
+    ELSE
+      CALL version_up('festival_event_gm');
+    END IF;
+  END//
+CREATE OR REPLACE TRIGGER version_u_festival_event AFTER UPDATE ON festival_event FOR EACH ROW
+  BEGIN
+    IF NEW.gm = 0 THEN
+      CALL version_up('festival_event_city');
+    ELSE
+      CALL version_up('festival_event_gm');
+    END IF;
+  END//
+CREATE OR REPLACE TRIGGER version_i_festival_event_image AFTER INSERT ON festival_event_image FOR EACH ROW
+  BEGIN
+    CALL version_up('festival_event_image');
+  END//
+CREATE OR REPLACE TRIGGER version_d_festival_event_image AFTER DELETE ON festival_event_image FOR EACH ROW
+  BEGIN
+    CALL version_up('festival_event_image');
+  END//
+CREATE OR REPLACE TRIGGER version_u_festival_event_image AFTER UPDATE ON festival_event_image FOR EACH ROW
+  BEGIN
+    CALL version_up('festival_event_image');
+  END//
+CREATE OR REPLACE TRIGGER version_i_festival_offer AFTER INSERT ON festival_offer FOR EACH ROW
+  BEGIN
+    CALL version_up('festival_offer');
+  END//
+CREATE OR REPLACE TRIGGER version_d_festival_offer AFTER DELETE ON festival_offer FOR EACH ROW
+  BEGIN
+    CALL version_up('festival_offer');
+  END//
+CREATE OR REPLACE TRIGGER version_u_festival_offer AFTER UPDATE ON festival_offer FOR EACH ROW
+  BEGIN
+    CALL version_up('festival_offer');
+  END//
+CREATE OR REPLACE TRIGGER version_i_people AFTER INSERT ON people FOR EACH ROW
+  BEGIN
+    CALL version_up('people');
+  END//
+CREATE OR REPLACE TRIGGER version_d_people AFTER DELETE ON people FOR EACH ROW
+  BEGIN
+    CALL version_up('people');
+  END//
+CREATE OR REPLACE TRIGGER version_u_people AFTER UPDATE ON people FOR EACH ROW
+  BEGIN
+    CALL version_up('people');
+  END//
+CREATE OR REPLACE TRIGGER version_i_photo AFTER INSERT ON photo FOR EACH ROW
+  BEGIN
+    CALL version_up('photo');
+  END//
+CREATE OR REPLACE TRIGGER version_d_photo AFTER DELETE ON photo FOR EACH ROW
+  BEGIN
+    CALL version_up('photo');
+  END//
+CREATE OR REPLACE TRIGGER version_u_photo AFTER UPDATE ON photo FOR EACH ROW
+  BEGIN
+    CALL version_up('photo');
+  END//
+CREATE OR REPLACE TRIGGER version_i_photo_album AFTER INSERT ON photo_album FOR EACH ROW
+  BEGIN
+    CALL version_up('photo_album');
+  END//
+CREATE OR REPLACE TRIGGER version_d_photo_album AFTER DELETE ON photo_album FOR EACH ROW
+  BEGIN
+    CALL version_up('photo_album');
+  END//
+CREATE OR REPLACE TRIGGER version_u_photo_album AFTER UPDATE ON photo_album FOR EACH ROW
+  BEGIN
+    CALL version_up('photo_album');
+  END//
+CREATE OR REPLACE TRIGGER version_i_photo_comment AFTER INSERT ON photo_comment FOR EACH ROW
+  BEGIN
+    CALL version_up('photo_comment');
+  END//
+CREATE OR REPLACE TRIGGER version_d_photo_comment AFTER DELETE ON photo_comment FOR EACH ROW
+  BEGIN
+    CALL version_up('photo_comment');
+  END//
+CREATE OR REPLACE TRIGGER version_u_photo_comment AFTER UPDATE ON photo_comment FOR EACH ROW
+  BEGIN
+    CALL version_up('photo_comment');
+  END//
+CREATE OR REPLACE TRIGGER version_i_place AFTER INSERT ON place FOR EACH ROW
+  BEGIN
+    CALL version_up('place');
+  END//
+CREATE OR REPLACE TRIGGER version_d_place AFTER DELETE ON place FOR EACH ROW
+  BEGIN
+    CALL version_up('place');
+  END//
+CREATE OR REPLACE TRIGGER version_u_place AFTER UPDATE ON place FOR EACH ROW
+  BEGIN
+    CALL version_up('place');
+  END//
+CREATE OR REPLACE TRIGGER version_i_post AFTER INSERT ON post FOR EACH ROW
+  BEGIN
+    CALL version_up('post');
+  END//
+CREATE OR REPLACE TRIGGER version_d_post AFTER DELETE ON post FOR EACH ROW
+  BEGIN
+    CALL version_up('post');
+  END//
+CREATE OR REPLACE TRIGGER version_u_post AFTER UPDATE ON post FOR EACH ROW
+  BEGIN
+    CALL version_up('post');
+  END//
+CREATE OR REPLACE TRIGGER version_i_post_comment AFTER INSERT ON post_comment FOR EACH ROW
+  BEGIN
+    CALL version_up('post_comment');
+  END//
+CREATE OR REPLACE TRIGGER version_d_post_comment AFTER DELETE ON post_comment FOR EACH ROW
+  BEGIN
+    CALL version_up('post_comment');
+  END//
+CREATE OR REPLACE TRIGGER version_u_post_comment AFTER UPDATE ON post_comment FOR EACH ROW
+  BEGIN
+    CALL version_up('post_comment');
+  END//
+CREATE OR REPLACE TRIGGER version_i_post_image AFTER INSERT ON post_image FOR EACH ROW
+  BEGIN
+    CALL version_up('post_image');
+  END//
+CREATE OR REPLACE TRIGGER version_d_post_image AFTER DELETE ON post_image FOR EACH ROW
+  BEGIN
+    CALL version_up('post_image');
+  END//
+CREATE OR REPLACE TRIGGER version_u_post_image AFTER UPDATE ON post_image FOR EACH ROW
+  BEGIN
+    CALL version_up('post_image');
+  END//
+CREATE OR REPLACE TRIGGER version_i_post_tag AFTER INSERT ON post_tag FOR EACH ROW
+  BEGIN
+    CALL version_up('post_tag');
+  END//
+CREATE OR REPLACE TRIGGER version_d_post_tag AFTER DELETE ON post_tag FOR EACH ROW
+  BEGIN
+    CALL version_up('post_tag');
+  END//
+CREATE OR REPLACE TRIGGER version_u_post_tag AFTER UPDATE ON post_tag FOR EACH ROW
+  BEGIN
+    CALL version_up('post_tag');
+  END//
+CREATE OR REPLACE TRIGGER version_i_settings AFTER INSERT ON settings FOR EACH ROW
+  BEGIN
+    CALL version_up('settings');
+  END//
+CREATE OR REPLACE TRIGGER version_d_settings AFTER DELETE ON settings FOR EACH ROW
+  BEGIN
+    CALL version_up('settings');
+  END//
+CREATE OR REPLACE TRIGGER version_u_settings AFTER UPDATE ON settings FOR EACH ROW
+  BEGIN
+    CALL version_up('settings');
+  END//
+CREATE OR REPLACE TRIGGER version_i_sponsor AFTER INSERT ON sponsor FOR EACH ROW
+  BEGIN
+    CALL version_up('sponsor');
+  END//
+CREATE OR REPLACE TRIGGER version_d_sponsor AFTER DELETE ON sponsor FOR EACH ROW
+  BEGIN
+    CALL version_up('sponsor');
+  END//
+CREATE OR REPLACE TRIGGER version_u_sponsor AFTER UPDATE ON sponsor FOR EACH ROW
+  BEGIN
+    CALL version_up('sponsor');
+  END//
+
+
+DELIMITER ;
+

+ 426 - 76
sql/setup.sql

@@ -96,26 +96,49 @@ CREATE TABLE place (
     lon            DOUBLE
 );
 
+DROP TABLE IF EXISTS route;
+CREATE TABLE route (
+  id       INT           AUTO_INCREMENT PRIMARY KEY,
+  name     VARCHAR(32),
+  mins     INT
+);
+
+DROP TABLE IF EXISTS route_point;
+CREATE TABLE route_point (
+  id       INT      AUTO_INCREMENT        PRIMARY KEY,
+  route    INT      NOT NULL              DEFAULT 0,
+  part     INT      NOT NULL,
+  place_o  INT      REFERENCES place.id,
+  lat_o    DOUBLE,
+  lon_o    DOUBLE,
+  place_d  INT      REFERENCES place.id,
+  lat_d    DOUBLE,
+  lon_d    DOUBLE,
+  mins     INT,
+  visible  BOOLEAN  NOT NULL              DEFAULT 1
+);
+
 DROP TABLE IF EXISTS sponsor;
 CREATE TABLE sponsor (
-    id                INT                NOT NULL    AUTO_INCREMENT  PRIMARY KEY,
-    name_es            VARCHAR(100)    NOT NULL,
-    name_en            VARCHAR(100),
-    name_eu            VARCHAR(100),
-    text_es            VARCHAR(1000),
-    text_en            VARCHAR(1000),
-    text_eu            VARCHAR(1000),
-    image            VARCHAR(100),
-    address_es        VARCHAR(200),
-    address_en        VARCHAR(200),
-    address_eu        VARCHAR(200),
-    link            VARCHAR(300),
-    lat                DOUBLE,
-    lon                DOUBLE,
-    ammount            INT,
-    print             INT                DEFAULT 0,
-    print_static    INT                DEFAULT 0,
-    click            INT                DEFAULT 0
+  id            INT             NOT NULL  AUTO_INCREMENT  PRIMARY KEY,
+  name_es       VARCHAR(100)    NOT NULL,
+  name_en       VARCHAR(100),
+  name_eu       VARCHAR(100),
+  text_es       VARCHAR(1000),
+  text_en       VARCHAR(1000),
+  text_eu       VARCHAR(1000),
+  image         VARCHAR(100),
+  local         BOOLEAN         NOT NULL  DEFAULT 1,
+  address_es    VARCHAR(200),
+  address_en    VARCHAR(200),
+  address_eu    VARCHAR(200),
+  link          VARCHAR(300),
+  lat           DOUBLE,
+  lon           DOUBLE,
+  ammount       INT,
+  print         INT             NOT NULL  DEFAULT 0,
+  print_static  INT             NOT NULL  DEFAULT 0,
+  click         INT             NOT NULL  DEFAULT 0
 );
 
 DROP TABLE IF EXISTS stat_visit;
@@ -139,20 +162,16 @@ CREATE INDEX visit_dtime ON stat_view(visit, dtime);
 
 DROP TABLE IF EXISTS sync;
 CREATE TABLE sync (
-    id                INT            NOT NULL    AUTO_INCREMENT    PRIMARY KEY,
-    dtime            TIMESTAMP    NOT NULL    DEFAULT now(),
-    client            VARCHAR(64),
-    user            VARCHAR(64),
-    action            VARCHAR(12),
-    section            VARCHAR(32),
-    version_from    INT            NOT NULL    DEFAULT 0,
-    version_to        INT            NOT NULL    DEFAULT -1,
-    fg                INT            NOT NULL    DEFAULT 1,
-    format            VARCHAR(24),
-    error            VARCHAR(256),
-    ip                VARCHAR(128),
-    os                VARCHAR(128),
-    uagent            VARCHAR(256)
+  id      INT            NOT NULL  AUTO_INCREMENT  PRIMARY KEY,
+  dtime   TIMESTAMP      NOT NULL  DEFAULT now(),
+  client  VARCHAR(64),
+  user    VARCHAR(64),
+  fg      INT            NOT NULL  DEFAULT 0,
+  synced  BOOLEAN        NOT NULL  DEFAULT 0,
+  error   VARCHAR(256),
+  ip      VARCHAR(128),
+  os      VARCHAR(128),
+  uagent  VARCHAR(256)
 );
 
 DROP TABLE IF EXISTS stat_sync;
@@ -267,17 +286,18 @@ CREATE TABLE activity_image (
 
 DROP TABLE IF EXISTS activity_itinerary;
 CREATE TABLE activity_itinerary (
-    id                INT                AUTO_INCREMENT    PRIMARY KEY,
-    activity        INT                NOT NULL    REFERENCES activity.id,
-    name_es            VARCHAR(64)        NOT NULL,
-    name_en            VARCHAR(64),
-    name_eu            VARCHAR(64),
-    description_es    VARCHAR(1000),
-    description_en    VARCHAR(1000),
-    description_eu    VARCHAR(1000),
-    start            DATETIME        NOT NULL,
-    end                DATETIME,
-    place            INT                NOT NULL    REFERENCES place.id
+  id              INT             AUTO_INCREMENT        PRIMARY KEY,
+  activity        INT             NOT NULL              REFERENCES activity.id,
+  name_es         VARCHAR(64)     NOT NULL,
+  name_en         VARCHAR(64),
+  name_eu         VARCHAR(64),
+  description_es  VARCHAR(1000),
+  description_en  VARCHAR(1000),
+  description_eu  VARCHAR(1000),
+  start           DATETIME        NOT NULL,
+  end             DATETIME,
+  place           INT             REFERENCES place.id,
+  route           INT             REFERENCES route.id
 );
 
 DROP TABLE IF EXISTS activity_comment;
@@ -309,26 +329,28 @@ CREATE TABLE festival (
 
 DROP TABLE IF EXISTS festival_day;
 CREATE TABLE festival_day (
-    id        INT            AUTO_INCREMENT    PRIMARY KEY,
-    date    DATE        NOT NULL,
-    name_es    VARCHAR(60)    NOT NULL,
+    id         INT          AUTO_INCREMENT PRIMARY KEY,
+    date       DATE         NOT NULL,
+    name_es    VARCHAR(60)  NOT NULL,
     name_en    VARCHAR(60),
     name_eu    VARCHAR(60),
-    price    INT            NOT NULL
+    price      INT          NOT NULL,
+    people     INT          NOT NULL       DEFAULT 0,
+    max_people INT          NOT NULL       DEFAULT 0
 );
 
 DROP TABLE IF EXISTS festival_offer;
 CREATE TABLE festival_offer (
-    id                INT            AUTO_INCREMENT    PRIMARY KEY,
-    year            INT,
-    name_es            VARCHAR(60)    NOT NULL,
-    name_en            VARCHAR(60),
-    name_eu            VARCHAR(60),
-    description_es    VARCHAR(500),
-    description_en    VARCHAR(500),
-    description_eu    VARCHAR(500),
-    days            INT            NOT NULL,
-    price            INT            NOT NULL
+    id             INT           AUTO_INCREMENT PRIMARY KEY,
+    year           INT,
+    name_es        VARCHAR(60)   NOT NULL,
+    name_en        VARCHAR(60),
+    name_eu        VARCHAR(60),
+    description_es VARCHAR(500),
+    description_en VARCHAR(500),
+    description_eu VARCHAR(500),
+    days           INT           NOT NULL,
+    price          INT           NOT NULL
 );
 
 DROP TABLE IF EXISTS location;
@@ -369,18 +391,20 @@ CREATE TABLE people (
 
 DROP TABLE IF EXISTS festival_event;
 CREATE TABLE festival_event (
-    id                INT                AUTO_INCREMENT    PRIMARY KEY,
-    gm                BOOLEAN            DEFAULT 0,
-    title_es        VARCHAR(200)    NOT NULL,
-    title_en        VARCHAR(200),
-    title_eu        VARCHAR(200),
-    description_es    VARCHAR(5000),
-    description_en    VARCHAR(5000),
-    description_eu    VARCHAR(5000),
-    host            INT                REFERENCES people.id,
-    place            INT                REFERENCES place.id,
-    start            DATETIME,
-    end                DATETIME
+  id              INT             AUTO_INCREMENT         PRIMARY KEY,
+  gm              BOOLEAN         DEFAULT 0,
+  title_es        VARCHAR(200)    NOT NULL,
+  title_en        VARCHAR(200),
+  title_eu        VARCHAR(200),
+  description_es  VARCHAR(5000),
+  description_en  VARCHAR(5000),
+  description_eu  VARCHAR(5000),
+  host            INT             REFERENCES people.id,
+  sponsor         INT             REFERENCES people.id,
+  place           INT             REFERENCES place.id,
+  route           INT             REFERENCES route.id,
+  start           DATETIME        NOT NULL,
+  end             DATETIME
 );
 
 DROP TABLE IF EXISTS festival_event_image;
@@ -401,8 +425,8 @@ CREATE TABLE settings (
 
 DROP TABLE IF EXISTS version;
 CREATE TABLE version (
-    section        VARCHAR(12)    PRIMARY KEY,
-    version        INT            DEFAULT 1
+  section  VARCHAR(128)  PRIMARY KEY,
+  version  INT          NOT NULL      DEFAULT 1
 );
 
 DROP TABLE IF EXISTS member;
@@ -484,10 +508,336 @@ CREATE TABLE translation(
     applied            DATETIME
 );
 
-#Set up two users for database. File dbusers.sql contains:
-/*
-GRANT SELECT ON gm.* TO 'XXXX'@'XXXX' IDENTIFIED BY 'XXXX';
-GRANT SELECT, INSERT, DELETE, UPDATE ON gm.* TO 'XXXX'@'XXXX' IDENTIFIED BY 'XXXX';
-*/
+
+# Create views for festival_event
+CREATE OR REPLACE VIEW festival_event_gm AS SELECT id, title_es, title_en, title_eu, description_es, description_en, description_eu, host, sponsor, place, route, start, end FROM festival_event WHERE gm = 1;
+CREATE OR REPLACE VIEW festival_event_city AS SELECT id, title_es, title_en, title_eu, description_es, description_en, description_eu, host, sponsor, place, route, start, end FROM festival_event WHERE gm = 0;
+
+
+# Populate table version
+DELETE FROM version;
+INSERT INTO version VALUES ('activity', 1);
+INSERT INTO version VALUES ('activity_comment', 1);
+INSERT INTO version VALUES ('activity_image', 1);
+INSERT INTO version VALUES ('activity_itinerary', 1);
+INSERT INTO version VALUES ('activity_tag', 1);
+INSERT INTO version VALUES ('album', 1);
+INSERT INTO version VALUES ('festival', 1);
+INSERT INTO version VALUES ('festival_day', 1);
+INSERT INTO version VALUES ('festival_event_city', 1);
+INSERT INTO version VALUES ('festival_event_gm', 1);
+INSERT INTO version VALUES ('festival_event_image', 1);
+INSERT INTO version VALUES ('festival_offer', 1);
+INSERT INTO version VALUES ('people', 1);
+INSERT INTO version VALUES ('photo', 1);
+INSERT INTO version VALUES ('photo_album', 1);
+INSERT INTO version VALUES ('photo_comment', 1);
+INSERT INTO version VALUES ('place', 1);
+INSERT INTO version VALUES ('post', 1);
+INSERT INTO version VALUES ('post_comment', 1);
+INSERT INTO version VALUES ('post_image', 1);
+INSERT INTO version VALUES ('post_tag', 1);
+INSERT INTO version VALUES ('route', 1);
+INSERT INTO version VALUES ('route_point', 1);
+INSERT INTO version VALUES ('settings', 1);
+INSERT INTO version VALUES ('sponsor', 1);
+
+
+# Triggers to update versions
+DELIMITER //
+
+CREATE OR REPLACE PROCEDURE version_up (IN section_name VARCHAR(128))
+  BEGIN
+    UPDATE version SET version = version + 1 WHERE section = section_name;
+  END//
+
+CREATE OR REPLACE TRIGGER version_i_activity AFTER INSERT ON activity FOR EACH ROW
+  BEGIN
+    CALL version_up('activity');
+  END//
+CREATE OR REPLACE TRIGGER version_d_activity AFTER DELETE ON activity FOR EACH ROW
+  BEGIN
+    CALL version_up('activity');
+  END//
+CREATE OR REPLACE TRIGGER version_u_activity AFTER UPDATE ON activity FOR EACH ROW
+  BEGIN
+    CALL version_up('activity');
+  END//
+CREATE OR REPLACE TRIGGER version_i_activity_comment AFTER INSERT ON activity_comment FOR EACH ROW
+  BEGIN
+    CALL version_up('activity_comment');
+  END//
+CREATE OR REPLACE TRIGGER version_d_activity_comment AFTER DELETE ON activity_comment FOR EACH ROW
+  BEGIN
+    CALL version_up('activity_comment');
+  END//
+CREATE OR REPLACE TRIGGER version_u_activity_comment AFTER UPDATE ON activity_comment FOR EACH ROW
+  BEGIN
+    CALL version_up('activity_comment');
+  END//
+CREATE OR REPLACE TRIGGER version_i_activity_image AFTER INSERT ON activity_image FOR EACH ROW
+  BEGIN
+    CALL version_up('activity_image');
+  END//
+CREATE OR REPLACE TRIGGER version_d_activity_image AFTER DELETE ON activity_image FOR EACH ROW
+  BEGIN
+    CALL version_up('activity_image');
+  END//
+CREATE OR REPLACE TRIGGER version_u_activity_image AFTER UPDATE ON activity_image FOR EACH ROW
+  BEGIN
+    CALL version_up('activity_image');
+  END//
+CREATE OR REPLACE TRIGGER version_i_activity_itinerary AFTER INSERT ON activity_itinerary FOR EACH ROW
+  BEGIN
+    CALL version_up('activity_itinerary');
+  END//
+CREATE OR REPLACE TRIGGER version_d_activity_itinerary AFTER DELETE ON activity_itinerary FOR EACH ROW
+  BEGIN
+    CALL version_up('activity_itinerary');
+  END//
+CREATE OR REPLACE TRIGGER version_u_activity_itinerary AFTER UPDATE ON activity_itinerary FOR EACH ROW
+  BEGIN
+    CALL version_up('activity_itinerary');
+  END//
+CREATE OR REPLACE TRIGGER version_i_activity_tag AFTER INSERT ON activity_tag FOR EACH ROW
+  BEGIN
+    CALL version_up('activity_tag');
+  END//
+CREATE OR REPLACE TRIGGER version_d_activity_tag AFTER DELETE ON activity_tag FOR EACH ROW
+  BEGIN
+    CALL version_up('activity_tag');
+  END//
+CREATE OR REPLACE TRIGGER version_u_activity_tag AFTER UPDATE ON activity_tag FOR EACH ROW
+  BEGIN
+    CALL version_up('activity_tag');
+  END//
+CREATE OR REPLACE TRIGGER version_i_album AFTER INSERT ON album FOR EACH ROW
+  BEGIN
+    CALL version_up('album');
+  END//
+CREATE OR REPLACE TRIGGER version_d_album AFTER DELETE ON album FOR EACH ROW
+  BEGIN
+    CALL version_up('album');
+  END//
+CREATE OR REPLACE TRIGGER version_u_album AFTER UPDATE ON album FOR EACH ROW
+  BEGIN
+    CALL version_up('album');
+  END//
+CREATE OR REPLACE TRIGGER version_i_festival AFTER INSERT ON festival FOR EACH ROW
+  BEGIN
+    CALL version_up('festival');
+  END//
+CREATE OR REPLACE TRIGGER version_d_festival AFTER DELETE ON festival FOR EACH ROW
+  BEGIN
+    CALL version_up('festival');
+  END//
+CREATE OR REPLACE TRIGGER version_u_festival AFTER UPDATE ON festival FOR EACH ROW
+  BEGIN
+    CALL version_up('festival');
+  END//
+CREATE OR REPLACE TRIGGER version_i_festival_day AFTER INSERT ON festival_day FOR EACH ROW
+  BEGIN
+    CALL version_up('festival_day');
+  END//
+CREATE OR REPLACE TRIGGER version_d_festival_day AFTER DELETE ON festival_day FOR EACH ROW
+  BEGIN
+    CALL version_up('festival_day');
+  END//
+CREATE OR REPLACE TRIGGER version_u_festival_day AFTER UPDATE ON festival_day FOR EACH ROW
+  BEGIN
+    CALL version_up('festival_day');
+  END//
+CREATE OR REPLACE TRIGGER version_i_festival_event AFTER INSERT ON festival_event FOR EACH ROW
+  BEGIN
+    IF NEW.gm = 0 THEN
+      CALL version_up('festival_event_city');
+    ELSE
+      CALL version_up('festival_event_gm');
+    END IF;
+  END//
+CREATE OR REPLACE TRIGGER version_d_festival_event AFTER DELETE ON festival_event FOR EACH ROW
+  BEGIN
+    IF OLD.gm = 0 THEN
+      CALL version_up('festival_event_city');
+    ELSE
+      CALL version_up('festival_event_gm');
+    END IF;
+  END//
+CREATE OR REPLACE TRIGGER version_u_festival_event AFTER UPDATE ON festival_event FOR EACH ROW
+  BEGIN
+    IF NEW.gm = 0 THEN
+      CALL version_up('festival_event_city');
+    ELSE
+      CALL version_up('festival_event_gm');
+    END IF;
+  END//
+CREATE OR REPLACE TRIGGER version_i_festival_event_image AFTER INSERT ON festival_event_image FOR EACH ROW
+  BEGIN
+    CALL version_up('festival_event_image');
+  END//
+CREATE OR REPLACE TRIGGER version_d_festival_event_image AFTER DELETE ON festival_event_image FOR EACH ROW
+  BEGIN
+    CALL version_up('festival_event_image');
+  END//
+CREATE OR REPLACE TRIGGER version_u_festival_event_image AFTER UPDATE ON festival_event_image FOR EACH ROW
+  BEGIN
+    CALL version_up('festival_event_image');
+  END//
+CREATE OR REPLACE TRIGGER version_i_festival_offer AFTER INSERT ON festival_offer FOR EACH ROW
+  BEGIN
+    CALL version_up('festival_offer');
+  END//
+CREATE OR REPLACE TRIGGER version_d_festival_offer AFTER DELETE ON festival_offer FOR EACH ROW
+  BEGIN
+    CALL version_up('festival_offer');
+  END//
+CREATE OR REPLACE TRIGGER version_u_festival_offer AFTER UPDATE ON festival_offer FOR EACH ROW
+  BEGIN
+    CALL version_up('festival_offer');
+  END//
+CREATE OR REPLACE TRIGGER version_i_people AFTER INSERT ON people FOR EACH ROW
+  BEGIN
+    CALL version_up('people');
+  END//
+CREATE OR REPLACE TRIGGER version_d_people AFTER DELETE ON people FOR EACH ROW
+  BEGIN
+    CALL version_up('people');
+  END//
+CREATE OR REPLACE TRIGGER version_u_people AFTER UPDATE ON people FOR EACH ROW
+  BEGIN
+    CALL version_up('people');
+  END//
+CREATE OR REPLACE TRIGGER version_i_photo AFTER INSERT ON photo FOR EACH ROW
+  BEGIN
+    CALL version_up('photo');
+  END//
+CREATE OR REPLACE TRIGGER version_d_photo AFTER DELETE ON photo FOR EACH ROW
+  BEGIN
+    CALL version_up('photo');
+  END//
+CREATE OR REPLACE TRIGGER version_u_photo AFTER UPDATE ON photo FOR EACH ROW
+  BEGIN
+    CALL version_up('photo');
+  END//
+CREATE OR REPLACE TRIGGER version_i_photo_album AFTER INSERT ON photo_album FOR EACH ROW
+  BEGIN
+    CALL version_up('photo_album');
+  END//
+CREATE OR REPLACE TRIGGER version_d_photo_album AFTER DELETE ON photo_album FOR EACH ROW
+  BEGIN
+    CALL version_up('photo_album');
+  END//
+CREATE OR REPLACE TRIGGER version_u_photo_album AFTER UPDATE ON photo_album FOR EACH ROW
+  BEGIN
+    CALL version_up('photo_album');
+  END//
+CREATE OR REPLACE TRIGGER version_i_photo_comment AFTER INSERT ON photo_comment FOR EACH ROW
+  BEGIN
+    CALL version_up('photo_comment');
+  END//
+CREATE OR REPLACE TRIGGER version_d_photo_comment AFTER DELETE ON photo_comment FOR EACH ROW
+  BEGIN
+    CALL version_up('photo_comment');
+  END//
+CREATE OR REPLACE TRIGGER version_u_photo_comment AFTER UPDATE ON photo_comment FOR EACH ROW
+  BEGIN
+    CALL version_up('photo_comment');
+  END//
+CREATE OR REPLACE TRIGGER version_i_place AFTER INSERT ON place FOR EACH ROW
+  BEGIN
+    CALL version_up('place');
+  END//
+CREATE OR REPLACE TRIGGER version_d_place AFTER DELETE ON place FOR EACH ROW
+  BEGIN
+    CALL version_up('place');
+  END//
+CREATE OR REPLACE TRIGGER version_u_place AFTER UPDATE ON place FOR EACH ROW
+  BEGIN
+    CALL version_up('place');
+  END//
+CREATE OR REPLACE TRIGGER version_i_post AFTER INSERT ON post FOR EACH ROW
+  BEGIN
+    CALL version_up('post');
+  END//
+CREATE OR REPLACE TRIGGER version_d_post AFTER DELETE ON post FOR EACH ROW
+  BEGIN
+    CALL version_up('post');
+  END//
+CREATE OR REPLACE TRIGGER version_u_post AFTER UPDATE ON post FOR EACH ROW
+  BEGIN
+    CALL version_up('post');
+  END//
+CREATE OR REPLACE TRIGGER version_i_post_comment AFTER INSERT ON post_comment FOR EACH ROW
+  BEGIN
+    CALL version_up('post_comment');
+  END//
+CREATE OR REPLACE TRIGGER version_d_post_comment AFTER DELETE ON post_comment FOR EACH ROW
+  BEGIN
+    CALL version_up('post_comment');
+  END//
+CREATE OR REPLACE TRIGGER version_u_post_comment AFTER UPDATE ON post_comment FOR EACH ROW
+  BEGIN
+    CALL version_up('post_comment');
+  END//
+CREATE OR REPLACE TRIGGER version_i_post_image AFTER INSERT ON post_image FOR EACH ROW
+  BEGIN
+    CALL version_up('post_image');
+  END//
+CREATE OR REPLACE TRIGGER version_d_post_image AFTER DELETE ON post_image FOR EACH ROW
+  BEGIN
+    CALL version_up('post_image');
+  END//
+CREATE OR REPLACE TRIGGER version_u_post_image AFTER UPDATE ON post_image FOR EACH ROW
+  BEGIN
+    CALL version_up('post_image');
+  END//
+CREATE OR REPLACE TRIGGER version_i_post_tag AFTER INSERT ON post_tag FOR EACH ROW
+  BEGIN
+    CALL version_up('post_tag');
+  END//
+CREATE OR REPLACE TRIGGER version_d_post_tag AFTER DELETE ON post_tag FOR EACH ROW
+  BEGIN
+    CALL version_up('post_tag');
+  END//
+CREATE OR REPLACE TRIGGER version_u_post_tag AFTER UPDATE ON post_tag FOR EACH ROW
+  BEGIN
+    CALL version_up('post_tag');
+  END//
+CREATE OR REPLACE TRIGGER version_i_settings AFTER INSERT ON settings FOR EACH ROW
+  BEGIN
+    CALL version_up('settings');
+  END//
+CREATE OR REPLACE TRIGGER version_d_settings AFTER DELETE ON settings FOR EACH ROW
+  BEGIN
+    CALL version_up('settings');
+  END//
+CREATE OR REPLACE TRIGGER version_u_settings AFTER UPDATE ON settings FOR EACH ROW
+  BEGIN
+    CALL version_up('settings');
+  END//
+CREATE OR REPLACE TRIGGER version_i_sponsor AFTER INSERT ON sponsor FOR EACH ROW
+  BEGIN
+    CALL version_up('sponsor');
+  END//
+CREATE OR REPLACE TRIGGER version_d_sponsor AFTER DELETE ON sponsor FOR EACH ROW
+  BEGIN
+    CALL version_up('sponsor');
+  END//
+CREATE OR REPLACE TRIGGER version_u_sponsor AFTER UPDATE ON sponsor FOR EACH ROW
+  BEGIN
+    CALL version_up('sponsor');
+  END//
+
+
+DELIMITER ;
+
+
+
+
+
+
+
+# Set up two users for database. File dbusers.sql contains:
+# GRANT SELECT ON gm.* TO 'XXXX'@'XXXX' IDENTIFIED BY 'XXXX'; GRANT SELECT, INSERT, DELETE, UPDATE ON gm.* TO 'XXXX'@'XXXX' IDENTIFIED BY 'XXXX';
 SOURCE dbusers.sql;