
    Ki	                     @    d dl Z d dlZd dlmZ  ed      ZdZd Zd Zy)    N)Pathzdata/sms.dba  
PRAGMA journal_mode=WAL;
PRAGMA synchronous=NORMAL;

CREATE TABLE IF NOT EXISTS messages (
  id INTEGER PRIMARY KEY,
  address TEXT,
  date_ms INTEGER,
  type INTEGER,
  body TEXT,
  thread_id INTEGER,
  service TEXT,
  raw_json TEXT
);

CREATE INDEX IF NOT EXISTS idx_messages_date ON messages(date_ms);
CREATE INDEX IF NOT EXISTS idx_messages_address ON messages(address);
CREATE INDEX IF NOT EXISTS idx_messages_thread ON messages(thread_id);
CREATE INDEX IF NOT EXISTS idx_messages_type ON messages(type);

-- FTS5 index for fast search + relevance
CREATE VIRTUAL TABLE IF NOT EXISTS messages_fts
USING fts5(body, content='messages', content_rowid='id');

CREATE TRIGGER IF NOT EXISTS messages_ai AFTER INSERT ON messages BEGIN
  INSERT INTO messages_fts(rowid, body) VALUES (new.id, new.body);
END;

CREATE TRIGGER IF NOT EXISTS messages_ad AFTER DELETE ON messages BEGIN
  INSERT INTO messages_fts(messages_fts, rowid, body) VALUES('delete', old.id, old.body);
END;

CREATE TRIGGER IF NOT EXISTS messages_au AFTER UPDATE ON messages BEGIN
  INSERT INTO messages_fts(messages_fts, rowid, body) VALUES('delete', old.id, old.body);
  INSERT INTO messages_fts(rowid, body) VALUES (new.id, new.body);
END;

CREATE TABLE IF NOT EXISTS search_history (
  id INTEGER PRIMARY KEY,
  created_at_ms INTEGER,
  mode TEXT,
  query TEXT,
  filters_json TEXT
);

CREATE TABLE IF NOT EXISTS saved_searches (
  id INTEGER PRIMARY KEY,
  name TEXT,
  created_at_ms INTEGER,
  mode TEXT,
  query TEXT,
  filters_json TEXT
);

CREATE TABLE IF NOT EXISTS bookmarks (
  id INTEGER PRIMARY KEY,
  created_at_ms INTEGER,
  message_id INTEGER UNIQUE,
  note TEXT,
  FOREIGN KEY(message_id) REFERENCES messages(id)
);

CREATE TABLE IF NOT EXISTS tags (
  id INTEGER PRIMARY KEY,
  name TEXT UNIQUE
);

CREATE TABLE IF NOT EXISTS bookmark_tags (
  bookmark_id INTEGER,
  tag_id INTEGER,
  PRIMARY KEY(bookmark_id, tag_id),
  FOREIGN KEY(bookmark_id) REFERENCES bookmarks(id),
  FOREIGN KEY(tag_id) REFERENCES tags(id)
);
c                      t         j                  j                  dd       t        j                  t         d      } t        j
                  | _        | S )NT)parentsexist_okF)check_same_thread)DB_PATHparentmkdirsqlite3connectRowrow_factoryconns    N/mnt/media_drive2/site-root/code.jetlifecdn.com/xml-tools/sms-search/app/db.pyr   r   S   s:    	..td3	E	:$[[$	+    c                      t               } | j                  t               | j                          | j	                          y )N)r   executescript
SCHEMA_SQLcommitcloser   s    r   init_dbr   Y   s)    	$Z ++-**,r   )osr   pathlibr   r   r   r   r    r   r   <module>r      s+    	  
}
J
Xr   