@@ -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