modifs.mineures sans commentaires
This commit is contained in:
parent
a7bcfe9ce6
commit
604d9c1fe3
|
@ -1,6 +1,9 @@
|
||||||
<?php
|
<?php
|
||||||
namespace nur\sery\db;
|
namespace nur\sery\db;
|
||||||
|
|
||||||
|
use nur\sery\cl;
|
||||||
|
use nur\sery\str;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class CapacitorChannel: un canal d'une instance de {@link ICapacitor}
|
* Class CapacitorChannel: un canal d'une instance de {@link ICapacitor}
|
||||||
*/
|
*/
|
||||||
|
@ -9,6 +12,10 @@ class CapacitorChannel {
|
||||||
|
|
||||||
const TABLE_NAME = null;
|
const TABLE_NAME = null;
|
||||||
|
|
||||||
|
const KEY_DEFINITIONS = null;
|
||||||
|
|
||||||
|
const PRIMARY_KEYS = null;
|
||||||
|
|
||||||
const EACH_COMMIT_THRESHOLD = 100;
|
const EACH_COMMIT_THRESHOLD = 100;
|
||||||
|
|
||||||
static function verifix_name(?string $name): string {
|
static function verifix_name(?string $name): string {
|
||||||
|
@ -20,6 +27,25 @@ class CapacitorChannel {
|
||||||
$this->name = self::verifix_name($name ?? static::NAME);
|
$this->name = self::verifix_name($name ?? static::NAME);
|
||||||
$this->eachCommitThreshold = $eachCommitThreshold ?? static::EACH_COMMIT_THRESHOLD;
|
$this->eachCommitThreshold = $eachCommitThreshold ?? static::EACH_COMMIT_THRESHOLD;
|
||||||
$this->created = false;
|
$this->created = false;
|
||||||
|
$keyDefinitions = cl::withn(static::KEY_DEFINITIONS);
|
||||||
|
$primaryKeys = cl::withn(static::PRIMARY_KEYS);
|
||||||
|
if ($primaryKeys === null && $keyDefinitions !== null) {
|
||||||
|
$index = 0;
|
||||||
|
foreach ($keyDefinitions as $col => $def) {
|
||||||
|
if ($col == $index) {
|
||||||
|
$index++;
|
||||||
|
if (preg_match('/\bprimary\s+key\s+\((.+)\)/i', $def, $ms)) {
|
||||||
|
$primaryKeys = preg_split('/\s*,\s*/', trim($ms[1]));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (preg_match('/\bprimary\s+key\b/i', $def)) {
|
||||||
|
$primaryKeys[] = $col;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$this->keyDefinitions = $keyDefinitions;
|
||||||
|
$this->primaryKeys = $primaryKeys;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @var string */
|
/** @var string */
|
||||||
|
@ -54,6 +80,8 @@ class CapacitorChannel {
|
||||||
$this->created = $created;
|
$this->created = $created;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected ?array $keyDefinitions;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* retourner un ensemble de définitions pour des colonnes supplémentaires à
|
* retourner un ensemble de définitions pour des colonnes supplémentaires à
|
||||||
* insérer lors du chargement d'une valeur
|
* insérer lors du chargement d'une valeur
|
||||||
|
@ -71,7 +99,13 @@ class CapacitorChannel {
|
||||||
* avant d'être retournées à l'utilisateur (sans le suffixe "__")
|
* avant d'être retournées à l'utilisateur (sans le suffixe "__")
|
||||||
*/
|
*/
|
||||||
function getKeyDefinitions(): ?array {
|
function getKeyDefinitions(): ?array {
|
||||||
return null;
|
return $this->keyDefinitions;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected ?array $primaryKeys;
|
||||||
|
|
||||||
|
function getPrimaryKeys(): ?array {
|
||||||
|
return $this->primaryKeys;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -75,6 +75,12 @@ abstract class CapacitorStorage {
|
||||||
return $this->_one($this->getChannel($channel), $filter);
|
return $this->_one($this->getChannel($channel), $filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function getPrimaryKeys(CapacitorChannel $channel): array {
|
||||||
|
$primaryKeys = $channel->getPrimaryKeys();
|
||||||
|
if ($primaryKeys === null) $primaryKeys = ["id_"];
|
||||||
|
return $primaryKeys;
|
||||||
|
}
|
||||||
|
|
||||||
abstract function _all(CapacitorChannel $channel, $filter): iterable;
|
abstract function _all(CapacitorChannel $channel, $filter): iterable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -83,7 +89,7 @@ abstract class CapacitorStorage {
|
||||||
* si $filter n'est pas un tableau, il est transformé en ["id_" => $filter]
|
* si $filter n'est pas un tableau, il est transformé en ["id_" => $filter]
|
||||||
*/
|
*/
|
||||||
function all(?string $channel, $filter): iterable {
|
function all(?string $channel, $filter): iterable {
|
||||||
return $this->_one($this->getChannel($channel), $filter);
|
return $this->_all($this->getChannel($channel), $filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract function _each(CapacitorChannel $channel, $filter, ?callable $func, ?array $args): int;
|
abstract function _each(CapacitorChannel $channel, $filter, ?callable $func, ?array $args): int;
|
||||||
|
|
|
@ -251,7 +251,7 @@ class MysqlStorage extends CapacitorStorage {
|
||||||
"select",
|
"select",
|
||||||
"from" => $channel->getTableName(),
|
"from" => $channel->getTableName(),
|
||||||
"where" => $filter,
|
"where" => $filter,
|
||||||
], null, "id_");
|
], null, $this->getPrimaryKeys($channel));
|
||||||
foreach ($rows as $key => $row) {
|
foreach ($rows as $key => $row) {
|
||||||
yield $key => $this->unserialize($channel, $row);
|
yield $key => $this->unserialize($channel, $row);
|
||||||
}
|
}
|
||||||
|
|
|
@ -250,7 +250,7 @@ class SqliteStorage extends CapacitorStorage {
|
||||||
"select",
|
"select",
|
||||||
"from" => $channel->getTableName(),
|
"from" => $channel->getTableName(),
|
||||||
"where" => $filter,
|
"where" => $filter,
|
||||||
], null, "id_");
|
], null, $this->getPrimaryKeys($channel));
|
||||||
foreach ($rows as $key => $row) {
|
foreach ($rows as $key => $row) {
|
||||||
yield $key => $this->unserialize($channel, $row);
|
yield $key => $this->unserialize($channel, $row);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue