<pman>Intégration de la branche dev74
This commit is contained in:
commit
16d8db6a40
@ -30,6 +30,11 @@ class Capacitor implements ITransactor {
|
||||
return $this->getStorage()->db();
|
||||
}
|
||||
|
||||
function ensureLive(): self {
|
||||
$this->getStorage()->ensureLive();
|
||||
return $this;
|
||||
}
|
||||
|
||||
/** @var CapacitorChannel */
|
||||
protected $channel;
|
||||
|
||||
|
@ -420,6 +420,11 @@ class CapacitorChannel implements ITransactor {
|
||||
return $this;
|
||||
}
|
||||
|
||||
function ensureLive(): self {
|
||||
$this->capacitor->ensureLive();
|
||||
return $this;
|
||||
}
|
||||
|
||||
function willUpdate(...$transactors): ITransactor {
|
||||
return $this->capacitor->willUpdate(...$transactors);
|
||||
}
|
||||
|
@ -16,7 +16,12 @@ use Traversable;
|
||||
abstract class CapacitorStorage {
|
||||
abstract function db(): IDatabase;
|
||||
|
||||
/** @var CapacitorChannel[] */
|
||||
function ensureLive(): self {
|
||||
$this->db()->ensure();
|
||||
return $this;
|
||||
}
|
||||
|
||||
/** @var CapacitorChannel[] */
|
||||
protected $channels;
|
||||
|
||||
function addChannel(CapacitorChannel $channel): CapacitorChannel {
|
||||
|
@ -11,6 +11,14 @@ interface IDatabase extends ITransactor {
|
||||
/** obtenir la requête SQL correspondant à $query */
|
||||
function getSql($query, ?array $params=null): string;
|
||||
|
||||
/**
|
||||
* vérifier la connexion à la base de données, et refaire la connexion si
|
||||
* nécessaire. NB: si la connexion a la base de données était perdue, les
|
||||
* transactions en cours sont perdues. cette méthode est donc prévue pour
|
||||
* vérifier la validité de la connexion avant de lancer une transaction
|
||||
*/
|
||||
function ensure(): self;
|
||||
|
||||
/**
|
||||
* - si c'est un insert, retourner l'identifiant autogénéré de la ligne
|
||||
* - sinon retourner le nombre de lignes modifiées en cas de succès, ou false
|
||||
|
@ -120,8 +120,8 @@ class Pdo implements IDatabase {
|
||||
return $query->getSql();
|
||||
}
|
||||
|
||||
function open(): self {
|
||||
if ($this->db === null) {
|
||||
function open(bool $reopen=false): self {
|
||||
if ($this->db === null || $reopen) {
|
||||
$dbconn = $this->dbconn;
|
||||
$options = $this->options;
|
||||
if (is_callable($options)) {
|
||||
@ -134,6 +134,17 @@ class Pdo implements IDatabase {
|
||||
return $this;
|
||||
}
|
||||
|
||||
const SQL_CHECK_LIVE = "select 1";
|
||||
|
||||
function ensure(): self {
|
||||
try {
|
||||
$this->_exec(static::SQL_CHECK_LIVE);
|
||||
} catch (\PDOException $e) {
|
||||
$this->open(true);
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
|
||||
function close(): void {
|
||||
$this->db = null;
|
||||
}
|
||||
|
@ -138,8 +138,8 @@ class Pgsql implements IDatabase {
|
||||
return $query->getSql();
|
||||
}
|
||||
|
||||
function open(): self {
|
||||
if ($this->db === null) {
|
||||
function open(bool $reopen=false): self {
|
||||
if ($this->db === null || $reopen) {
|
||||
$dbconn = $this->dbconn;
|
||||
$connection_string = [$dbconn[""] ?? null];
|
||||
unset($dbconn[""]);
|
||||
@ -173,6 +173,17 @@ class Pgsql implements IDatabase {
|
||||
return $this;
|
||||
}
|
||||
|
||||
const SQL_CHECK_LIVE = "select 1";
|
||||
|
||||
function ensure(): self {
|
||||
try {
|
||||
$this->_exec(static::SQL_CHECK_LIVE);
|
||||
} catch (\PDOException $e) {
|
||||
$this->open(true);
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
|
||||
function close(): self {
|
||||
if ($this->db !== null) {
|
||||
pg_close($this->db);
|
||||
|
@ -157,8 +157,8 @@ class Sqlite implements IDatabase {
|
||||
return $query->getSql();
|
||||
}
|
||||
|
||||
function open(): self {
|
||||
if ($this->db === null) {
|
||||
function open(bool $reopen=false): self {
|
||||
if ($this->db === null || $reopen) {
|
||||
$this->db = new SQLite3($this->file, $this->flags, $this->encryptionKey);
|
||||
_config::with($this->config)->configure($this);
|
||||
_sqliteMigration::with($this->migration)->migrate($this);
|
||||
@ -167,6 +167,17 @@ class Sqlite implements IDatabase {
|
||||
return $this;
|
||||
}
|
||||
|
||||
const SQL_CHECK_LIVE = "select 1";
|
||||
|
||||
function ensure(): self {
|
||||
try {
|
||||
$this->_exec(static::SQL_CHECK_LIVE);
|
||||
} catch (\PDOException $e) {
|
||||
$this->open(true);
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
|
||||
function close(): void {
|
||||
if ($this->db !== null) {
|
||||
$this->db->close();
|
||||
|
Loading…
x
Reference in New Issue
Block a user