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.
pull/4358/head
Alexandre Alapetite 2 years ago committed by GitHub
parent 893d4d14c0
commit 9d1930d9ad
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 8
      app/SQL/install.sql.mysql.php
  2. 8
      app/SQL/install.sql.pgsql.php
  3. 8
      app/SQL/install.sql.sqlite.php
  4. 39
      app/layout/aside_feed.phtml
  5. 2
      config.default.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,

@ -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,

@ -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,

@ -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>

@ -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,

Loading…
Cancel
Save