-- enable foreign keys
PRAGMA foreign_keys = true;

-- create cpes table
CREATE TABLE cpes (
  cpe_id  INTEGER PRIMARY KEY,

  -- cpe uri 
  cpe_uri TEXT UNIQUE NOT NULL,

  -- cpe 2.3 formatting string
  cpe23   TEXT UNIQUE NOT NULL
);

-- create titles table
CREATE TABLE cpe_titles (
  -- external CPE id
  cpe_id  INT NOT NULL
          REFERENCES cpes(cpe_id),

  -- language code
  lang    TEXT NOT NULL,

  -- text value
  val     TEXT NOT NULL,

  UNIQUE (cpe_id, lang)
);

-- create titles fts table
CREATE VIRTUAL TABLE cpe_titles_fts USING fts5(title, tokenize = 'porter');

-- create titles insert trigger
CREATE TRIGGER tr_cpe_titles_insert AFTER INSERT ON cpe_titles
  FOR EACH ROW WHEN (NEW.lang = 'en-US') BEGIN
    INSERT INTO cpe_titles_fts(rowid, title) VALUES (NEW.cpe_id, NEW.val);
  END;

-- create titles delete trigger
CREATE TRIGGER tr_cpe_titles_delete BEFORE DELETE ON cpe_titles
  FOR EACH ROW WHEN (OLD.lang = 'en-US') BEGIN
    DELETE FROM cpe_titles_fts WHERE rowid = OLD.cpe_id;
  END;

-- create refs table
CREATE TABLE cpe_refs (
  -- external CPE id
  cpe_id  INT NOT NULL
          REFERENCES cpes(cpe_id),

  -- url
  href    TEXT NOT NULL,

  -- text description
  val     TEXT NOT NULL
);

-- create refs fts
CREATE VIRTUAL TABLE cpe_refs_fts USING fts5(cpe_id UNINDEXED, href, val);

-- create refs insert trigger
CREATE TRIGGER tr_cpe_refs_insert AFTER INSERT ON cpe_refs
  FOR EACH ROW BEGIN
    INSERT INTO cpe_refs_fts(cpe_id, href, val) VALUES (NEW.cpe_id, NEW.href, NEW.val);
  END;

-- create refs delete trigger
CREATE TRIGGER tr_cpe_refs_delete BEFORE DELETE ON cpe_refs
  FOR EACH ROW BEGIN
    DELETE FROM cpe_refs_fts WHERE rowid = OLD.cpe_id;
  END;

PRAGMA user_version = 314159;
