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()); }
/** * @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; }
/** * 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; }