diff options
| author | 2019-10-05 10:37:15 +0200 | |
|---|---|---|
| committer | 2019-10-05 10:37:15 +0200 | |
| commit | 38932ee3bb3ccd41c0e2d79329e2d77fb5995256 (patch) | |
| tree | 13979ffa248fa979591a966e1c9733e859687876 /app | |
| parent | 83b0521233771c1b2da617672ea168751ed8016d (diff) | |
MySQL entry content MEDIUMBLOB (#2551)
Fix https://github.com/FreshRSS/FreshRSS/issues/2448
Diffstat (limited to 'app')
| -rw-r--r-- | app/Models/DatabaseDAO.php | 2 | ||||
| -rw-r--r-- | app/Models/EntryDAO.php | 26 | ||||
| -rw-r--r-- | app/SQL/install.sql.mysql.php | 4 |
3 files changed, 29 insertions, 3 deletions
diff --git a/app/Models/DatabaseDAO.php b/app/Models/DatabaseDAO.php index 8046e1b5a..f6cd2f756 100644 --- a/app/Models/DatabaseDAO.php +++ b/app/Models/DatabaseDAO.php @@ -8,7 +8,7 @@ class FreshRSS_DatabaseDAO extends Minz_ModelPdo { //MySQL error codes const ER_BAD_FIELD_ERROR = '42S22'; const ER_BAD_TABLE_ERROR = '42S02'; - const ER_TRUNCATED_WRONG_VALUE_FOR_FIELD = '1366'; + const ER_DATA_TOO_LONG = '1406'; //MySQL InnoDB maximum index length for UTF8MB4 //https://dev.mysql.com/doc/refman/8.0/en/innodb-restrictions.html diff --git a/app/Models/EntryDAO.php b/app/Models/EntryDAO.php index 6e5d00a93..b7ce89094 100644 --- a/app/Models/EntryDAO.php +++ b/app/Models/EntryDAO.php @@ -38,6 +38,25 @@ class FreshRSS_EntryDAO extends Minz_ModelPdo implements FreshRSS_Searchable { return $ok; } + private function updateToMediumBlob() { + if ($this->pdo->dbType() !== 'mysql') { + return false; + } + Minz_Log::warning('Update MySQL table to use MEDIUMBLOB...'); + + $sql = <<<'SQL' +ALTER TABLE `_entry` MODIFY `content_bin` MEDIUMBLOB; +ALTER TABLE `_entrytmp` MODIFY `content_bin` MEDIUMBLOB; +SQL; + try { + $ok = $this->pdo->exec($sql) !== false; + } catch (Exception $e) { + $ok = false; + Minz_Log::error(__method__ . ' error: ' . $e->getMessage()); + } + return $ok; + } + //TODO: Move the database auto-updates to DatabaseDAO protected function autoUpdateDb($errorInfo) { if (isset($errorInfo[0])) { @@ -50,6 +69,13 @@ class FreshRSS_EntryDAO extends Minz_ModelPdo implements FreshRSS_Searchable { } } } + if (isset($errorInfo[1])) { + if ($errorInfo[1] == FreshRSS_DatabaseDAO::ER_DATA_TOO_LONG) { + if (stripos($errorInfo[2], 'content_bin') !== false) { + return $this->updateToMediumBlob(); //v1.15.0 + } + } + } return false; } diff --git a/app/SQL/install.sql.mysql.php b/app/SQL/install.sql.mysql.php index 328e8acc0..a5db1b216 100644 --- a/app/SQL/install.sql.mysql.php +++ b/app/SQL/install.sql.mysql.php @@ -43,7 +43,7 @@ CREATE TABLE IF NOT EXISTS `_entry` ( `guid` VARCHAR(760) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, -- Maximum for UNIQUE is 767B `title` VARCHAR(255) NOT NULL, `author` VARCHAR(255), - `content_bin` BLOB, -- v0.7 + `content_bin` MEDIUMBLOB, -- v0.7 `link` VARCHAR(1023) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, `date` INT(11), -- Until year 2038 `lastSeen` INT(11) DEFAULT 0, -- v1.1.1, Until year 2038 @@ -71,7 +71,7 @@ CREATE TABLE IF NOT EXISTS `_entrytmp` ( -- v1.7 `guid` VARCHAR(760) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, `title` VARCHAR(255) NOT NULL, `author` VARCHAR(255), - `content_bin` BLOB, + `content_bin` MEDIUMBLOB, `link` VARCHAR(1023) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, `date` INT(11), `lastSeen` INT(11) DEFAULT 0, |
