From ba781964f43bc131bc46c642efdedcda41658b69 Mon Sep 17 00:00:00 2001 From: Jared Hancock <jared@osticket.com> Date: Thu, 9 Jan 2014 09:05:40 -0600 Subject: [PATCH] Rewrite %file table structure Add `attrs` field for backend state information (multi-part migration, multi-part upload, etc). Change `size` to be an integer rather than text field. (Storage space will be about the same, but int makes more sense). Size the `key` and `signature` for ~512 bits. The base64 encoding allows 6-bits per char. At 86 chars, we have 516 bits maximum space. --- include/upgrader/streams/core.sig | 2 +- .../streams/core/934954de-f1ccd3bb.patch.sql | 23 +++++++++++++++++++ .../streams/core/ed60ba20-7e2017c8.patch.sql | 19 --------------- setup/inc/streams/core/install-mysql.sql | 10 ++++---- 4 files changed, 30 insertions(+), 24 deletions(-) create mode 100644 include/upgrader/streams/core/934954de-f1ccd3bb.patch.sql delete mode 100644 include/upgrader/streams/core/ed60ba20-7e2017c8.patch.sql diff --git a/include/upgrader/streams/core.sig b/include/upgrader/streams/core.sig index c285c35e5..6dad7bd6c 100644 --- a/include/upgrader/streams/core.sig +++ b/include/upgrader/streams/core.sig @@ -1 +1 @@ -756b22698b4f69d1aa3b51e5cbd917da +f1ccd3bb620e314b0ae1dbd0a1a99177 diff --git a/include/upgrader/streams/core/934954de-f1ccd3bb.patch.sql b/include/upgrader/streams/core/934954de-f1ccd3bb.patch.sql new file mode 100644 index 000000000..c6bb713e7 --- /dev/null +++ b/include/upgrader/streams/core/934954de-f1ccd3bb.patch.sql @@ -0,0 +1,23 @@ +/** + * @version v1.8.1 + * @signature f1ccd3bb620e314b0ae1dbd0a1a99177 + * @title Pluggable Storage Backends + * + * This patch will allow attachments to be stored outside the database (like + * on the filesystem) + */ + +ALTER TABLE `%TABLE_PREFIX%file` + ADD `bk` CHAR(1) NOT NULL DEFAULT 'D' AFTER `ft`, + -- RFC 4288, Section 4.2 declares max MIMEType at 255 ascii chars + CHANGE `type` `type` varchar(255) collate ascii_general_ci NOT NULL default '', + CHANGE `size` `size` BIGINT(20) NOT NULL DEFAULT 0, + CHANGE `hash` `key` VARCHAR(86) COLLATE ascii_general_ci, + ADD `signature` VARCHAR(86) COLLATE ascii_bin AFTER `key`, + ADD `attrs` VARCHAR(255) AFTER `name`, + ADD INDEX (`signature`); + +-- Finished with patch +UPDATE `%TABLE_PREFIX%config` + SET `value` = 'f1ccd3bb620e314b0ae1dbd0a1a99177' + WHERE `key` = 'schema_signature' AND `namespace` = 'core'; diff --git a/include/upgrader/streams/core/ed60ba20-7e2017c8.patch.sql b/include/upgrader/streams/core/ed60ba20-7e2017c8.patch.sql deleted file mode 100644 index cbf4e9d06..000000000 --- a/include/upgrader/streams/core/ed60ba20-7e2017c8.patch.sql +++ /dev/null @@ -1,19 +0,0 @@ -/** - * @version v1.8.1 - * @signature ee1f4b2752ee7b4be24a4d9dfe96185a - * @title Pluggable Storage - * - * This patch will allow attachments to be stored outside the database (like - * on the filesystem) - */ - -ALTER TABLE `%TABLE_PREFIX%file` - ADD `bk` CHAR(1) NOT NULL DEFAULT 'D' AFTER `ft`, - CHANGE `hash` `key` VARCHAR(125) COLLATE ascii_general_ci, - ADD `signature` VARCHAR(125) COLLATE ascii_bin AFTER `key`, - ADD INDEX (`signature`); - --- Finished with patch -UPDATE `%TABLE_PREFIX%config` - SET `value` = 'ee1f4b2752ee7b4be24a4d9dfe96185a' - WHERE `key` = 'schema_signature' AND `namespace` = 'core'; diff --git a/setup/inc/streams/core/install-mysql.sql b/setup/inc/streams/core/install-mysql.sql index 3cc30e3f1..4b51a63c9 100644 --- a/setup/inc/streams/core/install-mysql.sql +++ b/setup/inc/streams/core/install-mysql.sql @@ -318,11 +318,13 @@ CREATE TABLE `%TABLE_PREFIX%file` ( `id` int(11) NOT NULL auto_increment, `ft` CHAR( 1 ) NOT NULL DEFAULT 'T', `bk` CHAR( 1 ) NOT NULL DEFAULT 'D', - `type` varchar(255) NOT NULL default '', - `size` varchar(25) NOT NULL default '', - `key` varchar(125) collate ascii_general_ci NOT NULL, - `signature` varchar(125) collate ascii_bin NOT NULL, + -- RFC 4288, Section 4.2 declares max MIMEType at 255 ascii chars + `type` varchar(255) collate ascii_general_ci NOT NULL default '', + `size` bigint(20) unsigned NOT NULL default 0, + `key` varchar(86) collate ascii_general_ci NOT NULL, + `signature` varchar(86) collate ascii_bin NOT NULL, `name` varchar(255) NOT NULL default '', + `attrs` varchar(255), `created` datetime NOT NULL, PRIMARY KEY (`id`), KEY `ft` (`ft`), -- GitLab