| @@ 414-470 (lines=57) @@ | ||
| 411 | if (is_array($result)) { |
|
| 412 | foreach ($result as $entry) { |
|
| 413 | // Check for null entry |
|
| 414 | if ($isCollection) { |
|
| 415 | $currentResourceSet = $this->_getCurrentResourceSetWrapper()->getResourceSet(); |
|
| 416 | $resourceSetOfProjectedProperty = $expandedProjectionNode->getResourceSetWrapper()->getResourceSet(); |
|
| 417 | $projectedProperty1 = $expandedProjectionNode->getResourceProperty(); |
|
| 418 | $result1 = $this->providers->getRelatedResourceSet( |
|
| 419 | QueryType::ENTITIES(), //it's always entities for an expansion |
|
| 420 | $currentResourceSet, |
|
| 421 | $entry, |
|
| 422 | $resourceSetOfProjectedProperty, |
|
| 423 | $projectedProperty1, |
|
| 424 | null, // $filter |
|
| 425 | null, // $orderby |
|
| 426 | null, // $top |
|
| 427 | null // $skip |
|
| 428 | )->results; |
|
| 429 | if (!empty($result1)) { |
|
| 430 | $internalOrderByInfo = $expandedProjectionNode->getInternalOrderByInfo(); |
|
| 431 | if (!is_null($internalOrderByInfo)) { |
|
| 432 | $orderByFunction = $internalOrderByInfo->getSorterFunction()->getReference(); |
|
| 433 | usort($result1, $orderByFunction); |
|
| 434 | unset($internalOrderByInfo); |
|
| 435 | $takeCount = $expandedProjectionNode->getTakeCount(); |
|
| 436 | if (!is_null($takeCount)) { |
|
| 437 | $result1 = array_slice($result1, 0, $takeCount); |
|
| 438 | } |
|
| 439 | } |
|
| 440 | ||
| 441 | $entry->$expandedPropertyName = $result1; |
|
| 442 | $projectedProperty = $expandedProjectionNode->getResourceProperty(); |
|
| 443 | $needPop = $this->_pushSegmentForNavigationProperty( |
|
| 444 | $projectedProperty |
|
| 445 | ); |
|
| 446 | $this->_executeExpansion($result1); |
|
| 447 | $this->_popSegment($needPop); |
|
| 448 | } else { |
|
| 449 | $entry->$expandedPropertyName = array(); |
|
| 450 | } |
|
| 451 | } else { |
|
| 452 | $currentResourceSet1 = $this->_getCurrentResourceSetWrapper()->getResourceSet(); |
|
| 453 | $resourceSetOfProjectedProperty1 = $expandedProjectionNode->getResourceSetWrapper()->getResourceSet(); |
|
| 454 | $projectedProperty2 = $expandedProjectionNode->getResourceProperty(); |
|
| 455 | $result1 = $this->providers->getRelatedResourceReference( |
|
| 456 | $currentResourceSet1, |
|
| 457 | $entry, |
|
| 458 | $resourceSetOfProjectedProperty1, |
|
| 459 | $projectedProperty2 |
|
| 460 | ); |
|
| 461 | $entry->$expandedPropertyName = $result1; |
|
| 462 | if (!is_null($result1)) { |
|
| 463 | $projectedProperty3 = $expandedProjectionNode->getResourceProperty(); |
|
| 464 | $needPop = $this->_pushSegmentForNavigationProperty( |
|
| 465 | $projectedProperty3 |
|
| 466 | ); |
|
| 467 | $this->_executeExpansion($result1); |
|
| 468 | $this->_popSegment($needPop); |
|
| 469 | } |
|
| 470 | } |
|
| 471 | } |
|
| 472 | } else { |
|
| 473 | if ($isCollection) { |
|
| @@ 472-530 (lines=59) @@ | ||
| 469 | } |
|
| 470 | } |
|
| 471 | } |
|
| 472 | } else { |
|
| 473 | if ($isCollection) { |
|
| 474 | $currentResourceSet2 = $this->_getCurrentResourceSetWrapper()->getResourceSet(); |
|
| 475 | $resourceSetOfProjectedProperty2 = $expandedProjectionNode->getResourceSetWrapper()->getResourceSet(); |
|
| 476 | $projectedProperty4 = $expandedProjectionNode->getResourceProperty(); |
|
| 477 | $result1 = $this->providers->getRelatedResourceSet( |
|
| 478 | QueryType::ENTITIES(), //it's always entities for an expansion |
|
| 479 | $currentResourceSet2, |
|
| 480 | $result, |
|
| 481 | $resourceSetOfProjectedProperty2, |
|
| 482 | $projectedProperty4, |
|
| 483 | null, // $filter |
|
| 484 | null, // $orderby |
|
| 485 | null, // $top |
|
| 486 | null // $skip |
|
| 487 | )->results; |
|
| 488 | if (!empty($result1)) { |
|
| 489 | $internalOrderByInfo = $expandedProjectionNode->getInternalOrderByInfo(); |
|
| 490 | if (!is_null($internalOrderByInfo)) { |
|
| 491 | $orderByFunction = $internalOrderByInfo->getSorterFunction()->getReference(); |
|
| 492 | usort($result1, $orderByFunction); |
|
| 493 | unset($internalOrderByInfo); |
|
| 494 | $takeCount = $expandedProjectionNode->getTakeCount(); |
|
| 495 | if (!is_null($takeCount)) { |
|
| 496 | $result1 = array_slice($result1, 0, $takeCount); |
|
| 497 | } |
|
| 498 | } |
|
| 499 | ||
| 500 | $result->$expandedPropertyName = $result1; |
|
| 501 | $projectedProperty7 = $expandedProjectionNode->getResourceProperty(); |
|
| 502 | $needPop = $this->_pushSegmentForNavigationProperty( |
|
| 503 | $projectedProperty7 |
|
| 504 | ); |
|
| 505 | $this->_executeExpansion($result1); |
|
| 506 | $this->_popSegment($needPop); |
|
| 507 | } else { |
|
| 508 | $result->$expandedPropertyName = array(); |
|
| 509 | } |
|
| 510 | } else { |
|
| 511 | $currentResourceSet3 = $this->_getCurrentResourceSetWrapper()->getResourceSet(); |
|
| 512 | $resourceSetOfProjectedProperty3 = $expandedProjectionNode->getResourceSetWrapper()->getResourceSet(); |
|
| 513 | $projectedProperty5 = $expandedProjectionNode->getResourceProperty(); |
|
| 514 | $result1 = $this->providers->getRelatedResourceReference( |
|
| 515 | $currentResourceSet3, |
|
| 516 | $result, |
|
| 517 | $resourceSetOfProjectedProperty3, |
|
| 518 | $projectedProperty5 |
|
| 519 | ); |
|
| 520 | $result->$expandedPropertyName = $result1; |
|
| 521 | if (!is_null($result1)) { |
|
| 522 | $projectedProperty6 = $expandedProjectionNode->getResourceProperty(); |
|
| 523 | $needPop = $this->_pushSegmentForNavigationProperty( |
|
| 524 | $projectedProperty6 |
|
| 525 | ); |
|
| 526 | $this->_executeExpansion($result1); |
|
| 527 | $this->_popSegment($needPop); |
|
| 528 | } |
|
| 529 | } |
|
| 530 | } |
|
| 531 | } |
|
| 532 | } |
|
| 533 | ||