/**
  * Funkce pro aktualizaci info o sloupcích v daném datovém zdroji
  * @param Datasource $datasource
  * @throws \LeanMapper\Exception\InvalidStateException
  * @throws \Nette\Application\ApplicationException
  */
 public function reloadDatasourceColumns(Datasource &$datasource)
 {
     $this->databasesFacade->openDatabase($datasource->getDbConnection());
     $datasourceColumns = $datasource->datasourceColumns;
     $datasourceColumnsArr = array();
     if (!empty($datasourceColumns)) {
         foreach ($datasourceColumns as $datasourceColumn) {
             $datasourceColumnsArr[$datasourceColumn->name] = $datasourceColumn;
         }
     }
     /** @var DbColumn[] $dbColumns */
     $dbColumns = $this->databasesFacade->getColumns($datasource->dbTable);
     if (!empty($dbColumns)) {
         foreach ($dbColumns as $dbColumn) {
             if ($dbColumn->name == 'id') {
                 continue;
                 /*ignorujeme sloupec s ID*/
             }
             if (isset($datasourceColumnsArr[$dbColumn->name])) {
                 unset($datasourceColumnsArr[$dbColumn->name]);
             } else {
                 //vytvoříme info o datovém sloupci
                 $datasourceColumn = new DatasourceColumn();
                 $datasourceColumn->name = $dbColumn->name;
                 $datasourceColumn->datasource = $datasource;
                 switch ($dbColumn->dataType) {
                     case DbColumn::TYPE_FLOAT:
                         $datasourceColumn->type = DatasourceColumn::TYPE_FLOAT;
                         break;
                     case DbColumn::TYPE_INTEGER:
                         $datasourceColumn->type = DatasourceColumn::TYPE_INTEGER;
                         break;
                     default:
                         $datasourceColumn->type = DatasourceColumn::TYPE_STRING;
                 }
                 $datasourceColumn->strLen = $dbColumn->strLength;
                 $this->datasourceColumnsRepository->persist($datasourceColumn);
             }
         }
     }
     if (!empty($datasourceColumnsArr)) {
         foreach ($datasourceColumnsArr as $datasourceColumn) {
             //odmažeme info o sloupcích, které v datové tabulce již neexistují
             $this->datasourceColumnsRepository->delete($datasourceColumn);
         }
     }
     $datasource = $this->findDatasource($datasource->datasourceId);
 }