From: Eric Wong Date: Wed, 4 Dec 2024 19:39:13 +0000 (+0000) Subject: sqlite: use `BLOB' column type instead of `VARBINARY' X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=90d80eed87923bd8b9ec2e1b04e0235b182e5ea7;p=thirdparty%2Fpublic-inbox.git sqlite: use `BLOB' column type instead of `VARBINARY' `VARBINARY' isn't actually a documented type for SQLite but rather the result of MySQL infecting my mind decades ago. `BLOB' gives it the proper affinity and probably makes it easier for 3rd-party and one-off scripts to deal with such columns and should also make things more familiar to existing users. Surprisingly, this appears to have no functional change with forward or backwards compatibility since we ->bind_param binary data with SQL_BLOB on INSERTs anyways to prevent the flexible typing of SQLite from trying to guess types for us. --- diff --git a/lib/PublicInbox/LeiMailSync.pm b/lib/PublicInbox/LeiMailSync.pm index d23f6b4b1..fc7963a18 100644 --- a/lib/PublicInbox/LeiMailSync.pm +++ b/lib/PublicInbox/LeiMailSync.pm @@ -61,13 +61,13 @@ sub create_tables { $dbh->do(<<''); CREATE TABLE IF NOT EXISTS folders ( fid INTEGER PRIMARY KEY, - loc VARBINARY NOT NULL, /* URL;UIDVALIDITY=$N or $TYPE:/pathname */ + loc BLOB NOT NULL, /* URL;UIDVALIDITY=$N or $TYPE:/pathname */ UNIQUE (loc) ) $dbh->do(<<''); CREATE TABLE IF NOT EXISTS blob2num ( - oidbin VARBINARY NOT NULL, + oidbin BLOB NOT NULL, fid INTEGER NOT NULL, /* folder ID */ uid INTEGER NOT NULL, /* NNTP article number, IMAP UID, MH number */ /* not UNIQUE(fid, uid), since we may have broken servers */ @@ -80,9 +80,9 @@ CREATE INDEX IF NOT EXISTS idx_fid_uid ON blob2num(fid,uid) $dbh->do(<<''); CREATE TABLE IF NOT EXISTS blob2name ( - oidbin VARBINARY NOT NULL, + oidbin BLOB NOT NULL, fid INTEGER NOT NULL, /* folder ID */ - name VARBINARY NOT NULL, /* Maildir basename, JMAP blobId */ + name BLOB NOT NULL, /* Maildir basename, JMAP blobId */ /* not UNIQUE(fid, name), since we may have broken software */ UNIQUE (oidbin, fid, name) ) diff --git a/lib/PublicInbox/OverIdx.pm b/lib/PublicInbox/OverIdx.pm index 10cf8c395..dea6f0fc2 100644 --- a/lib/PublicInbox/OverIdx.pm +++ b/lib/PublicInbox/OverIdx.pm @@ -389,7 +389,7 @@ CREATE TABLE IF NOT EXISTS over ( sid INTEGER, /* Subject ID (IMAP ORDEREDSUBJECT "threading") */ ts INTEGER, /* IMAP INTERNALDATE (Received: header, git commit time) */ ds INTEGER, /* RFC-2822 sent Date: header, git author time */ - ddd VARBINARY /* doc-data-deflated (->to_doc_data, ->load_from_data) */ + ddd BLOB /* doc-data-deflated (->to_doc_data, ->load_from_data) */ ) $dbh->do('CREATE INDEX IF NOT EXISTS idx_tid ON over (tid)'); @@ -543,7 +543,7 @@ CREATE TABLE IF NOT EXISTS xref3 ( docid INTEGER NOT NULL, /* <=> over.num */ ibx_id INTEGER NOT NULL, /* <=> inboxes.ibx_id */ xnum INTEGER NOT NULL, /* NNTP article number in ibx */ - oidbin VARBINARY NOT NULL, /* 20-byte SHA-1 or 32-byte SHA-256 */ + oidbin BLOB NOT NULL, /* 20-byte SHA-1 or 32-byte SHA-256 */ UNIQUE (docid, ibx_id, xnum, oidbin) ) diff --git a/lib/PublicInbox/POP3D.pm b/lib/PublicInbox/POP3D.pm index bd4404345..1898c89d4 100644 --- a/lib/PublicInbox/POP3D.pm +++ b/lib/PublicInbox/POP3D.pm @@ -93,7 +93,7 @@ sub create_state_tables ($$) { $dbh->do(<<''); # map publicinbox..newsgroup to integers CREATE TABLE IF NOT EXISTS newsgroups ( newsgroup_id INTEGER PRIMARY KEY NOT NULL, - newsgroup VARBINARY NOT NULL, + newsgroup BLOB NOT NULL, UNIQUE (newsgroup) ) # the $NEWSGROUP_NAME.$SLICE_INDEX is part of the POP3 username; @@ -108,7 +108,7 @@ CREATE TABLE IF NOT EXISTS mailboxes ( $dbh->do(<<''); # actual users are differentiated by their UUID CREATE TABLE IF NOT EXISTS users ( user_id INTEGER PRIMARY KEY NOT NULL, - uuid VARBINARY NOT NULL, + uuid BLOB NOT NULL, last_seen INTEGER NOT NULL, /* to expire idle accounts */ UNIQUE (uuid) ) diff --git a/lib/PublicInbox/SharedKV.pm b/lib/PublicInbox/SharedKV.pm index 51ece48d8..062d5e3e5 100644 --- a/lib/PublicInbox/SharedKV.pm +++ b/lib/PublicInbox/SharedKV.pm @@ -32,8 +32,8 @@ sub dbh { ($opt->{journal_mode} // 'WAL')); $dbh->do(<<''); CREATE TABLE IF NOT EXISTS kv ( - k VARBINARY PRIMARY KEY NOT NULL, - v VARBINARY NOT NULL, + k BLOB PRIMARY KEY NOT NULL, + v BLOB NOT NULL, UNIQUE (k) )