@@ -209,19 +209,22 @@ static function (Type $type, callable $traverse) use ($objectManager): Type {
209209
210210 private function getScalarHydratedReturnType (Type $ queryResultType ): Type
211211 {
212- if (!$ queryResultType instanceof ArrayType ) {
212+ if (!$ queryResultType-> isArray ()-> yes () ) {
213213 return new ArrayType (new MixedType (), new MixedType ());
214214 }
215215
216- $ itemType = $ queryResultType ->getItemType ();
217- $ hasNoObject = (new ObjectWithoutClassType ())->isSuperTypeOf ($ itemType )->no ();
218- $ hasNoArray = $ itemType ->isArray ()->no ();
216+ foreach ($ queryResultType ->getArrays () as $ arrayType ) {
217+ $ itemType = $ arrayType ->getItemType ();
219218
220- if ($ hasNoArray && $ hasNoObject ) {
221- return $ queryResultType ;
219+ if (
220+ !(new ObjectWithoutClassType ())->isSuperTypeOf ($ itemType )->no ()
221+ || !$ itemType ->isArray ()->no ()
222+ ) {
223+ new ArrayType (new MixedType (), new MixedType ());
224+ }
222225 }
223226
224- return new ArrayType ( new MixedType (), new MixedType ()) ;
227+ return $ queryResultType ;
225228 }
226229
227230 private function getSimpleObjectHydratedReturnType (Type $ queryResultType ): Type
@@ -236,31 +239,41 @@ private function getSimpleObjectHydratedReturnType(Type $queryResultType): Type
236239 private function getSingleScalarHydratedReturnType (Type $ queryResultType ): Type
237240 {
238241 $ queryResultType = $ this ->getScalarHydratedReturnType ($ queryResultType );
239- if (!$ queryResultType instanceof ConstantArrayType ) {
242+ if (!$ queryResultType-> isConstantArray ()-> yes () ) {
240243 return new MixedType ();
241244 }
242245
243- $ values = $ queryResultType ->getValueTypes ();
244- if (count ($ values ) !== 1 ) {
245- return new MixedType ();
246+ $ types = [];
247+ foreach ($ queryResultType ->getConstantArrays () as $ constantArrayType ) {
248+ $ values = $ constantArrayType ->getValueTypes ();
249+ if (count ($ values ) !== 1 ) {
250+ return new MixedType ();
251+ }
252+
253+ $ types [] = $ constantArrayType ->getFirstIterableValueType ();
246254 }
247255
248- return $ queryResultType -> getFirstIterableValueType ( );
256+ return TypeCombinator:: union (... $ types );
249257 }
250258
251259 private function getScalarColumnHydratedReturnType (Type $ queryResultType ): Type
252260 {
253261 $ queryResultType = $ this ->getScalarHydratedReturnType ($ queryResultType );
254- if (!$ queryResultType instanceof ConstantArrayType ) {
262+ if (!$ queryResultType-> isConstantArray ()-> yes () ) {
255263 return new MixedType ();
256264 }
257265
258- $ values = $ queryResultType ->getValueTypes ();
259- if (count ($ values ) !== 1 ) {
260- return new MixedType ();
266+ $ types = [];
267+ foreach ($ queryResultType ->getConstantArrays () as $ constantArrayType ) {
268+ $ values = $ constantArrayType ->getValueTypes ();
269+ if (count ($ values ) !== 1 ) {
270+ return new MixedType ();
271+ }
272+
273+ $ types [] = $ constantArrayType ->getFirstIterableValueType ();
261274 }
262275
263- return $ queryResultType -> getFirstIterableValueType ( );
276+ return TypeCombinator:: union (... $ types );
264277 }
265278
266279 private function originalReturnType (MethodReflection $ methodReflection ): Type
0 commit comments