private function compileAccordingConditionsAndHackThemIntoQobj(array $extraProperties, $qobj, $qid) { $this->querySegmentListBuilder->setSortKeys($this->sortKeys); $this->querySegmentListBuilder->buildQuerySegmentFor(new Conjunction($extraProperties)); $newQuerySegmentId = $this->querySegmentListBuilder->getLastQuerySegmentId(); $this->querySegmentList = $this->querySegmentListBuilder->getQuerySegmentList(); $this->errors = $this->querySegmentListBuilder->getErrors(); $newQuerySegment = $this->querySegmentList[$newQuerySegmentId]; // This is always an QuerySegment::Q_CONJUNCTION ... foreach ($newQuerySegment->components as $cid => $field) { // ... so just re-wire its dependencies $qobj->components[$cid] = $qobj->joinfield; $qobj->sortfields = array_merge($qobj->sortfields, $this->querySegmentList[$cid]->sortfields); } $this->querySegmentList[$qid] = $qobj; }
/** * @dataProvider descriptionProvider */ public function testinterpretDescription($description, $isFixedPropertyTable, $indexField, $sortKeys, $expected) { $dataItemHandler = $this->getMockBuilder('\\SMWDataItemHandler')->disableOriginalConstructor()->getMockForAbstractClass(); $dataItemHandler->expects($this->any())->method('getIndexField')->will($this->returnValue($indexField)); $dataItemHandler->expects($this->any())->method('getTableFields')->will($this->returnValue(array('one', 'two'))); $dataItemHandler->expects($this->any())->method('getWhereConds')->will($this->returnValue(array($indexField => 'fixedFooWhereCond'))); $objectIds = $this->getMockBuilder('\\stdClass')->setMethods(array('getSMWPropertyID', 'getSMWPageID'))->getMock(); $objectIds->expects($this->any())->method('getSMWPropertyID')->will($this->returnValue(42)); $objectIds->expects($this->any())->method('getSMWPageID')->will($this->returnValue(91)); $connection = $this->getMockBuilder('\\SMW\\MediaWiki\\Database')->disableOriginalConstructor()->getMock(); $connection->expects($this->any())->method('addQuotes')->will($this->returnArgument(0)); $store = $this->getMockBuilder('\\SMW\\SQLStore\\SQLStore')->disableOriginalConstructor()->getMock(); $proptable = $this->getMockBuilder('\\SMWSQLStore3Table')->disableOriginalConstructor()->getMock(); $proptable->expects($this->any())->method('usesIdSubject')->will($this->returnValue(true)); $proptable->expects($this->any())->method('getName')->will($this->returnValue('FooPropTable')); $proptable->expects($this->any())->method('isFixedPropertyTable')->will($this->returnValue($isFixedPropertyTable)); $store = $this->getMockBuilder('\\SMW\\SQLStore\\SQLStore')->disableOriginalConstructor()->getMock(); $store->expects($this->once())->method('findPropertyTableID')->will($this->returnValue('Foo')); $store->expects($this->once())->method('getPropertyTables')->will($this->returnValue(array('Foo' => $proptable))); $store->expects($this->any())->method('getConnection')->will($this->returnValue($connection)); $store->expects($this->any())->method('getObjectIds')->will($this->returnValue($objectIds)); $store->expects($this->any())->method('getDataItemHandlerForDIType')->will($this->returnValue($dataItemHandler)); $querySegmentListBuilder = new QuerySegmentListBuilder($store); $querySegmentListBuilder->setSortKeys($sortKeys); $instance = new SomePropertyInterpreter($querySegmentListBuilder); $this->assertTrue($instance->canInterpretDescription($description)); $this->querySegmentValidator->assertThatContainerHasProperties($expected, $instance->interpretDescription($description)); }