소스 검색

Fix PostgreSQL and SQLite DB size estimation (#2562)

Alexandre Alapetite 6 년 전
부모
커밋
3b65f2e586
3개의 변경된 파일29개의 추가작업 그리고 7개의 파일을 삭제
  1. 17 6
      app/Models/DatabaseDAOPGSQL.php
  2. 9 1
      app/Models/DatabaseDAOSQLite.php
  3. 3 0
      app/Models/EntryDAO.php

+ 17 - 6
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];
 	}

+ 9 - 1
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() {

+ 3 - 0
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;
 	}