public function testAddUserDefinedBlobPropertyAsObjectToSemanticDataForStorage()
 {
     $property = new DIProperty('SomeBlobProperty');
     $property->setPropertyTypeId('_txt');
     $this->subjects[] = $subject = DIWikiPage::newFromTitle(Title::newFromText(__METHOD__));
     $semanticData = new SemanticData($subject);
     $semanticData->addPropertyObjectValue($property, new DIBlob('SomePropertyBlobValue'));
     $this->getStore()->updateData($semanticData);
     $this->assertArrayHasKey($property->getKey(), $this->getStore()->getSemanticData($subject)->getProperties());
 }
 public function testUserDefinedPropertyUsedForInvalidValueAssignment()
 {
     $property = new DIProperty('SomePropertyWithInvalidValueAssignment');
     $property->setPropertyTypeId('_tem');
     $dataValue = $this->dataValueFactory->newDataValueByProperty($property, '1 Jan 1970');
     $semanticData = $this->semanticDataFactory->newEmptySemanticData(__METHOD__);
     $semanticData->addDataValue($dataValue);
     $this->getStore()->updateData($semanticData);
     $this->assertEquals(0, $this->searchForResultsThatCompareEqualToOnlySingularPropertyOf($property)->getCount());
     $this->subjectsToBeCleared = array($semanticData->getSubject());
 }
 public function testDescendingOrderedQueryResult()
 {
     $expectedSubjects = array(new DIWikiPage('AA', NS_MAIN), new DIWikiPage('AB', NS_MAIN), new DIWikiPage('AC', NS_MAIN));
     $property = new DIProperty('SomeDescendingPageProperty');
     $property->setPropertyTypeId('_wpg');
     $query = $this->createQueryForSamplePagesThatContain($property, $expectedSubjects);
     $query->sort = true;
     $query->sortkeys = array($property->getKey() => 'DESC');
     $query->setUnboundLimit(50);
     $this->assertResultOrder(array_reverse($expectedSubjects), $this->getStore()->getQueryResult($query)->getResults());
 }
 public function testUserDefinedBlobProperty()
 {
     $property = new DIProperty('SomeBlobProperty');
     $property->setPropertyTypeId('_txt');
     $dataItem = new DIBlob('SomePropertyBlobValue');
     $semanticData = $this->semanticDataFactory->newEmptySemanticData(__METHOD__);
     $semanticData->addDataValue($this->dataValueFactory->newDataItemValue($dataItem, $property));
     $this->getStore()->updateData($semanticData);
     $this->assertArrayHasKey($property->getKey(), $this->getStore()->getSemanticData($semanticData->getSubject())->getProperties());
     $propertyValue = new PropertyValue('__pro');
     $propertyValue->setDataItem($property);
     $description = new SomeProperty($property, new ThingDescription());
     $description->addPrintRequest(new PrintRequest(PrintRequest::PRINT_PROP, null, $propertyValue));
     $query = new Query($description, false, false);
     $query->querymode = Query::MODE_INSTANCES;
     $queryResult = $this->getStore()->getQueryResult($query);
     $this->queryResultValidator->assertThatQueryResultContains($dataItem, $queryResult);
 }
 public function testUserDefinedDateProperty()
 {
     $property = new DIProperty('SomeDateProperty');
     $property->setPropertyTypeId('_dat');
     $dataValue = $this->dataValueFactory->newDataValueByProperty($property, '1 January 1970');
     $semanticData = $this->semanticDataFactory->newEmptySemanticData(__METHOD__);
     $semanticData->addDataValue($dataValue);
     $this->getStore()->updateData($semanticData);
     Exporter::getInstance()->clear();
     $this->assertArrayHasKey($property->getKey(), $this->getStore()->getSemanticData($semanticData->getSubject())->getProperties());
     $propertyValue = new PropertyValue('__pro');
     $propertyValue->setDataItem($property);
     $description = new SomeProperty($property, new ThingDescription());
     $description->addPrintRequest(new PrintRequest(PrintRequest::PRINT_PROP, null, $propertyValue));
     $query = new Query($description, false, false);
     $query->querymode = Query::MODE_INSTANCES;
     $queryResult = $this->getStore()->getQueryResult($query);
     $this->queryResultValidator->assertThatQueryResultContains($dataValue, $queryResult);
     $this->subjectsToBeCleared[] = $semanticData->getSubject();
 }
 public function testSubpropertyToQueryFromTopHierarchy()
 {
     if (!$this->getStore() instanceof \SMWSQLStore3) {
         $this->markTestSkipped("Subproperty/property hierarchies are currently only supported by the SQLStore");
     }
     $semanticDataOfSpouse = $this->semanticDataFactory->setSubject(new DIWikiPage('Spouse', SMW_NS_PROPERTY, ''))->newEmptySemanticData();
     $property = new DIProperty('Wife');
     $property->setPropertyTypeId('_wpg');
     $this->addPropertyHierarchy($property, 'Spouse');
     $dataValue = $this->dataValueFactory->newPropertyObjectValue($property, 'Lien');
     $semanticData = $this->semanticDataFactory->newEmptySemanticData(__METHOD__);
     $semanticData->addDataValue($dataValue);
     $this->getStore()->updateData($semanticDataOfSpouse);
     $this->getStore()->updateData($semanticData);
     $description = new SomeProperty(new DIProperty('Spouse'), new ThingDescription());
     $propertyValue = new PropertyValue('__pro');
     $propertyValue->setDataItem($property);
     $description->addPrintRequest(new PrintRequest(PrintRequest::PRINT_PROP, null, $propertyValue));
     $query = new Query($description, false, false);
     $query->querymode = Query::MODE_INSTANCES;
     $queryResult = $this->getStore()->getQueryResult($query);
     $this->queryResultValidator->assertThatQueryResultContains($dataValue, $queryResult);
     $this->subjectsToBeCleared = array($semanticData->getSubject(), $semanticDataOfSpouse->getSubject(), $property->getDiWikiPage());
 }
 public function descriptionProvider()
 {
     $stringBuilder = UtilityFactory::getInstance()->newStringBuilder();
     # 0
     $conditionType = '\\SMW\\SPARQLStore\\QueryEngine\\Condition\\FalseCondition';
     $description = new SomeProperty(new DIProperty('Foo'), new Disjunction());
     $orderByProperty = null;
     $sortkeys = array();
     $expected = $stringBuilder->addString('<http://www.example.org> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2002/07/owl#nothing> .')->addNewLine()->getString();
     $provider[] = array($description, $orderByProperty, $sortkeys, $conditionType, $expected);
     # 1
     $conditionType = '\\SMW\\SPARQLStore\\QueryEngine\\Condition\\WhereCondition';
     $description = new SomeProperty(new DIProperty('Foo'), new ThingDescription());
     $orderByProperty = null;
     $sortkeys = array();
     $expected = $stringBuilder->addString('?result property:Foo ?v1 .')->addNewLine()->getString();
     $provider[] = array($description, $orderByProperty, $sortkeys, $conditionType, $expected);
     # 2 Inverse
     $conditionType = '\\SMW\\SPARQLStore\\QueryEngine\\Condition\\WhereCondition';
     $description = new SomeProperty(new DIProperty('Foo', true), new ThingDescription());
     $orderByProperty = null;
     $sortkeys = array();
     $expected = $stringBuilder->addString('?v1 property:Foo ?result .')->addNewLine()->getString();
     $provider[] = array($description, $orderByProperty, $sortkeys, $conditionType, $expected);
     # 3
     $conditionType = '\\SMW\\SPARQLStore\\QueryEngine\\Condition\\WhereCondition';
     $description = new SomeProperty(new DIProperty('Foo'), new ThingDescription());
     $orderByProperty = new DIProperty('Foo');
     $sortkeys = array();
     $expected = $stringBuilder->addString('?result swivt:wikiPageSortKey ?resultsk .')->addNewLine()->addString('?result property:Foo ?v1 .')->addNewLine()->getString();
     $provider[] = array($description, $orderByProperty, $sortkeys, $conditionType, $expected);
     # 4
     $conditionType = '\\SMW\\SPARQLStore\\QueryEngine\\Condition\\WhereCondition';
     $property = new DIProperty('Foo');
     $property->setPropertyTypeId('_txt');
     $description = new SomeProperty($property, new ValueDescription(new DIBlob('SomePropertyBlobValue')));
     $orderByProperty = null;
     $sortkeys = array();
     $expected = $stringBuilder->addString('?result property:Foo "SomePropertyBlobValue" .')->addNewLine()->getString();
     $provider[] = array($description, $orderByProperty, $sortkeys, $conditionType, $expected);
     # 5
     $conditionType = '\\SMW\\SPARQLStore\\QueryEngine\\Condition\\WhereCondition';
     $property = new DIProperty('Foo');
     $property->setPropertyTypeId('_txt');
     $description = new SomeProperty($property, new ValueDescription(new DIBlob('SomePropertyBlobValue')));
     $orderByProperty = $property;
     $sortkeys = array();
     $expected = $stringBuilder->addString('?result swivt:wikiPageSortKey ?resultsk .')->addNewLine()->addString('?result property:Foo "SomePropertyBlobValue" .')->addNewLine()->getString();
     $provider[] = array($description, $orderByProperty, $sortkeys, $conditionType, $expected);
     # 6
     $conditionType = '\\SMW\\SPARQLStore\\QueryEngine\\Condition\\WhereCondition';
     $property = new DIProperty('Foo');
     $property->setPropertyTypeId('_wpg');
     $propertyValue = new DIWikiPage('SomePropertyPageValue', NS_HELP);
     $propertyValueName = \SMWTurtleSerializer::getTurtleNameForExpElement(\SMWExporter::getInstance()->getResourceElementForWikiPage($propertyValue));
     $description = new SomeProperty($property, new ValueDescription($propertyValue));
     $orderByProperty = $property;
     $sortkeys = array();
     $expected = $stringBuilder->addString('?result swivt:wikiPageSortKey ?resultsk .')->addNewLine()->addString("?result property:Foo {$propertyValueName} .")->addNewLine()->getString();
     $provider[] = array($description, $orderByProperty, $sortkeys, $conditionType, $expected);
     # 7
     $conditionType = '\\SMW\\SPARQLStore\\QueryEngine\\Condition\\WhereCondition';
     $property = new DIProperty('Foo');
     $property->setPropertyTypeId('_wpg');
     $description = new SomeProperty($property, new ValueDescription(new DIWikiPage('SomePropertyPageValue', NS_HELP), $property, SMW_CMP_LEQ));
     $orderByProperty = new DIProperty('SomePropertyPageValue');
     $sortkeys = array();
     $expected = $stringBuilder->addString('?result swivt:wikiPageSortKey ?resultsk .')->addNewLine()->addString('?result property:Foo ?v1 .')->addNewLine()->addString('FILTER( ?v1sk <= "SomePropertyPageValue" )')->addNewLine()->addString('?v1 swivt:wikiPageSortKey ?v1sk .')->addNewLine()->getString();
     $provider[] = array($description, $orderByProperty, $sortkeys, $conditionType, $expected);
     # 8
     $conditionType = '\\SMW\\SPARQLStore\\QueryEngine\\Condition\\WhereCondition';
     $property = new DIProperty('Foo');
     $property->setPropertyTypeId('_wpg');
     $description = new SomeProperty($property, new ValueDescription(new DIWikiPage('SomePropertyPageValue', NS_HELP), $property, SMW_CMP_LEQ));
     $description = new SomeProperty(new DIProperty('Bar'), $description);
     $orderByProperty = new DIProperty('Bar');
     $sortkeys = array('Foo' => 'ASC');
     $expected = $stringBuilder->addString('?result swivt:wikiPageSortKey ?resultsk .')->addNewLine()->addString('?result property:Bar ?v1 .')->addNewLine()->addString('{ ?v1 property:Foo ?v2 .')->addNewLine()->addString('FILTER( ?v2sk <= "SomePropertyPageValue" )')->addNewLine()->addString('?v2 swivt:wikiPageSortKey ?v2sk .')->addNewLine()->addString('}')->addNewLine()->getString();
     $provider[] = array($description, $orderByProperty, $sortkeys, $conditionType, $expected);
     # 9 Inverse -> ?v1 property:Foo ?v2 vs. ?v2 property:Foo ?v1
     $conditionType = '\\SMW\\SPARQLStore\\QueryEngine\\Condition\\WhereCondition';
     $property = new DIProperty('Foo', true);
     $property->setPropertyTypeId('_wpg');
     $description = new SomeProperty($property, new ValueDescription(new DIWikiPage('SomePropertyPageValue', NS_HELP), $property, SMW_CMP_LEQ));
     $description = new SomeProperty(new DIProperty('Bar'), $description);
     $expected = $stringBuilder->addString('?result swivt:wikiPageSortKey ?resultsk .')->addNewLine()->addString('?result property:Bar ?v1 .')->addNewLine()->addString('{ ?v2 property:Foo ?v1 .')->addNewLine()->addString('FILTER( ?v2sk <= "SomePropertyPageValue" )')->addNewLine()->addString('?v2 swivt:wikiPageSortKey ?v2sk .')->addNewLine()->addString('}')->addNewLine()->getString();
     $provider[] = array($description, $orderByProperty, $sortkeys, $conditionType, $expected);
     # 10
     $conditionType = '\\SMW\\SPARQLStore\\QueryEngine\\Condition\\WhereCondition';
     $property = new DIProperty('_MDAT');
     $description = new SomeProperty($property, new ThingDescription());
     $sortkeys = array('_MDAT' => 'ASC');
     $propertyLabel = str_replace(' ', '_', $property->getLabel());
     $expected = $stringBuilder->addString('?result swivt:wikiPageSortKey ?resultsk .')->addNewLine()->addString("?result property:{$propertyLabel}-23aux ?v1 .")->addNewLine()->getString();
     $provider[] = array($description, $orderByProperty, $sortkeys, $conditionType, $expected);
     # 11, issue 556
     $conditionType = '\\SMW\\SPARQLStore\\QueryEngine\\Condition\\WhereCondition';
     $property = new DIProperty('Foo');
     $property->setPropertyTypeId('_txt');
     $description = new SomeProperty($property, new Disjunction(array(new ValueDescription(new DIBlob('Bar')), new ValueDescription(new DIBlob('Baz')))));
     $expected = $stringBuilder->addString('?result swivt:wikiPageSortKey ?resultsk .')->addNewLine()->addString('?result property:Foo ?v1 .')->addNewLine()->addString('FILTER( ?v1 = "Bar" || ?v1 = "Baz" )')->addNewLine()->getString();
     $provider[] = array($description, $orderByProperty, $sortkeys, $conditionType, $expected);
     # 12 use the rdf/owl equivalent for a predefined property
     $conditionType = '\\SMW\\SPARQLStore\\QueryEngine\\Condition\\WhereCondition';
     $property = new DIProperty('_SUBC');
     $description = new SomeProperty($property, new ValueDescription(new DIBlob('Bar')));
     $expected = $stringBuilder->addString('?result swivt:wikiPageSortKey ?resultsk .')->addNewLine()->addString('?result rdfs:subClassOf "Bar" .')->addNewLine()->getString();
     $provider[] = array($description, $orderByProperty, $sortkeys, $conditionType, $expected);
     # 13
     $conditionType = '\\SMW\\SPARQLStore\\QueryEngine\\Condition\\WhereCondition';
     $property = new DIProperty('_SUBP');
     $description = new SomeProperty($property, new ValueDescription(new DIWikiPage('Bar', SMW_NS_PROPERTY)));
     $expected = $stringBuilder->addString('?result swivt:wikiPageSortKey ?resultsk .')->addNewLine()->addString('?result rdfs:subPropertyOf property:Bar .')->addNewLine()->getString();
     $provider[] = array($description, $orderByProperty, $sortkeys, $conditionType, $expected);
     # 14 aux-property
     $conditionType = '\\SMW\\SPARQLStore\\QueryEngine\\Condition\\WhereCondition';
     $property = new DIProperty('_MDAT');
     $description = new SomeProperty($property, new ValueDescription(new DITime(1, 1970, 01, 01, 1, 1)));
     $expected = $stringBuilder->addString('?result swivt:wikiPageSortKey ?resultsk .')->addNewLine()->addString('?result property:Modification_date-23aux "2440587.5423611"^^xsd:double .')->addNewLine()->getString();
     $provider[] = array($description, $orderByProperty, $sortkeys, $conditionType, $expected);
     return $provider;
 }
 private function newDataValueForPagePropertyValue($property, $value)
 {
     $property = new DIProperty($property);
     $property->setPropertyTypeId('_wpg');
     $dataItem = new DIWikiPage($value, NS_MAIN, '');
     return $this->dataValueFactory->newDataItemValue($dataItem, $property);
 }
 public function testSetPropertyTypeIdOnPredefinedPropertyThrowsException()
 {
     $property = new DIProperty('_MDAT');
     $this->setExpectedException('InvalidArgumentException');
     $property->setPropertyTypeId('_txt');
 }
 public function dateConjunctionFilterProvider()
 {
     $property = new DIProperty('SomeDatePropertyToFilter');
     $property->setPropertyTypeId('_dat');
     #7 Date, Greater Equal, Less Equal
     $provider[] = array(array('197001' => new DITime(1, 1970, 01, 01, 1, 1), '197002' => new DITime(1, 1970, 02, 01, 1, 1), '197003' => new DITime(1, 1970, 03, 01, 1, 1)), array('lower' => new DITime(1, 1970, 01, 01), 'upper' => new DITime(1, 1970, 03, 01), 'lowerComp' => SMW_CMP_GEQ, 'upperComp' => SMW_CMP_LEQ, 'property' => $property), array('count' => 2, 'subjects' => array('197001', '197002')));
     #7 Date, Greater Equal, Less Equal
     $provider[] = array(array('1970011' => new DITime(1, 1970, 01, 01, 1, 1), '1970012' => new DITime(1, 1970, 01, 02, 1, 1), '1970013' => new DITime(1, 1970, 01, 03, 1, 1)), array('lower' => new DITime(1, 1970, 01, 01, 2), 'upper' => new DITime(1, 1970, 01, 02, 2), 'lowerComp' => SMW_CMP_GRTR, 'upperComp' => SMW_CMP_LESS, 'property' => $property), array('count' => 1, 'subjects' => array('1970012')));
     return $provider;
 }
 public function descriptionProvider()
 {
     $stringBuilder = UtilityFactory::getInstance()->newStringBuilder();
     # 0
     $conditionType = '\\SMW\\SPARQLStore\\QueryEngine\\Condition\\FalseCondition';
     $description = new SomeProperty(new DIProperty('Foo'), new Disjunction());
     $orderByProperty = null;
     $sortkeys = array();
     $expected = $stringBuilder->addString('<http://www.example.org> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2002/07/owl#nothing> .')->addNewLine()->getString();
     $provider[] = array($description, $orderByProperty, $sortkeys, $conditionType, $expected);
     # 1
     $conditionType = '\\SMW\\SPARQLStore\\QueryEngine\\Condition\\WhereCondition';
     $description = new SomeProperty(new DIProperty('Foo'), new ThingDescription());
     $orderByProperty = null;
     $sortkeys = array();
     $expected = $stringBuilder->addString('?result property:Foo ?v1 .')->addNewLine()->getString();
     $provider[] = array($description, $orderByProperty, $sortkeys, $conditionType, $expected);
     # 2 Inverse
     $conditionType = '\\SMW\\SPARQLStore\\QueryEngine\\Condition\\WhereCondition';
     $description = new SomeProperty(new DIProperty('Foo', true), new ThingDescription());
     $orderByProperty = null;
     $sortkeys = array();
     $expected = $stringBuilder->addString('?v1 property:Foo ?result .')->addNewLine()->getString();
     $provider[] = array($description, $orderByProperty, $sortkeys, $conditionType, $expected);
     # 3
     $conditionType = '\\SMW\\SPARQLStore\\QueryEngine\\Condition\\WhereCondition';
     $description = new SomeProperty(new DIProperty('Foo'), new ThingDescription());
     $orderByProperty = new DIProperty('Foo');
     $sortkeys = array();
     $expected = $stringBuilder->addString('?result swivt:wikiPageSortKey ?resultsk .')->addNewLine()->addString('?result property:Foo ?v1 .')->addNewLine()->getString();
     $provider[] = array($description, $orderByProperty, $sortkeys, $conditionType, $expected);
     # 4
     $conditionType = '\\SMW\\SPARQLStore\\QueryEngine\\Condition\\WhereCondition';
     $property = new DIProperty('Foo');
     $property->setPropertyTypeId('_txt');
     $description = new SomeProperty($property, new ValueDescription(new DIBlob('SomePropertyBlobValue')));
     $orderByProperty = null;
     $sortkeys = array();
     $expected = $stringBuilder->addString('?result property:Foo "SomePropertyBlobValue" .')->addNewLine()->getString();
     $provider[] = array($description, $orderByProperty, $sortkeys, $conditionType, $expected);
     # 5
     $conditionType = '\\SMW\\SPARQLStore\\QueryEngine\\Condition\\WhereCondition';
     $property = new DIProperty('Foo');
     $property->setPropertyTypeId('_txt');
     $description = new SomeProperty($property, new ValueDescription(new DIBlob('SomePropertyBlobValue')));
     $orderByProperty = $property;
     $sortkeys = array();
     $expected = $stringBuilder->addString('?result swivt:wikiPageSortKey ?resultsk .')->addNewLine()->addString('?result property:Foo "SomePropertyBlobValue" .')->addNewLine()->getString();
     $provider[] = array($description, $orderByProperty, $sortkeys, $conditionType, $expected);
     # 6
     $conditionType = '\\SMW\\SPARQLStore\\QueryEngine\\Condition\\WhereCondition';
     $property = new DIProperty('Foo');
     $property->setPropertyTypeId('_wpg');
     $description = new SomeProperty($property, new ValueDescription(new DIWikiPage('SomePropertyPageValue', NS_HELP)));
     $orderByProperty = $property;
     $sortkeys = array();
     $expected = $stringBuilder->addString('?result swivt:wikiPageSortKey ?resultsk .')->addNewLine()->addString('?result property:Foo wiki:Help-3ASomePropertyPageValue .')->addNewLine()->getString();
     $provider[] = array($description, $orderByProperty, $sortkeys, $conditionType, $expected);
     # 7
     $conditionType = '\\SMW\\SPARQLStore\\QueryEngine\\Condition\\WhereCondition';
     $property = new DIProperty('Foo');
     $property->setPropertyTypeId('_wpg');
     $description = new SomeProperty($property, new ValueDescription(new DIWikiPage('SomePropertyPageValue', NS_HELP), $property, SMW_CMP_LEQ));
     $orderByProperty = new DIProperty('SomePropertyPageValue');
     $sortkeys = array();
     $expected = $stringBuilder->addString('?result swivt:wikiPageSortKey ?resultsk .')->addNewLine()->addString('?result property:Foo ?v1 .')->addNewLine()->addString('FILTER( ?v1sk <= "SomePropertyPageValue" )')->addNewLine()->addString('?v1 swivt:wikiPageSortKey ?v1sk .')->addNewLine()->getString();
     $provider[] = array($description, $orderByProperty, $sortkeys, $conditionType, $expected);
     # 8
     $conditionType = '\\SMW\\SPARQLStore\\QueryEngine\\Condition\\WhereCondition';
     $property = new DIProperty('Foo');
     $property->setPropertyTypeId('_wpg');
     $description = new SomeProperty($property, new ValueDescription(new DIWikiPage('SomePropertyPageValue', NS_HELP), $property, SMW_CMP_LEQ));
     $description = new SomeProperty(new DIProperty('Bar'), $description);
     $orderByProperty = new DIProperty('Bar');
     $sortkeys = array('Foo' => 'ASC');
     $expected = $stringBuilder->addString('?result swivt:wikiPageSortKey ?resultsk .')->addNewLine()->addString('?result property:Bar ?v1 .')->addNewLine()->addString('{ ?v1 property:Foo ?v2 .')->addNewLine()->addString('FILTER( ?v2sk <= "SomePropertyPageValue" )')->addNewLine()->addString('?v2 swivt:wikiPageSortKey ?v2sk .')->addNewLine()->addString('}')->addNewLine()->getString();
     $provider[] = array($description, $orderByProperty, $sortkeys, $conditionType, $expected);
     # 9 Inverse -> ?v1 property:Foo ?v2 vs. ?v2 property:Foo ?v1
     $conditionType = '\\SMW\\SPARQLStore\\QueryEngine\\Condition\\WhereCondition';
     $property = new DIProperty('Foo', true);
     $property->setPropertyTypeId('_wpg');
     $description = new SomeProperty($property, new ValueDescription(new DIWikiPage('SomePropertyPageValue', NS_HELP), $property, SMW_CMP_LEQ));
     $description = new SomeProperty(new DIProperty('Bar'), $description);
     $expected = $stringBuilder->addString('?result swivt:wikiPageSortKey ?resultsk .')->addNewLine()->addString('?result property:Bar ?v1 .')->addNewLine()->addString('{ ?v2 property:Foo ?v1 .')->addNewLine()->addString('FILTER( ?v2sk <= "SomePropertyPageValue" )')->addNewLine()->addString('?v2 swivt:wikiPageSortKey ?v2sk .')->addNewLine()->addString('}')->addNewLine()->getString();
     $provider[] = array($description, $orderByProperty, $sortkeys, $conditionType, $expected);
     # 10
     $conditionType = '\\SMW\\SPARQLStore\\QueryEngine\\Condition\\WhereCondition';
     $property = new DIProperty('_MDAT');
     $description = new SomeProperty($property, new ThingDescription());
     $sortkeys = array('_MDAT' => 'ASC');
     $propertyLabel = str_replace(' ', '_', $property->getLabel());
     $expected = $stringBuilder->addString('?result swivt:wikiPageSortKey ?resultsk .')->addNewLine()->addString("?result property:{$propertyLabel}-23aux ?v1 .")->addNewLine()->getString();
     $provider[] = array($description, $orderByProperty, $sortkeys, $conditionType, $expected);
     return $provider;
 }
 public function testQuerySubobjects_afterUpdatingWithEmptyContainerAllAssociatedEntitiesGetRemovedFromGraph()
 {
     $semanticData = $this->semanticDataFactory->newEmptySemanticData(__METHOD__);
     $subobject = new Subobject($semanticData->getSubject()->getTitle());
     $subobject->setEmptyContainerForId('SubobjectToTestReferenceAfterUpdate');
     $property = new DIProperty('SomeNumericPropertyToCompareReference');
     $property->setPropertyTypeId('_num');
     $dataItem = new DINumber(99999);
     $subobject->addDataValue($this->dataValueFactory->newDataItemValue($dataItem, $property));
     $semanticData->addPropertyObjectValue($subobject->getProperty(), $subobject->getContainer());
     $this->store->doSparqlDataUpdate($semanticData);
     $description = new SomeProperty($property, new ValueDescription($dataItem, null, SMW_CMP_EQ));
     $query = new Query($description, false, false);
     $query->querymode = Query::MODE_INSTANCES;
     $this->assertSame(1, $this->store->getQueryResult($query)->getCount());
     $this->queryResultValidator->assertThatQueryResultHasSubjects($subobject->getSemanticData()->getSubject(), $this->store->getQueryResult($query));
     $this->store->doSparqlDataUpdate($this->semanticDataFactory->newEmptySemanticData(__METHOD__));
     $this->assertSame(0, $this->store->getQueryResult($query)->getCount());
 }
 public function testSubqueryDisjunction()
 {
     $property = new DIProperty('HasSomeProperty');
     $property->setPropertyTypeId('_wpg');
     /**
      * Page annotated with [[HasSomeProperty:Foo]]
      */
     $semanticData = $this->semanticDataFactory->newEmptySemanticData(__METHOD__ . '1');
     $semanticData->addPropertyObjectValue($property, new DIWikiPage('Foo', NS_MAIN));
     $expectedSubjects[] = $semanticData->getSubject();
     $this->subjectsToBeCleared[] = $semanticData->getSubject();
     $this->getStore()->updateData($semanticData);
     /**
      * Page annotated with [[HasSomeProperty:Bar]]
      */
     $semanticData = $this->semanticDataFactory->newEmptySemanticData(__METHOD__ . '2');
     $semanticData->addPropertyObjectValue($property, new DIWikiPage('Bar', NS_MAIN));
     $expectedSubjects[] = $semanticData->getSubject();
     $this->subjectsToBeCleared[] = $semanticData->getSubject();
     $this->getStore()->updateData($semanticData);
     /**
      * Query with [[HasSomeProperty::Foo||Bar]]
      */
     $disjunction = new Disjunction(array(new ValueDescription(new DIWikiPage('Foo', NS_MAIN), $property), new ValueDescription(new DIWikiPage('Bar', NS_MAIN), $property)));
     $description = new SomeProperty($property, $disjunction);
     $query = new Query($description, false, false);
     $this->assertEquals($description, $this->queryParser->getQueryDescription('[[HasSomeProperty::Foo||Bar]]'));
     $query->querymode = Query::MODE_INSTANCES;
     $queryResult = $this->getStore()->getQueryResult($query);
     $this->assertEquals(2, $queryResult->getCount());
     $this->queryResultValidator->assertThatQueryResultHasSubjects($expectedSubjects, $queryResult);
 }
 private function newDataValueForNumericPropertyValue($property, $value)
 {
     $property = new DIProperty($property);
     $property->setPropertyTypeId('_num');
     $dataItem = new DINumber($value);
     return $this->dataValueFactory->newDataItemValue($dataItem, $property);
 }
 public function testSubqueryDisjunction()
 {
     $property = new DIProperty('HasSomeProperty');
     $property->setPropertyTypeId('_wpg');
     $disjunction = new Disjunction(array(new ValueDescription(new DIWikiPage('Foo', NS_MAIN), $property), new ValueDescription(new DIWikiPage('Bar', NS_MAIN), $property)));
     $description = new SomeProperty($property, $disjunction);
     $this->assertEquals($description, $this->queryParser->getQueryDescription('[[HasSomeProperty::Foo||Bar]]'));
 }
 public function testExtendConditionUsingPropertyPathForWpgPropertyValueRedirect()
 {
     $title = $this->getMockBuilder('\\Title')->disableOriginalConstructor()->getMock();
     $title->expects($this->atLeastOnce())->method('isRedirect')->will($this->returnValue(true));
     $diWikiPage = $this->getMockBuilder('\\SMW\\DIWikiPage')->setConstructorArgs(array('Bar', NS_MAIN))->setMethods(array('getTitle'))->getMock();
     $diWikiPage->expects($this->atLeastOnce())->method('getTitle')->will($this->returnValue($title));
     $property = new DIProperty('Foo');
     $property->setPropertyTypeId('_wpg');
     $description = new SomeProperty($property, new ValueDescription($diWikiPage, $property));
     $instance = $this->getMockBuilder('\\SMW\\SPARQLStore\\QueryEngine\\CompoundConditionBuilder')->setMethods(array('canUseQFeature'))->getMock();
     $instance->expects($this->at(0))->method('canUseQFeature')->with($this->equalTo(SMW_SPARQL_QF_REDI))->will($this->returnValue(true));
     $condition = $instance->buildCondition($description);
     $this->assertInstanceOf('\\SMW\\SPARQLStore\\QueryEngine\\Condition\\WhereCondition', $condition);
     $expectedConditionString = $this->stringBuilder->addString('?r2 ^swivt:redirectsTo wiki:Bar .')->addNewLine()->addString('?result property:Foo ?r2 .')->addNewLine()->getString();
     $this->assertEquals($expectedConditionString, $instance->convertConditionToString($condition));
 }
 public function descriptionProvider()
 {
     #0 Blob + wildcard
     $isFixedPropertyTable = false;
     $indexField = '';
     $sortKeys = array();
     $property = new DIProperty('Foo');
     $property->setPropertyTypeId('_txt');
     $description = new SomeProperty($property, new ThingDescription());
     $expected = new \stdClass();
     $expected->type = 1;
     $expected->joinTable = 'FooPropTable';
     $expected->components = array(1 => "t0.p_id");
     $expected->sortfields = array();
     $provider[] = array($description, $isFixedPropertyTable, $indexField, $sortKeys, $expected);
     #1 WikiPage + SMW_CMP_EQ
     $isFixedPropertyTable = false;
     $indexField = 'wikipageIndex';
     $sortKeys = array();
     $property = new DIProperty('Foo');
     $property->setPropertyTypeId('_wpg');
     $description = new SomeProperty($property, new ValueDescription(new DIWikiPage('Bar', NS_MAIN), null, SMW_CMP_EQ));
     $expected = new \stdClass();
     $expected->type = 1;
     $expected->joinTable = 'FooPropTable';
     $expected->components = array(1 => "t0.p_id", 2 => "t0.wikipageIndex");
     $expected->queryNumber = 0;
     $expected->where = '';
     $expected->sortfields = array();
     $provider[] = array($description, $isFixedPropertyTable, $indexField, $sortKeys, $expected);
     #2 WikiPage + SMW_CMP_EQ + sort
     $isFixedPropertyTable = false;
     $indexField = 'wikipageIndex';
     $sortKeys = array('Foo' => 'DESC');
     $property = new DIProperty('Foo');
     $property->setPropertyTypeId('_wpg');
     $description = new SomeProperty($property, new ValueDescription(new DIWikiPage('Bar', NS_MAIN), null, SMW_CMP_EQ));
     $expected = new \stdClass();
     $expected->type = 1;
     $expected->joinTable = 'FooPropTable';
     $expected->components = array(1 => "t0.p_id", 2 => "t0.wikipageIndex");
     $expected->queryNumber = 0;
     $expected->where = '';
     $expected->sortfields = array('Foo' => 'idst0.smw_sortkey');
     $expected->from = ' INNER JOIN  AS idst0 ON idst0.smw_id=t0.wikipageIndex';
     $provider[] = array($description, $isFixedPropertyTable, $indexField, $sortKeys, $expected);
     #3 Blob + SMW_CMP_EQ
     $isFixedPropertyTable = false;
     $indexField = 'blobIndex';
     $sortKeys = array();
     $property = new DIProperty('Foo');
     $property->setPropertyTypeId('_txt');
     $description = new SomeProperty($property, new ValueDescription(new DIBlob('Bar'), null, SMW_CMP_EQ));
     $expected = new \stdClass();
     $expected->type = 1;
     $expected->joinTable = 'FooPropTable';
     $expected->components = array(1 => "t0.p_id");
     $expected->queryNumber = 0;
     $expected->where = '(t0.blobIndex=fixedFooWhereCond)';
     $expected->sortfields = array();
     $provider[] = array($description, $isFixedPropertyTable, $indexField, $sortKeys, $expected);
     #4 Blob + SMW_CMP_EQ + sort
     $isFixedPropertyTable = false;
     $indexField = 'blobIndex';
     $sortKeys = array('Foo' => 'ASC');
     $property = new DIProperty('Foo');
     $property->setPropertyTypeId('_txt');
     $description = new SomeProperty($property, new ValueDescription(new DIBlob('Bar'), null, SMW_CMP_EQ));
     $expected = new \stdClass();
     $expected->type = 1;
     $expected->joinTable = 'FooPropTable';
     $expected->components = array(1 => "t0.p_id");
     $expected->queryNumber = 0;
     $expected->where = '(t0.blobIndex=fixedFooWhereCond)';
     $expected->sortfields = array('Foo' => 't0.blobIndex');
     $expected->from = '';
     $provider[] = array($description, $isFixedPropertyTable, $indexField, $sortKeys, $expected);
     #5 Check SemanticMaps compatibility mode (invokes `getSQLCondition`)
     $isFixedPropertyTable = false;
     $indexField = 'blobIndex';
     $sortKeys = array();
     $property = new DIProperty('Foo');
     $property->setPropertyTypeId('_txt');
     $valueDescription = $this->getMockBuilder('\\SMW\\Query\\Language\\ValueDescription')->disableOriginalConstructor()->setMethods(array('getSQLCondition', 'getDataItem'))->getMock();
     $valueDescription->expects($this->any())->method('getProperty')->will($this->returnValue($property));
     $valueDescription->expects($this->any())->method('getDataItem')->will($this->returnValue(new DIBlob('13,56')));
     $valueDescription->expects($this->once())->method('getSQLCondition')->will($this->returnValue('foo AND bar'));
     $description = new SomeProperty($property, $valueDescription);
     $expected = new \stdClass();
     $expected->type = 1;
     $expected->joinTable = 'FooPropTable';
     $expected->components = array(1 => "t0.p_id");
     $expected->queryNumber = 0;
     $expected->where = '(foo AND bar)';
     $expected->sortfields = array();
     $expected->from = '';
     $provider[] = array($description, $isFixedPropertyTable, $indexField, $sortKeys, $expected);
     #6, see 556
     $isFixedPropertyTable = false;
     $indexField = '';
     $sortKeys = array();
     $property = new DIProperty('Foo');
     $property->setPropertyTypeId('_txt');
     $description = new SomeProperty($property, new Disjunction(array(new ValueDescription(new DIBlob('Bar')), new ValueDescription(new DIBlob('Baz')))));
     $expected = new \stdClass();
     $expected->type = 1;
     $expected->joinTable = 'FooPropTable';
     $expected->components = array(1 => "t0.p_id");
     $expected->queryNumber = 0;
     $expected->where = '((t0.=fixedFooWhereCond) OR (t0.=fixedFooWhereCond))';
     $expected->sortfields = array();
     $expected->from = '';
     $provider[] = array($description, $isFixedPropertyTable, $indexField, $sortKeys, $expected);
     return $provider;
 }
 /**
  * '[[HasSomeProperty::Foo||Bar]]'
  */
 public function testSubqueryDisjunction()
 {
     $property = new DIProperty('HasSomeProperty');
     $property->setPropertyTypeId('_wpg');
     $disjunction = new Disjunction(array(new ValueDescription(new DIWikiPage('Foo', NS_MAIN), $property), new ValueDescription(new DIWikiPage('Bar', NS_MAIN), $property)));
     $description = new SomeProperty($property, $disjunction);
     $instance = new CompoundConditionBuilder();
     $condition = $instance->buildCondition($description);
     $this->assertInstanceOf('\\SMW\\SPARQLStore\\QueryEngine\\Condition\\WhereCondition', $condition);
     $expectedConditionString = $this->stringBuilder->addString('?result property:HasSomeProperty ?v1 .')->addNewLine()->addString('FILTER( ?v1 = wiki:Foo || ?v1 = wiki:Bar )')->addNewLine()->getString();
     $this->assertEquals($expectedConditionString, $instance->convertConditionToString($condition));
 }