aboutsummaryrefslogtreecommitdiff
path: root/app/Models
diff options
context:
space:
mode:
authorGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2018-05-29 23:55:31 +0200
committerGravatar GitHub <noreply@github.com> 2018-05-29 23:55:31 +0200
commite98e40b7b4d8ebd4f7e03ade2d3fb6be2c22cc52 (patch)
treedef42fff2be7915a30e8bb1fed45e400f53e9ffe /app/Models
parent66ff16294a2f5dc6a731e4e7a82409d4e3e4dee0 (diff)
Fix check default category, and PostgreSQL seq bug (#1907)
checkDefault() was broken as it was not necessarily creating the default category with the right ID. PostgreSQL required additional care. https://github.com/FreshRSS/FreshRSS/issues/1890#issuecomment-392869777 https://github.com/FreshRSS/FreshRSS/pull/1322 https://github.com/FreshRSS/FreshRSS/issues/1312#issuecomment-254009397
Diffstat (limited to 'app/Models')
-rw-r--r--app/Models/CategoryDAO.php26
1 files changed, 22 insertions, 4 deletions
diff --git a/app/Models/CategoryDAO.php b/app/Models/CategoryDAO.php
index 68db17db3..ef2c402a0 100644
--- a/app/Models/CategoryDAO.php
+++ b/app/Models/CategoryDAO.php
@@ -134,7 +134,11 @@ class FreshRSS_CategoryDAO extends Minz_ModelPdo implements FreshRSS_Searchable
if (isset($cat[0])) {
return $cat[0];
} else {
- return false;
+ if (FreshRSS_Context::$isCli) {
+ fwrite(STDERR, 'FreshRSS database error: Default category not found!' . "\n");
+ }
+ Minz_Log::error('FreshRSS database error: Default category not found!');
+ return null;
}
}
public function checkDefault() {
@@ -144,13 +148,27 @@ class FreshRSS_CategoryDAO extends Minz_ModelPdo implements FreshRSS_Searchable
$cat = new FreshRSS_Category(_t('gen.short.default_category'));
$cat->_id(self::DEFAULTCATEGORYID);
+ $sql = 'INSERT INTO `' . $this->prefix . 'category`(id, name) VALUES(?, ?)';
+ if (parent::$sharedDbType === 'pgsql') {
+ //Force call to nextval()
+ $sql .= " RETURNING nextval('" . $this->prefix . "category_id_seq');";
+ }
+ $stm = $this->bd->prepare($sql);
+
$values = array(
- 'id' => $cat->id(),
- 'name' => $cat->name(),
+ $cat->id(),
+ $cat->name(),
);
- $this->addCategory($values);
+ if ($stm && $stm->execute($values)) {
+ return $this->bd->lastInsertId('"' . $this->prefix . 'category_id_seq"');
+ } else {
+ $info = $stm == null ? array(2 => 'syntax error') : $stm->errorInfo();
+ Minz_Log::error('SQL error check default category: ' . json_encode($info));
+ return false;
+ }
}
+ return true;
}
public function count() {