From 3b65f2e5867b3da176be9e976267633eeccf6184 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sun, 6 Oct 2019 22:17:28 +0200 Subject: Fix PostgreSQL and SQLite DB size estimation (#2562) --- app/Models/DatabaseDAOPGSQL.php | 23 +++++++++++++++++------ app/Models/DatabaseDAOSQLite.php | 10 +++++++++- app/Models/EntryDAO.php | 3 +++ 3 files changed, 29 insertions(+), 7 deletions(-) (limited to 'app/Models') diff --git a/app/Models/DatabaseDAOPGSQL.php b/app/Models/DatabaseDAOPGSQL.php index 60aceacc2..1a6b3599e 100644 --- a/app/Models/DatabaseDAOPGSQL.php +++ b/app/Models/DatabaseDAOPGSQL.php @@ -49,12 +49,23 @@ class FreshRSS_DatabaseDAOPGSQL extends FreshRSS_DatabaseDAOSQLite { ); } - public function size($all = true) { - $db = FreshRSS_Context::$system_conf->db; - $sql = 'SELECT pg_size_pretty(pg_database_size(?))'; - $values = array($db['base']); - $stm = $this->pdo->prepare($sql); - $stm->execute($values); + public function size($all = false) { + if ($all) { + $db = FreshRSS_Context::$system_conf->db; + $sql = 'SELECT pg_database_size(:base)'; + $stm = $this->pdo->prepare($sql); + $stm->bindParam(':base', $db['base']); + $stm->execute(); + } else { + $sql = "SELECT " + . "pg_total_relation_size('{$this->pdo->prefix()}category') + " + . "pg_total_relation_size('{$this->pdo->prefix()}feed') + " + . "pg_total_relation_size('{$this->pdo->prefix()}entry') + " + . "pg_total_relation_size('{$this->pdo->prefix()}entrytmp') + " + . "pg_total_relation_size('{$this->pdo->prefix()}tag') + " + . "pg_total_relation_size('{$this->pdo->prefix()}entrytag')"; + $stm = $this->pdo->query($sql); + } $res = $stm->fetchAll(PDO::FETCH_COLUMN, 0); return $res[0]; } diff --git a/app/Models/DatabaseDAOSQLite.php b/app/Models/DatabaseDAOSQLite.php index 11900979e..b1473ab09 100644 --- a/app/Models/DatabaseDAOSQLite.php +++ b/app/Models/DatabaseDAOSQLite.php @@ -54,7 +54,15 @@ class FreshRSS_DatabaseDAOSQLite extends FreshRSS_DatabaseDAO { } public function size($all = false) { - return @filesize(join_path(DATA_PATH, 'users', $this->current_user, 'db.sqlite')); + $sum = 0; + if ($all) { + foreach (glob(DATA_PATH . '/users/*/db.sqlite') as $filename) { + $sum += @filesize($filename); + } + } else { + $sum = @filesize(DATA_PATH . '/users/' . $this->current_user . '/db.sqlite'); + } + return $sum; } public function optimize() { diff --git a/app/Models/EntryDAO.php b/app/Models/EntryDAO.php index cf896eafd..5ff3a5b70 100644 --- a/app/Models/EntryDAO.php +++ b/app/Models/EntryDAO.php @@ -951,6 +951,9 @@ SQL; $sql .= ' WHERE f.priority > ' . intval($minPriority); } $stm = $this->pdo->query($sql); + if ($stm == false) { + return false; + } $res = $stm->fetchAll(PDO::FETCH_COLUMN, 0); return isset($res[0]) ? $res[0] : 0; } -- cgit v1.2.3