diff options
| author | 2022-05-09 15:59:21 +0200 | |
|---|---|---|
| committer | 2022-05-09 15:59:21 +0200 | |
| commit | 9d1930d9adb4f56ae12209d3d01f4a1ed1af8503 (patch) | |
| tree | e0f61d1a5f8162d78304577477674d5471efa0a6 | |
| parent | 893d4d14c06fcb72835f8e152cd6f22f3209263e (diff) | |
Allow many (20k+) feeds (#4347)
* Allow many (20k+) feeds
Fix errors such as `SQL error listWhereRaw: ERROR: value "42926" is out of range for type smallint`
Start of UI performance improvements accordingly.
| -rw-r--r-- | app/SQL/install.sql.mysql.php | 8 | ||||
| -rw-r--r-- | app/SQL/install.sql.pgsql.php | 8 | ||||
| -rw-r--r-- | app/SQL/install.sql.sqlite.php | 8 | ||||
| -rw-r--r-- | app/layout/aside_feed.phtml | 39 | ||||
| -rw-r--r-- | config.default.php | 2 |
5 files changed, 33 insertions, 32 deletions
diff --git a/app/SQL/install.sql.mysql.php b/app/SQL/install.sql.mysql.php index b41b93dfc..4e4b9ee58 100644 --- a/app/SQL/install.sql.mysql.php +++ b/app/SQL/install.sql.mysql.php @@ -17,7 +17,7 @@ CREATE TABLE IF NOT EXISTS `_feed` ( `id` SMALLINT NOT NULL AUTO_INCREMENT, -- v0.7 `url` VARCHAR(511) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, `kind` SMALLINT DEFAULT 0, -- 1.20.0 - `category` SMALLINT DEFAULT 0, -- v0.7 + `category` INT DEFAULT 0, -- 1.20.0 `name` VARCHAR(191) NOT NULL, `website` VARCHAR(255) CHARACTER SET latin1 COLLATE latin1_bin, `description` TEXT, @@ -50,7 +50,7 @@ CREATE TABLE IF NOT EXISTS `_entry` ( `hash` BINARY(16), -- v1.1.1 `is_read` BOOLEAN NOT NULL DEFAULT 0, `is_favorite` BOOLEAN NOT NULL DEFAULT 0, - `id_feed` SMALLINT, -- v0.7 + `id_feed` INT, -- 1.20.0 `tags` VARCHAR(1023), PRIMARY KEY (`id`), FOREIGN KEY (`id_feed`) REFERENCES `_feed`(`id`) ON DELETE CASCADE ON UPDATE CASCADE, @@ -82,7 +82,7 @@ CREATE TABLE IF NOT EXISTS `_entrytmp` ( -- v1.7 `hash` BINARY(16), `is_read` BOOLEAN NOT NULL DEFAULT 0, `is_favorite` BOOLEAN NOT NULL DEFAULT 0, - `id_feed` SMALLINT, + `id_feed` INT, -- 1.20.0 `tags` VARCHAR(1023), PRIMARY KEY (`id`), FOREIGN KEY (`id_feed`) REFERENCES `_feed`(`id`) ON DELETE CASCADE ON UPDATE CASCADE, @@ -103,7 +103,7 @@ CREATE TABLE IF NOT EXISTS `_tag` ( -- v1.12 ENGINE = INNODB; CREATE TABLE IF NOT EXISTS `_entrytag` ( -- v1.12 - `id_tag` SMALLINT, + `id_tag` INT, -- 1.20.0 `id_entry` BIGINT, PRIMARY KEY (`id_tag`,`id_entry`), FOREIGN KEY (`id_tag`) REFERENCES `_tag`(`id`) ON DELETE CASCADE ON UPDATE CASCADE, diff --git a/app/SQL/install.sql.pgsql.php b/app/SQL/install.sql.pgsql.php index aa9fbbc3f..58381bb11 100644 --- a/app/SQL/install.sql.pgsql.php +++ b/app/SQL/install.sql.pgsql.php @@ -14,7 +14,7 @@ CREATE TABLE IF NOT EXISTS `_feed` ( "id" SERIAL PRIMARY KEY, "url" VARCHAR(511) UNIQUE NOT NULL, "kind" SMALLINT DEFAULT 0, -- 1.20.0 - "category" SMALLINT DEFAULT 0, + "category" INT DEFAULT 0, -- 1.20.0 "name" VARCHAR(255) NOT NULL, "website" VARCHAR(255), "description" TEXT, @@ -44,7 +44,7 @@ CREATE TABLE IF NOT EXISTS `_entry` ( "hash" BYTEA, "is_read" SMALLINT NOT NULL DEFAULT 0, "is_favorite" SMALLINT NOT NULL DEFAULT 0, - "id_feed" SMALLINT, + "id_feed" INT, -- 1.20.0 "tags" VARCHAR(1023), FOREIGN KEY ("id_feed") REFERENCES `_feed` ("id") ON DELETE CASCADE ON UPDATE CASCADE, UNIQUE ("id_feed","guid") @@ -77,7 +77,7 @@ CREATE TABLE IF NOT EXISTS `_entrytmp` ( -- v1.7 "hash" BYTEA, "is_read" SMALLINT NOT NULL DEFAULT 0, "is_favorite" SMALLINT NOT NULL DEFAULT 0, - "id_feed" SMALLINT, + "id_feed" INT, -- 1.20.0 "tags" VARCHAR(1023), FOREIGN KEY ("id_feed") REFERENCES `_feed` ("id") ON DELETE CASCADE ON UPDATE CASCADE, UNIQUE ("id_feed","guid") @@ -92,7 +92,7 @@ CREATE TABLE IF NOT EXISTS `_tag` ( -- v1.12 "attributes" TEXT ); CREATE TABLE IF NOT EXISTS `_entrytag` ( - "id_tag" SMALLINT, + "id_tag" INT, -- 1.20.0 "id_entry" BIGINT, PRIMARY KEY ("id_tag","id_entry"), FOREIGN KEY ("id_tag") REFERENCES `_tag` ("id") ON DELETE CASCADE ON UPDATE CASCADE, diff --git a/app/SQL/install.sql.sqlite.php b/app/SQL/install.sql.sqlite.php index 5fb8f099c..6fe90c559 100644 --- a/app/SQL/install.sql.sqlite.php +++ b/app/SQL/install.sql.sqlite.php @@ -15,7 +15,7 @@ CREATE TABLE IF NOT EXISTS `feed` ( `id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `url` VARCHAR(511) NOT NULL, `kind` SMALLINT DEFAULT 0, -- 1.20.0 - `category` SMALLINT DEFAULT 0, + `category` INT DEFAULT 0, -- 1.20.0 `name` VARCHAR(255) NOT NULL, `website` VARCHAR(255), `description` TEXT, @@ -46,7 +46,7 @@ CREATE TABLE IF NOT EXISTS `entry` ( `hash` BINARY(16), -- v1.1.1 `is_read` BOOLEAN NOT NULL DEFAULT 0, `is_favorite` BOOLEAN NOT NULL DEFAULT 0, - `id_feed` SMALLINT, + `id_feed` INT, -- 1.20.0 `tags` VARCHAR(1023), PRIMARY KEY (`id`), FOREIGN KEY (`id_feed`) REFERENCES `feed`(`id`) ON DELETE CASCADE ON UPDATE CASCADE, @@ -77,7 +77,7 @@ CREATE TABLE IF NOT EXISTS `entrytmp` ( -- v1.7 `hash` BINARY(16), `is_read` BOOLEAN NOT NULL DEFAULT 0, `is_favorite` BOOLEAN NOT NULL DEFAULT 0, - `id_feed` SMALLINT, + `id_feed` INT, -- 1.20.0 `tags` VARCHAR(1023), PRIMARY KEY (`id`), FOREIGN KEY (`id_feed`) REFERENCES `feed`(`id`) ON DELETE CASCADE ON UPDATE CASCADE, @@ -94,7 +94,7 @@ CREATE TABLE IF NOT EXISTS `tag` ( -- v1.12 UNIQUE (`name`) ); CREATE TABLE IF NOT EXISTS `entrytag` ( - `id_tag` SMALLINT, + `id_tag` INT, -- 1.20.0 `id_entry` BIGINT, PRIMARY KEY (`id_tag`,`id_entry`), FOREIGN KEY (`id_tag`) REFERENCES `tag` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, diff --git a/app/layout/aside_feed.phtml b/app/layout/aside_feed.phtml index c843eb4d2..39804b8f4 100644 --- a/app/layout/aside_feed.phtml +++ b/app/layout/aside_feed.phtml @@ -71,7 +71,7 @@ </li> <?php - foreach ($this->categories as $cat) { + foreach ($this->categories as $cat): $feeds = $cat->feeds(); $position = $cat->attributes('position'); if (!empty($feeds)) { @@ -88,28 +88,29 @@ </div> <ul class="tree-folder-items<?= $c_show ? ' active' : '' ?>"> - <?php - foreach ($feeds as $feed) { - $f_active = FreshRSS_Context::isCurrentGet('f_' . $feed->id()); - ?> - <li id="f_<?= $feed->id() ?>" class="item feed<?= $f_active ? ' active' : '', $feed->mute() ? ' mute' : '' ?><?= - $feed->inError() ? ' error' : '' ?><?= $feed->nbEntries() <= 0 ? ' empty' : '' - ?>" data-unread="<?= $feed->nbNotRead() ?>" data-priority="<?= $feed->priority() ?>"> - <div class="dropdown no-mobile"> - <div class="dropdown-target"></div> - <a class="dropdown-toggle" data-fweb="<?= $feed->website() ?>"><?= _i('configure') ?></a> - <?php /* feed_config_template */ ?> - </div> - <?php if (FreshRSS_Context::$user_conf->show_favicons): ?><img class="favicon" src="<?= $feed->favicon() ?>" alt="✇" loading="lazy" /><?php endif; ?> - <a class="item-title" data-unread="<?= format_number($feed->nbNotRead()) ?>" href="<?= - _url('index', $actual_view, 'get', 'f_' . $feed->id()). $state_filter_manual ?>"><?= $feed->name() ?></a> - </li> - <?php } ?> +<?php + // NB: Reduce whitespace in that loop + foreach ($feeds as $feed): + $f_active = FreshRSS_Context::isCurrentGet('f_' . $feed->id()); +?> +<li id="f_<?= $feed->id() ?>" class="item feed<?= $f_active ? ' active' : '', $feed->mute() ? ' mute' : '' ?><?= + $feed->inError() ? ' error' : '' ?><?= $feed->nbEntries() <= 0 ? ' empty' : '' + ?>" data-unread="<?= $feed->nbNotRead() ?>" data-priority="<?= $feed->priority() ?>"> + <div class="dropdown no-mobile"> + <div class="dropdown-target"></div><a class="dropdown-toggle" data-fweb="<?= $feed->website() ?>"><?= _i('configure') ?></a><?php /* feed_config_template */ ?> + </div> + <?php + if (FreshRSS_Context::$user_conf->show_favicons): ?><img class="favicon" src="<?= $feed->favicon() ?>" alt="✇" loading="lazy" /><?php endif; + ?><a class="item-title" data-unread="<?= format_number($feed->nbNotRead()) ?>" href="<?= + _url('index', $actual_view, 'get', 'f_' . $feed->id()) . $state_filter_manual ?>"><?= $feed->name() ?></a></li> +<?php + endforeach; +?> </ul> </li> <?php } - } + endforeach; ?> <li class="tree-bottom"></li> </ul> diff --git a/config.default.php b/config.default.php index df8e9133e..1b12834d0 100644 --- a/config.default.php +++ b/config.default.php @@ -104,7 +104,7 @@ return array( 'max_inactivity' => PHP_INT_MAX, # Max number of feeds for a user. - 'max_feeds' => 16384, + 'max_feeds' => 131072, # Max number of categories for a user. 'max_categories' => 16384, |
