aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2022-05-09 15:59:21 +0200
committerGravatar GitHub <noreply@github.com> 2022-05-09 15:59:21 +0200
commit9d1930d9adb4f56ae12209d3d01f4a1ed1af8503 (patch)
treee0f61d1a5f8162d78304577477674d5471efa0a6
parent893d4d14c06fcb72835f8e152cd6f22f3209263e (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.php8
-rw-r--r--app/SQL/install.sql.pgsql.php8
-rw-r--r--app/SQL/install.sql.sqlite.php8
-rw-r--r--app/layout/aside_feed.phtml39
-rw-r--r--config.default.php2
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,