aboutsummaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2023-10-30 20:47:50 +0100
committerGravatar GitHub <noreply@github.com> 2023-10-30 20:47:50 +0100
commit0324df6f889f18500cc8d201fdc2845f3e4d1acf (patch)
treefafa9ab06c7fc7a3d48392cd0fd1ac959cc40a37 /app
parent06d00995049db9c7b915f67cfd4a5708aace458f (diff)
SQL increase length of VARCHAR fields (#5756)
* SQL increase length of VARCHAR fields Increase length of all fields, keeping the limits for: * Unique indexes on UTF-8: 191 bytes for MySQL; * Unique indexes on ASCII: 767 bytes for MySQL; * Max URL for external tools: 32768 characters; * Max VARCHAR: 65535 bytes for MySQL; Follow-up of https://github.com/FreshRSS/FreshRSS/pull/5038 Fix https://github.com/FreshRSS/FreshRSS/issues/4986 * Fix length test
Diffstat (limited to 'app')
-rw-r--r--app/Models/Category.php2
-rw-r--r--app/Models/EntryDAO.php20
-rw-r--r--app/Models/FeedDAO.php4
-rw-r--r--app/Models/TagDAO.php4
-rw-r--r--app/SQL/install.sql.mysql.php26
-rw-r--r--app/SQL/install.sql.pgsql.php30
-rw-r--r--app/SQL/install.sql.sqlite.php30
7 files changed, 58 insertions, 58 deletions
diff --git a/app/Models/Category.php b/app/Models/Category.php
index 3bb64df8b..370c49709 100644
--- a/app/Models/Category.php
+++ b/app/Models/Category.php
@@ -143,7 +143,7 @@ class FreshRSS_Category extends Minz_Model {
}
public function _name(string $value): void {
- $this->name = mb_strcut(trim($value), 0, 255, 'UTF-8');
+ $this->name = mb_strcut(trim($value), 0, FreshRSS_DatabaseDAO::LENGTH_INDEX_UNICODE, 'UTF-8');
}
/** @param array<FreshRSS_Feed>|FreshRSS_Feed $values */
diff --git a/app/Models/EntryDAO.php b/app/Models/EntryDAO.php
index b9f8d57cb..f7e9ffddc 100644
--- a/app/Models/EntryDAO.php
+++ b/app/Models/EntryDAO.php
@@ -109,18 +109,18 @@ SQL;
}
if ($this->addEntryPrepared) {
$this->addEntryPrepared->bindParam(':id', $valuesTmp['id']);
- $valuesTmp['guid'] = substr($valuesTmp['guid'], 0, 760);
+ $valuesTmp['guid'] = substr($valuesTmp['guid'], 0, 767);
$valuesTmp['guid'] = safe_ascii($valuesTmp['guid']);
$this->addEntryPrepared->bindParam(':guid', $valuesTmp['guid']);
- $valuesTmp['title'] = mb_strcut($valuesTmp['title'], 0, 255, 'UTF-8');
+ $valuesTmp['title'] = mb_strcut($valuesTmp['title'], 0, 65535, 'UTF-8');
$valuesTmp['title'] = safe_utf8($valuesTmp['title']);
$this->addEntryPrepared->bindParam(':title', $valuesTmp['title']);
- $valuesTmp['author'] = mb_strcut($valuesTmp['author'], 0, 255, 'UTF-8');
+ $valuesTmp['author'] = mb_strcut($valuesTmp['author'], 0, 65535, 'UTF-8');
$valuesTmp['author'] = safe_utf8($valuesTmp['author']);
$this->addEntryPrepared->bindParam(':author', $valuesTmp['author']);
$valuesTmp['content'] = safe_utf8($valuesTmp['content']);
$this->addEntryPrepared->bindParam(':content', $valuesTmp['content']);
- $valuesTmp['link'] = substr($valuesTmp['link'], 0, 1023);
+ $valuesTmp['link'] = substr($valuesTmp['link'], 0, 32768);
$valuesTmp['link'] = safe_ascii($valuesTmp['link']);
$this->addEntryPrepared->bindParam(':link', $valuesTmp['link']);
$valuesTmp['date'] = min($valuesTmp['date'], 2147483647);
@@ -134,7 +134,7 @@ SQL;
$valuesTmp['is_favorite'] = $valuesTmp['is_favorite'] ? 1 : 0;
$this->addEntryPrepared->bindParam(':is_favorite', $valuesTmp['is_favorite'], PDO::PARAM_INT);
$this->addEntryPrepared->bindParam(':id_feed', $valuesTmp['id_feed'], PDO::PARAM_INT);
- $valuesTmp['tags'] = mb_strcut($valuesTmp['tags'], 0, 1023, 'UTF-8');
+ $valuesTmp['tags'] = mb_strcut($valuesTmp['tags'], 0, 65535, 'UTF-8');
$valuesTmp['tags'] = safe_utf8($valuesTmp['tags']);
$this->addEntryPrepared->bindParam(':tags', $valuesTmp['tags']);
if (!isset($valuesTmp['attributes'])) {
@@ -215,18 +215,18 @@ SQL;
$this->updateEntryPrepared = $this->pdo->prepare($sql) ?: null;
}
if ($this->updateEntryPrepared) {
- $valuesTmp['guid'] = substr($valuesTmp['guid'], 0, 760);
+ $valuesTmp['guid'] = substr($valuesTmp['guid'], 0, 767);
$valuesTmp['guid'] = safe_ascii($valuesTmp['guid']);
$this->updateEntryPrepared->bindParam(':guid', $valuesTmp['guid']);
- $valuesTmp['title'] = mb_strcut($valuesTmp['title'], 0, 255, 'UTF-8');
+ $valuesTmp['title'] = mb_strcut($valuesTmp['title'], 0, 65535, 'UTF-8');
$valuesTmp['title'] = safe_utf8($valuesTmp['title']);
$this->updateEntryPrepared->bindParam(':title', $valuesTmp['title']);
- $valuesTmp['author'] = mb_strcut($valuesTmp['author'], 0, 255, 'UTF-8');
+ $valuesTmp['author'] = mb_strcut($valuesTmp['author'], 0, 65535, 'UTF-8');
$valuesTmp['author'] = safe_utf8($valuesTmp['author']);
$this->updateEntryPrepared->bindParam(':author', $valuesTmp['author']);
$valuesTmp['content'] = safe_utf8($valuesTmp['content']);
$this->updateEntryPrepared->bindParam(':content', $valuesTmp['content']);
- $valuesTmp['link'] = substr($valuesTmp['link'], 0, 1023);
+ $valuesTmp['link'] = substr($valuesTmp['link'], 0, 32768);
$valuesTmp['link'] = safe_ascii($valuesTmp['link']);
$this->updateEntryPrepared->bindParam(':link', $valuesTmp['link']);
$valuesTmp['date'] = min($valuesTmp['date'], 2147483647);
@@ -243,7 +243,7 @@ SQL;
$this->updateEntryPrepared->bindValue(':is_favorite', $valuesTmp['is_favorite'] ? 1 : 0, PDO::PARAM_INT);
}
$this->updateEntryPrepared->bindParam(':id_feed', $valuesTmp['id_feed'], PDO::PARAM_INT);
- $valuesTmp['tags'] = mb_strcut($valuesTmp['tags'], 0, 1023, 'UTF-8');
+ $valuesTmp['tags'] = mb_strcut($valuesTmp['tags'], 0, 65535, 'UTF-8');
$valuesTmp['tags'] = safe_utf8($valuesTmp['tags']);
$this->updateEntryPrepared->bindParam(':tags', $valuesTmp['tags']);
if (!isset($valuesTmp['attributes'])) {
diff --git a/app/Models/FeedDAO.php b/app/Models/FeedDAO.php
index 508d38bfc..127702765 100644
--- a/app/Models/FeedDAO.php
+++ b/app/Models/FeedDAO.php
@@ -58,10 +58,10 @@ class FreshRSS_FeedDAO extends Minz_ModelPdo {
$valuesTmp['category'],
mb_strcut(trim($valuesTmp['name']), 0, FreshRSS_DatabaseDAO::LENGTH_INDEX_UNICODE, 'UTF-8'),
$valuesTmp['website'],
- sanitizeHTML($valuesTmp['description'], '', 1023),
+ sanitizeHTML($valuesTmp['description'], ''),
$valuesTmp['lastUpdate'],
isset($valuesTmp['priority']) ? (int)$valuesTmp['priority'] : FreshRSS_Feed::PRIORITY_MAIN_STREAM,
- mb_strcut($valuesTmp['pathEntries'], 0, 511, 'UTF-8'),
+ mb_strcut($valuesTmp['pathEntries'], 0, 65535, 'UTF-8'),
base64_encode($valuesTmp['httpAuth']),
isset($valuesTmp['error']) ? (int)$valuesTmp['error'] : 0,
isset($valuesTmp['ttl']) ? (int)$valuesTmp['ttl'] : FreshRSS_Feed::TTL_DEFAULT,
diff --git a/app/Models/TagDAO.php b/app/Models/TagDAO.php
index b41a6de72..8c0b94c46 100644
--- a/app/Models/TagDAO.php
+++ b/app/Models/TagDAO.php
@@ -20,7 +20,7 @@ WHERE NOT EXISTS (SELECT 1 FROM `_category` WHERE name = TRIM(?))
SQL;
$stm = $this->pdo->prepare($sql);
- $valuesTmp['name'] = mb_strcut(trim($valuesTmp['name']), 0, 63, 'UTF-8');
+ $valuesTmp['name'] = mb_strcut(trim($valuesTmp['name']), 0, FreshRSS_DatabaseDAO::LENGTH_INDEX_UNICODE, 'UTF-8');
if (!isset($valuesTmp['attributes'])) {
$valuesTmp['attributes'] = [];
}
@@ -61,7 +61,7 @@ UPDATE `_tag` SET name=? WHERE id=?
AND NOT EXISTS (SELECT 1 FROM `_category` WHERE name = ?)
SQL;
- $name = mb_strcut(trim($name), 0, 63, 'UTF-8');
+ $name = mb_strcut(trim($name), 0, FreshRSS_DatabaseDAO::LENGTH_INDEX_UNICODE, 'UTF-8');
$stm = $this->pdo->prepare($sql);
if ($stm !== false &&
$stm->bindValue(':id', $id, PDO::PARAM_INT) &&
diff --git a/app/SQL/install.sql.mysql.php b/app/SQL/install.sql.mysql.php
index 74fc65b19..cb12fa179 100644
--- a/app/SQL/install.sql.mysql.php
+++ b/app/SQL/install.sql.mysql.php
@@ -26,8 +26,8 @@ CREATE TABLE IF NOT EXISTS `_feed` (
`description` TEXT,
`lastUpdate` INT(11) DEFAULT 0, -- Until year 2038
`priority` TINYINT(2) NOT NULL DEFAULT 10,
- `pathEntries` VARCHAR(511) DEFAULT NULL,
- `httpAuth` VARCHAR(511) DEFAULT NULL,
+ `pathEntries` VARCHAR(65535) DEFAULT NULL,
+ `httpAuth` VARCHAR(1024) DEFAULT NULL,
`error` BOOLEAN DEFAULT 0,
`ttl` INT NOT NULL DEFAULT 0, -- v0.7.3
`attributes` TEXT, -- v1.11.0
@@ -42,18 +42,18 @@ ENGINE = INNODB;
CREATE TABLE IF NOT EXISTS `_entry` (
`id` BIGINT NOT NULL, -- v0.7
- `guid` VARCHAR(760) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, -- Maximum for UNIQUE is 767B
- `title` VARCHAR(255) NOT NULL,
- `author` VARCHAR(255),
+ `guid` VARCHAR(767) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, -- Maximum for UNIQUE is 767B
+ `title` VARCHAR(65535) NOT NULL,
+ `author` VARCHAR(65535),
`content_bin` MEDIUMBLOB, -- v0.7
- `link` VARCHAR(1023) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
+ `link` VARCHAR(32768) 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
`hash` BINARY(16), -- v1.1.1
`is_read` BOOLEAN NOT NULL DEFAULT 0,
`is_favorite` BOOLEAN NOT NULL DEFAULT 0,
`id_feed` INT, -- 1.20.0
- `tags` VARCHAR(1023),
+ `tags` VARCHAR(65535),
`attributes` TEXT, -- v1.20.0
PRIMARY KEY (`id`),
FOREIGN KEY (`id_feed`) REFERENCES `_feed`(`id`) ON DELETE CASCADE ON UPDATE CASCADE,
@@ -69,18 +69,18 @@ INSERT IGNORE INTO `_category` (id, name) VALUES(1, "Uncategorized");
CREATE TABLE IF NOT EXISTS `_entrytmp` ( -- v1.7
`id` BIGINT NOT NULL,
- `guid` VARCHAR(760) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
- `title` VARCHAR(255) NOT NULL,
- `author` VARCHAR(255),
+ `guid` VARCHAR(767) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
+ `title` VARCHAR(65535) NOT NULL,
+ `author` VARCHAR(65535),
`content_bin` MEDIUMBLOB,
- `link` VARCHAR(1023) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
+ `link` VARCHAR(32768) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
`date` INT(11),
`lastSeen` INT(11) DEFAULT 0,
`hash` BINARY(16),
`is_read` BOOLEAN NOT NULL DEFAULT 0,
`is_favorite` BOOLEAN NOT NULL DEFAULT 0,
`id_feed` INT, -- 1.20.0
- `tags` VARCHAR(1023),
+ `tags` VARCHAR(65535),
`attributes` TEXT, -- v1.20.0
PRIMARY KEY (`id`),
FOREIGN KEY (`id_feed`) REFERENCES `_feed`(`id`) ON DELETE CASCADE ON UPDATE CASCADE,
@@ -91,7 +91,7 @@ ENGINE = INNODB;
CREATE TABLE IF NOT EXISTS `_tag` ( -- v1.12
`id` INT NOT NULL AUTO_INCREMENT,
- `name` VARCHAR(63) NOT NULL,
+ `name` VARCHAR(191) NOT NULL,
`attributes` TEXT,
PRIMARY KEY (`id`),
UNIQUE KEY (`name`)
diff --git a/app/SQL/install.sql.pgsql.php b/app/SQL/install.sql.pgsql.php
index 2149fc247..4f7f1cf89 100644
--- a/app/SQL/install.sql.pgsql.php
+++ b/app/SQL/install.sql.pgsql.php
@@ -6,7 +6,7 @@ SQL;
$GLOBALS['SQL_CREATE_TABLES'] = <<<'SQL'
CREATE TABLE IF NOT EXISTS `_category` (
"id" SERIAL PRIMARY KEY,
- "name" VARCHAR(255) UNIQUE NOT NULL,
+ "name" VARCHAR(191) UNIQUE NOT NULL,
"kind" SMALLINT DEFAULT 0, -- 1.20.0
"lastUpdate" BIGINT DEFAULT 0, -- 1.20.0
"error" SMALLINT DEFAULT 0, -- 1.20.0
@@ -18,13 +18,13 @@ CREATE TABLE IF NOT EXISTS `_feed` (
"url" VARCHAR(32768) NOT NULL,
"kind" SMALLINT DEFAULT 0, -- 1.20.0
"category" INT DEFAULT 0, -- 1.20.0
- "name" VARCHAR(255) NOT NULL,
+ "name" VARCHAR(191) NOT NULL,
"website" VARCHAR(32768),
"description" TEXT,
"lastUpdate" INT DEFAULT 0,
"priority" SMALLINT NOT NULL DEFAULT 10,
- "pathEntries" VARCHAR(511) DEFAULT NULL,
- "httpAuth" VARCHAR(511) DEFAULT NULL,
+ "pathEntries" VARCHAR(65535) DEFAULT NULL,
+ "httpAuth" VARCHAR(1024) DEFAULT NULL,
"error" SMALLINT DEFAULT 0,
"ttl" INT NOT NULL DEFAULT 0,
"attributes" TEXT, -- v1.11.0
@@ -37,18 +37,18 @@ CREATE INDEX IF NOT EXISTS `_priority_index` ON `_feed` ("priority");
CREATE TABLE IF NOT EXISTS `_entry` (
"id" BIGINT NOT NULL PRIMARY KEY,
- "guid" VARCHAR(760) NOT NULL,
- "title" VARCHAR(255) NOT NULL,
- "author" VARCHAR(255),
+ "guid" VARCHAR(767) NOT NULL,
+ "title" VARCHAR(65535) NOT NULL,
+ "author" VARCHAR(65535),
"content" TEXT,
- "link" VARCHAR(1023) NOT NULL,
+ "link" VARCHAR(32768) NOT NULL,
"date" INT,
"lastSeen" INT DEFAULT 0,
"hash" BYTEA,
"is_read" SMALLINT NOT NULL DEFAULT 0,
"is_favorite" SMALLINT NOT NULL DEFAULT 0,
"id_feed" INT, -- 1.20.0
- "tags" VARCHAR(1023),
+ "tags" VARCHAR(65535),
"attributes" TEXT, -- v1.20.0
FOREIGN KEY ("id_feed") REFERENCES `_feed` ("id") ON DELETE CASCADE ON UPDATE CASCADE,
UNIQUE ("id_feed","guid")
@@ -65,18 +65,18 @@ INSERT INTO `_category` (id, name)
CREATE TABLE IF NOT EXISTS `_entrytmp` ( -- v1.7
"id" BIGINT NOT NULL PRIMARY KEY,
- "guid" VARCHAR(760) NOT NULL,
- "title" VARCHAR(255) NOT NULL,
- "author" VARCHAR(255),
+ "guid" VARCHAR(767) NOT NULL,
+ "title" VARCHAR(65535) NOT NULL,
+ "author" VARCHAR(65535),
"content" TEXT,
- "link" VARCHAR(1023) NOT NULL,
+ "link" VARCHAR(32768) NOT NULL,
"date" INT,
"lastSeen" INT DEFAULT 0,
"hash" BYTEA,
"is_read" SMALLINT NOT NULL DEFAULT 0,
"is_favorite" SMALLINT NOT NULL DEFAULT 0,
"id_feed" INT, -- 1.20.0
- "tags" VARCHAR(1023),
+ "tags" VARCHAR(65535),
"attributes" TEXT, -- v1.20.0
FOREIGN KEY ("id_feed") REFERENCES `_feed` ("id") ON DELETE CASCADE ON UPDATE CASCADE,
UNIQUE ("id_feed","guid")
@@ -85,7 +85,7 @@ CREATE INDEX IF NOT EXISTS `_entrytmp_date_index` ON `_entrytmp` ("date");
CREATE TABLE IF NOT EXISTS `_tag` ( -- v1.12
"id" SERIAL PRIMARY KEY,
- "name" VARCHAR(63) UNIQUE NOT NULL,
+ "name" VARCHAR(191) UNIQUE NOT NULL,
"attributes" TEXT
);
CREATE TABLE IF NOT EXISTS `_entrytag` (
diff --git a/app/SQL/install.sql.sqlite.php b/app/SQL/install.sql.sqlite.php
index b353f361e..1369bad25 100644
--- a/app/SQL/install.sql.sqlite.php
+++ b/app/SQL/install.sql.sqlite.php
@@ -6,7 +6,7 @@ SQL;
$GLOBALS['SQL_CREATE_TABLES'] = <<<'SQL'
CREATE TABLE IF NOT EXISTS `category` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
- `name` VARCHAR(255) NOT NULL,
+ `name` VARCHAR(191) NOT NULL,
`kind` SMALLINT DEFAULT 0, -- 1.20.0
`lastUpdate` BIGINT DEFAULT 0, -- 1.20.0
`error` SMALLINT DEFAULT 0, -- 1.20.0
@@ -19,13 +19,13 @@ CREATE TABLE IF NOT EXISTS `feed` (
`url` VARCHAR(32768) NOT NULL,
`kind` SMALLINT DEFAULT 0, -- 1.20.0
`category` INTEGER DEFAULT 0, -- 1.20.0
- `name` VARCHAR(255) NOT NULL,
+ `name` VARCHAR(191) NOT NULL,
`website` VARCHAR(32768),
`description` TEXT,
`lastUpdate` INT(11) DEFAULT 0, -- Until year 2038
`priority` TINYINT(2) NOT NULL DEFAULT 10,
- `pathEntries` VARCHAR(511) DEFAULT NULL,
- `httpAuth` VARCHAR(511) DEFAULT NULL,
+ `pathEntries` VARCHAR(65535) DEFAULT NULL,
+ `httpAuth` VARCHAR(1024) DEFAULT NULL,
`error` BOOLEAN DEFAULT 0,
`ttl` INT NOT NULL DEFAULT 0,
`attributes` TEXT, -- v1.11.0
@@ -38,18 +38,18 @@ CREATE INDEX IF NOT EXISTS feed_priority_index ON `feed`(`priority`);
CREATE TABLE IF NOT EXISTS `entry` (
`id` BIGINT NOT NULL,
- `guid` VARCHAR(760) NOT NULL,
- `title` VARCHAR(255) NOT NULL,
- `author` VARCHAR(255),
+ `guid` VARCHAR(767) NOT NULL,
+ `title` VARCHAR(65535) NOT NULL,
+ `author` VARCHAR(65535),
`content` TEXT,
- `link` VARCHAR(1023) NOT NULL,
+ `link` VARCHAR(32768) NOT NULL,
`date` INT(11), -- Until year 2038
`lastSeen` INT(11) DEFAULT 0, -- v1.1.1, Until year 2038
`hash` BINARY(16), -- v1.1.1
`is_read` BOOLEAN NOT NULL DEFAULT 0,
`is_favorite` BOOLEAN NOT NULL DEFAULT 0,
`id_feed` INTEGER, -- 1.20.0
- `tags` VARCHAR(1023),
+ `tags` VARCHAR(65535),
`attributes` TEXT, -- v1.20.0
PRIMARY KEY (`id`),
FOREIGN KEY (`id_feed`) REFERENCES `feed`(`id`) ON DELETE CASCADE ON UPDATE CASCADE,
@@ -64,18 +64,18 @@ INSERT OR IGNORE INTO `category` (id, name) VALUES(1, "Uncategorized");
CREATE TABLE IF NOT EXISTS `entrytmp` ( -- v1.7
`id` BIGINT NOT NULL,
- `guid` VARCHAR(760) NOT NULL,
- `title` VARCHAR(255) NOT NULL,
- `author` VARCHAR(255),
+ `guid` VARCHAR(767) NOT NULL,
+ `title` VARCHAR(65535) NOT NULL,
+ `author` VARCHAR(65535),
`content` TEXT,
- `link` VARCHAR(1023) NOT NULL,
+ `link` VARCHAR(32768) NOT NULL,
`date` INT(11),
`lastSeen` INT(11) DEFAULT 0,
`hash` BINARY(16),
`is_read` BOOLEAN NOT NULL DEFAULT 0,
`is_favorite` BOOLEAN NOT NULL DEFAULT 0,
`id_feed` INTEGER, -- 1.20.0
- `tags` VARCHAR(1023),
+ `tags` VARCHAR(65535),
`attributes` TEXT, -- v1.20.0
PRIMARY KEY (`id`),
FOREIGN KEY (`id_feed`) REFERENCES `feed`(`id`) ON DELETE CASCADE ON UPDATE CASCADE,
@@ -85,7 +85,7 @@ CREATE INDEX IF NOT EXISTS entrytmp_date_index ON `entrytmp`(`date`);
CREATE TABLE IF NOT EXISTS `tag` ( -- v1.12
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
- `name` VARCHAR(63) NOT NULL,
+ `name` VARCHAR(191) NOT NULL,
`attributes` TEXT,
UNIQUE (`name`)
);