public function truncateColumnStorage(DataControllerCallContext $callcontext, DataSourceStructureHandler $datasourceStructureHandler, DatasetMetaData $dataset, $columnName) {
        $datasetNode = node_load($this->logicalDataset->nid);
        $datasetNode->field_dataset_records[$datasetNode->language][0]['value'] = 0;
        node_save($datasetNode);

        parent::truncateColumnStorage($callcontext, $datasourceStructureHandler, $dataset, $columnName);
    }
    public function truncateColumnStorage(DataControllerCallContext $callcontext, DataSourceStructureHandler $datasourceStructureHandler, DatasetMetaData $dataset, $columnName) {
        $logicalColumn = $this->logicalDataset->getColumn($columnName);

        $handler = DimensionFactory::getInstance()->getHandler($logicalColumn->type->getLogicalApplicationType());
        $handler->truncateDimensionStorage($callcontext, $datasourceStructureHandler, $this->logicalDataset, $columnName);

        parent::truncateColumnStorage($callcontext, $datasourceStructureHandler, $dataset, $columnName);
    }
    public function validate(DataControllerCallContext $callcontext, DatasetMetaData $dataset) {
        parent::validate($callcontext, $dataset);

        // validating if we can assemble expression for all included columns
        $columnExpressionAssembler = $this->initializeColumnExpressionAssembler($dataset);
        foreach ($dataset->getColumns() as $column) {
            $columnExpressionAssembler->assemble($column);
        }
    }
    public function createColumnStorage(DataControllerCallContext $callcontext, DataSourceStructureHandler $datasourceStructureHandler, DatasetMetaData $dataset, $columnName, $stage) {
        parent::createColumnStorage($callcontext, $datasourceStructureHandler, $dataset, $columnName, $stage);

        if ($stage == DatasetStorageObserver::STAGE__AFTER) {
            $newLogicalColumn = $this->newLogicalDataset->getColumn($columnName);
            $newColumn = $dataset->getColumn($columnName);

            $newLogicalColumn->persistence = $newColumn->persistence;

            $handler = DimensionFactory::getInstance()->getHandler($newLogicalColumn->type->getLogicalApplicationType());
            $handler->createDimensionStorage($callcontext, $datasourceStructureHandler, $this->newLogicalDataset, $columnName);
        }
    }
    public function createColumnStorage(DataControllerCallContext $callcontext, DataSourceStructureHandler $datasourceStructureHandler, DatasetMetaData $dataset, $columnName, $stage) {
        parent::createColumnStorage($callcontext, $datasourceStructureHandler, $dataset, $columnName, $stage);

        if ($stage == DatasetStorageObserver::STAGE__AFTER) {
            $environment_metamodel = data_controller_get_environment_metamodel();

            $newLogicalColumn = $this->newLogicalDataset->getColumn($columnName);
            $newColumn = $dataset->getColumn($columnName);

            $datasource = $environment_metamodel->getDataSource($dataset->datasourceName);
            $datasourceQueryHandler = DataSourceQueryFactory::getInstance()->getHandler($datasource->type);

            $generator = new FunctionDateDimensionMetaDataGenerator($datasourceQueryHandler);
            $generator->generate($newLogicalColumn);
            $generator->generate($newColumn);
        }
    }
    public function updateColumnParticipationInDatasetKey(DataControllerCallContext $callcontext, DatasetMetaData $dataset, $columnName) {
        parent::updateColumnParticipationInDatasetKey($callcontext, $dataset, $columnName);

        $this->datasetStructureModified = TRUE;
    }
    public function createColumnStorage(DataControllerCallContext $callcontext, DataSourceStructureHandler $datasourceStructureHandler, DatasetMetaData $dataset, $columnName, $stage) {
        parent::createColumnStorage($callcontext, $datasourceStructureHandler, $dataset, $columnName, $stage);

        $newLogicalColumn = $this->newLogicalDataset->getColumn($columnName);

        $node = node_load($this->getColumn_NID($dataset, $columnName));
        switch ($stage) {
            case DatasetStorageObserver::STAGE__BEFORE:
                // Note: storing logical data type for the column
                $node->field_column_datatype[$node->language][0]['value'] = $newLogicalColumn->type->applicationType;
                $node->field_column_format[$node->language][0]['value'] = gd_column_prepare_column_format($newLogicalColumn->type);
                break;
            case DatasetStorageObserver::STAGE__AFTER:
                $newColumn = $dataset->getColumn($columnName);

                $node->field_column_persistence[$node->language][0]['value'] = $newColumn->persistence;
                $node->status = $newColumn->isUsed() ? NODE_PUBLISHED : NODE_NOT_PUBLISHED;
                break;
        }
        node_save($node);
    }