473 lines
21 KiB
SQL
473 lines
21 KiB
SQL
-- RustBox 0.2.0 MySQL schema.
|
|
-- One physical database contains global sessions plus isolated per-account tables.
|
|
-- Application tables are materialized by replacing {{p}} with a collision-checked prefix.
|
|
-- Squashed compatibility baseline: V052; current schema: V053.
|
|
|
|
-- RUSTBOX:GLOBAL-BEGIN
|
|
CREATE TABLE IF NOT EXISTS rustbox_accounts (
|
|
user_hash VARCHAR(128) PRIMARY KEY,
|
|
table_prefix VARCHAR(64) NOT NULL UNIQUE,
|
|
schema_version BIGINT NOT NULL DEFAULT 52,
|
|
created_at VARCHAR(64) NOT NULL DEFAULT (CAST(CURRENT_TIMESTAMP AS CHAR)),
|
|
updated_at VARCHAR(64) NOT NULL DEFAULT (CAST(CURRENT_TIMESTAMP AS CHAR))
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS sessions (
|
|
token VARCHAR(64) PRIMARY KEY,
|
|
account_id VARCHAR(64) NOT NULL UNIQUE,
|
|
browser_id VARCHAR(64) NOT NULL,
|
|
email VARCHAR(320) NOT NULL,
|
|
password_ciphertext TEXT NOT NULL,
|
|
user_hash VARCHAR(128) NOT NULL,
|
|
imap_host VARCHAR(255) NOT NULL,
|
|
imap_port BIGINT NOT NULL,
|
|
imap_tls BIGINT NOT NULL,
|
|
imap_tls_verify BIGINT NOT NULL,
|
|
smtp_host VARCHAR(255) NOT NULL,
|
|
smtp_port BIGINT NOT NULL,
|
|
smtp_tls BIGINT NOT NULL,
|
|
smtp_tls_verify BIGINT NOT NULL,
|
|
timeout_secs BIGINT NOT NULL,
|
|
created_at_unix BIGINT NOT NULL,
|
|
last_accessed_unix BIGINT NOT NULL,
|
|
user_agent VARCHAR(512) NOT NULL DEFAULT '',
|
|
INDEX idx_sessions_browser (browser_id),
|
|
INDEX idx_sessions_user (user_hash),
|
|
INDEX idx_sessions_expiry (last_accessed_unix, timeout_secs)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
-- RUSTBOX:GLOBAL-END
|
|
|
|
-- RUSTBOX:TENANT-BEGIN
|
|
-- {{p}} is replaced at runtime with the account table prefix.
|
|
CREATE TABLE {{p}}calendar_events (
|
|
id VARCHAR(255) PRIMARY KEY,
|
|
title TEXT NOT NULL,
|
|
description LONGTEXT NOT NULL DEFAULT (''),
|
|
location TEXT NOT NULL DEFAULT (''),
|
|
start_time VARCHAR(255) NOT NULL,
|
|
end_time VARCHAR(255) NOT NULL,
|
|
all_day BIGINT NOT NULL DEFAULT 0,
|
|
recurrence_rule TEXT,
|
|
attendees LONGTEXT NOT NULL DEFAULT ('[]'),
|
|
organizer TEXT NOT NULL DEFAULT (''),
|
|
status TEXT NOT NULL DEFAULT ('confirmed'),
|
|
source TEXT NOT NULL DEFAULT ('manual'),
|
|
source_uid VARCHAR(255),
|
|
source_message_uid BIGINT,
|
|
source_message_folder TEXT,
|
|
meeting_url TEXT,
|
|
color TEXT,
|
|
reminder_minutes BIGINT,
|
|
created_at VARCHAR(64) NOT NULL DEFAULT (CAST(CURRENT_TIMESTAMP AS CHAR)),
|
|
updated_at VARCHAR(64) NOT NULL DEFAULT (CAST(CURRENT_TIMESTAMP AS CHAR))
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE {{p}}calendar_settings (
|
|
id BIGINT DEFAULT 1 PRIMARY KEY,
|
|
default_view TEXT NOT NULL DEFAULT ('month'),
|
|
week_starts_on BIGINT 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 BIGINT NOT NULL DEFAULT 0,
|
|
updated_at VARCHAR(64) NOT NULL DEFAULT (CAST(CURRENT_TIMESTAMP AS CHAR))
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE {{p}}contact_group_members (
|
|
group_id VARCHAR(255) NOT NULL,
|
|
contact_id VARCHAR(255) NOT NULL,
|
|
PRIMARY KEY (group_id, contact_id)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE {{p}}contact_groups (
|
|
id VARCHAR(255) PRIMARY KEY,
|
|
name VARCHAR(512) NOT NULL,
|
|
created_at VARCHAR(64) NOT NULL DEFAULT (CAST(CURRENT_TIMESTAMP AS CHAR)),
|
|
updated_at VARCHAR(64) NOT NULL DEFAULT (CAST(CURRENT_TIMESTAMP AS CHAR)),
|
|
UNIQUE (name)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE {{p}}contact_photos (
|
|
contact_id VARCHAR(255) PRIMARY KEY,
|
|
content_type TEXT NOT NULL,
|
|
data LONGBLOB NOT NULL,
|
|
updated_at VARCHAR(64) NOT NULL DEFAULT (CAST(CURRENT_TIMESTAMP AS CHAR))
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE {{p}}contacts (
|
|
id VARCHAR(255) PRIMARY KEY,
|
|
email VARCHAR(320) NOT NULL,
|
|
name VARCHAR(512) NOT NULL DEFAULT '',
|
|
company TEXT NOT NULL DEFAULT (''),
|
|
notes LONGTEXT NOT NULL DEFAULT (''),
|
|
is_favorite BIGINT NOT NULL DEFAULT 0,
|
|
last_contacted VARCHAR(64),
|
|
contact_count BIGINT NOT NULL DEFAULT 0,
|
|
source TEXT NOT NULL DEFAULT ('manual'),
|
|
created_at VARCHAR(64) NOT NULL DEFAULT (CAST(CURRENT_TIMESTAMP AS CHAR)),
|
|
updated_at VARCHAR(64) NOT NULL DEFAULT (CAST(CURRENT_TIMESTAMP AS CHAR)),
|
|
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 LONGTEXT NOT NULL DEFAULT ('[]'),
|
|
phones_json LONGTEXT NOT NULL DEFAULT ('[]'),
|
|
addresses_json LONGTEXT NOT NULL DEFAULT ('[]')
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE {{p}}display_preferences (
|
|
id BIGINT DEFAULT 1 PRIMARY KEY,
|
|
density TEXT NOT NULL DEFAULT ('comfortable'),
|
|
theme TEXT NOT NULL DEFAULT ('system'),
|
|
language TEXT NOT NULL DEFAULT ('en'),
|
|
updated_at VARCHAR(64) NOT NULL DEFAULT (CAST(CURRENT_TIMESTAMP AS CHAR)),
|
|
compose_format TEXT NOT NULL DEFAULT ('html'),
|
|
deep_index BIGINT NOT NULL DEFAULT 0,
|
|
animation_mode TEXT,
|
|
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 BIGINT NOT NULL DEFAULT 13,
|
|
row_height BIGINT NOT NULL DEFAULT 58,
|
|
folder_pane_width BIGINT NOT NULL DEFAULT 228,
|
|
message_pane_width BIGINT NOT NULL DEFAULT 420,
|
|
border_radius BIGINT NOT NULL DEFAULT 4,
|
|
contrast TEXT NOT NULL DEFAULT ('normal'),
|
|
show_avatars BIGINT NOT NULL DEFAULT 1,
|
|
show_attachment_icons BIGINT NOT NULL DEFAULT 1,
|
|
show_flags BIGINT NOT NULL DEFAULT 1,
|
|
reduce_motion BIGINT 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 BIGINT NOT NULL DEFAULT 3000,
|
|
default_priority TEXT NOT NULL DEFAULT ('normal'),
|
|
request_mdn_default BIGINT NOT NULL DEFAULT 0,
|
|
attachment_reminder BIGINT NOT NULL DEFAULT 1,
|
|
icon_size BIGINT NOT NULL DEFAULT 18,
|
|
toolbar_density TEXT NOT NULL DEFAULT ('normal'),
|
|
sidebar_item_height BIGINT NOT NULL DEFAULT 29,
|
|
reader_max_width BIGINT NOT NULL DEFAULT 0,
|
|
composer_width BIGINT NOT NULL DEFAULT 900,
|
|
selection_color TEXT NOT NULL DEFAULT ('#28352e'),
|
|
unread_font_weight BIGINT NOT NULL DEFAULT 730,
|
|
unread_badge_style TEXT NOT NULL DEFAULT ('dot'),
|
|
compact_headers BIGINT NOT NULL DEFAULT 0,
|
|
show_borders BIGINT NOT NULL DEFAULT 1,
|
|
scrollbar_density TEXT NOT NULL DEFAULT ('thin'),
|
|
monochrome BIGINT 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 BIGINT NOT NULL DEFAULT 1,
|
|
interface_skin TEXT NOT NULL DEFAULT ('rustbox'),
|
|
preset_scale_unlocked BIGINT NOT NULL DEFAULT 0,
|
|
adaptive_email_colors BIGINT NOT NULL DEFAULT 0,
|
|
skin_depth TEXT NOT NULL DEFAULT ('standard'),
|
|
skin_gradients BIGINT NOT NULL DEFAULT 0
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE {{p}}draft_attachments (
|
|
id VARCHAR(255) PRIMARY KEY,
|
|
draft_id VARCHAR(255) NOT NULL,
|
|
filename TEXT NOT NULL,
|
|
content_type TEXT NOT NULL,
|
|
size BIGINT NOT NULL,
|
|
file_path TEXT NOT NULL,
|
|
checksum_sha256 VARCHAR(64) NULL,
|
|
created_at VARCHAR(64) NOT NULL DEFAULT (CAST(CURRENT_TIMESTAMP AS CHAR))
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
|
|
CREATE TABLE {{p}}blob_delete_outbox (
|
|
id VARCHAR(64) PRIMARY KEY,
|
|
storage_key TEXT NOT NULL,
|
|
attempts BIGINT NOT NULL DEFAULT 0,
|
|
available_at BIGINT NOT NULL DEFAULT 0,
|
|
claimed_until BIGINT NOT NULL DEFAULT 0,
|
|
last_error TEXT NULL,
|
|
created_at BIGINT NOT NULL,
|
|
updated_at BIGINT NOT NULL,
|
|
INDEX idx_blob_delete_outbox_ready (available_at, claimed_until, updated_at)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE {{p}}search_outbox (
|
|
id VARCHAR(64) PRIMARY KEY,
|
|
generation VARCHAR(64) NOT NULL,
|
|
event_type VARCHAR(16) NOT NULL,
|
|
message_uid BIGINT NOT NULL,
|
|
folder TEXT NOT NULL,
|
|
payload LONGTEXT NULL,
|
|
attempts BIGINT NOT NULL DEFAULT 0,
|
|
available_at BIGINT NOT NULL DEFAULT 0,
|
|
claimed_until BIGINT NOT NULL DEFAULT 0,
|
|
dead_letter BIGINT NOT NULL DEFAULT 0,
|
|
last_error TEXT NULL,
|
|
created_at BIGINT NOT NULL,
|
|
updated_at BIGINT NOT NULL,
|
|
INDEX idx_search_outbox_ready (dead_letter, available_at, claimed_until, updated_at)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE {{p}}drafts (
|
|
id VARCHAR(255) PRIMARY KEY,
|
|
to_addresses LONGTEXT NOT NULL DEFAULT (''),
|
|
cc_addresses LONGTEXT NOT NULL DEFAULT (''),
|
|
bcc_addresses LONGTEXT NOT NULL DEFAULT (''),
|
|
subject TEXT NOT NULL DEFAULT (''),
|
|
text_body LONGTEXT NOT NULL DEFAULT (''),
|
|
html_body LONGTEXT,
|
|
in_reply_to TEXT,
|
|
references_header LONGTEXT,
|
|
created_at VARCHAR(64) NOT NULL DEFAULT (CAST(CURRENT_TIMESTAMP AS CHAR)),
|
|
updated_at VARCHAR(64) NOT NULL DEFAULT (CAST(CURRENT_TIMESTAMP AS CHAR)),
|
|
request_mdn BIGINT NOT NULL DEFAULT 0,
|
|
priority TEXT NOT NULL DEFAULT ('normal'),
|
|
compose_format TEXT NOT NULL DEFAULT ('html'),
|
|
remote_folder TEXT,
|
|
remote_uid BIGINT,
|
|
remote_uid_validity BIGINT,
|
|
pgp_mode TEXT NOT NULL DEFAULT ('none'),
|
|
pgp_inline BIGINT NOT NULL DEFAULT 0,
|
|
pgp_attach_public_key BIGINT NOT NULL DEFAULT 0,
|
|
pgp_attach_recipient_keys BIGINT NOT NULL DEFAULT 0
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE {{p}}folder_preferences (
|
|
folder_name VARCHAR(512) PRIMARY KEY,
|
|
flagged_on_top BIGINT,
|
|
updated_at VARCHAR(64) NOT NULL DEFAULT (CAST(CURRENT_TIMESTAMP AS CHAR))
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE {{p}}folders (
|
|
name VARCHAR(512) PRIMARY KEY,
|
|
delimiter TEXT,
|
|
parent TEXT,
|
|
flags TEXT NOT NULL DEFAULT (''),
|
|
is_subscribed BIGINT NOT NULL DEFAULT 1,
|
|
total_count BIGINT NOT NULL DEFAULT 0,
|
|
unread_count BIGINT NOT NULL DEFAULT 0,
|
|
uid_validity BIGINT NOT NULL DEFAULT 0,
|
|
highest_modseq BIGINT NOT NULL DEFAULT 0,
|
|
counter_generation BIGINT NOT NULL DEFAULT 0,
|
|
updated_at VARCHAR(64) NOT NULL DEFAULT (CAST(CURRENT_TIMESTAMP AS CHAR)),
|
|
messages_updated_at VARCHAR(64)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE {{p}}identities (
|
|
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
|
display_name TEXT NOT NULL DEFAULT (''),
|
|
email TEXT NOT NULL,
|
|
signature_html LONGTEXT NOT NULL DEFAULT (''),
|
|
is_default BIGINT NOT NULL DEFAULT 0,
|
|
created_at VARCHAR(64) NOT NULL DEFAULT (CAST(CURRENT_TIMESTAMP AS CHAR)),
|
|
updated_at VARCHAR(64) NOT NULL DEFAULT (CAST(CURRENT_TIMESTAMP AS CHAR)),
|
|
reply_to TEXT NOT NULL DEFAULT (''),
|
|
bcc TEXT NOT NULL DEFAULT (''),
|
|
organization TEXT NOT NULL DEFAULT (''),
|
|
signature_text LONGTEXT NOT NULL DEFAULT (''),
|
|
signature_new BIGINT NOT NULL DEFAULT 1,
|
|
signature_reply BIGINT NOT NULL DEFAULT 1,
|
|
signature_forward BIGINT NOT NULL DEFAULT 1,
|
|
signature_position TEXT NOT NULL DEFAULT ('above'),
|
|
signature_insert_mode VARCHAR(16) NOT NULL DEFAULT ('silent'),
|
|
pgp_fingerprint TEXT,
|
|
pgp_sign_default BIGINT NOT NULL DEFAULT 0,
|
|
pgp_encrypt_default BIGINT NOT NULL DEFAULT 0,
|
|
pgp_inline_default BIGINT NOT NULL DEFAULT 0
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE {{p}}known_addresses (
|
|
email VARCHAR(320) NOT NULL PRIMARY KEY,
|
|
name VARCHAR(512) NOT NULL DEFAULT ''
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE {{p}}mail_preferences (
|
|
id BIGINT PRIMARY KEY,
|
|
messages_per_page BIGINT NOT NULL DEFAULT 300,
|
|
message_loading_mode TEXT NOT NULL DEFAULT ('pagination'),
|
|
mark_read_delay_ms BIGINT 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 BIGINT NOT NULL DEFAULT 1,
|
|
show_snippets BIGINT NOT NULL DEFAULT 1,
|
|
default_sort TEXT NOT NULL DEFAULT ('date_desc'),
|
|
updated_at VARCHAR(64) NOT NULL DEFAULT (CAST(CURRENT_TIMESTAMP AS CHAR)),
|
|
flagged_on_top BIGINT NOT NULL DEFAULT 0,
|
|
sync_imap_keywords BIGINT NOT NULL DEFAULT 0,
|
|
compact_wide_rows BIGINT NOT NULL DEFAULT 1
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE {{p}}meeting_templates (
|
|
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
|
name TEXT NOT NULL,
|
|
url_template TEXT NOT NULL,
|
|
icon TEXT NOT NULL DEFAULT (''),
|
|
is_default BIGINT NOT NULL DEFAULT 0,
|
|
created_at VARCHAR(64) NOT NULL DEFAULT (CAST(CURRENT_TIMESTAMP AS CHAR))
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE {{p}}message_tags (
|
|
tag_id VARCHAR(128) NOT NULL,
|
|
message_uid BIGINT NOT NULL,
|
|
message_folder VARCHAR(512) NOT NULL,
|
|
created_at VARCHAR(64) NOT NULL DEFAULT (CAST(CURRENT_TIMESTAMP AS CHAR)),
|
|
PRIMARY KEY (tag_id, message_uid, message_folder)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE {{p}}messages (
|
|
uid BIGINT NOT NULL,
|
|
folder VARCHAR(512) NOT NULL,
|
|
message_id VARCHAR(255),
|
|
in_reply_to VARCHAR(255),
|
|
subject TEXT NOT NULL DEFAULT (''),
|
|
from_address TEXT NOT NULL DEFAULT (''),
|
|
from_name TEXT NOT NULL DEFAULT (''),
|
|
to_addresses LONGTEXT NOT NULL DEFAULT (''),
|
|
cc_addresses LONGTEXT NOT NULL DEFAULT (''),
|
|
date TEXT NOT NULL,
|
|
flags TEXT NOT NULL DEFAULT (''),
|
|
size BIGINT NOT NULL DEFAULT 0,
|
|
has_attachments BIGINT NOT NULL DEFAULT 0,
|
|
snippet TEXT NOT NULL DEFAULT (''),
|
|
body_cached BIGINT NOT NULL DEFAULT 0,
|
|
body_html LONGTEXT,
|
|
body_text LONGTEXT,
|
|
references_header LONGTEXT,
|
|
date_epoch BIGINT NOT NULL DEFAULT 0,
|
|
attachments_json LONGTEXT,
|
|
raw_headers LONGTEXT,
|
|
reaction TEXT,
|
|
email_theme BIGINT,
|
|
PRIMARY KEY (uid, folder)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE {{p}}notification_preferences (
|
|
id BIGINT DEFAULT 1 PRIMARY KEY,
|
|
enabled BIGINT NOT NULL DEFAULT 1,
|
|
sound BIGINT NOT NULL DEFAULT 0,
|
|
folders TEXT NOT NULL DEFAULT ('["INBOX"]'),
|
|
updated_at VARCHAR(64) NOT NULL DEFAULT (CAST(CURRENT_TIMESTAMP AS CHAR)),
|
|
dnd_enabled BIGINT NOT NULL DEFAULT 0,
|
|
dnd_start TEXT NOT NULL DEFAULT ('22:00'),
|
|
dnd_end TEXT NOT NULL DEFAULT ('07:00')
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE {{p}}pgp_keys (
|
|
fingerprint VARCHAR(255) PRIMARY KEY,
|
|
key_id TEXT NOT NULL,
|
|
email VARCHAR(320) NOT NULL DEFAULT '',
|
|
user_id TEXT NOT NULL DEFAULT (''),
|
|
public_key_armor LONGTEXT NOT NULL,
|
|
secret_key_path TEXT,
|
|
has_secret BIGINT NOT NULL DEFAULT 0,
|
|
trust TEXT NOT NULL DEFAULT ('unknown'),
|
|
source TEXT NOT NULL DEFAULT ('import'),
|
|
created_at VARCHAR(64) NOT NULL DEFAULT (CAST(CURRENT_TIMESTAMP AS CHAR)),
|
|
updated_at VARCHAR(64) NOT NULL DEFAULT (CAST(CURRENT_TIMESTAMP AS CHAR))
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE {{p}}pgp_preferences (
|
|
id BIGINT PRIMARY KEY,
|
|
wkd_enabled BIGINT NOT NULL DEFAULT 1,
|
|
hkp_enabled BIGINT NOT NULL DEFAULT 0,
|
|
require_trusted_encryption BIGINT NOT NULL DEFAULT 0,
|
|
updated_at VARCHAR(64) NOT NULL DEFAULT (CAST(CURRENT_TIMESTAMP AS CHAR))
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE {{p}}response_templates (
|
|
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
|
name VARCHAR(512) NOT NULL,
|
|
body TEXT NOT NULL DEFAULT (''),
|
|
created_at VARCHAR(64) NOT NULL DEFAULT (CAST(CURRENT_TIMESTAMP AS CHAR)),
|
|
updated_at VARCHAR(64) NOT NULL DEFAULT (CAST(CURRENT_TIMESTAMP AS CHAR)),
|
|
format TEXT NOT NULL DEFAULT ('text'),
|
|
UNIQUE (name)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE {{p}}saved_searches (
|
|
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
|
name VARCHAR(512) NOT NULL,
|
|
query_string LONGTEXT NOT NULL,
|
|
created_at VARCHAR(64) NOT NULL DEFAULT (CAST(CURRENT_TIMESTAMP AS CHAR)),
|
|
updated_at VARCHAR(64) NOT NULL DEFAULT (CAST(CURRENT_TIMESTAMP AS CHAR))
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE {{p}}snoozed_messages (
|
|
id VARCHAR(64) PRIMARY KEY,
|
|
message_uid BIGINT NOT NULL,
|
|
message_folder VARCHAR(512) NOT NULL,
|
|
wake_at BIGINT NOT NULL,
|
|
created_at VARCHAR(64) NOT NULL DEFAULT (CAST(CURRENT_TIMESTAMP AS CHAR)),
|
|
UNIQUE KEY idx_snoozed_messages_unique (message_uid, message_folder),
|
|
INDEX idx_snoozed_messages_wake (wake_at)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE {{p}}special_folders (
|
|
role VARCHAR(255) PRIMARY KEY,
|
|
folder_name TEXT NOT NULL,
|
|
updated_at VARCHAR(64) NOT NULL DEFAULT (CAST(CURRENT_TIMESTAMP AS CHAR))
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE {{p}}tags (
|
|
id VARCHAR(128) PRIMARY KEY,
|
|
name VARCHAR(512) NOT NULL,
|
|
color TEXT NOT NULL DEFAULT ('#6b7280'),
|
|
created_at VARCHAR(64) NOT NULL DEFAULT (CAST(CURRENT_TIMESTAMP AS CHAR)),
|
|
updated_at VARCHAR(64) NOT NULL DEFAULT (CAST(CURRENT_TIMESTAMP AS CHAR)),
|
|
imap_keyword VARCHAR(255) NOT NULL DEFAULT '',
|
|
UNIQUE (name)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE {{p}}trusted_senders (
|
|
email VARCHAR(320) PRIMARY KEY,
|
|
created_at VARCHAR(64) NOT NULL DEFAULT (CAST(CURRENT_TIMESTAMP AS CHAR))
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE {{p}}user_meta (
|
|
key VARCHAR(255) PRIMARY KEY,
|
|
value TEXT NOT NULL
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
ALTER TABLE {{p}}contact_group_members ADD CONSTRAINT {{p}}fk_contact_group_members_0 FOREIGN KEY (contact_id) REFERENCES {{p}}contacts (id) ON DELETE CASCADE;
|
|
ALTER TABLE {{p}}contact_group_members ADD CONSTRAINT {{p}}fk_contact_group_members_1 FOREIGN KEY (group_id) REFERENCES {{p}}contact_groups (id) ON DELETE CASCADE;
|
|
ALTER TABLE {{p}}contact_photos ADD CONSTRAINT {{p}}fk_contact_photos_0 FOREIGN KEY (contact_id) REFERENCES {{p}}contacts (id) ON DELETE CASCADE;
|
|
ALTER TABLE {{p}}draft_attachments ADD CONSTRAINT {{p}}fk_draft_attachments_0 FOREIGN KEY (draft_id) REFERENCES {{p}}drafts (id) ON DELETE CASCADE;
|
|
ALTER TABLE {{p}}folder_preferences ADD CONSTRAINT {{p}}fk_folder_preferences_0 FOREIGN KEY (folder_name) REFERENCES {{p}}folders (name) ON DELETE CASCADE ON UPDATE CASCADE;
|
|
ALTER TABLE {{p}}message_tags ADD CONSTRAINT {{p}}fk_message_tags_0 FOREIGN KEY (message_uid, message_folder) REFERENCES {{p}}messages (uid, folder) ON DELETE CASCADE ON UPDATE CASCADE;
|
|
ALTER TABLE {{p}}message_tags ADD CONSTRAINT {{p}}fk_message_tags_1 FOREIGN KEY (tag_id) REFERENCES {{p}}tags (id) ON DELETE CASCADE;
|
|
ALTER TABLE {{p}}messages ADD CONSTRAINT {{p}}fk_messages_0 FOREIGN KEY (folder) REFERENCES {{p}}folders (name) ON DELETE CASCADE;
|
|
|
|
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 (email);
|
|
CREATE UNIQUE INDEX {{p}}idx_saved_searches_name ON {{p}}saved_searches (name);
|
|
|
|
-- RUSTBOX:TENANT-END
|