/** * Get the output string for a query in debugging mode. * * @param Query $query * * @return string */ public function getDebugQueryResult(Query $query) { $this->sortkeys = $query->sortkeys; $this->compoundConditionBuilder->setSortKeys($this->sortkeys); $sparqlCondition = $this->compoundConditionBuilder->buildCondition($query->getDescription()); $query->addErrors($this->compoundConditionBuilder->getErrors()); $entries = array(); if ($sparqlCondition instanceof SingletonCondition) { if ($sparqlCondition->condition === '') { // all URIs exist, no querying $sparql = 'None (no conditions).'; } else { $condition = $this->compoundConditionBuilder->convertConditionToString($sparqlCondition); $namespaces = $sparqlCondition->namespaces; $sparql = $this->connection->getSparqlForAsk($condition, $namespaces); } } elseif ($sparqlCondition instanceof FalseCondition) { $sparql = 'None (conditions can not be satisfied by anything).'; } else { $condition = $this->compoundConditionBuilder->convertConditionToString($sparqlCondition); $namespaces = $sparqlCondition->namespaces; $options = $this->getOptions($query, $sparqlCondition); $options['DISTINCT'] = true; $sparql = $this->connection->getSparqlForSelect('?' . self::RESULT_VARIABLE, $condition, $options, $namespaces); } $sparql = str_replace(array('[', ':', ' '), array('[', ':', ' '), $sparql); $entries['SPARQL Query'] = '<div class="smwpre">' . $sparql . '</div>'; return DebugOutputFormatter::formatOutputFor('SPARQLStore', $entries, $query); }
/** * @since 2.0 * @param Query $query * * @return QueryResult|string */ public function getQueryResult(Query $query) { if ((!$this->engineOptions->get('smwgIgnoreQueryErrors') || $query->getDescription() instanceof ThingDescription) && $query->querymode != Query::MODE_DEBUG && count($query->getErrors()) > 0) { return $this->queryResultFactory->newEmptyQueryResult($query, false); } // don't query, but return something to the printer if ($query->querymode == Query::MODE_NONE || $query->getLimit() < 1) { return $this->queryResultFactory->newEmptyQueryResult($query, true); } $this->compoundConditionBuilder->setSortKeys($query->sortkeys); $compoundCondition = $this->compoundConditionBuilder->buildCondition($query->getDescription()); $query->addErrors($this->compoundConditionBuilder->getErrors()); if ($query->querymode == Query::MODE_DEBUG) { return $this->getDebugQueryResult($query, $compoundCondition); } elseif ($query->querymode == Query::MODE_COUNT) { return $this->getCountQueryResult($query, $compoundCondition); } return $this->getInstanceQueryResult($query, $compoundCondition); }
/** * @dataProvider descriptionProvider */ public function testNamespaceCondition($description, $orderByProperty, $sortkeys, $expectedConditionType, $expectedConditionString) { $resultVariable = 'result'; $compoundConditionBuilder = new CompoundConditionBuilder(); $compoundConditionBuilder->setResultVariable($resultVariable); $compoundConditionBuilder->setSortKeys($sortkeys); $instance = new PropertyConditionBuilder(); $instance->setCompoundConditionBuilder($compoundConditionBuilder); $condition = $instance->buildCondition($description, $resultVariable, $orderByProperty); $this->assertInstanceOf($expectedConditionType, $condition); $this->assertEquals($expectedConditionString, $compoundConditionBuilder->convertConditionToString($condition)); }
/** * @dataProvider descriptionProvider */ public function testConjunctionCondition($description, $orderByProperty, $sortkeys, $expectedConditionType, $expectedConditionString) { $resultVariable = 'result'; $compoundConditionBuilder = new CompoundConditionBuilder(); $compoundConditionBuilder->setResultVariable($resultVariable); $compoundConditionBuilder->setSortKeys($sortkeys); $compoundConditionBuilder->setJoinVariable($resultVariable); $compoundConditionBuilder->setOrderByProperty($orderByProperty); $instance = new DisjunctionInterpreter($compoundConditionBuilder); $condition = $instance->interpretDescription($description); $this->assertInstanceOf($expectedConditionType, $condition); $this->assertEquals($expectedConditionString, $compoundConditionBuilder->convertConditionToString($condition)); }
/** * @dataProvider descriptionProvider */ public function testSomeProperty($description, $orderByProperty, $sortkeys, $expectedConditionType, $expectedConditionString) { $propertyHierarchyExaminer = $this->getMockBuilder('\\SMW\\PropertyHierarchyExaminer')->disableOriginalConstructor()->getMock(); $resultVariable = 'result'; $compoundConditionBuilder = new CompoundConditionBuilder(); $compoundConditionBuilder->setPropertyHierarchyExaminer($propertyHierarchyExaminer); $compoundConditionBuilder->setResultVariable($resultVariable); $compoundConditionBuilder->setSortKeys($sortkeys); $compoundConditionBuilder->setJoinVariable($resultVariable); $compoundConditionBuilder->setOrderByProperty($orderByProperty); $instance = new SomePropertyInterpreter($compoundConditionBuilder); $condition = $instance->interpretDescription($description); $this->assertInstanceOf($expectedConditionType, $condition); $this->assertEquals($expectedConditionString, $compoundConditionBuilder->convertConditionToString($condition)); }
public function testQuerySomeProperty_OnInvalidSortKeyThrowsException() { $property = new DIProperty('Foo'); $description = new SomeProperty($property, new ThingDescription()); $instance = new CompoundConditionBuilder(); $instance->setSortKeys(array('Foo', 'ASC')); $this->setExpectedException('RuntimeException'); $instance->buildCondition($description); }