PRAGMA foreign_keys=ON;
BEGIN TRANSACTION;
CREATE TABLE IF NOT EXISTS Online (
Username varchar(12) not null,
ConnID varchar(23) not null, 
RemoteHost varchar(64) not null,
RemotePort smallint unsigned not null,
WillFlag tinyint not null,
WillTopic text,
WillMsg text,
WillQoS tinyint,
WillRetain tinyint,
Stamp timestamp);
CREATE TABLE IF NOT EXISTS Topics (
id integer not null primary key,
MsgID smallint unsigned not null, 
Retain char not null,
Topic varchar(255) not null,
Value text,
PubUser varchar(64) not null,
PubDate datetime not null,
PubHost varchar(64) not null,
Stamp timestamp);
CREATE INDEX IF NOT EXISTS RemoteHost on Online (RemoteHost);
CREATE INDEX IF NOT EXISTS Username on Online (Username);
CREATE UNIQUE INDEX IF NOT EXISTS ConnID on Online (ConnID);
CREATE INDEX IF NOT EXISTS PubDate on Topics (PubDate);
CREATE INDEX IF NOT EXISTS PubHost on Topics (PubHost);
CREATE INDEX IF NOT EXISTS PubUser on Topics (PubUser);
CREATE INDEX IF NOT EXISTS MsgID on Topics (MsgID);
CREATE INDEX IF NOT EXISTS Topic on Topics (Topic);
CREATE TRIGGER IF NOT EXISTS Online_update_t AFTER UPDATE ON Online
BEGIN
	UPDATE Online SET Stamp = strftime('%s', 'now') WHERE ConnID = old.ConnID;
END;
CREATE TRIGGER IF NOT EXISTS Online_insert_t AFTER INSERT ON Online
BEGIN
	UPDATE Online SET Stamp = strftime('%s', 'now') WHERE ConnID = new.ConnID;
END;
CREATE TRIGGER IF NOT EXISTS Topics_update_t AFTER UPDATE ON Topics
BEGIN
	UPDATE Topics SET Stamp = strftime('%s', 'now') WHERE id = old.id;
END;
CREATE TRIGGER IF NOT EXISTS Topics_insert_t AFTER INSERT ON Topics
BEGIN
	UPDATE Topics SET Stamp = strftime('%s', 'now') WHERE id = new.id;
END;
COMMIT;
