public function testAddToUsageCounts() { $statsTable = new PropertyStatisticsTable($this->getStore()->getConnection('mw.db'), \SMWSQLStore3::PROPERTY_STATISTICS_TABLE); $this->assertTrue($statsTable->deleteAll() !== false); $counts = array(1 => 42, 2 => 0, 9001 => 9001, 9002 => $this->isWinOS() ? pow(2, 30) : pow(2, 31), 9003 => 1); foreach ($counts as $propId => $count) { $this->assertTrue($statsTable->insertUsageCount($propId, $count) !== false); } $additions = array(2 => 42, 9001 => -9000, 9003 => 0); $this->assertTrue($statsTable->addToUsageCounts($additions) !== false); foreach ($additions as $propId => $addition) { $counts[$propId] += $addition; } $this->assertEquals($counts, $statsTable->getUsageCounts(array_keys($counts))); }
/** * Find the numeric ID used for the page of the given normalized title, * namespace, interwiki, and subobjectName. Predefined IDs are not * taken into account (however, they would still be found correctly by * an avoidable database read if they are stored correctly in the * database; this should always be the case). In all other aspects, the * method works just like makeSMWPageID(). Especially, if no ID exists, * a new ID is created and returned. * * @since 1.8 * @param string $title DB key * @param integer $namespace namespace * @param string $iw interwiki prefix * @param string $subobjectName name of subobject * @param boolean $canonical should redirects be resolved? * @param string $sortkey call-by-ref will be set to sortkey * @param boolean $fetchHashes should the property hashes be obtained and cached? * @return integer SMW id or 0 if there is none */ protected function makeDatabaseId($title, $namespace, $iw, $subobjectName, $canonical, $sortkey, $fetchHashes) { $oldsort = ''; $id = $this->getDatabaseIdAndSort($title, $namespace, $iw, $subobjectName, $oldsort, $canonical, $fetchHashes); $db = $this->store->getConnection('mw.db'); $db->beginAtomicTransaction(__METHOD__); if ($id == 0) { $sortkey = $sortkey ? $sortkey : str_replace('_', ' ', $title); $sequenceValue = $db->nextSequenceValue($this->getIdTable() . '_smw_id_seq'); // Bug 42659 $db->insert(self::tableName, array('smw_id' => $sequenceValue, 'smw_title' => $title, 'smw_namespace' => $namespace, 'smw_iw' => $iw, 'smw_subobject' => $subobjectName, 'smw_sortkey' => $sortkey), __METHOD__); $id = (int) $db->insertId(); // Properties also need to be in the property statistics table if ($namespace === SMW_NS_PROPERTY) { $statsStore = new PropertyStatisticsTable($db, SMWSQLStore3::PROPERTY_STATISTICS_TABLE); $statsStore->insertUsageCount($id, 0); } $this->setCache($title, $namespace, $iw, $subobjectName, $id, $sortkey); if ($fetchHashes) { $this->setPropertyTableHashesCache($id, null); } } elseif ($sortkey !== '' && $sortkey != $oldsort) { $db->update(self::tableName, array('smw_sortkey' => $sortkey), array('smw_id' => $id), __METHOD__); $this->setCache($title, $namespace, $iw, $subobjectName, $id, $sortkey); } $db->commitAtomicTransaction(__METHOD__); return $id; }