diff --git a/src/db/sqlite/SqliteCapacitor.php b/src/db/sqlite/SqliteCapacitor.php index b541034..540b356 100644 --- a/src/db/sqlite/SqliteCapacitor.php +++ b/src/db/sqlite/SqliteCapacitor.php @@ -3,6 +3,7 @@ namespace nur\sery\db\sqlite; use nur\sery\cl; use nur\sery\php\func; +use nur\sery\ValueException; /** * Class SqliteCapacitor: objet permettant d'accumuler des données pour les @@ -22,13 +23,14 @@ class SqliteCapacitor { /** tester si le canal spécifié existe */ function exists(?string $channel=null): bool { - + #XXX maintenir une table channels avec la liste des canaux valides } /** supprimer le canal spécifié */ function reset(?string $channel=null) { $tableName = $this->getTableName($channel); $this->sqlite->exec("drop table if exists $tableName"); + #XXX maj de la tables channels } /** @var array */ @@ -66,14 +68,15 @@ class SqliteCapacitor { ]); #XXX^^^ migrer vers la syntaxe tableau de create $this->sqlite->exec($query); + #XXX maj de la tables channels $this->created[$channel] = true; } function charge($item, ?string $channel=null) { $this->create($channel); - $values = cl::merge([ + $values = cl::merge($this->getKeyValues($item, $channel), [ "_item" => serialize($item), - ], $this->getKeyValues($item, $channel)); + ]); $this->sqlite->exec([ "insert", "into" => $this->getTableName($channel), @@ -94,17 +97,31 @@ class SqliteCapacitor { 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); 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 {