public function queryDataset(DataControllerCallContext $callcontext, DatasetQueryRequest $request, ResultFormatter $resultFormatter) { $datasetName = $request->getDatasetName(); $handler = $this->getDatasetHandler($callcontext, $datasetName); return $handler->queryDataset($callcontext, $request, $resultFormatter); }
public function queryDataset(DataControllerCallContext $callcontext, DatasetQueryRequest $request) { $datasetName = $request->getDatasetName(); LogHelper::log_info(t('Querying script-based dataset: @datasetName', array('@datasetName' => $datasetName))); $metamodel = data_controller_get_metamodel(); $dataset = $metamodel->getDataset($datasetName); $serializer = new DatasetQueryUIRequestSerializer(); $parameters = $serializer->serialize($request); $records = $this->executeScriptFunction($dataset, 'queryDataset', $parameters); LogHelper::log_info(t('Received @count records(s)', array('@count' => count($records)))); // converting type of returned values if (isset($records)) { $columnTypeHandlers = NULL; foreach ($records as &$record) { foreach ($record as $columnName => $columnValue) { if (!isset($columnTypeHandlers[$columnName])) { $type = $dataset->getColumn($columnName)->type->applicationType; $columnTypeHandlers[$columnName] = DataTypeFactory::getInstance()->getHandler($type); } $record[$columnName] = $columnTypeHandlers[$columnName]->castValue($columnValue); } } unset($record); } LogHelper::log_debug($records); return $records; }
public function queryDataset(DataControllerCallContext $callcontext, DatasetQueryRequest $request, ResultFormatter $resultFormatter) { $records = NULL; $environment_metamodel = data_controller_get_environment_metamodel(); $metamodel = data_controller_get_metamodel(); $datasetName = $request->getDatasetName(); $dataset = $metamodel->getDataset($datasetName); $datasource = $environment_metamodel->getDataSource($dataset->datasourceName); $databaseName = $dataset->source->database; list($url, $requestBody) = $this->prepareDatasetQuery($callcontext, $request, $databaseName); list($url, $manulSortingRequired) = $this->applyOrderBy($url, $request); $manualPaginationRequired = $manulSortingRequired; if (!$manualPaginationRequired) { $url = $this->applyPagination($url, $request); } $serverRequest->url = $url; $serverRequest->body = $requestBody; // executing the server request $serverResponse = $this->communicateWithServer($datasource, $serverRequest); if (isset($serverResponse->rows)) { foreach ($serverResponse->rows as $record) { $this->processRecord($records, $record, $request->columns, TRUE, $resultFormatter); } } else { $this->processRecord($records, $serverResponse, $request->columns, FALSE, $resultFormatter); } $resultFormatter->postFormatRecords($records); if ($manulSortingRequired) { sort_records($records, $request->sortingConfigurations); } if ($manualPaginationRequired) { $records = paginate_records($records, $request->startWith, $request->limit); } return $records; }
public function queryDataset(DataControllerCallContext $callcontext, DatasetQueryRequest $request, ResultFormatter $resultFormatter) { $datasetName = $request->getDatasetName(); LogHelper::log_notice(t('Querying SQL-based dataset: @datasetName', array('@datasetName' => $datasetName))); $environment_metamodel = data_controller_get_environment_metamodel(); $metamodel = data_controller_get_metamodel(); $dataset = $metamodel->getDataset($datasetName); $datasource = $environment_metamodel->getDataSource($dataset->datasourceName); $statements = $this->prepareDatasetQueryStatements($callcontext, $request); $sql = $this->assembleDatasetQueryStatements($callcontext, $request, $statements); // applying ordering $sql = $this->applyOrderBy($sql, $request); // applying pagination $this->applyPagination($request, $sql); LogHelper::log_info(new StatementLogMessage('dataset.query', $sql)); return $this->executeQuery($callcontext, $datasource, $sql, $resultFormatter); }
public function queryDataset(DataControllerCallContext $callcontext, DatasetQueryRequest $request) { $datasetName = $request->getDatasetName(); LogHelper::log_info(t('Querying SQL-based dataset: @datasetName', array('@datasetName' => $datasetName))); $environment_metamodel = data_controller_get_environment_metamodel(); $metamodel = data_controller_get_metamodel(); $this->getExtension('adjustRequest')->adjustDatasetQueryRequest($this, $request); $dataset = $metamodel->getDataset($datasetName); $datasource = $environment_metamodel->getDataSource($dataset->datasourceName); $statements = $this->prepareDatasetQueryStatements($callcontext, $request); $sql = $this->assembleDatasetQueryStatements($callcontext, $request, $statements); // applying sorting if (isset($request->sortingConfigurations)) { $adjustedColumns = NULL; foreach ($request->sortingConfigurations as $sortingConfiguration) { // TODO try to use the same functionality for list and cube requests $adjustedColumn = DataSourceColumnNameHelper::generateFromParameterElements( $this->getMaximumEntityNameLength(), $sortingConfiguration->getColumnName()); // adjusting direction of the sorting if (!$sortingConfiguration->isSortAscending) { $adjustedColumn = $adjustedColumn . ' DESC'; } $adjustedColumns[] = $adjustedColumn; } if (count($adjustedColumns) > 0) { $sql .= "\n ORDER BY " . implode(', ', $adjustedColumns); } } // applying pagination $this->applyPagination($request, $sql); LogHelper::log_info(new StatementLogMessage('dataset.query', $sql)); return $this->executeQuery($callcontext, $datasource, $sql); }