public static function getInstance()
 {
     if (!isset(self::$factory)) {
         self::$factory = new DefaultDatasetSourceAssemblerFactory();
     }
     return self::$factory;
 }
    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;
 }
 public function __construct() {
     parent::__construct();
     $this->handlerConfigurations = module_invoke_all('dp_dataset_assembler');
 }