/** * @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; }