@@ -67,7 +67,7 @@ discard block |
||
| 67 | 67 | { |
| 68 | 68 | if (!array_key_exists($resultId, $this->results)) { |
| 69 | 69 | $query = array_unique( |
| 70 | - array_reduce($this->buffer, 'array_merge', []) |
|
| 70 | + array_reduce($this->buffer, 'array_merge', []) |
|
| 71 | 71 | ); |
| 72 | 72 | sort($query); |
| 73 | 73 | $result = $this->database->query($query); |
@@ -101,43 +101,43 @@ discard block |
||
| 101 | 101 | public function build($config) |
| 102 | 102 | { |
| 103 | 103 | $config->addField( |
| 104 | - new Field( |
|
| 104 | + new Field( |
|
| 105 | 105 | [ |
| 106 | - 'name' => 'name', |
|
| 107 | - 'type' => new StringType(), |
|
| 108 | - 'resolve' => function ($value) { |
|
| 109 | - return $value['name']; |
|
| 110 | - }, |
|
| 106 | + 'name' => 'name', |
|
| 107 | + 'type' => new StringType(), |
|
| 108 | + 'resolve' => function ($value) { |
|
| 109 | + return $value['name']; |
|
| 110 | + }, |
|
| 111 | 111 | ] |
| 112 | - ) |
|
| 112 | + ) |
|
| 113 | 113 | ); |
| 114 | 114 | |
| 115 | 115 | $config->addField( |
| 116 | - new Field( |
|
| 116 | + new Field( |
|
| 117 | 117 | [ |
| 118 | - 'name' => 'friends', |
|
| 119 | - 'type' => new ListType(new DeferredUserType($this->database)), |
|
| 120 | - 'resolve' => function ($value) { |
|
| 121 | - return new DeferredResolver( |
|
| 118 | + 'name' => 'friends', |
|
| 119 | + 'type' => new ListType(new DeferredUserType($this->database)), |
|
| 120 | + 'resolve' => function ($value) { |
|
| 121 | + return new DeferredResolver( |
|
| 122 | 122 | $this->database->add($value['friends']) |
| 123 | - ); |
|
| 124 | - }, |
|
| 123 | + ); |
|
| 124 | + }, |
|
| 125 | 125 | ] |
| 126 | - ) |
|
| 126 | + ) |
|
| 127 | 127 | ); |
| 128 | 128 | |
| 129 | 129 | $config->addField( |
| 130 | - new Field( |
|
| 130 | + new Field( |
|
| 131 | 131 | [ |
| 132 | - 'name' => 'foes', |
|
| 133 | - 'type' => new ListType(new DeferredUserType($this->database)), |
|
| 134 | - 'resolve' => function ($value) { |
|
| 135 | - return new DeferredResolver( |
|
| 132 | + 'name' => 'foes', |
|
| 133 | + 'type' => new ListType(new DeferredUserType($this->database)), |
|
| 134 | + 'resolve' => function ($value) { |
|
| 135 | + return new DeferredResolver( |
|
| 136 | 136 | $this->database->add($value['foes']) |
| 137 | - ); |
|
| 138 | - }, |
|
| 137 | + ); |
|
| 138 | + }, |
|
| 139 | 139 | ] |
| 140 | - ) |
|
| 140 | + ) |
|
| 141 | 141 | ); |
| 142 | 142 | } |
| 143 | 143 | } |
@@ -148,30 +148,30 @@ discard block |
||
| 148 | 148 | public function __construct(DeferredQueryBuffer $buffer) |
| 149 | 149 | { |
| 150 | 150 | $usersField = new Field( |
| 151 | - [ |
|
| 151 | + [ |
|
| 152 | 152 | 'name' => 'users', |
| 153 | 153 | 'type' => new ListType(new DeferredUserType($buffer)), |
| 154 | 154 | 'resolve' => function ($value, $args) use ($buffer) { |
| 155 | 155 | return new DeferredResolver($buffer->add($args['ids'])); |
| 156 | 156 | }, |
| 157 | - ] |
|
| 157 | + ] |
|
| 158 | 158 | ); |
| 159 | 159 | |
| 160 | 160 | $usersField->addArgument( |
| 161 | - 'ids', |
|
| 162 | - [ |
|
| 161 | + 'ids', |
|
| 162 | + [ |
|
| 163 | 163 | 'type' => new ListType(new StringType()), |
| 164 | - ] |
|
| 164 | + ] |
|
| 165 | 165 | ); |
| 166 | 166 | parent::__construct( |
| 167 | - [ |
|
| 167 | + [ |
|
| 168 | 168 | 'query' => new ObjectType( |
| 169 | - [ |
|
| 169 | + [ |
|
| 170 | 170 | 'name' => 'RootQuery', |
| 171 | 171 | 'fields' => [$usersField], |
| 172 | - ] |
|
| 172 | + ] |
|
| 173 | 173 | ), |
| 174 | - ] |
|
| 174 | + ] |
|
| 175 | 175 | ); |
| 176 | 176 | } |
| 177 | 177 | |
@@ -216,28 +216,28 @@ discard block |
||
| 216 | 216 | $database = $this->prophesize(DeferredDatabase::class); |
| 217 | 217 | |
| 218 | 218 | $database->query(['a', 'b'])->willReturn( |
| 219 | - [ |
|
| 219 | + [ |
|
| 220 | 220 | 'a' => ['id' => 'a', 'name' => 'User A'], |
| 221 | 221 | 'b' => ['id' => 'b', 'name' => 'User B'], |
| 222 | - ] |
|
| 222 | + ] |
|
| 223 | 223 | )->shouldBeCalledTimes(1); |
| 224 | 224 | |
| 225 | 225 | $result = $this->query( |
| 226 | - $query, |
|
| 227 | - new DeferredQueryBuffer($database->reveal()) |
|
| 226 | + $query, |
|
| 227 | + new DeferredQueryBuffer($database->reveal()) |
|
| 228 | 228 | ); |
| 229 | 229 | |
| 230 | 230 | $database->checkProphecyMethodsPredictions(); |
| 231 | 231 | |
| 232 | 232 | $this->assertEquals( |
| 233 | - [ |
|
| 233 | + [ |
|
| 234 | 234 | 'users' => [ |
| 235 | - ['name' => 'User A'], |
|
| 236 | - ['name' => 'User B'], |
|
| 235 | + ['name' => 'User A'], |
|
| 236 | + ['name' => 'User B'], |
|
| 237 | + ], |
|
| 237 | 238 | ], |
| 238 | - ], |
|
| 239 | - $result['data'], |
|
| 240 | - 'Retrieved correct data.' |
|
| 239 | + $result['data'], |
|
| 240 | + 'Retrieved correct data.' |
|
| 241 | 241 | ); |
| 242 | 242 | } |
| 243 | 243 | |
@@ -259,30 +259,30 @@ discard block |
||
| 259 | 259 | $database = $this->prophesize(DeferredDatabase::class); |
| 260 | 260 | |
| 261 | 261 | $database->query(['a', 'b'])->willReturn( |
| 262 | - [ |
|
| 262 | + [ |
|
| 263 | 263 | 'a' => ['id' => 'a', 'name' => 'User A'], |
| 264 | 264 | 'b' => ['id' => 'b', 'name' => 'User B'], |
| 265 | - ] |
|
| 265 | + ] |
|
| 266 | 266 | )->shouldBeCalledTimes(1); |
| 267 | 267 | |
| 268 | 268 | $result = $this->query( |
| 269 | - $query, |
|
| 270 | - new DeferredQueryBuffer($database->reveal()) |
|
| 269 | + $query, |
|
| 270 | + new DeferredQueryBuffer($database->reveal()) |
|
| 271 | 271 | ); |
| 272 | 272 | |
| 273 | 273 | $database->checkProphecyMethodsPredictions(); |
| 274 | 274 | |
| 275 | 275 | $this->assertEquals( |
| 276 | - [ |
|
| 276 | + [ |
|
| 277 | 277 | 'a' => [ |
| 278 | - ['name' => 'User A'], |
|
| 278 | + ['name' => 'User A'], |
|
| 279 | 279 | ], |
| 280 | 280 | 'b' => [ |
| 281 | - ['name' => 'User B'], |
|
| 281 | + ['name' => 'User B'], |
|
| 282 | + ], |
|
| 282 | 283 | ], |
| 283 | - ], |
|
| 284 | - $result['data'], |
|
| 285 | - 'Retrieved correct data.' |
|
| 284 | + $result['data'], |
|
| 285 | + 'Retrieved correct data.' |
|
| 286 | 286 | ); |
| 287 | 287 | |
| 288 | 288 | } |
@@ -305,39 +305,39 @@ discard block |
||
| 305 | 305 | $database = $this->prophesize(DeferredDatabase::class); |
| 306 | 306 | |
| 307 | 307 | $database->query(['a'])->willReturn( |
| 308 | - [ |
|
| 308 | + [ |
|
| 309 | 309 | 'a' => ['id' => 'a', 'name' => 'User A', 'friends' => ['b', 'c']], |
| 310 | - ] |
|
| 310 | + ] |
|
| 311 | 311 | )->shouldBeCalledTimes(1); |
| 312 | 312 | |
| 313 | 313 | $database->query(['b', 'c'])->willReturn( |
| 314 | - [ |
|
| 314 | + [ |
|
| 315 | 315 | 'b' => ['id' => 'b', 'name' => 'User B'], |
| 316 | 316 | 'c' => ['id' => 'c', 'name' => 'User C'], |
| 317 | - ] |
|
| 317 | + ] |
|
| 318 | 318 | ); |
| 319 | 319 | |
| 320 | 320 | $result = $this->query( |
| 321 | - $query, |
|
| 322 | - new DeferredQueryBuffer($database->reveal()) |
|
| 321 | + $query, |
|
| 322 | + new DeferredQueryBuffer($database->reveal()) |
|
| 323 | 323 | ); |
| 324 | 324 | |
| 325 | 325 | $database->checkProphecyMethodsPredictions(); |
| 326 | 326 | |
| 327 | 327 | $this->assertEquals( |
| 328 | - [ |
|
| 328 | + [ |
|
| 329 | 329 | 'a' => [ |
| 330 | - [ |
|
| 330 | + [ |
|
| 331 | 331 | 'name' => 'User A', |
| 332 | 332 | 'friends' => [ |
| 333 | - ['name' => 'User B'], |
|
| 334 | - ['name' => 'User C'], |
|
| 333 | + ['name' => 'User B'], |
|
| 334 | + ['name' => 'User C'], |
|
| 335 | + ], |
|
| 335 | 336 | ], |
| 336 | - ], |
|
| 337 | 337 | ], |
| 338 | - ], |
|
| 339 | - $result['data'], |
|
| 340 | - 'Retrieved correct data.' |
|
| 338 | + ], |
|
| 339 | + $result['data'], |
|
| 340 | + 'Retrieved correct data.' |
|
| 341 | 341 | ); |
| 342 | 342 | } |
| 343 | 343 | |
@@ -371,68 +371,68 @@ discard block |
||
| 371 | 371 | $database = $this->prophesize(DeferredDatabase::class); |
| 372 | 372 | |
| 373 | 373 | $database->query(['a', 'b'])->willReturn( |
| 374 | - [ |
|
| 374 | + [ |
|
| 375 | 375 | 'a' => [ |
| 376 | - 'id' => 'a', |
|
| 377 | - 'name' => 'User A', |
|
| 378 | - 'friends' => ['b', 'c'], |
|
| 379 | - 'foes' => ['d', 'e'], |
|
| 376 | + 'id' => 'a', |
|
| 377 | + 'name' => 'User A', |
|
| 378 | + 'friends' => ['b', 'c'], |
|
| 379 | + 'foes' => ['d', 'e'], |
|
| 380 | 380 | ], |
| 381 | 381 | 'b' => [ |
| 382 | - 'id' => 'b', |
|
| 383 | - 'name' => 'User B', |
|
| 384 | - 'friends' => ['a'], |
|
| 385 | - 'foes' => ['c'], |
|
| 382 | + 'id' => 'b', |
|
| 383 | + 'name' => 'User B', |
|
| 384 | + 'friends' => ['a'], |
|
| 385 | + 'foes' => ['c'], |
|
| 386 | 386 | ], |
| 387 | - ] |
|
| 387 | + ] |
|
| 388 | 388 | )->shouldBeCalledTimes(1); |
| 389 | 389 | |
| 390 | 390 | $database->query(['a', 'b', 'c', 'd', 'e'])->willReturn( |
| 391 | - [ |
|
| 391 | + [ |
|
| 392 | 392 | 'a' => ['id' => 'a', 'name' => 'User A'], |
| 393 | 393 | 'b' => ['id' => 'b', 'name' => 'User B'], |
| 394 | 394 | 'c' => ['id' => 'c', 'name' => 'User C'], |
| 395 | 395 | 'd' => ['id' => 'd', 'name' => 'User D'], |
| 396 | 396 | 'e' => ['id' => 'e', 'name' => 'User E'], |
| 397 | - ] |
|
| 397 | + ] |
|
| 398 | 398 | )->shouldBeCalledTimes(1); |
| 399 | 399 | |
| 400 | 400 | $result = $this->query( |
| 401 | - $query, |
|
| 402 | - new DeferredQueryBuffer($database->reveal()) |
|
| 401 | + $query, |
|
| 402 | + new DeferredQueryBuffer($database->reveal()) |
|
| 403 | 403 | ); |
| 404 | 404 | |
| 405 | 405 | $database->checkProphecyMethodsPredictions(); |
| 406 | 406 | |
| 407 | 407 | $this->assertEquals( |
| 408 | - [ |
|
| 408 | + [ |
|
| 409 | 409 | 'a' => [ |
| 410 | - [ |
|
| 410 | + [ |
|
| 411 | 411 | 'name' => 'User A', |
| 412 | 412 | 'friends' => [ |
| 413 | - ['name' => 'User B'], |
|
| 414 | - ['name' => 'User C'], |
|
| 413 | + ['name' => 'User B'], |
|
| 414 | + ['name' => 'User C'], |
|
| 415 | 415 | ], |
| 416 | 416 | 'foes' => [ |
| 417 | - ['name' => 'User D'], |
|
| 418 | - ['name' => 'User E'], |
|
| 417 | + ['name' => 'User D'], |
|
| 418 | + ['name' => 'User E'], |
|
| 419 | + ], |
|
| 419 | 420 | ], |
| 420 | - ], |
|
| 421 | 421 | ], |
| 422 | 422 | 'b' => [ |
| 423 | - [ |
|
| 423 | + [ |
|
| 424 | 424 | 'name' => 'User B', |
| 425 | 425 | 'friends' => [ |
| 426 | - ['name' => 'User A'], |
|
| 426 | + ['name' => 'User A'], |
|
| 427 | 427 | ], |
| 428 | 428 | 'foes' => [ |
| 429 | - ['name' => 'User C'], |
|
| 429 | + ['name' => 'User C'], |
|
| 430 | + ], |
|
| 430 | 431 | ], |
| 431 | - ], |
|
| 432 | 432 | ], |
| 433 | - ], |
|
| 434 | - $result['data'], |
|
| 435 | - 'Retrieved data is correct.' |
|
| 433 | + ], |
|
| 434 | + $result['data'], |
|
| 435 | + 'Retrieved data is correct.' |
|
| 436 | 436 | ); |
| 437 | 437 | } |
| 438 | 438 | } |
| 439 | 439 | \ No newline at end of file |
@@ -25,6 +25,6 @@ |
||
| 25 | 25 | } |
| 26 | 26 | |
| 27 | 27 | public function resolve() { |
| 28 | - return call_user_func($this->resolver); |
|
| 28 | + return call_user_func($this->resolver); |
|
| 29 | 29 | } |
| 30 | 30 | } |
| 31 | 31 | \ No newline at end of file |
@@ -16,10 +16,10 @@ |
||
| 16 | 16 | */ |
| 17 | 17 | interface DeferredResolverInterface { |
| 18 | 18 | |
| 19 | - /** |
|
| 20 | - * @return mixed |
|
| 21 | - * The actual result value. |
|
| 22 | - */ |
|
| 23 | - public function resolve(); |
|
| 19 | + /** |
|
| 20 | + * @return mixed |
|
| 21 | + * The actual result value. |
|
| 22 | + */ |
|
| 23 | + public function resolve(); |
|
| 24 | 24 | |
| 25 | 25 | } |
@@ -97,21 +97,21 @@ discard block |
||
| 97 | 97 | |
| 98 | 98 | // If the processor found any deferred results, resolve them now. |
| 99 | 99 | if (!empty($this->data) && (!empty($this->deferredResultsLeaf) || !empty($this->deferredResultsComplex))) { |
| 100 | - try { |
|
| 101 | - while ($deferredResolver = array_shift($this->deferredResultsComplex)) { |
|
| 102 | - $deferredResolver->resolve(); |
|
| 103 | - } |
|
| 104 | - |
|
| 105 | - // Deferred scalar and enum fields should be resolved last to |
|
| 106 | - // pick up as many as possible for a single batch. |
|
| 107 | - while ($deferredResolver = array_shift($this->deferredResultsLeaf)) { |
|
| 108 | - $deferredResolver->resolve(); |
|
| 109 | - } |
|
| 110 | - } catch (\Exception $e) { |
|
| 111 | - $this->executionContext->addError($e); |
|
| 112 | - } finally { |
|
| 113 | - $this->data = static::unpackDeferredResults($this->data); |
|
| 114 | - } |
|
| 100 | + try { |
|
| 101 | + while ($deferredResolver = array_shift($this->deferredResultsComplex)) { |
|
| 102 | + $deferredResolver->resolve(); |
|
| 103 | + } |
|
| 104 | + |
|
| 105 | + // Deferred scalar and enum fields should be resolved last to |
|
| 106 | + // pick up as many as possible for a single batch. |
|
| 107 | + while ($deferredResolver = array_shift($this->deferredResultsLeaf)) { |
|
| 108 | + $deferredResolver->resolve(); |
|
| 109 | + } |
|
| 110 | + } catch (\Exception $e) { |
|
| 111 | + $this->executionContext->addError($e); |
|
| 112 | + } finally { |
|
| 113 | + $this->data = static::unpackDeferredResults($this->data); |
|
| 114 | + } |
|
| 115 | 115 | } |
| 116 | 116 | |
| 117 | 117 | } catch (\Exception $e) { |
@@ -445,9 +445,9 @@ discard block |
||
| 445 | 445 | } |
| 446 | 446 | |
| 447 | 447 | $fakeField = new Field([ |
| 448 | - 'name' => $field->getName(), |
|
| 449 | - 'type' => $itemType, |
|
| 450 | - 'args' => $field->getArguments(), |
|
| 448 | + 'name' => $field->getName(), |
|
| 449 | + 'type' => $itemType, |
|
| 450 | + 'args' => $field->getArguments(), |
|
| 451 | 451 | ]); |
| 452 | 452 | |
| 453 | 453 | $result = []; |
@@ -547,9 +547,9 @@ discard block |
||
| 547 | 547 | } |
| 548 | 548 | |
| 549 | 549 | $fakeField = new Field([ |
| 550 | - 'name' => $field->getName(), |
|
| 551 | - 'type' => $resolvedType, |
|
| 552 | - 'args' => $field->getArguments(), |
|
| 550 | + 'name' => $field->getName(), |
|
| 551 | + 'type' => $resolvedType, |
|
| 552 | + 'args' => $field->getArguments(), |
|
| 553 | 553 | ]); |
| 554 | 554 | |
| 555 | 555 | return $this->resolveObject($fakeField, $ast, $resolvedValue, true); |