src/POData/UriProcessor/QueryProcessor/QueryProcessor.php
/**
     * Process the $expand and $select option and update the request description.
     * 
     * @return void
     * 
     * @throws ODataException Throws bad request error in the following cases
     *                          (1) If $expand or select cannot be applied to the
     *                              requested resource.
     *                          (2) If projection is disabled by the developer
     *                          (3) If some error occurs while parsing the options
     */
Process the $expand and $select option and update the request description.

@return void

@throws ODataException Throws bad request error in the following cases
(1) If $expand or select cannot be applied to the
requested resource.
(2) If projection is disabled by the developer
(3) If some error occurs while parsing the options
Process the $expand and $select option and update the request description . @return void @throws ODataException Throws bad request error in the following cases ( 1 ) If $expand or select cannot be applied to the requested resource . ( 2 ) If projection is disabled by the developer ( 3 ) If some error occurs while parsing the options
private function _processExpandAndSelect()
    {
        $expand = $this->service->getHost()->getQueryStringItem( ODataConstants::HTTPQUERY_STRING_EXPAND );
        if (!is_null($expand)) {
            $this->_checkExpandOrSelectApplicable(ODataConstants::HTTPQUERY_STRING_EXPAND );
        }
        $select = $this->service->getHost()->getQueryStringItem( ODataConstants::HTTPQUERY_STRING_SELECT );
        if (!is_null($select)) {
            if (!$this->service->getConfiguration()->getAcceptProjectionRequests()) {
				throw ODataException::createBadRequestError( Messages::configurationProjectionsNotAccepted() );
            }
            $this->_checkExpandOrSelectApplicable( ODataConstants::HTTPQUERY_STRING_SELECT );
        }
        if ($this->_expandSelectApplicable || $this->request->isLinkUri() ) {
			$rootProjectionNode = ExpandProjectionParser::parseExpandAndSelectClause(
				 $this->request->getTargetResourceSetWrapper(),
				 $this->request->getTargetResourceType(),
				 $this->request->getInternalOrderByInfo(),
				 $this->request->getSkipCount(),
				 $this->request->getTopCount(),
				 $expand,
				 $select,
				 $this->service->getProvidersWrapper()
			);
			if ($rootProjectionNode->isSelectionSpecified()) {
			    $this->request->raiseMinVersionRequirement(2, 0 );
			}
            if ($rootProjectionNode->hasPagedExpandedResult()) {
                $this->request->raiseResponseVersion( 2, 0 );
            }
            $this->request->setRootProjectionNode($rootProjectionNode );
        }
    }
private function _processExpandAndSelect ( ) { $ expand = $ this -> service -> getHost ( ) -> getQueryStringItem ( ODataConstants :: HTTPQUERY_STRING_EXPAND ) ; if ( ! is_null ( $ expand ) ) { $ this -> _checkExpandOrSelectApplicable ( ODataConstants :: HTTPQUERY_STRING_EXPAND ) ; } $ select = $ this -> service -> getHost ( ) -> getQueryStringItem ( ODataConstants :: HTTPQUERY_STRING_SELECT ) ; if ( ! is_null ( $ select ) ) { if ( ! $ this -> service -> getConfiguration ( ) -> getAcceptProjectionRequests ( ) ) { throw ODataException :: createBadRequestError ( Messages :: configurationProjectionsNotAccepted ( ) ) ; } $ this -> _checkExpandOrSelectApplicable ( ODataConstants :: HTTPQUERY_STRING_SELECT ) ; } if ( $ this -> _expandSelectApplicable || $ this -> request -> isLinkUri ( ) ) { $ rootProjectionNode = ExpandProjectionParser :: parseExpandAndSelectClause ( $ this -> request -> getTargetResourceSetWrapper ( ) , $ this -> request -> getTargetResourceType ( ) , $ this -> request -> getInternalOrderByInfo ( ) , $ this -> request -> getSkipCount ( ) , $ this -> request -> getTopCount ( ) , $ expand , $ select , $ this -> service -> getProvidersWrapper ( ) ) ; if ( $ rootProjectionNode -> isSelectionSpecified ( ) ) { $ this -> request -> raiseMinVersionRequirement ( 2 , 0 ) ; } if ( $ rootProjectionNode -> hasPagedExpandedResult ( ) ) { $ this -> request -> raiseResponseVersion ( 2 , 0 ) ; } $ this -> request -> setRootProjectionNode ( $ rootProjectionNode ) ; } }
Process the $expand and $select option and update the request description.
Process the $expand and $select option and update the request description .
// We will generate RootProjectionNode in case of $link request also, but // expand and select in this case must be null (we are ensuring this above) // 'RootProjectionNode' is required while generating next page Link