mirror of
https://github.com/FreshRSS/FreshRSS.git
synced 2026-02-18 14:55:49 -05:00
Install: add test PDO typing (#7651)
fix https://github.com/FreshRSS/FreshRSS/issues/7647
This commit is contained in:
committed by
GitHub
parent
4de7d0b813
commit
f620f16e2b
@@ -222,6 +222,18 @@ class FreshRSS_DatabaseDAO extends Minz_ModelPdo {
|
||||
return str_contains($this->version(), 'MariaDB');
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool true if the database PDO driver returns typed integer values as it should, false otherwise.
|
||||
*/
|
||||
final public function testTyping(): bool {
|
||||
$sql = 'SELECT 2 + 3';
|
||||
if (($stm = $this->pdo->query($sql)) !== false) {
|
||||
$res = $stm->fetchAll(PDO::FETCH_COLUMN, 0);
|
||||
return ($res[0] ?? null) === 5;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public function size(bool $all = false): int {
|
||||
$db = FreshRSS_Context::systemConf()->db;
|
||||
|
||||
|
||||
@@ -234,6 +234,17 @@ function saveStep3(): bool {
|
||||
|
||||
$ok = false;
|
||||
try {
|
||||
Minz_ModelPdo::$usesSharedPdo = false;
|
||||
$databaseDAO = FreshRSS_Factory::createDatabaseDAO(Minz_User::INTERNAL_USER);
|
||||
if (!$databaseDAO->testTyping()) {
|
||||
$message = 'Invalid PDO driver behaviour for selected database type!';
|
||||
if (Minz_Session::paramString('bd_type') === 'mysql') {
|
||||
$message .= ' MySQL requires mysqlnd.';
|
||||
}
|
||||
throw new Exception($message);
|
||||
}
|
||||
Minz_ModelPdo::$usesSharedPdo = true;
|
||||
|
||||
$ok = FreshRSS_user_Controller::createUser(
|
||||
Minz_Session::paramString('default_user'),
|
||||
'', //TODO: Add e-mail
|
||||
@@ -249,6 +260,7 @@ function saveStep3(): bool {
|
||||
$ok = false;
|
||||
}
|
||||
if (!$ok) {
|
||||
checkStep();
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -526,7 +538,7 @@ function printStep2(): void {
|
||||
<p class="alert alert-success"><span class="alert-head"><?= _t('gen.short.ok') ?></span> <?= _t('install.bdd.conf.ok') ?></p>
|
||||
<?php } elseif ($s2['conn'] == 'ko') { ?>
|
||||
<p class="alert alert-error"><span class="alert-head"><?= _t('gen.short.damn') ?></span> <?= _t('install.bdd.conf.ko'),
|
||||
(empty($_SESSION['bd_error']) || !is_string($_SESSION['bd_error']) ? '' : ' : ' . $_SESSION['bd_error']) ?></p>
|
||||
(empty($_SESSION['bd_error']) || !is_string($_SESSION['bd_error']) ? '' : ' ' . $_SESSION['bd_error']) ?></p>
|
||||
<?php } ?>
|
||||
|
||||
<h2><?= _t('install.bdd.conf') ?></h2>
|
||||
|
||||
@@ -62,7 +62,11 @@ class Minz_ModelPdo {
|
||||
$this->pdo->setPrefix($db['prefix'] . $this->current_user . '_');
|
||||
break;
|
||||
case 'sqlite':
|
||||
$dsn = 'sqlite:' . DATA_PATH . '/users/' . $this->current_user . '/db.sqlite';
|
||||
if (in_array($this->current_user, [null, '', Minz_User::INTERNAL_USER], true)) {
|
||||
$dsn = 'sqlite::memory:';
|
||||
} else {
|
||||
$dsn = 'sqlite:' . DATA_PATH . '/users/' . $this->current_user . '/db.sqlite';
|
||||
}
|
||||
$this->pdo = new Minz_PdoSqlite($dsn . $dsnParams, null, null, $driver_options);
|
||||
$this->pdo->setPrefix('');
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user