Ejemplo n.º 1
0
 public function testQueryLimit()
 {
     // Add items
     $this->conn->put($this->createRangeItem(567));
     $this->conn->put($this->createRangeItem(678));
     $this->conn->put($this->createRangeItem(789));
     $query = new Context\Query();
     $query->setLimit(2);
     $id = intval(getenv('ITEM_ID'));
     $items = $this->conn->query(getenv('DY_TABLE_RANGE'), $id, $query);
     $this->assertInstanceOf('\\Riverline\\DynamoDB\\Collection', $items);
     $this->assertCount(2, $items);
     $item = $items->shift();
     $this->assertSame(456, $item['range']);
     $item = $items->shift();
     $this->assertSame(567, $item['range']);
     $this->assertNotEmpty($items->getNextContext());
     $query = $items->getNextContext();
     $query->setLimit(3);
     $items = $this->conn->query(getenv('DY_TABLE_RANGE'), $id, $query);
     $this->assertCount(2, $items);
     $item = $items->shift();
     $this->assertSame(678, $item['range']);
     $item = $items->shift();
     $this->assertSame(789, $item['range']);
     $this->assertEmpty($items->getNextContext());
 }
Ejemplo n.º 2
0
 /**
  * @static
  * @param string $operator
  * @param mixed $attributes
  * @return \Riverline\DynamoDB\Context\Query
  */
 public static function create($operator, $attributes)
 {
     $query = new Query();
     $query->setRangeCondition($operator, $attributes);
     return $query;
 }
Ejemplo n.º 3
0
 /**
  * Get items via the query call
  * @param string $table The item table
  * @param mixed $hash The primary hash key
  * @param Context\Query|null $context The call context
  * @return Collection
  */
 public function query($table, $hash, Context\Query $context = null)
 {
     if (null !== $this->logger) {
         $this->log('Query on table ' . $table);
     }
     $hash = new Attribute($hash);
     $parameters = array('TableName' => $table, 'HashKeyValue' => $hash->getForDynamoDB());
     if (null !== $context) {
         $parameters += $context->getForDynamoDB();
     }
     if (null !== $this->logger) {
         $this->log('Query request paramaters : ' . print_r($parameters, true), Logger::DEBUG);
     }
     $response = $this->connector->query($parameters);
     if (null !== $this->logger) {
         $this->log('Query request response : ' . print_r($response, true), Logger::DEBUG);
     }
     $this->addConsumedReadUnits($table, floatval($response['ConsumedCapacityUnits']));
     if (isset($response['LastEvaluatedKey'])) {
         if (null === $context) {
             $nextContext = new Context\Query();
         } else {
             $nextContext = clone $context;
         }
         $nextContext->setExclusiveStartKey($response['LastEvaluatedKey']);
         if (null !== $this->logger) {
             $this->log('More Items to retrieve');
         }
     } else {
         $nextContext = null;
     }
     $items = new Collection($nextContext, $response['Count']);
     if (!empty($response['Items'])) {
         foreach ($response['Items'] as $responseItem) {
             $item = new Item($table);
             $item->populateFromDynamoDB($responseItem);
             $items->add($item);
         }
     }
     if (null !== $this->logger) {
         $this->log('Find ' . count($items) . ' Items');
     }
     return $items;
 }