From 3c4d856d60fc43217743597e0b509d0bbb56cbfa Mon Sep 17 00:00:00 2001 From: Laurent Dinclaux Date: Tue, 10 Feb 2026 10:35:20 +1100 Subject: [PATCH] Fix SQL schema issues across all database engines - Increase password column from varchar(64) to varchar(255) to prevent silent truncation of encrypted passwords - Add missing UNIQUE constraint on iid in MySQL - Add missing IX_ident_switch_iid index in PostgreSQL - Remove deprecated int display width in MySQL (int(10) -> int) - Fix trailing comma syntax error in SQLite 2018121800 migration - Normalize indentation across all initial SQL files - Add migration 2026021000 for all engines to fix existing installs --- SQL/mysql.initial.sql | 18 ++++----- SQL/mysql/2026021000.sql | 5 +++ SQL/postgres.initial.sql | 36 +++++++++--------- SQL/postgres/2026021000.sql | 4 ++ SQL/sqlite.initial.sql | 4 +- SQL/sqlite/2018121800.sql | 2 +- SQL/sqlite/2026021000.sql | 75 +++++++++++++++++++++++++++++++++++++ 7 files changed, 113 insertions(+), 31 deletions(-) create mode 100644 SQL/mysql/2026021000.sql create mode 100644 SQL/postgres/2026021000.sql create mode 100644 SQL/sqlite/2026021000.sql diff --git a/SQL/mysql.initial.sql b/SQL/mysql.initial.sql index 630b969..99370ba 100644 --- a/SQL/mysql.initial.sql +++ b/SQL/mysql.initial.sql @@ -1,19 +1,20 @@ CREATE TABLE IF NOT EXISTS `ident_switch` ( `id` - int(10) UNSIGNED + int UNSIGNED NOT NULL AUTO_INCREMENT, `user_id` - int(10) UNSIGNED + int UNSIGNED NOT NULL, `iid` - int(10) UNSIGNED - NOT NULL, + int UNSIGNED + NOT NULL + UNIQUE, `username` varchar(64), `password` - varchar(64), + varchar(255), `imap_host` varchar(64), `imap_port` @@ -33,9 +34,9 @@ CREATE TABLE IF NOT EXISTS `ident_switch` int CHECK(`smtp_port` > 0 AND `smtp_port` <= 65535), `smtp_auth` - smallint - NOT NULL - DEFAULT 1, + smallint + NOT NULL + DEFAULT 1, `drafts_mbox` varchar(64), `sent_mbox` @@ -51,4 +52,3 @@ CREATE TABLE IF NOT EXISTS `ident_switch` INDEX `IX_ident_switch_user_id`(`user_id`), INDEX `IX_ident_switch_iid`(`iid`) ); - diff --git a/SQL/mysql/2026021000.sql b/SQL/mysql/2026021000.sql new file mode 100644 index 0000000..31c60bb --- /dev/null +++ b/SQL/mysql/2026021000.sql @@ -0,0 +1,5 @@ +ALTER TABLE `ident_switch` + MODIFY `password` varchar(255); + +ALTER TABLE `ident_switch` + ADD UNIQUE (`iid`); diff --git a/SQL/postgres.initial.sql b/SQL/postgres.initial.sql index 878a40d..d810bbc 100644 --- a/SQL/postgres.initial.sql +++ b/SQL/postgres.initial.sql @@ -15,14 +15,14 @@ CREATE TABLE ident_switch username varchar(64), password - varchar(64), + varchar(255), imap_host varchar(64), imap_port integer CHECK(imap_port > 0 AND imap_port <= 65535), imap_delimiter - char(1), + char(1), label varchar(32), flags @@ -30,26 +30,24 @@ CREATE TABLE ident_switch NOT NULL DEFAULT(0), smtp_host - varchar(64), - smtp_port + varchar(64), + smtp_port integer CHECK(smtp_port > 0 AND smtp_port <= 65535), smtp_auth - smallint - NOT NULL - DEFAULT(1), - drafts_mbox - varchar(64), - sent_mbox - varchar(64), - junk_mbox - varchar(64), - trash_mbox - varchar(64), + smallint + NOT NULL + DEFAULT(1), + drafts_mbox + varchar(64), + sent_mbox + varchar(64), + junk_mbox + varchar(64), + trash_mbox + varchar(64), UNIQUE (user_id, label) ); -CREATE INDEX - IX_ident_switch_user_id -ON - ident_switch(user_id); +CREATE INDEX IX_ident_switch_user_id ON ident_switch(user_id); +CREATE INDEX IX_ident_switch_iid ON ident_switch(iid); diff --git a/SQL/postgres/2026021000.sql b/SQL/postgres/2026021000.sql new file mode 100644 index 0000000..21a5149 --- /dev/null +++ b/SQL/postgres/2026021000.sql @@ -0,0 +1,4 @@ +ALTER TABLE ident_switch + ALTER COLUMN password TYPE varchar(255); + +CREATE INDEX IF NOT EXISTS IX_ident_switch_iid ON ident_switch(iid); diff --git a/SQL/sqlite.initial.sql b/SQL/sqlite.initial.sql index d6aa114..3b5b051 100644 --- a/SQL/sqlite.initial.sql +++ b/SQL/sqlite.initial.sql @@ -15,7 +15,7 @@ CREATE TABLE ident_switch username varchar(64), password - varchar(64), + varchar(255), imap_host varchar(64), imap_port @@ -49,4 +49,4 @@ CREATE TABLE ident_switch UNIQUE (user_id, label) ); CREATE INDEX IX_ident_switch_user_id ON ident_switch(user_id); -CREATE INDEX IX_ident_switch_iid on ident_switch(iid); \ No newline at end of file +CREATE INDEX IX_ident_switch_iid ON ident_switch(iid); diff --git a/SQL/sqlite/2018121800.sql b/SQL/sqlite/2018121800.sql index 0e6011d..2b897a7 100644 --- a/SQL/sqlite/2018121800.sql +++ b/SQL/sqlite/2018121800.sql @@ -65,7 +65,7 @@ SELECT port, label, flags, - host, + host FROM ident_switch_old; diff --git a/SQL/sqlite/2026021000.sql b/SQL/sqlite/2026021000.sql new file mode 100644 index 0000000..af92521 --- /dev/null +++ b/SQL/sqlite/2026021000.sql @@ -0,0 +1,75 @@ +PRAGMA foreign_keys=off; +BEGIN TRANSACTION; + +ALTER TABLE ident_switch RENAME TO ident_switch_old; + +CREATE TABLE ident_switch +( + id + integer + PRIMARY KEY, + user_id + integer + NOT NULL + REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE, + iid + integer + NOT NULL + REFERENCES identities(identity_id) ON DELETE CASCADE ON UPDATE CASCADE + UNIQUE, + username + varchar(64), + password + varchar(255), + imap_host + varchar(64), + imap_port + integer + CHECK(imap_port > 0 AND imap_port <= 65535), + imap_delimiter + char(1), + label + varchar(32), + flags + integer + NOT NULL + DEFAULT(0), + smtp_host + varchar(64), + smtp_port + integer + CHECK(smtp_port > 0 AND smtp_port <= 65535), + smtp_auth + smallint + NOT NULL + DEFAULT 1, + drafts_mbox + varchar(64), + sent_mbox + varchar(64), + junk_mbox + varchar(64), + trash_mbox + varchar(64), + UNIQUE (user_id, label) +); +CREATE INDEX IX_ident_switch_user_id ON ident_switch(user_id); +CREATE INDEX IX_ident_switch_iid ON ident_switch(iid); + +INSERT OR ROLLBACK INTO + ident_switch ( + id, user_id, iid, username, password, imap_host, imap_port, + imap_delimiter, label, flags, smtp_host, smtp_port, smtp_auth, + drafts_mbox, sent_mbox, junk_mbox, trash_mbox + ) +SELECT + id, user_id, iid, username, password, imap_host, imap_port, + imap_delimiter, label, flags, smtp_host, smtp_port, smtp_auth, + drafts_mbox, sent_mbox, junk_mbox, trash_mbox +FROM + ident_switch_old; + +DROP TABLE ident_switch_old; + +COMMIT; +PRAGMA foreign_keys=on;