public static function adjustReferencePointColumn(MetaModelLoader $metamodelLoader, AbstractMetaModel $metamodel, DatasetReferencePointColumn $referencePointColumn) { if (!isset($referencePointColumn->columnName)) { $dataset = $metamodel->getDataset($referencePointColumn->datasetName); // FIXME eliminate this logic. Support configuration postprocessing $referencePointColumn->columnName = $dataset->getKeyColumn()->name; } if ($metamodelLoader instanceof ReferenceMetaModelLoader) { $metamodelLoader->adjustReferencePointColumn($metamodel, $referencePointColumn); } }
public static function adjustReferencePointColumn(AbstractMetaModel $metamodel, DatasetReferencePointColumn $referencePointColumn) { $datasetName = $referencePointColumn->datasetName; $dataset = $metamodel->getDataset($datasetName); $column = $dataset->getColumn($referencePointColumn->columnName); $handler = DimensionLookupFactory::getInstance()->getHandler($column->type->getLogicalApplicationType()); list($adjustedDatasetName, $adjustedColumnName, $shared) = $handler->adjustReferencePointColumn($metamodel, $dataset->name, $referencePointColumn->columnName); if ($adjustedDatasetName === $referencePointColumn->datasetName) { if ($adjustedColumnName === $referencePointColumn->columnName) { // we do not need to change anything } else { throw new UnsupportedOperationException(); } } else { $referencePointColumn->datasetName = $adjustedDatasetName; $referencePointColumn->columnName = $adjustedColumnName; } $referencePointColumn->shared = $shared; }
protected function generateLogicalDatasets(SystemTableMetaModelLoaderCallContext $callcontext, AbstractMetaModel $metamodel) { $datasetCount = 0; foreach ($callcontext->datasets as $tableAccessKey => $dataset) { $logicalDataset = new DatasetMetaData(); $logicalDataset->name = $this->generateLogicalDatasetName($dataset->name); $logicalDataset->publicName = $dataset->publicName; $logicalDataset->description = $dataset->description; $logicalDataset->datasourceName = $dataset->datasourceName; $logicalDataset->sourceType = StarSchemaDatasetSourceTypeHandler::SOURCE_TYPE; $callcontext->logicalDatasetNameMappings[$logicalDataset->name] = $tableAccessKey; foreach ($dataset->columns as $column) { $logicalColumn = $logicalDataset->initiateColumn(); $logicalColumn->name = $column->name; $logicalColumn->publicName = $column->publicName; $logicalColumn->description = $column->description; $logicalColumn->persistence = $column->persistence; $logicalColumn->columnIndex = $column->columnIndex; $logicalColumn->key = $column->key; $logicalColumn->visible = $column->visible; $logicalColumn->used = $column->used; if (isset($column->type->logicalApplicationType)) { list($refDatasetName, $refColumnName) = ReferencePathHelper::splitReference($column->type->logicalApplicationType); $refDataset = $metamodel->getDataset($refDatasetName); $refColumn = $refDataset->getColumn($refColumnName); $logicalColumn->type->databaseType = $refColumn->type->databaseType; $logicalColumn->type->length = $refColumn->type->length; $logicalColumn->type->precision = $refColumn->type->precision; $logicalColumn->type->scale = $refColumn->type->scale; $logicalColumn->type->applicationType = ReferencePathHelper::assembleReference( $this->generateLogicalDatasetName($refDataset->name), $refColumnName); } else { $logicalColumn->initializeTypeFrom($column->type); } $logicalDataset->registerColumnInstance($logicalColumn); } $callcontext->logicalDatasets[$tableAccessKey] = $logicalDataset; $datasetCount++; } LogHelper::log_info(t('Generated @datasetCount logical datasets', array('@datasetCount' => $datasetCount))); }
public function adjustReferencePointColumn(AbstractMetaModel $metamodel, $datasetName, $columnName) { // FIXME we should work only with one way to find a cube $cube = $metamodel->findCubeByDatasetName($this->datasetName); if (!isset($cube)) { $cube = $metamodel->getCube($this->datasetName); } $adjustedDatasetName = $cube->factsDatasetName; $adjustedDataset = $metamodel->getDataset($adjustedDatasetName); $adjustedColumnName = $adjustedDataset->getKeyColumn()->name; $shared = TRUE; return array($adjustedDatasetName, $adjustedColumnName, $shared); }