379 lines
17 KiB
SQL
379 lines
17 KiB
SQL
-- RustBox 0.2.0 SQLite schema.
|
|
-- One physical database contains global sessions plus isolated per-account tables.
|
|
-- Application tables are materialized from the tenant section by replacing {{p}}.
|
|
-- Squashed compatibility baseline: V046. Current runtime schema: V049.
|
|
|
|
-- RUSTBOX:GLOBAL-BEGIN
|
|
CREATE TABLE IF NOT EXISTS rustbox_accounts (
|
|
user_hash TEXT PRIMARY KEY NOT NULL,
|
|
table_prefix TEXT NOT NULL UNIQUE,
|
|
schema_version INTEGER NOT NULL DEFAULT 46,
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS sessions (
|
|
token TEXT PRIMARY KEY NOT NULL,
|
|
account_id TEXT NOT NULL UNIQUE,
|
|
browser_id TEXT NOT NULL,
|
|
email TEXT NOT NULL,
|
|
password_ciphertext TEXT NOT NULL,
|
|
user_hash TEXT NOT NULL,
|
|
imap_host TEXT NOT NULL,
|
|
imap_port INTEGER NOT NULL,
|
|
imap_tls INTEGER NOT NULL,
|
|
imap_tls_verify INTEGER NOT NULL,
|
|
smtp_host TEXT NOT NULL,
|
|
smtp_port INTEGER NOT NULL,
|
|
smtp_tls INTEGER NOT NULL,
|
|
smtp_tls_verify INTEGER NOT NULL,
|
|
timeout_secs INTEGER NOT NULL,
|
|
created_at_unix INTEGER NOT NULL,
|
|
last_accessed_unix INTEGER NOT NULL,
|
|
user_agent TEXT NOT NULL DEFAULT ''
|
|
);
|
|
CREATE INDEX IF NOT EXISTS idx_sessions_browser ON sessions(browser_id);
|
|
CREATE INDEX IF NOT EXISTS idx_sessions_user ON sessions(user_hash);
|
|
CREATE INDEX IF NOT EXISTS idx_sessions_expiry ON sessions(last_accessed_unix, timeout_secs);
|
|
-- RUSTBOX:GLOBAL-END
|
|
|
|
-- RUSTBOX:TENANT-BEGIN
|
|
-- {{p}} is replaced at runtime with a collision-checked per-account table prefix.
|
|
CREATE TABLE {{p}}calendar_events (
|
|
id TEXT PRIMARY KEY,
|
|
title TEXT NOT NULL,
|
|
description TEXT NOT NULL DEFAULT '',
|
|
location TEXT NOT NULL DEFAULT '',
|
|
start_time TEXT NOT NULL,
|
|
end_time TEXT NOT NULL,
|
|
all_day INTEGER NOT NULL DEFAULT 0,
|
|
recurrence_rule TEXT,
|
|
attendees TEXT NOT NULL DEFAULT '[]',
|
|
organizer TEXT NOT NULL DEFAULT '',
|
|
status TEXT NOT NULL DEFAULT 'confirmed',
|
|
source TEXT NOT NULL DEFAULT 'manual',
|
|
source_uid TEXT,
|
|
source_message_uid INTEGER,
|
|
source_message_folder TEXT,
|
|
meeting_url TEXT,
|
|
color TEXT,
|
|
reminder_minutes INTEGER,
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
);
|
|
|
|
CREATE TABLE {{p}}calendar_settings (
|
|
id INTEGER PRIMARY KEY DEFAULT 1 CHECK (id = 1),
|
|
default_view TEXT NOT NULL DEFAULT 'month',
|
|
week_starts_on INTEGER NOT NULL DEFAULT 0,
|
|
working_hours_start TEXT NOT NULL DEFAULT '09:00',
|
|
working_hours_end TEXT NOT NULL DEFAULT '17:00',
|
|
time_format TEXT NOT NULL DEFAULT '12h',
|
|
zoom_link TEXT NOT NULL DEFAULT '',
|
|
teams_link TEXT NOT NULL DEFAULT '',
|
|
meet_link TEXT NOT NULL DEFAULT '',
|
|
caldav_url TEXT NOT NULL DEFAULT '',
|
|
caldav_username TEXT NOT NULL DEFAULT '',
|
|
caldav_password TEXT NOT NULL DEFAULT '',
|
|
caldav_enabled INTEGER NOT NULL DEFAULT 0,
|
|
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
);
|
|
|
|
CREATE TABLE {{p}}contact_group_members (
|
|
group_id TEXT NOT NULL,
|
|
contact_id TEXT NOT NULL,
|
|
PRIMARY KEY (group_id, contact_id),
|
|
FOREIGN KEY (group_id) REFERENCES {{p}}contact_groups(id) ON DELETE CASCADE,
|
|
FOREIGN KEY (contact_id) REFERENCES {{p}}contacts(id) ON DELETE CASCADE
|
|
);
|
|
|
|
CREATE TABLE {{p}}contact_groups (
|
|
id TEXT PRIMARY KEY,
|
|
name TEXT NOT NULL UNIQUE,
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
);
|
|
|
|
CREATE TABLE {{p}}contact_photos (
|
|
contact_id TEXT PRIMARY KEY,
|
|
content_type TEXT NOT NULL,
|
|
data BLOB NOT NULL,
|
|
updated_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
FOREIGN KEY (contact_id) REFERENCES {{p}}contacts(id) ON DELETE CASCADE
|
|
);
|
|
|
|
CREATE TABLE {{p}}contacts (
|
|
id TEXT PRIMARY KEY,
|
|
email TEXT NOT NULL,
|
|
name TEXT NOT NULL DEFAULT '',
|
|
company TEXT NOT NULL DEFAULT '',
|
|
notes TEXT NOT NULL DEFAULT '',
|
|
is_favorite INTEGER NOT NULL DEFAULT 0,
|
|
last_contacted TEXT,
|
|
contact_count INTEGER NOT NULL DEFAULT 0,
|
|
source TEXT NOT NULL DEFAULT 'manual',
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
updated_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
phone TEXT NOT NULL DEFAULT '', job_title TEXT NOT NULL DEFAULT '', address TEXT NOT NULL DEFAULT '', website TEXT NOT NULL DEFAULT '', birthday TEXT NOT NULL DEFAULT '', emails_json TEXT NOT NULL DEFAULT '[]', phones_json TEXT NOT NULL DEFAULT '[]', addresses_json TEXT NOT NULL DEFAULT '[]');
|
|
|
|
CREATE TABLE {{p}}display_preferences (
|
|
id INTEGER PRIMARY KEY DEFAULT 1 CHECK (id = 1),
|
|
density TEXT NOT NULL DEFAULT 'comfortable',
|
|
theme TEXT NOT NULL DEFAULT 'system',
|
|
language TEXT NOT NULL DEFAULT 'en',
|
|
updated_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
compose_format TEXT NOT NULL DEFAULT 'html', deep_index BOOLEAN NOT NULL DEFAULT 0, animation_mode TEXT NULL, preview_pane TEXT NOT NULL DEFAULT 'right', ui_scale TEXT NOT NULL DEFAULT 'normal', color_preset TEXT NOT NULL DEFAULT 'sage', accent_color TEXT NOT NULL DEFAULT '#6f9c86', font_family TEXT NOT NULL DEFAULT 'system', font_size INTEGER NOT NULL DEFAULT 13, row_height INTEGER NOT NULL DEFAULT 58, folder_pane_width INTEGER NOT NULL DEFAULT 228, message_pane_width INTEGER NOT NULL DEFAULT 420, border_radius INTEGER NOT NULL DEFAULT 4, contrast TEXT NOT NULL DEFAULT 'normal', show_avatars INTEGER NOT NULL DEFAULT 1, show_attachment_icons INTEGER NOT NULL DEFAULT 1, show_flags INTEGER NOT NULL DEFAULT 1, reduce_motion INTEGER NOT NULL DEFAULT 0, date_format TEXT NOT NULL DEFAULT 'locale', time_format TEXT NOT NULL DEFAULT 'locale', background_color TEXT NOT NULL DEFAULT '#121513', panel_color TEXT NOT NULL DEFAULT '#181c19', text_color TEXT NOT NULL DEFAULT '#edf0ec', compose_autosave_ms INTEGER NOT NULL DEFAULT 3000, default_priority TEXT NOT NULL DEFAULT 'normal', request_mdn_default INTEGER NOT NULL DEFAULT 0, attachment_reminder INTEGER NOT NULL DEFAULT 1, icon_size INTEGER NOT NULL DEFAULT 18, toolbar_density TEXT NOT NULL DEFAULT 'normal', sidebar_item_height INTEGER NOT NULL DEFAULT 29, reader_max_width INTEGER NOT NULL DEFAULT 0, composer_width INTEGER NOT NULL DEFAULT 900, selection_color TEXT NOT NULL DEFAULT '#28352e', unread_font_weight INTEGER NOT NULL DEFAULT 730, unread_badge_style TEXT NOT NULL DEFAULT 'dot', compact_headers INTEGER NOT NULL DEFAULT 0, show_borders INTEGER NOT NULL DEFAULT 1, scrollbar_density TEXT NOT NULL DEFAULT 'thin', monochrome INTEGER NOT NULL DEFAULT 0, folder_background TEXT NOT NULL DEFAULT '', message_background TEXT NOT NULL DEFAULT '', reader_background TEXT NOT NULL DEFAULT '', compose_font_family TEXT NOT NULL DEFAULT 'system', reply_position TEXT NOT NULL DEFAULT 'above', quote_style TEXT NOT NULL DEFAULT 'standard', forward_mode TEXT NOT NULL DEFAULT 'inline', spellcheck_enabled INTEGER NOT NULL DEFAULT 1, interface_skin TEXT NOT NULL DEFAULT 'rustbox', preset_scale_unlocked INTEGER NOT NULL DEFAULT 0);
|
|
|
|
CREATE TABLE {{p}}draft_attachments (
|
|
id TEXT PRIMARY KEY,
|
|
draft_id TEXT NOT NULL,
|
|
filename TEXT NOT NULL,
|
|
content_type TEXT NOT NULL,
|
|
size INTEGER NOT NULL,
|
|
file_path TEXT NOT NULL,
|
|
checksum_sha256 TEXT,
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
FOREIGN KEY (draft_id) REFERENCES {{p}}drafts(id) ON DELETE CASCADE
|
|
);
|
|
|
|
|
|
CREATE TABLE {{p}}blob_delete_outbox (
|
|
id TEXT PRIMARY KEY,
|
|
storage_key TEXT NOT NULL,
|
|
attempts INTEGER NOT NULL DEFAULT 0,
|
|
available_at INTEGER NOT NULL DEFAULT 0,
|
|
claimed_until INTEGER NOT NULL DEFAULT 0,
|
|
last_error TEXT,
|
|
created_at INTEGER NOT NULL,
|
|
updated_at INTEGER NOT NULL
|
|
);
|
|
|
|
CREATE INDEX {{p}}idx_blob_delete_outbox_ready ON {{p}}blob_delete_outbox(available_at, claimed_until, updated_at);
|
|
|
|
CREATE TABLE {{p}}search_outbox (
|
|
id TEXT PRIMARY KEY,
|
|
generation TEXT NOT NULL,
|
|
event_type TEXT NOT NULL,
|
|
message_uid INTEGER NOT NULL,
|
|
folder TEXT NOT NULL,
|
|
payload TEXT,
|
|
attempts INTEGER NOT NULL DEFAULT 0,
|
|
available_at INTEGER NOT NULL DEFAULT 0,
|
|
claimed_until INTEGER NOT NULL DEFAULT 0,
|
|
dead_letter INTEGER NOT NULL DEFAULT 0,
|
|
last_error TEXT,
|
|
created_at INTEGER NOT NULL,
|
|
updated_at INTEGER NOT NULL
|
|
);
|
|
|
|
CREATE INDEX {{p}}idx_search_outbox_ready ON {{p}}search_outbox(dead_letter, available_at, claimed_until, updated_at);
|
|
|
|
CREATE TABLE {{p}}drafts (
|
|
id TEXT PRIMARY KEY,
|
|
to_addresses TEXT NOT NULL DEFAULT '',
|
|
cc_addresses TEXT NOT NULL DEFAULT '',
|
|
bcc_addresses TEXT NOT NULL DEFAULT '',
|
|
subject TEXT NOT NULL DEFAULT '',
|
|
text_body TEXT NOT NULL DEFAULT '',
|
|
html_body TEXT,
|
|
in_reply_to TEXT,
|
|
references_header TEXT,
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
updated_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
request_mdn INTEGER NOT NULL DEFAULT 0, priority TEXT NOT NULL DEFAULT 'normal', compose_format TEXT NOT NULL DEFAULT 'html', remote_folder TEXT, remote_uid INTEGER, remote_uid_validity INTEGER, pgp_mode TEXT NOT NULL DEFAULT 'none', pgp_inline INTEGER NOT NULL DEFAULT 0, pgp_attach_public_key INTEGER NOT NULL DEFAULT 0, pgp_attach_recipient_keys INTEGER NOT NULL DEFAULT 0);
|
|
|
|
CREATE TABLE {{p}}folder_preferences (
|
|
folder_name TEXT PRIMARY KEY REFERENCES {{p}}folders(name) ON UPDATE CASCADE ON DELETE CASCADE,
|
|
flagged_on_top INTEGER CHECK(flagged_on_top IN (0, 1) OR flagged_on_top IS NULL),
|
|
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
);
|
|
|
|
CREATE TABLE {{p}}folders (
|
|
name TEXT PRIMARY KEY,
|
|
delimiter TEXT,
|
|
parent TEXT,
|
|
flags TEXT NOT NULL DEFAULT '',
|
|
is_subscribed INTEGER NOT NULL DEFAULT 1,
|
|
total_count INTEGER NOT NULL DEFAULT 0,
|
|
unread_count INTEGER NOT NULL DEFAULT 0,
|
|
uid_validity INTEGER NOT NULL DEFAULT 0,
|
|
highest_modseq INTEGER NOT NULL DEFAULT 0,
|
|
counter_generation INTEGER NOT NULL DEFAULT 0,
|
|
updated_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
messages_updated_at TEXT);
|
|
|
|
CREATE TABLE {{p}}identities (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
display_name TEXT NOT NULL DEFAULT '',
|
|
email TEXT NOT NULL,
|
|
signature_html TEXT NOT NULL DEFAULT '',
|
|
is_default INTEGER NOT NULL DEFAULT 0,
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
updated_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
reply_to TEXT NOT NULL DEFAULT '', bcc TEXT NOT NULL DEFAULT '', organization TEXT NOT NULL DEFAULT '', signature_text TEXT NOT NULL DEFAULT '', signature_new INTEGER NOT NULL DEFAULT 1, signature_reply INTEGER NOT NULL DEFAULT 1, signature_forward INTEGER NOT NULL DEFAULT 1, signature_position TEXT NOT NULL DEFAULT 'above', pgp_fingerprint TEXT, pgp_sign_default INTEGER NOT NULL DEFAULT 0, pgp_encrypt_default INTEGER NOT NULL DEFAULT 0, pgp_inline_default INTEGER NOT NULL DEFAULT 0);
|
|
|
|
CREATE TABLE {{p}}known_addresses (
|
|
email TEXT NOT NULL,
|
|
name TEXT NOT NULL DEFAULT '',
|
|
PRIMARY KEY (email)
|
|
);
|
|
|
|
CREATE TABLE {{p}}mail_preferences (
|
|
id INTEGER PRIMARY KEY CHECK (id = 1),
|
|
messages_per_page INTEGER NOT NULL DEFAULT 300,
|
|
mark_read_delay_ms INTEGER NOT NULL DEFAULT 0,
|
|
remote_images TEXT NOT NULL DEFAULT 'ask',
|
|
preferred_body TEXT NOT NULL DEFAULT 'auto',
|
|
thread_mode TEXT NOT NULL DEFAULT 'threaded',
|
|
collapse_quotes INTEGER NOT NULL DEFAULT 1,
|
|
show_snippets INTEGER NOT NULL DEFAULT 1,
|
|
default_sort TEXT NOT NULL DEFAULT 'date_desc',
|
|
updated_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
flagged_on_top INTEGER NOT NULL DEFAULT 0, sync_imap_keywords INTEGER NOT NULL DEFAULT 0);
|
|
|
|
CREATE TABLE {{p}}meeting_templates (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
name TEXT NOT NULL,
|
|
url_template TEXT NOT NULL,
|
|
icon TEXT NOT NULL DEFAULT '',
|
|
is_default INTEGER NOT NULL DEFAULT 0,
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
);
|
|
|
|
CREATE TABLE {{p}}message_tags (
|
|
tag_id TEXT NOT NULL,
|
|
message_uid INTEGER NOT NULL,
|
|
message_folder TEXT NOT NULL,
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
PRIMARY KEY (tag_id, message_uid, message_folder),
|
|
FOREIGN KEY (tag_id) REFERENCES {{p}}tags(id) ON DELETE CASCADE,
|
|
FOREIGN KEY (message_uid, message_folder) REFERENCES {{p}}messages(uid, folder) ON DELETE CASCADE
|
|
);
|
|
|
|
CREATE TABLE {{p}}messages (
|
|
uid INTEGER NOT NULL,
|
|
folder TEXT NOT NULL,
|
|
message_id TEXT,
|
|
in_reply_to TEXT,
|
|
subject TEXT NOT NULL DEFAULT '',
|
|
from_address TEXT NOT NULL DEFAULT '',
|
|
from_name TEXT NOT NULL DEFAULT '',
|
|
to_addresses TEXT NOT NULL DEFAULT '',
|
|
cc_addresses TEXT NOT NULL DEFAULT '',
|
|
date TEXT NOT NULL,
|
|
flags TEXT NOT NULL DEFAULT '',
|
|
size INTEGER NOT NULL DEFAULT 0,
|
|
has_attachments INTEGER NOT NULL DEFAULT 0,
|
|
snippet TEXT NOT NULL DEFAULT '',
|
|
body_cached INTEGER NOT NULL DEFAULT 0,
|
|
body_html TEXT,
|
|
body_text TEXT,
|
|
references_header TEXT, date_epoch INTEGER NOT NULL DEFAULT 0, attachments_json TEXT, raw_headers TEXT, reaction TEXT, email_theme INTEGER,
|
|
PRIMARY KEY (uid, folder),
|
|
FOREIGN KEY (folder) REFERENCES {{p}}folders(name) ON DELETE CASCADE
|
|
);
|
|
|
|
CREATE TABLE {{p}}notification_preferences (
|
|
id INTEGER PRIMARY KEY DEFAULT 1 CHECK (id = 1),
|
|
enabled INTEGER NOT NULL DEFAULT 1,
|
|
sound INTEGER NOT NULL DEFAULT 0,
|
|
folders TEXT NOT NULL DEFAULT '["INBOX"]',
|
|
updated_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
dnd_enabled INTEGER NOT NULL DEFAULT 0, dnd_start TEXT NOT NULL DEFAULT '22:00', dnd_end TEXT NOT NULL DEFAULT '07:00');
|
|
|
|
CREATE TABLE {{p}}pgp_keys (
|
|
fingerprint TEXT PRIMARY KEY,
|
|
key_id TEXT NOT NULL,
|
|
email TEXT NOT NULL DEFAULT '',
|
|
user_id TEXT NOT NULL DEFAULT '',
|
|
public_key_armor TEXT NOT NULL,
|
|
secret_key_path TEXT,
|
|
has_secret INTEGER NOT NULL DEFAULT 0,
|
|
trust TEXT NOT NULL DEFAULT 'unknown',
|
|
source TEXT NOT NULL DEFAULT 'import',
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
);
|
|
|
|
CREATE TABLE {{p}}pgp_preferences (
|
|
id INTEGER PRIMARY KEY CHECK (id = 1),
|
|
wkd_enabled INTEGER NOT NULL DEFAULT 1,
|
|
hkp_enabled INTEGER NOT NULL DEFAULT 0,
|
|
require_trusted_encryption INTEGER NOT NULL DEFAULT 0,
|
|
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
);
|
|
|
|
CREATE TABLE {{p}}response_templates (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
name TEXT NOT NULL COLLATE NOCASE UNIQUE,
|
|
body TEXT NOT NULL DEFAULT '',
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
updated_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
format TEXT NOT NULL DEFAULT 'text');
|
|
|
|
CREATE TABLE {{p}}saved_searches (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
name TEXT NOT NULL,
|
|
query_string TEXT NOT NULL,
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
);
|
|
|
|
CREATE TABLE {{p}}special_folders (
|
|
role TEXT PRIMARY KEY CHECK(role IN ('sent','drafts','trash','junk','archive')),
|
|
folder_name TEXT NOT NULL,
|
|
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
);
|
|
|
|
CREATE TABLE {{p}}tags (
|
|
id TEXT PRIMARY KEY,
|
|
name TEXT NOT NULL UNIQUE,
|
|
color TEXT NOT NULL DEFAULT '#6b7280',
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
updated_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
imap_keyword TEXT NOT NULL DEFAULT '');
|
|
|
|
CREATE TABLE {{p}}trusted_senders (
|
|
email TEXT PRIMARY KEY COLLATE NOCASE,
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
);
|
|
|
|
CREATE TABLE {{p}}user_meta (
|
|
key TEXT PRIMARY KEY,
|
|
value TEXT NOT NULL
|
|
);
|
|
|
|
CREATE INDEX {{p}}idx_calendar_events_source_uid ON {{p}}calendar_events(source_uid);
|
|
|
|
CREATE INDEX {{p}}idx_calendar_events_time ON {{p}}calendar_events(start_time, end_time);
|
|
|
|
CREATE INDEX {{p}}idx_cgm_contact_id ON {{p}}contact_group_members(contact_id);
|
|
|
|
CREATE INDEX {{p}}idx_contacts_contact_count ON {{p}}contacts(contact_count DESC);
|
|
|
|
CREATE UNIQUE INDEX {{p}}idx_contacts_email ON {{p}}contacts(email);
|
|
|
|
CREATE INDEX {{p}}idx_contacts_last_contacted ON {{p}}contacts(last_contacted DESC);
|
|
|
|
CREATE INDEX {{p}}idx_contacts_name ON {{p}}contacts(name);
|
|
|
|
CREATE INDEX {{p}}idx_known_addresses_name ON {{p}}known_addresses(name);
|
|
|
|
CREATE INDEX {{p}}idx_message_tags_message ON {{p}}message_tags(message_uid, message_folder);
|
|
|
|
CREATE INDEX {{p}}idx_message_tags_tag ON {{p}}message_tags(tag_id);
|
|
|
|
CREATE INDEX {{p}}idx_messages_folder_date ON {{p}}messages(folder, date_epoch DESC);
|
|
|
|
CREATE INDEX {{p}}idx_messages_in_reply_to ON {{p}}messages(in_reply_to);
|
|
|
|
CREATE INDEX {{p}}idx_messages_message_id ON {{p}}messages(message_id);
|
|
|
|
CREATE INDEX {{p}}idx_pgp_keys_email ON {{p}}pgp_keys(lower(email));
|
|
|
|
CREATE UNIQUE INDEX {{p}}idx_saved_searches_name ON {{p}}saved_searches(name COLLATE NOCASE);
|
|
|
|
CREATE UNIQUE INDEX {{p}}idx_tags_imap_keyword ON {{p}}tags(imap_keyword) WHERE imap_keyword <> '';
|
|
|
|
-- RUSTBOX:TENANT-END
|