public function assemble(AbstractSQLDataSourceQueryHandler $datasourceHandler, AbstractQueryRequest $request, DatasetMetaData $dataset, array $columnNames = NULL) { $engine = QueryEngineFactory::getInstance()->getHandler(); $statement = $engine->newSelectStatement(); // FIXME use the following code /* // the following code was commended out because functionality in Statement::findColumnTableByReferencePath() $table->dataset->name $tableName = assemble_database_entity_name($datasourceHandler, $dataset->datasourceName, $dataset->source); $table = $statement->newTable($tableName); */ $table = new DatasetSection($dataset); $statement->tables[] = $table; if (isset($columnNames)) { $columnReferenceFactory = new CompositeColumnReferenceFactory(array( $dataset, new FormulaReferenceFactory($request->getFormulas()))); $expressionAssembler = new FormulaExpressionAssembler($columnReferenceFactory); foreach ($columnNames as $columnName) { $column = $columnReferenceFactory->findColumn($columnName); if (isset($column) && ($column->persistence == FormulaMetaData::PERSISTENCE__CALCULATED)) { $table->newCalculatedColumn($expressionAssembler->assemble($column), $columnName); } else { $table->newColumn($columnName); } } } return $statement; }
protected function assembleUsedFormulaExpressions(AbstractQueryRequest $request) { $usedFormulaExpressions = NULL; // assembling all used formulas to find all referenced formulas $usedFormulaNames = $this->collectReferencedFormulaNames($request); if (isset($usedFormulaNames)) { $columnReferenceFactory = new CompositeColumnReferenceFactory(array( $this->prepareRequestDataset($request), new FormulaReferenceFactory($request->getFormulas()))); $index = 0; while (count($usedFormulaNames) > $index) { $formulaName = $usedFormulaNames[$index]; $formula = $columnReferenceFactory->getColumn($formulaName); $expressionAssembler = new __TotalInFormulaExpressionRequestPreparer__FormulaExpressionAssembler($columnReferenceFactory); $usedFormulaExpressions[$formulaName] = $expressionAssembler->assemble($formula); ArrayHelper::addUniqueValues($usedFormulaNames, $expressionAssembler->usedFormulaNames); $index++; } } return $usedFormulaExpressions; }