/** * Returns true if both DataTable are exactly the same. * Used in unit tests. * * @param Piwik_DataTable $table1 * @param Piwik_DataTable $table2 * @return bool */ public static function isEqual(Piwik_DataTable $table1, Piwik_DataTable $table2) { $rows1 = $table1->getRows(); $rows2 = $table2->getRows(); $table1->rebuildIndex(); $table2->rebuildIndex(); if ($table1->getRowsCount() != $table2->getRowsCount()) { return false; } foreach ($rows1 as $row1) { $row2 = $table2->getRowFromLabel($row1->getColumn('label')); if ($row2 === false || !Piwik_DataTable_Row::isEqual($row1, $row2)) { return false; } } return true; }
/** * Method for the recursive descend * * @param array $labelParts * @param Piwik_DataTable $dataTable * @param bool $date * @return Piwik_DataTable_Row|false */ private function doFilterRecursiveDescend($labelParts, $dataTable, $date = false) { // search for the first part of the tree search $labelPart = array_shift($labelParts); foreach ($this->getLabelVariations($labelPart) as $labelPart) { $row = $dataTable->getRowFromLabel($labelPart); if ($row !== false) { break; } } if ($row === false) { // not found return false; } // end of tree search reached if (count($labelParts) == 0) { return $row; } $subTable = $this->loadSubtable($row, $date); if ($subTable === null) { // no more subtables but label parts left => no match found return false; } return $this->doFilterRecursiveDescend($labelParts, $subTable, $date); }