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 prepareMetaData(DataControllerCallContext $callcontext, $connection, $statement) { $dataset = new DatasetMetaData(); for ($i = 0, $columnCount = $this->callback->getColumnCount($connection, $statement); $i < $columnCount; $i++) { $column = $this->callback->getColumnMetaData($connection, $statement, $i); if ($column === FALSE) { throw new IllegalArgumentException(t('The column with the index does not exist: %columnIndex', array('%columnIndex' => $i))); } $column->name = strtolower($column->name); $column->columnIndex = $i; // preparing column type if (!isset($column->type->databaseType)) { throw new UnsupportedOperationException(t( 'Undefined database data type for the column: %columnName', array('%columnName' => $column->name))); } $this->callback->generateColumnType($column); if (!isset($column->type->applicationType)) { throw new UnsupportedOperationException(t( 'Unsupported data type for %columnName column: %datatype', array('%columnName' => $column->name, '%datatype' => $column->type->databaseType))); } // support for column mapping $column->alias = isset($callcontext->columnMapping[$column->name]) ? $callcontext->columnMapping[$column->name] : $column->name; // FIXME eliminate the following block once direct connection is used for uploaded files // checking if the column is a system column which should be invisible if (substr_compare($column->name, DatasetSystemColumnNames::COLUMN_NAME_PREFIX, 0, strlen(DatasetSystemColumnNames::COLUMN_NAME_PREFIX)) === 0) { $column->visible = FALSE; } $dataset->registerColumnInstance($column); } return $dataset; }
public function prepareMetaData(DataControllerCallContext $callcontext, $connection, $statement) { $dataset = new DatasetMetaData(); for ($i = 0, $columnCount = $this->callback->getColumnCount($connection, $statement); $i < $columnCount; $i++) { $column = $this->callback->getColumnMetaData($connection, $statement, $i); if ($column === FALSE) { throw new IllegalArgumentException(t('The column with the index does not exist: @columnIndex', array('@columnIndex' => $i))); } $column->name = strtolower($column->name); $column->columnIndex = $i; $column->type->applicationType = $this->callback->calculateApplicationDataType($column); // support for column mapping $column->alias = isset($callcontext->columnMapping[$column->name]) ? $callcontext->columnMapping[$column->name] : $column->name; // checking if the column is a system column which should be invisible if (substr_compare($column->name, DatasetSystemColumnNames::COLUMN_NAME_PREFIX, 0, strlen(DatasetSystemColumnNames::COLUMN_NAME_PREFIX)) === 0) { $column->visible = FALSE; } $dataset->registerColumnInstance($column); } return $dataset; }
public static function prepareDataset(MetaModel $metamodel, $datasetNode, array $datasetColumnNodes = NULL, DataSourceMetaData $datasource) { $dataset = new DatasetMetaData(); $dataset->name = get_node_field_value($datasetNode, 'field_dataset_sysname', 0, 'value', TRUE); $dataset->publicName = $datasetNode->title; // preparing the dataset alternative names (aliases) $aliasIndex = 0; while (($alias = get_node_field_value($datasetNode, 'field_dataset_alias', $aliasIndex)) != NULL) { $dataset->aliases[] = $alias; $aliasIndex++; } $dataset->description = get_node_field_value($datasetNode, 'field_dataset_desc'); $dataset->datasourceName = $datasource->name; // preparing source configuration properties $dataset->sourceType = get_node_field_value($datasetNode, 'field_dataset_source_type', 0, 'value', TRUE); $dataset->source = get_node_field_value($datasetNode, 'field_dataset_source', 0, 'value', TRUE); // preparing source properties as an associative array $dataset->configuration = get_node_field_object_value($datasetNode, 'field_dataset_source_properties'); // dataset system properties $dataset->uuid = get_node_field_value($datasetNode, 'field_dataset_uuid', 0, 'value', TRUE); $dataset->nid = $datasetNode->nid; // preparing dataset columns if (isset($datasetColumnNodes)) { foreach ($datasetColumnNodes as $columnNode) { $column = $dataset->initiateColumn(); $column->used = $columnNode->status == NODE_PUBLISHED; $column->name = get_node_field_value($columnNode, 'field_column_sysname', 0, 'value', TRUE); $column->publicName = $columnNode->title; $column->description = get_node_field_value($columnNode, 'field_column_desc'); $column->key = get_node_field_boolean_value($columnNode, 'field_column_key'); // column data type $column->type->applicationType = get_node_field_value($columnNode, 'field_column_datatype', 0, 'value', $column->used); if (isset($column->type->applicationType) && ($column->type->getReferencedDatasetName() == NULL)) { $column->type->logicalApplicationType = NameSpaceHelper::addNameSpace(NAME_SPACE__STAR_SCHEMA, $column->type->applicationType); } $format = get_node_field_object_value($columnNode, 'field_column_format'); if (isset($format->scale)) { $column->type->scale = $format->scale; } $column->columnIndex = get_node_field_int_value($columnNode, 'field_column_index', 0, 'value', TRUE); $column->source = get_node_field_value($columnNode, 'field_column_source'); $column->persistence = get_node_field_int_value($columnNode, 'field_column_persistence', 0, 'value', TRUE); // attribute system properties $column->nid = $columnNode->nid; $dataset->registerColumnInstance($column); } } // marking that the dataset object contains complete meta data $dataset->markAsComplete(); $metamodel->registerDataset($dataset); return $dataset; }