コード例 #1
0
 /**
  * Parse and generate expression from the the given odata expression.
  *
  * 
  * @param string              $text               The text expression to parse
  * @param ResourceType        $resourceType       The resource type in which
  * @param IExpressionProvider $expressionProvider Implementation of IExpressionProvider
  * 
  * @return FilterInfo
  * 
  * @throws ODataException If any error occurs while parsing the odata expression or building the php/custom expression.
  *
  */
 public static function parseExpression2($text, ResourceType $resourceType, \POData\Providers\Expression\IExpressionProvider $expressionProvider)
 {
     $expressionParser2 = new ExpressionParser2($text, $resourceType, $expressionProvider instanceof PHPExpressionProvider);
     $expressionTree = $expressionParser2->parseFilter();
     $expressionAsString = null;
     $expressionProvider->setResourceType($resourceType);
     $expressionProcessor = new ExpressionProcessor($expressionProvider);
     try {
         $expressionAsString = $expressionProcessor->processExpression($expressionTree);
     } catch (\InvalidArgumentException $invalidArgumentException) {
         throw ODataException::createInternalServerError($invalidArgumentException->getMessage());
     }
     return new FilterInfo($expressionParser2->_navigationPropertiesUsedInTheExpression, $expressionAsString);
 }
コード例 #2
0
 /**
  * Parse the astoria filter expression, generate the same expression as PHP expression,
  * retrieve only the entries which satisfies this expression.
  * 
  * @param string         $astoriaFilter
  * @param ResourceType    $resourceType
  * @param array<objects> $entries
  * 
  * @return array<objects>
  */
 private function executeExpression($astoriaFilter, $resourceType, $entries)
 {
     //Parse the Astoria filter query option to expression tree
     $parser = new ExpressionParser2($astoriaFilter, $resourceType, true);
     $expressionTree = $parser->parseFilter();
     //emit the PHP expression corresponds to Astoria filter query
     $expressionProcessor = new ExpressionProcessor(new \POData\Providers\Expression\PHPExpressionProvider('$lt'));
     $phpExpression = $expressionProcessor->processExpression($expressionTree);
     //create an anonymous function with the generated PHP expression in if condition
     $fun = create_function('$lt', 'if(' . $phpExpression . ') { return true; } else { return false;}');
     $result = array();
     foreach ($entries as $lt) {
         //Filter out only the entries which satisfies the condition
         if ($fun($lt)) {
             $result[] = $lt;
         }
     }
     return $result;
 }