/** * 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)); } } }
/** * Funkce pro export pole s informacemi z DataDictionary a TransformationDictionary * @param Datasource $datasource * @param Metasource|null $metasource * @return array */ public function exportDictionariesArr(Datasource $datasource, Metasource $metasource = null) { $this->databasesFacade->openDatabase($datasource->getDbConnection()); $output = array('dataDictionary' => array(), 'transformationDictionary' => array(), 'recordCount' => $this->databasesFacade->getRowsCount($datasource->dbTable)); #region datafields foreach ($datasource->datasourceColumns as $datasourceColumn) { $output['dataDictionary'][$datasourceColumn->name] = $datasourceColumn->type == DatasourceColumn::TYPE_STRING ? 'string' : 'integer'; //TODO kontrola, jaké má smysl vracet datové typy.... } #endregion datafields #region atributy if (!empty($metasource) && !empty($metasource->attributes)) { $this->databasesFacade->openDatabase($metasource->getDbConnection()); foreach ($metasource->attributes as $attribute) { $valuesArr = array(); try { $valuesStatistics = $this->databasesFacade->getColumnValuesStatistic($metasource->attributesTable, $attribute->name, true); if (!empty($valuesStatistics->valuesArr)) { foreach ($valuesStatistics->valuesArr as $value => $count) { $valuesArr[] = $value; } } } catch (\Exception $e) { } $output['transformationDictionary'][$attribute->name] = array('choices' => $valuesArr); } } #endregion atributy return $output; }