/**
  * Funkce, která projde všechny hodnoty v daném zdrojovém sloupci a předzpracované je překopíruje do cílové tabulky
  * @param DatasourceColumn $datasourceColumn
  * @param Metasource $metasource
  * @param Attribute $attribute
  * @param int $attributeStrLen
  * @param callable $function
  * @throws \Exception
  */
 private function generateAttributeUsingPreprocessingFunction(DatasourceColumn $datasourceColumn, Metasource $metasource, Attribute $attribute, $attributeStrLen, $function)
 {
     $datasource = $datasourceColumn->datasource;
     $this->databasesFacade->openDatabase($datasource->getDbConnection(), $metasource->getDbConnection());
     //vytvoření DB sloupce
     $dbColumn = new DbColumn();
     $dbColumn->name = $attribute->name;
     $dbColumn->dataType = DbColumn::TYPE_STRING;
     $dbColumn->strLength = $attributeStrLen;
     try {
         $this->databasesFacade->createColumn($metasource->attributesTable, $dbColumn, DatabasesFacade::SECOND_DB);
     } catch (\Exception $e) {
         throw new \Exception('Attribute creation failed!', $e);
     }
     $valuesArr = $this->databasesFacade->getColumnValuesWithId($datasource->dbTable, $datasourceColumn->name, DatabasesFacade::FIRST_DB);
     if (!empty($valuesArr)) {
         $updateDataArr = array();
         foreach ($valuesArr as $id => $value) {
             $updateDataArr[$id] = $function($value);
             //$this->databasesFacade->updateColumnValueById($metasource->attributesTable,$attribute->name,$id,$function($value),DatabasesFacade::SECOND_DB);
         }
         $this->databasesFacade->multiUpdateColumnValueById($metasource->attributesTable, $attribute->name, $updateDataArr, DatabasesFacade::SECOND_DB);
     }
 }
 public function createMetasourcesTables(Metasource $metasource)
 {
     $datasource = $metasource->miner->datasource;
     $this->databasesFacade->openDatabase($datasource->getDbConnection(), $metasource->getDbConnection());
     $attributesTable = $metasource->attributesTable;
     $i = 1;
     while ($this->databasesFacade->checkTableExists($attributesTable . DatabasesFacade::SECOND_DB)) {
         $attributesTable = $metasource->attributesTable . $i;
         $i++;
     }
     $this->databasesFacade->createTable($attributesTable, array(), DatabasesFacade::SECOND_DB);
     //nakopírování hodnot ID
     $values = $this->databasesFacade->getColumnValuesWithId($metasource->attributesTable, 'id', DatabasesFacade::SECOND_DB);
     if (!empty($values)) {
         foreach ($values as $value) {
             $this->databasesFacade->insertRow($metasource->attributesTable, array('id' => $value));
         }
     }
 }