| 1 |
|
| 2 |
|
| 3 |
|
| 4 |
|
| 5 |
CREATE TABLE contacts ( |
| 6 |
id TEXT PRIMARY KEY NOT NULL, |
| 7 |
user_id TEXT NOT NULL REFERENCES users(id), |
| 8 |
display_name TEXT NOT NULL, |
| 9 |
nickname TEXT, |
| 10 |
company TEXT, |
| 11 |
title TEXT, |
| 12 |
notes TEXT NOT NULL DEFAULT '', |
| 13 |
tags TEXT NOT NULL DEFAULT '[]', |
| 14 |
birthday TEXT, |
| 15 |
timezone TEXT, |
| 16 |
created_at TEXT NOT NULL, |
| 17 |
updated_at TEXT NOT NULL |
| 18 |
); |
| 19 |
|
| 20 |
CREATE INDEX idx_contacts_user_id ON contacts(user_id); |
| 21 |
CREATE INDEX idx_contacts_display_name ON contacts(user_id, display_name); |
| 22 |
|
| 23 |
|
| 24 |
CREATE TABLE contact_emails ( |
| 25 |
id TEXT PRIMARY KEY NOT NULL, |
| 26 |
contact_id TEXT NOT NULL REFERENCES contacts(id) ON DELETE CASCADE, |
| 27 |
address TEXT NOT NULL, |
| 28 |
label TEXT NOT NULL DEFAULT '', |
| 29 |
is_primary INTEGER NOT NULL DEFAULT 0 |
| 30 |
); |
| 31 |
|
| 32 |
CREATE INDEX idx_contact_emails_contact_id ON contact_emails(contact_id); |
| 33 |
CREATE INDEX idx_contact_emails_address ON contact_emails(address); |
| 34 |
|
| 35 |
|
| 36 |
CREATE TABLE contact_phones ( |
| 37 |
id TEXT PRIMARY KEY NOT NULL, |
| 38 |
contact_id TEXT NOT NULL REFERENCES contacts(id) ON DELETE CASCADE, |
| 39 |
number TEXT NOT NULL, |
| 40 |
label TEXT NOT NULL DEFAULT '', |
| 41 |
is_primary INTEGER NOT NULL DEFAULT 0 |
| 42 |
); |
| 43 |
|
| 44 |
CREATE INDEX idx_contact_phones_contact_id ON contact_phones(contact_id); |
| 45 |
|
| 46 |
|
| 47 |
CREATE TABLE contact_social_handles ( |
| 48 |
id TEXT PRIMARY KEY NOT NULL, |
| 49 |
contact_id TEXT NOT NULL REFERENCES contacts(id) ON DELETE CASCADE, |
| 50 |
platform TEXT NOT NULL, |
| 51 |
handle TEXT NOT NULL, |
| 52 |
url TEXT |
| 53 |
); |
| 54 |
|
| 55 |
CREATE INDEX idx_contact_social_handles_contact_id ON contact_social_handles(contact_id); |
| 56 |
|
| 57 |
|
| 58 |
CREATE VIRTUAL TABLE contacts_fts USING fts5( |
| 59 |
id UNINDEXED, |
| 60 |
user_id UNINDEXED, |
| 61 |
display_name, |
| 62 |
nickname, |
| 63 |
company, |
| 64 |
notes, |
| 65 |
tags, |
| 66 |
content='contacts', |
| 67 |
content_rowid='rowid' |
| 68 |
); |
| 69 |
|
| 70 |
|
| 71 |
CREATE TRIGGER contacts_ai AFTER INSERT ON contacts BEGIN |
| 72 |
INSERT INTO contacts_fts(id, user_id, display_name, nickname, company, notes, tags) |
| 73 |
VALUES (new.id, new.user_id, new.display_name, new.nickname, new.company, new.notes, new.tags); |
| 74 |
END; |
| 75 |
|
| 76 |
CREATE TRIGGER contacts_ad AFTER DELETE ON contacts BEGIN |
| 77 |
INSERT INTO contacts_fts(contacts_fts, id, user_id, display_name, nickname, company, notes, tags) |
| 78 |
VALUES ('delete', old.id, old.user_id, old.display_name, old.nickname, old.company, old.notes, old.tags); |
| 79 |
END; |
| 80 |
|
| 81 |
CREATE TRIGGER contacts_au AFTER UPDATE ON contacts BEGIN |
| 82 |
INSERT INTO contacts_fts(contacts_fts, id, user_id, display_name, nickname, company, notes, tags) |
| 83 |
VALUES ('delete', old.id, old.user_id, old.display_name, old.nickname, old.company, old.notes, old.tags); |
| 84 |
INSERT INTO contacts_fts(id, user_id, display_name, nickname, company, notes, tags) |
| 85 |
VALUES (new.id, new.user_id, new.display_name, new.nickname, new.company, new.notes, new.tags); |
| 86 |
END; |
| 87 |
|