/**
  * @test
  */
 public function fetchMultipleDocumentsWorks()
 {
     $data = json_encode(array('name' => 'Foo'));
     $this->connector->put('/flow3_test/abc', array(), $data);
     $data = json_encode(array('name' => 'Bar'));
     $this->connector->put('/flow3_test/def', array(), $data);
     $data = json_encode(array('name' => 'Baz'));
     $this->connector->put('/flow3_test/ghi', array(), $data);
     $data = json_encode(array('keys' => array('abc', 'ghi')));
     $response = $this->connector->post('/flow3_test/_all_docs', array('include_docs' => TRUE), $data);
     $this->assertObjectHasAttribute('rows', $response);
     $this->assertEquals(2, count($response->rows));
     $row = $response->rows[1];
     $this->assertEquals('Baz', $row->doc->name);
     $this->assertEquals(3, $response->total_rows);
 }
Beispiel #2
0
 /**
  * Query a view
  *
  * In addition to the default view query options (key, startkey, endkey, ...)
  * the query parameter "keys" can be specified to do multi-key lookups.
  *
  * @param string $designDocumentName The design document name
  * @param string $viewName The view name
  * @param array $queryOptions Query options
  * @return mixed
  * @author Christopher Hlubek <*****@*****.**>
  */
 public function queryView($designDocumentName, $viewName, array $queryOptions = NULL)
 {
     $requestOptions = $this->extractRequestOptions($queryOptions);
     $path = '/' . urlencode($this->getDatabaseName()) . '/_design/' . urlencode($designDocumentName) . '/_view/' . urlencode($viewName);
     if ($this->logSlowQueries) {
         $startTime = microtime(TRUE);
     }
     if ($queryOptions === NULL || !isset($queryOptions['keys'])) {
         $result = $this->connector->get($path, $queryOptions, NULL, $requestOptions);
     } else {
         $keys = $queryOptions['keys'];
         unset($queryOptions['keys']);
         $result = $this->connector->post($path, $queryOptions, json_encode(array('keys' => $keys)), $requestOptions);
     }
     if ($this->logSlowQueries) {
         $endTime = microtime(TRUE);
         $totalTime = $endTime - $startTime;
         if ($totalTime > $this->slowQueryThreshold) {
             $this->queryLogger->log('Slow query for view: ' . $viewName, LOG_WARNING, array('time' => $totalTime, 'path' => $path, 'queryOptions' => $queryOptions, 'requestOptions' => $requestOptions));
         }
     }
     return $result;
 }