You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

52 lines
1.3 KiB

  1. package dynamodb
  2. import (
  3. "errors"
  4. "fmt"
  5. simplejson "github.com/bitly/go-simplejson"
  6. )
  7. func (t *Table) FetchResults(query *Query) ([]map[string]*Attribute, error) {
  8. jsonResponse, err := t.Server.queryServer(target("Scan"), query)
  9. if err != nil {
  10. return nil, err
  11. }
  12. json, err := simplejson.NewJson(jsonResponse)
  13. if err != nil {
  14. return nil, err
  15. }
  16. itemCount, err := json.Get("Count").Int()
  17. if err != nil {
  18. message := fmt.Sprintf("Unexpected response %s", jsonResponse)
  19. return nil, errors.New(message)
  20. }
  21. results := make([]map[string]*Attribute, itemCount)
  22. for i, _ := range results {
  23. item, err := json.Get("Items").GetIndex(i).Map()
  24. if err != nil {
  25. message := fmt.Sprintf("Unexpected response %s", jsonResponse)
  26. return nil, errors.New(message)
  27. }
  28. results[i] = parseAttributes(item)
  29. }
  30. return results, nil
  31. }
  32. func (t *Table) Scan(attributeComparisons []AttributeComparison) ([]map[string]*Attribute, error) {
  33. q := NewQuery(t)
  34. q.AddScanFilter(attributeComparisons)
  35. return t.FetchResults(q)
  36. }
  37. func (t *Table) ParallelScan(attributeComparisons []AttributeComparison, segment int, totalSegments int) ([]map[string]*Attribute, error) {
  38. q := NewQuery(t)
  39. q.AddScanFilter(attributeComparisons)
  40. q.AddParallelScanConfiguration(segment, totalSegments)
  41. return t.FetchResults(q)
  42. }