/**
  * @since 2.2
  *
  * @param Description $description
  *
  * @return QuerySegment
  */
 public function interpretDescription(Description $description)
 {
     $query = new QuerySegment();
     $query->type = $description instanceof Conjunction ? QuerySegment::Q_CONJUNCTION : QuerySegment::Q_DISJUNCTION;
     foreach ($description->getDescriptions() as $subDescription) {
         $subQueryId = $this->querySegmentListBuilder->getQuerySegmentFrom($subDescription);
         if ($subQueryId >= 0) {
             $query->components[$subQueryId] = true;
         }
     }
     // All subconditions failed, drop this as well.
     if (count($query->components) == 0) {
         $query->type = QuerySegment::Q_NOQUERY;
     }
     return $query;
 }
 /**
  * Recursively create an Condition from an Conjunction
  *
  * @param Conjunction $description
  * @param string $joinVariable
  * @param DIProperty|null $orderByProperty
  *
  * @return Condition
  */
 public function buildCondition(Description $description, $joinVariable, $orderByProperty = null)
 {
     $subDescriptions = $description->getDescriptions();
     $result = $this->doPreliminarySubDescriptionCheck($subDescriptions, $joinVariable, $orderByProperty);
     if ($result !== null) {
         return $result;
     }
     $subConditionElements = $this->doResolveSubDescriptionsRecursively($subDescriptions, $joinVariable);
     if ($subConditionElements instanceof FalseCondition) {
         return $subConditionElements;
     }
     $result = $this->createConditionFromSubConditionElements($subConditionElements);
     $result->weakConditions = $subConditionElements->weakConditions;
     $result->orderVariables = $subConditionElements->orderVariables;
     $this->compoundConditionBuilder->addOrderByDataForProperty($result, $joinVariable, $orderByProperty);
     return $result;
 }
 /**
  * @since 2.2
  *
  * {@inheritDoc}
  */
 public function interpretDescription(Description $description)
 {
     $joinVariable = $this->compoundConditionBuilder->getJoinVariable();
     $orderByProperty = $this->compoundConditionBuilder->getOrderByProperty();
     $subDescriptions = $description->getDescriptions();
     $result = $this->doPreliminarySubDescriptionCheck($subDescriptions, $joinVariable, $orderByProperty);
     if ($result !== null) {
         return $result;
     }
     $subConditionElements = $this->doResolveSubDescriptionsRecursively($subDescriptions, $joinVariable, $orderByProperty);
     if ($subConditionElements instanceof TrueCondition) {
         return $subConditionElements;
     }
     if ($subConditionElements->unionCondition === '' && $subConditionElements->filter === '') {
         return new FalseCondition();
     }
     $result = $this->createConditionFromSubConditionElements($subConditionElements, $joinVariable);
     $result->weakConditions = $subConditionElements->weakConditions;
     $this->compoundConditionBuilder->addOrderByDataForProperty($result, $joinVariable, $orderByProperty);
     return $result;
 }
 private function doMapConjunctionDisjunction(Description $description, &$exact)
 {
     $result = new ExpData(new ExpResource(''));
     $result->addPropertyObjectValue($this->exporter->getSpecialNsResource('rdf', 'type'), new ExpData($this->exporter->getSpecialNsResource('owl', 'Class')));
     $elements = array();
     foreach ($description->getDescriptions() as $subdesc) {
         $element = $this->getExpDataFromDescription($subdesc, $exact);
         if ($element === false) {
             $element = new ExpData($this->exporter->getSpecialNsResource('owl', 'Thing'));
         }
         $elements[] = $element;
     }
     $prop = $description instanceof Conjunction ? 'intersectionOf' : 'unionOf';
     $result->addPropertyObjectValue($this->exporter->getSpecialNsResource('owl', $prop), ExpData::makeCollection($elements));
     return $result;
 }