support distinc dans _select

This commit is contained in:
Jephté Clain 2025-07-07 21:52:08 +04:00
parent 1f14faf08c
commit 2c45aa677a
2 changed files with 12 additions and 7 deletions

View File

@ -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);
}

View File

@ -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 = [];