/**
  * (non-PHPdoc)
  * 
  * @see library/ODataProducer/QueryProcessor/Expressions/ODataProducer\QueryProcessor\Expressions.AbstractExpression::free()
  * 
  * @return void
  */
 public function free()
 {
     if (!is_null($this->parent)) {
         $this->parent->free();
         unset($this->parent);
     }
     if (!is_null($this->child)) {
         $this->child->free();
         unset($this->child);
     }
 }
 /**
  * Process an property access expression node for nullability
  * 
  * @param PropertyAccessExpression $expression            The property access 
  *                                                        expression node to process.
  * @param AbstractExpression       $parentExpression      The parent expression of 
  *                                                        expression node to process.
  * @param boolean                  $checkNullForMostChild Wheter to check null for 
  *                                                        most child node or not.
  * 
  * @return LogicalExpression, RelationalExpression or NULL
  */
 private function _processPropertyAccessNode(PropertyAccessExpression $expression, $parentExpression, $checkNullForMostChild)
 {
     $navigationsUsed = $expression->getNavigationPropertiesInThePath();
     if (!empty($navigationsUsed)) {
         $this->_navigationPropertiesUsedInTheExpression[] = $navigationsUsed;
     }
     $nullableExpTree = $expression->createNullableExpressionTree($checkNullForMostChild);
     if ($parentExpression == null) {
         return new LogicalExpression($nullableExpTree, $expression, ExpressionType::AND_LOGICAL);
     }
     return $nullableExpTree;
 }