modifs.mineures sans commentaires

This commit is contained in:
Jephté Clain 2024-05-18 13:19:31 +04:00
parent a3ae6847d4
commit c1ce91ec81
1 changed files with 26 additions and 9 deletions

View File

@ -3,6 +3,7 @@ namespace nur\sery\db\sqlite;
use nur\sery\cl; use nur\sery\cl;
use nur\sery\php\func; use nur\sery\php\func;
use nur\sery\ValueException;
/** /**
* Class SqliteCapacitor: objet permettant d'accumuler des données pour les * Class SqliteCapacitor: objet permettant d'accumuler des données pour les
@ -22,13 +23,14 @@ class SqliteCapacitor {
/** tester si le canal spécifié existe */ /** tester si le canal spécifié existe */
function exists(?string $channel=null): bool { function exists(?string $channel=null): bool {
#XXX maintenir une table channels avec la liste des canaux valides
} }
/** supprimer le canal spécifié */ /** supprimer le canal spécifié */
function reset(?string $channel=null) { function reset(?string $channel=null) {
$tableName = $this->getTableName($channel); $tableName = $this->getTableName($channel);
$this->sqlite->exec("drop table if exists $tableName"); $this->sqlite->exec("drop table if exists $tableName");
#XXX maj de la tables channels
} }
/** @var array */ /** @var array */
@ -66,14 +68,15 @@ class SqliteCapacitor {
]); ]);
#XXX^^^ migrer vers la syntaxe tableau de create #XXX^^^ migrer vers la syntaxe tableau de create
$this->sqlite->exec($query); $this->sqlite->exec($query);
#XXX maj de la tables channels
$this->created[$channel] = true; $this->created[$channel] = true;
} }
function charge($item, ?string $channel=null) { function charge($item, ?string $channel=null) {
$this->create($channel); $this->create($channel);
$values = cl::merge([ $values = cl::merge($this->getKeyValues($item, $channel), [
"_item" => serialize($item), "_item" => serialize($item),
], $this->getKeyValues($item, $channel)); ]);
$this->sqlite->exec([ $this->sqlite->exec([
"insert", "insert",
"into" => $this->getTableName($channel), "into" => $this->getTableName($channel),
@ -94,17 +97,31 @@ class SqliteCapacitor {
if ($reset) $this->reset($channel); if ($reset) $this->reset($channel);
} }
/** appeler une fonction pour chaque élément du canal spécifié */ /**
function each(callable $func, ?string $channel=null): void { * appeler une fonction pour chaque élément du canal spécifié.
*
* $keys permet de filtrer parmi les élements chargés
*
* si $func retourne un tableau, il est utilisé pour mettre à jour
* l'enregistrement.
*/
function each(callable $func, ?array $keys, ?string $channel=null): void {
$context = func::_prepare($func); $context = func::_prepare($func);
foreach ($this->discharge($channel, false) as $item) { foreach ($this->discharge($channel, false) as $item) {
func::_call($context, [$item]); $result = func::_call($context, [$item]);
#XXX
} }
} }
/** obtenir l'élément identifié par les clés spécifiées sur le canal spécifié */ /**
function get(?array $keys, ?string $channel=null) { * obtenir l'élément identifié par les clés spécifiées sur le canal spécifié
*
* si $keys n'est pas un tableau, il est transformé en ["_id" => $keys]
*/
function get($keys, ?string $channel=null) {
if ($keys === null) throw ValueException::null("keys");
if (!is_array($keys)) $keys = ["_id" => $keys];
#XXX
} }
function close(): void { function close(): void {