public function countDatasetRecords(DataControllerCallContext $callcontext, DatasetCountRequest $request, ResultFormatter $resultFormatter) {
        $datasetName = $request->getDatasetName();

        $handler = $this->getDatasetHandler($callcontext, $datasetName);

        return $handler->countDatasetRecords($callcontext, $request, $resultFormatter);
    }
    public function prepareCountRequest(DataQueryControllerDatasetRequest $request) {
        $datasourceRequest = new DatasetCountRequest($request->datasetName);

        // needs to be called before any additional methods are called
        $datasourceRequest->addOptions($request->options);

        $datasourceRequest->addCompositeQueryValues($request->parameters);

        return $datasourceRequest;
    }
    public function countDatasetRecords(DataControllerCallContext $callcontext, DatasetCountRequest $request) {
        $datasetName = $request->getDatasetName();
        LogHelper::log_notice(t('Counting script-based dataset records: @datasetName', array('@datasetName' => $datasetName)));

        $metamodel = data_controller_get_metamodel();

        $dataset = $metamodel->getDataset($datasetName);

        $serializer = new DatasetCountUIRequestSerializer();
        $parameters = $serializer->serialize($request);

        $count = $this->executeScriptFunction($dataset, 'countDatasetRecords', $parameters);
        LogHelper::log_info(t('Counted @count record(s)', array('@count' => $count)));

        return $count;
    }
 public function countDatasetRecords(DataControllerCallContext $callcontext, DatasetCountRequest $request, ResultFormatter $resultFormatter)
 {
     $datasetName = $request->getDatasetName();
     LogHelper::log_notice(t('Counting SQL-based dataset records: @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);
     return $this->countRecords($callcontext, $datasource, $statements);
 }
    public function countDatasetRecords(DataControllerCallContext $callcontext, DatasetCountRequest $request, ResultFormatter $resultFormatter) {
        $count = 0;

        $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);

        // preparing keys to access records
        $keys = $this->prepareDocumentIdentifiers($request);
        $isKeyDefined = isset($keys);
        $isKeySingle = $isKeyDefined && (count($keys) === 1);
        $isKeyList = $isKeyDefined && (count($keys) > 1);

        // preparing URL
        $url = '/' . $dataset->source->database;
        if ($isKeyDefined) {
            $url .= '/';
            if ($isKeySingle) {
                $url .= $keys[0];
            }
            else {
                $url .= '_all_docs?include_docs=false';
            }
        }

        // preparing property name to access server side calculated value
        $recordNumberPropertyName = $isKeyDefined ? NULL : 'doc_count';

        // preparing request body if any
        $requestBody = NULL;
        if ($isKeyList) {
            $requestBody = '{"keys": ["' . implode('", "', $keys) . '"]}';
        }

        $serverRequest->url = $url;
        $serverRequest->body = $requestBody;
        // executing the server request
        $serverResponse = $this->communicateWithServer($datasource, $serverRequest);

        // calculating number of records
        if (isset($recordNumberPropertyName)) {
            // server-calculated value
            $count = $serverResponse->$recordNumberPropertyName;
        }
        else {
            // manual record counting
            if (isset($serverResponse->rows)) {
                foreach ($serverResponse->rows as $record) {
                    $count += ($this->checkDocumentExistence($record, FALSE) ? 1 : 0);
                }
            }
            else {
                $count = $this->checkDocumentExistence($serverResponse, FALSE) ? 1 : 0;
            }
        }

        return $count;
    }
 public function prepareDatasetCountRequest(DataQueryControllerDatasetRequest $request)
 {
     $datasourceRequest = new DatasetCountRequest($request->datasetName);
     $datasourceRequest->addCompositeQueryValues($request->parameters);
     return $datasourceRequest;
 }