Skip to content

Commit 8249fe8

Browse files
committed
Permit sub queries in select.
1 parent f722b7e commit 8249fe8

1 file changed

Lines changed: 21 additions & 6 deletions

File tree

src/PdbQuery.php

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -235,11 +235,22 @@ public function andSelect(...$fields)
235235
{
236236
$fields = Arrays::flatten($fields, true, 2);
237237

238-
foreach ($fields as $key => $value) {
239-
$field = is_numeric($key) ? $value : [$key => $value];
240-
$field = PdbHelpers::parseAlias($field);
241-
Pdb::validateAlias($field, true);
242-
$this->_select[] = $field;
238+
foreach ($fields as $alias => $value) {
239+
if ($value instanceof PdbQueryInterface) {
240+
if (is_numeric($alias)) {
241+
throw new InvalidArgumentException('Nested queries must have an alias');
242+
}
243+
244+
$value->validate();
245+
Pdb::validateIdentifier($alias);
246+
$this->_select[] = [$value, $alias];
247+
}
248+
else {
249+
$field = is_numeric($alias) ? $value : [$value, $alias];
250+
$field = PdbHelpers::parseAlias($field);
251+
Pdb::validateAlias($field, true);
252+
$this->_select[] = $field;
253+
}
243254
}
244255

245256
return $this;
@@ -727,7 +738,11 @@ protected function _build(bool $validate = true): array
727738
foreach ($this->_select as $item) {
728739
[$field, $alias] = $item + [null, null];
729740

730-
if (!preg_match(PdbHelpers::RE_FUNCTION, $field)) {
741+
if ($field instanceof PdbQueryInterface) {
742+
[$field, $_params] = $field->build($validate);
743+
$params = array_merge($params, $_params);
744+
}
745+
else if (!preg_match(PdbHelpers::RE_FUNCTION, $field)) {
731746
$field = $this->pdb->quoteField($field);
732747
}
733748

0 commit comments

Comments
 (0)