original_string: public function mergeDataTables($table1, $table2)
      {
          // handle table arrays
          if ($table1 instanceof DataTable\Map && $table2 instanceof DataTable\Map) {
              $subTables2 = $table2->getDataTables();
              foreach ($table1->getDataTables() as $index => $subTable1) {
                  if (!array_key_exists($index, $subTables2)) {
                      // occurs when archiving starts on dayN and continues into dayN+1, see https://github.com/piwik/piwik/issues/5168#issuecomment-50959925
                      continue;
                  }
                  $subTable2 = $subTables2[$index];
                  $this->mergeDataTables($subTable1, $subTable2);
              }
              return;
          }
  
          $firstRow2 = $table2->getFirstRow();
          if (!($firstRow2 instanceof Row)) {
              return;
          }
  
          $firstRow1 = $table1->getFirstRow();
          if (empty($firstRow1)) {
              $firstRow1 = $table1->addRow(new Row());
          }
  
          foreach ($firstRow2->getColumns() as $metric => $value) {
              $firstRow1->setColumn($metric, $value);
          }
      }
code: public function mergeDataTables($table1, $table2)
      {
          // handle table arrays
          if ($table1 instanceof DataTable\Map && $table2 instanceof DataTable\Map) {
              $subTables2 = $table2->getDataTables();
              foreach ($table1->getDataTables() as $index => $subTable1) {
                  if (!array_key_exists($index, $subTables2)) {
                      // occurs when archiving starts on dayN and continues into dayN+1, see https://github.com/piwik/piwik/issues/5168#issuecomment-50959925
                      continue;
                  }
                  $subTable2 = $subTables2[$index];
                  $this->mergeDataTables($subTable1, $subTable2);
              }
              return;
          }
  
          $firstRow2 = $table2->getFirstRow();
          if (!($firstRow2 instanceof Row)) {
              return;
          }
  
          $firstRow1 = $table1->getFirstRow();
          if (empty($firstRow1)) {
              $firstRow1 = $table1->addRow(new Row());
          }
  
          foreach ($firstRow2->getColumns() as $metric => $value) {
              $firstRow1->setColumn($metric, $value);
          }
      }
code_tokens: public function mergeDataTables ( $ table1 , $ table2 ) { // handle table arrays if ( $ table1 instanceof DataTable \ Map && $ table2 instanceof DataTable \ Map ) { $ subTables2 = $ table2 -> getDataTables ( ) ; foreach ( $ table1 -> getDataTables ( ) as $ index => $ subTable1 ) { if ( ! array_key_exists ( $ index , $ subTables2 ) ) { // occurs when archiving starts on dayN and continues into dayN+1, see https://github.com/piwik/piwik/issues/5168#issuecomment-50959925 continue ; } $ subTable2 = $ subTables2 [ $ index ] ; $ this -> mergeDataTables ( $ subTable1 , $ subTable2 ) ; } return ; } $ firstRow2 = $ table2 -> getFirstRow ( ) ; if ( ! ( $ firstRow2 instanceof Row ) ) { return ; } $ firstRow1 = $ table1 -> getFirstRow ( ) ; if ( empty ( $ firstRow1 ) ) { $ firstRow1 = $ table1 -> addRow ( new Row ( ) ) ; } foreach ( $ firstRow2 -> getColumns ( ) as $ metric => $ value ) { $ firstRow1 -> setColumn ( $ metric , $ value ) ; } }
docstring: Merge the columns of two data tables.
  Manipulates the first table.
  
  @param DataTable|DataTable\Map $table1 The table to eventually filter.
  @param DataTable|DataTable\Map $table2 Whether to delete rows with no visits or not.
docstring_tokens: Merge the columns of two data tables . Manipulates the first table .