diff --git a/php/src/db/Capacitor.php b/php/src/db/Capacitor.php index 7162b44..6dfa4e9 100644 --- a/php/src/db/Capacitor.php +++ b/php/src/db/Capacitor.php @@ -185,19 +185,15 @@ class Capacitor implements ITransactor { function dbAll(array $query, ?array $params=null): iterable { $primaryKeys = $this->channel->getPrimaryKeys(); - $select = "select"; - if (A::pop($params, "distinct")) $select .= " distinct"; return $this->storage->db()->all(cl::merge([ - $select, + "select", "from" => $this->getTableName(), ], $query), $params, $primaryKeys); } function dbOne(array $query, ?array $params=null): ?array { - $select = "select"; - if (A::pop($params, "distinct")) $select .= " distinct"; return $this->storage->db()->one(cl::merge([ - $select, + "select", "from" => $this->getTableName(), ], $query), $params); } diff --git a/php/src/db/_private/_select.php b/php/src/db/_private/_select.php index 1e7f1d0..0dc0f0b 100644 --- a/php/src/db/_private/_select.php +++ b/php/src/db/_private/_select.php @@ -9,6 +9,7 @@ class _select extends _common { const SCHEMA = [ "prefix" => "?string", "schema" => "?array", + "distinct" => "bool", "cols" => "?array", "col_prefix" => "?string", "from" => "?string", @@ -45,8 +46,16 @@ class _select extends _common { if (($prefix = $query["prefix"] ?? null) !== null) $sql[] = $prefix; ## select - self::consume('(select(?:\s*distinct)?)\s*', $tmpsql, $ms); + self::consume('(select(?:\s*(distinct))?)\s*', $tmpsql, $ms); $sql[] = $ms[1]; + if (($ms[2] ?? null) !== null) { + # ne pas le rajouter de nouveau ci-dessous + $distinct = false; + } else $distinct = null; + + ## distinct + $distinct ??= $query["distinct"] ?? false; + if ($distinct) $sql[] = "distinct"; ## cols $usercols = [];