public function assemble(AbstractSQLDataSourceQueryHandler $datasourceHandler, AbstractQueryRequest $request, DatasetMetaData $dataset, array $columnNames = NULL) { $assemblerName = $this->getAssemblerName($dataset); $assemblerConfiguration = $dataset->configuration; $assembler = DatasetSourceAssemblerFactory::getInstance()->getHandler($assemblerName, $assemblerConfiguration); $statement = $assembler->assemble($datasourceHandler, $request, $dataset, $columnNames); return $statement; }
public function assembleDatasetSourceStatement(DataControllerCallContext $callcontext, DatasetMetaData $dataset, array $columnNames = NULL) { $datasetSourceType = DatasetTypeHelper::detectDatasetSourceType($dataset); switch ($datasetSourceType) { case DatasetTypeHelper::DATASET_SOURCE_TYPE__TABLE: $statement = new Statement(); $table = new DatasetSection($dataset); if (isset($columnNames)) { foreach ($columnNames as $columnName) { $table->columns[] = new ColumnSection($columnName); } } $statement->tables[] = $table; break; case DatasetTypeHelper::DATASET_SOURCE_TYPE__SUBQUERY: // FIXME Statement::assemble should indirectly resolve the issue $TABLE_ALIAS__SUBQUERY = 'b'; $statement = new Statement(); // FIXME do not duplicate code $table = new SubquerySection($dataset->source, $TABLE_ALIAS__SUBQUERY); if (isset($columnNames)) { foreach ($columnNames as $columnName) { $table->columns[] = new ColumnSection($columnName); } } $statement->tables[] = $table; break; case DatasetTypeHelper::DATASET_SOURCE_TYPE__DYNAMIC: $assembler = $dataset->assembler; $handler = DatasetSourceAssemblerFactory::getInstance()->getHandler($assembler->type, isset($assembler->config) ? $assembler->config : NULL); $statement = $handler->assemble($this, $callcontext, $dataset, $columnNames); break; default: throw new IllegalStateException(t('Unsupported dataset source type: @datasetSourceType', array('@datasetSourceType' => $datasetSourceType))); } if (!isset($statement)) { throw new IllegalStateException(t('Could not prepare source statement for the dataset: @datasetName', array('@datasetName' => $dataset->publicName))); } return $statement; }