Rework SQL field length (#5788)

* SQL auto-update field length
Follow-up of https://github.com/FreshRSS/FreshRSS/pull/5756
Only for PostgreSQL and MySQL / MariaDB. Not possible for SQLite

* Account for MySQL 65535
Partial revert of https://github.com/FreshRSS/FreshRSS/pull/5756
> The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead.
This commit is contained in:
Alexandre Alapetite
2023-10-31 02:01:50 +01:00
committed by GitHub
parent 4207f2a5b2
commit ad8bae5aca
6 changed files with 87 additions and 61 deletions

View File

@@ -23,7 +23,7 @@ CREATE TABLE IF NOT EXISTS `_feed` (
"description" TEXT,
"lastUpdate" BIGINT DEFAULT 0,
"priority" SMALLINT NOT NULL DEFAULT 10,
"pathEntries" VARCHAR(65535) DEFAULT NULL,
"pathEntries" VARCHAR(4096) DEFAULT NULL,
"httpAuth" VARCHAR(1024) DEFAULT NULL,
"error" SMALLINT DEFAULT 0,
"ttl" INT NOT NULL DEFAULT 0,
@@ -38,17 +38,17 @@ CREATE INDEX IF NOT EXISTS `_priority_index` ON `_feed` ("priority");
CREATE TABLE IF NOT EXISTS `_entry` (
"id" BIGINT NOT NULL PRIMARY KEY,
"guid" VARCHAR(767) NOT NULL,
"title" VARCHAR(65535) NOT NULL,
"author" VARCHAR(65535),
"title" VARCHAR(8192) NOT NULL,
"author" VARCHAR(1024),
"content" TEXT,
"link" VARCHAR(32768) NOT NULL,
"link" VARCHAR(16383) NOT NULL,
"date" BIGINT,
"lastSeen" BIGINT 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(65535),
"tags" VARCHAR(2048),
"attributes" TEXT, -- v1.20.0
FOREIGN KEY ("id_feed") REFERENCES `_feed` ("id") ON DELETE CASCADE ON UPDATE CASCADE,
UNIQUE ("id_feed","guid")
@@ -66,17 +66,17 @@ INSERT INTO `_category` (id, name)
CREATE TABLE IF NOT EXISTS `_entrytmp` ( -- v1.7
"id" BIGINT NOT NULL PRIMARY KEY,
"guid" VARCHAR(767) NOT NULL,
"title" VARCHAR(65535) NOT NULL,
"author" VARCHAR(65535),
"title" VARCHAR(8192) NOT NULL,
"author" VARCHAR(1024),
"content" TEXT,
"link" VARCHAR(32768) NOT NULL,
"link" VARCHAR(16383) NOT NULL,
"date" BIGINT,
"lastSeen" BIGINT 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(65535),
"tags" VARCHAR(2048),
"attributes" TEXT, -- v1.20.0
FOREIGN KEY ("id_feed") REFERENCES `_feed` ("id") ON DELETE CASCADE ON UPDATE CASCADE,
UNIQUE ("id_feed","guid")
@@ -102,13 +102,30 @@ $GLOBALS['SQL_DROP_TABLES'] = <<<'SQL'
DROP TABLE IF EXISTS `_entrytag`, `_tag`, `_entrytmp`, `_entry`, `_feed`, `_category`;
SQL;
$GLOBALS['SQL_UPDATE_YEAR_2038'] = <<<'SQL'
ALTER TABLE `_entry` -- v1.23
$GLOBALS['SQL_UPDATE_MINOR'] = <<<'SQL'
ALTER TABLE `_category`
ALTER COLUMN "name" SET DATA TYPE VARCHAR(191);
ALTER TABLE `_feed`
ALTER COLUMN "name" SET DATA TYPE VARCHAR(191),
ALTER COLUMN "lastUpdate" SET DATA TYPE BIGINT,
ALTER COLUMN "pathEntries" SET DATA TYPE VARCHAR(4096),
ALTER COLUMN "httpAuth" SET DATA TYPE VARCHAR(1024);
ALTER TABLE `_entry`
ALTER COLUMN "date" SET DATA TYPE BIGINT,
ALTER COLUMN "lastSeen" SET DATA TYPE BIGINT;
ALTER COLUMN "lastSeen" SET DATA TYPE BIGINT,
ALTER COLUMN "guid" SET DATA TYPE VARCHAR(767),
ALTER COLUMN "title" SET DATA TYPE VARCHAR(8192),
ALTER COLUMN "author" SET DATA TYPE VARCHAR(1024),
ALTER COLUMN "link" SET DATA TYPE VARCHAR(16383),
ALTER COLUMN "tags" SET DATA TYPE VARCHAR(2048);
ALTER TABLE `_entrytmp`
ALTER COLUMN "date" SET DATA TYPE BIGINT,
ALTER COLUMN "lastSeen" SET DATA TYPE BIGINT;
ALTER TABLE `_feed`
ALTER COLUMN "lastUpdate" SET DATA TYPE BIGINT;
ALTER COLUMN "lastSeen" SET DATA TYPE BIGINT,
ALTER COLUMN "guid" SET DATA TYPE VARCHAR(767),
ALTER COLUMN "title" SET DATA TYPE VARCHAR(8192),
ALTER COLUMN "author" SET DATA TYPE VARCHAR(1024),
ALTER COLUMN "link" SET DATA TYPE VARCHAR(16383),
ALTER COLUMN "tags" SET DATA TYPE VARCHAR(2048);
ALTER TABLE `_tag`
ALTER COLUMN "name" SET DATA TYPE VARCHAR(191);
SQL;