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