dynamodb

package
v0.0.0-...-1bba09f Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 5, 2019 License: LGPL-3.0 Imports: 19 Imported by: 0

README

Running integration tests

against DynamoDB local

To download and launch DynamoDB local:

$ make

To test:

$ go test -v -amazon

against real DynamoDB server on us-east

WARNING: Some dangerous operations such as DeleteTable will be performed during the tests. Please be careful.

To test:

$ go test -v -amazon -local=false

Note: Running tests against real DynamoDB will take several minutes.

Documentation

Index

Constants

View Source
const (
	TYPE_STRING = "S"
	TYPE_NUMBER = "N"
	TYPE_BINARY = "B"

	TYPE_STRING_SET = "SS"
	TYPE_NUMBER_SET = "NS"
	TYPE_BINARY_SET = "BS"
	TYPE_MAP        = "M"
	TYPE_LIST       = "L"
	TYPE_BOOL       = "BOOL"
	TYPE_NULL       = "NULL"

	COMPARISON_EQUAL                    = "EQ"
	COMPARISON_NOT_EQUAL                = "NE"
	COMPARISON_LESS_THAN_OR_EQUAL       = "LE"
	COMPARISON_LESS_THAN                = "LT"
	COMPARISON_GREATER_THAN_OR_EQUAL    = "GE"
	COMPARISON_GREATER_THAN             = "GT"
	COMPARISON_ATTRIBUTE_EXISTS         = "NOT_NULL"
	COMPARISON_ATTRIBUTE_DOES_NOT_EXIST = "NULL"
	COMPARISON_CONTAINS                 = "CONTAINS"
	COMPARISON_DOES_NOT_CONTAIN         = "NOT_CONTAINS"
	COMPARISON_BEGINS_WITH              = "BEGINS_WITH"
	COMPARISON_IN                       = "IN"
	COMPARISON_BETWEEN                  = "BETWEEN"
)
View Source
const (
	// MaxGetBatchSize limits the maximum number of items per batch get
	// operation. Note also that the total size of all the items retrieved
	// cannot exceed 16 MB, but that limit is not enforced client side.
	// cf: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html
	MaxGetBatchSize = 100

	// MaxPutBatchSize limits the maximum number of items per batch put
	// operation. Note also that the total size of all the items written
	// cannot exceed 16 MB, but that limit is not enforced client side.
	// cf: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html
	MaxPutBatchSize = 25
)

Variables

View Source
var ErrNotFound = errors.New("Item not found")

Specific error constants

View Source
var ErrNotProcessed = errors.New("Key was not processed in the batch request, should retry")

Functions

func RunQuery

func RunQuery(q Query, t *Table) ([]map[string]*Attribute, error)

func UnmarshalAttributes

func UnmarshalAttributes(attributesRef *map[string]*Attribute, m interface{}) error

Types

type Attribute

type Attribute struct {
	Type       string
	Name       string
	Value      string
	SetValues  []string
	MapValues  map[string]*Attribute
	Exists     string // exists on dynamodb? Values: "true", "false", or ""
	ListValues []*Attribute
}

func MarshalAttributes

func MarshalAttributes(m interface{}) ([]Attribute, error)

func NewBinaryAttribute

func NewBinaryAttribute(name string, value string) *Attribute

func NewBinarySetAttribute

func NewBinarySetAttribute(name string, values []string) *Attribute

func NewBoolAttribute

func NewBoolAttribute(name string, value string) *Attribute

func NewListAttribute

func NewListAttribute(name string, values []*Attribute) *Attribute

func NewMapAttribute

func NewMapAttribute(name string, values map[string]*Attribute) *Attribute

func NewNumericAttribute

func NewNumericAttribute(name string, value string) *Attribute

func NewNumericSetAttribute

func NewNumericSetAttribute(name string, values []string) *Attribute

func NewStringAttribute

func NewStringAttribute(name string, value string) *Attribute

func NewStringSetAttribute

func NewStringSetAttribute(name string, values []string) *Attribute

func (*Attribute) SetExists

func (a *Attribute) SetExists(exists bool) *Attribute

func (*Attribute) SetType

func (a *Attribute) SetType() bool

type AttributeComparison

type AttributeComparison struct {
	AttributeName      string
	ComparisonOperator string
	AttributeValueList []Attribute // contains attributes with only types and names (value ignored)
}

func NewBinaryAttributeComparison

func NewBinaryAttributeComparison(attributeName string, comparisonOperator string, value bool) *AttributeComparison

func NewBoolAttributeComparison

func NewBoolAttributeComparison(attributeName string, comparisonOperator string, value bool) *AttributeComparison

func NewEqualInt64AttributeComparison

func NewEqualInt64AttributeComparison(attributeName string, equalToValue int64) *AttributeComparison

func NewEqualStringAttributeComparison

func NewEqualStringAttributeComparison(attributeName string, equalToValue string) *AttributeComparison

func NewNumericAttributeComparison

func NewNumericAttributeComparison(attributeName string, comparisonOperator string, value int64) *AttributeComparison

func NewStringAttributeComparison

func NewStringAttributeComparison(attributeName string, comparisonOperator string, value string) *AttributeComparison

type AttributeDefinitionT

type AttributeDefinitionT struct {
	Name string `json:"AttributeName"`
	Type string `json:"AttributeType"`
}

func (*AttributeDefinitionT) GetEmptyAttribute

func (a *AttributeDefinitionT) GetEmptyAttribute() *Attribute

type BatchGetItem

type BatchGetItem struct {
	Server *Server
	Keys   map[*Table][]Key
}

func (*BatchGetItem) AddTable

func (batchGetItem *BatchGetItem) AddTable(t *Table, keys *[]Key) *BatchGetItem

func (*BatchGetItem) Execute

func (batchGetItem *BatchGetItem) Execute() (map[string][]map[string]*Attribute, error)

type BatchWriteItem

type BatchWriteItem struct {
	Server      *Server
	ItemActions map[*Table]map[string][][]Attribute
}

func (*BatchWriteItem) AddTable

func (batchWriteItem *BatchWriteItem) AddTable(t *Table, itemActions *map[string][][]Attribute) *BatchWriteItem

func (*BatchWriteItem) Execute

func (batchWriteItem *BatchWriteItem) Execute() (map[string]interface{}, error)

type COP

type COP string
const (
	COP_AND COP = "AND"
	COP_OR  COP = "OR"
)

type DynamoBatchGetQuery

type DynamoBatchGetQuery struct {
	RequestItems map[string]*batchGetPerTableQuery `json:",omitempty"`
	// contains filtered or unexported fields
}

func NewDynamoBatchGetQuery

func NewDynamoBatchGetQuery(t *Table) *DynamoBatchGetQuery

func (*DynamoBatchGetQuery) AddKey

func (q *DynamoBatchGetQuery) AddKey(key *Key) error

func (*DynamoBatchGetQuery) Marshal

func (q *DynamoBatchGetQuery) Marshal() ([]byte, error)

func (*DynamoBatchGetQuery) SetConsistentRead

func (q *DynamoBatchGetQuery) SetConsistentRead(consistent bool) error

type DynamoBatchGetResponse

type DynamoBatchGetResponse struct {
	Responses       map[string][]dynamizer.DynamoItem
	UnprocessedKeys map[string]*batchGetPerTableQuery
}

type DynamoBatchPutQuery

type DynamoBatchPutQuery struct {
	RequestItems map[string][]*batchPutPerTableQuery `json:",omitempty"`
	// contains filtered or unexported fields
}

func NewDynamoBatchPutQuery

func NewDynamoBatchPutQuery(t *Table) *DynamoBatchPutQuery

func (*DynamoBatchPutQuery) AddItem

func (q *DynamoBatchPutQuery) AddItem(key *Key, item dynamizer.DynamoItem) error

func (*DynamoBatchPutQuery) Marshal

func (q *DynamoBatchPutQuery) Marshal() ([]byte, error)

type DynamoBatchPutResponse

type DynamoBatchPutResponse struct {
	UnprocessedItems map[string][]*batchPutPerTableQuery
}

type DynamoQuery

type DynamoQuery struct {
	TableName      string               `json:",omitempty"`
	ConsistentRead bool                 `json:",omitempty"`
	Item           dynamizer.DynamoItem `json:",omitempty"`
	Key            dynamizer.DynamoItem `json:",omitempty"`
	// contains filtered or unexported fields
}

func NewDynamoQuery

func NewDynamoQuery(t *Table) *DynamoQuery

func (*DynamoQuery) AddItem

func (q *DynamoQuery) AddItem(key *Key, item dynamizer.DynamoItem) error

func (*DynamoQuery) AddKey

func (q *DynamoQuery) AddKey(key *Key) error

func (*DynamoQuery) Marshal

func (q *DynamoQuery) Marshal() ([]byte, error)

func (*DynamoQuery) SetConsistentRead

func (q *DynamoQuery) SetConsistentRead(consistent bool) error

type DynamoResponse

type DynamoResponse struct {
	Item dynamizer.DynamoItem `json:",omitempty"`
}

type Error

type Error struct {
	StatusCode int // HTTP status code (200, 403, ...)
	Status     string
	Code       string // Dynamodb error code ("MalformedQueryString", ...)
	Message    string // The human-oriented error message
}

Error represents an error in an operation with Dynamodb (following goamz/s3)

func (Error) Error

func (e Error) Error() string

func (Error) ErrorCode

func (e Error) ErrorCode() string

type Expression

type Expression struct {
	Text            string
	AttributeNames  map[string]string
	AttributeValues []Attribute
}

New syntax for conditions, filtering, and projection: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.html Replaces the legacy conditional parameters: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LegacyConditionalParameters.html

Note that some DynamoDB actions can take two kinds of expression; for example, UpdateItem can have both a ConditionalExpression and UpdateExpression, while Scan can have both a FilterExpression and ProjectionExpression, so the Add*Expression() functions need to share the ExpressionAttributeNames and ExpressionAttribute values query attributes.

type GlobalSecondaryIndexT

type GlobalSecondaryIndexT struct {
	IndexName             string
	IndexSizeBytes        int64
	ItemCount             int64
	KeySchema             []KeySchemaT
	Projection            ProjectionT
	ProvisionedThroughput ProvisionedThroughputT
}

type Key

type Key struct {
	HashKey  string
	RangeKey string
}

type KeySchemaT

type KeySchemaT struct {
	AttributeName string
	KeyType       string
}

type LocalSecondaryIndexT

type LocalSecondaryIndexT struct {
	IndexName      string
	IndexSizeBytes int64
	ItemCount      int64
	KeySchema      []KeySchemaT
	Projection     ProjectionT
}

type PrimaryKey

type PrimaryKey struct {
	KeyAttribute   *Attribute
	RangeAttribute *Attribute
}

func (*PrimaryKey) Clone

func (k *PrimaryKey) Clone(h string, r string) []Attribute

Useful when you may have many goroutines using a primary key, so they don't fuxor up your values.

func (*PrimaryKey) HasRange

func (k *PrimaryKey) HasRange() bool

type ProjectionT

type ProjectionT struct {
	ProjectionType   string
	NonKeyAttributes []string
}

type ProvisionedThroughputT

type ProvisionedThroughputT struct {
	NumberOfDecreasesToday int64
	ReadCapacityUnits      int64
	WriteCapacityUnits     int64
}

type Query

type Query interface {
	Marshal() ([]byte, error)
}

type ScanQuery

type ScanQuery interface {
	Query
	AddExclusiveStartKey(key StartKey) error
	AddExclusiveStartTableName(table string) error
}

type Server

type Server struct {
	Auth        aws.Auth
	Region      aws.Region
	RetryPolicy aws.RetryPolicy
}

func New

func New(auth aws.Auth, region aws.Region) *Server

func (*Server) CreateTable

func (s *Server) CreateTable(tableDescription TableDescriptionT) (string, error)

func (*Server) DeleteTable

func (s *Server) DeleteTable(tableDescription TableDescriptionT) (string, error)

func (*Server) DescribeTable

func (s *Server) DescribeTable(name string) (*TableDescriptionT, error)

func (*Server) ListTables

func (s *Server) ListTables() ([]string, error)

func (*Server) ListTablesCallbackIterator

func (s *Server) ListTablesCallbackIterator(cb func(string)) error

func (*Server) NewTable

func (s *Server) NewTable(name string, key PrimaryKey) *Table

type StartKey

type StartKey map[string]interface{}

type Table

type Table struct {
	Server *Server
	Name   string
	Key    PrimaryKey
}

func (*Table) AddAttributes

func (t *Table) AddAttributes(key *Key, attributes []Attribute) (bool, error)

func (*Table) BatchGetDocument

func (t *Table) BatchGetDocument(keys []*Key, consistentRead bool, v interface{}) ([]error, error)

func (*Table) BatchGetItems

func (t *Table) BatchGetItems(keys []Key) *BatchGetItem

func (*Table) BatchPutDocument

func (t *Table) BatchPutDocument(keys []*Key, v interface{}) ([]error, error)

func (*Table) BatchWriteItems

func (t *Table) BatchWriteItems(itemActions map[string][][]Attribute) *BatchWriteItem

func (*Table) ConditionExpressionAddAttributes

func (t *Table) ConditionExpressionAddAttributes(key *Key, attributes []Attribute, condition *Expression) (bool, error)

func (*Table) ConditionExpressionDeleteAttributes

func (t *Table) ConditionExpressionDeleteAttributes(key *Key, attributes []Attribute, condition *Expression) (bool, error)

func (*Table) ConditionExpressionDeleteItem

func (t *Table) ConditionExpressionDeleteItem(key *Key, condition *Expression) (bool, error)

func (*Table) ConditionExpressionPutItem

func (t *Table) ConditionExpressionPutItem(hashKey, rangeKey string, attributes []Attribute, condition *Expression) (bool, error)

func (*Table) ConditionExpressionUpdateAttributes

func (t *Table) ConditionExpressionUpdateAttributes(key *Key, attributes []Attribute, condition *Expression) (bool, error)

func (*Table) ConditionalAddAttributes

func (t *Table) ConditionalAddAttributes(key *Key, attributes, expected []Attribute) (bool, error)

func (*Table) ConditionalDeleteAttributes

func (t *Table) ConditionalDeleteAttributes(key *Key, attributes, expected []Attribute) (bool, error)

func (*Table) ConditionalDeleteItem

func (t *Table) ConditionalDeleteItem(key *Key, expected []Attribute) (bool, error)

func (*Table) ConditionalPutItem

func (t *Table) ConditionalPutItem(hashKey, rangeKey string, attributes, expected []Attribute) (bool, error)

func (*Table) ConditionalUpdateAttributes

func (t *Table) ConditionalUpdateAttributes(key *Key, attributes, expected []Attribute) (bool, error)

func (*Table) CountQuery

func (t *Table) CountQuery(attributeComparisons []AttributeComparison) (int64, error)

func (*Table) DeleteAttributes

func (t *Table) DeleteAttributes(key *Key, attributes []Attribute) (bool, error)

func (*Table) DeleteDocument

func (t *Table) DeleteDocument(key *Key) error

func (*Table) DeleteItem

func (t *Table) DeleteItem(key *Key) (bool, error)

func (*Table) DescribeTable

func (t *Table) DescribeTable() (*TableDescriptionT, error)

func (*Table) FetchPartialResults

func (t *Table) FetchPartialResults(query ScanQuery) ([]map[string]*Attribute, StartKey, error)

func (*Table) FetchResultCallbackIterator

func (t *Table) FetchResultCallbackIterator(query ScanQuery, cb func(map[string]*Attribute) error) error

func (*Table) FetchResults

func (t *Table) FetchResults(query ScanQuery) ([]map[string]*Attribute, error)

func (*Table) GetDocument

func (t *Table) GetDocument(key *Key, v interface{}) error

func (*Table) GetDocumentConsistent

func (t *Table) GetDocumentConsistent(key *Key, consistentRead bool, v interface{}) error

func (*Table) GetItem

func (t *Table) GetItem(key *Key) (map[string]*Attribute, error)

func (*Table) GetItemConsistent

func (t *Table) GetItemConsistent(key *Key, consistentRead bool) (map[string]*Attribute, error)

func (*Table) LimitedQuery

func (t *Table) LimitedQuery(attributeComparisons []AttributeComparison, limit int64) ([]map[string]*Attribute, error)

func (*Table) LimitedQueryCallbackIterator

func (t *Table) LimitedQueryCallbackIterator(attributeComparisons []AttributeComparison, limit int64, cb func(map[string]*Attribute) error) error

func (*Table) LimitedQueryOnIndex

func (t *Table) LimitedQueryOnIndex(attributeComparisons []AttributeComparison, indexName string, limit int64) ([]map[string]*Attribute, error)

func (*Table) LimitedQueryOnIndexCallbackIterator

func (t *Table) LimitedQueryOnIndexCallbackIterator(attributeComparisons []AttributeComparison, indexName string, limit int64, cb func(map[string]*Attribute) error) error

func (*Table) ParallelScan

func (t *Table) ParallelScan(attributeComparisons []AttributeComparison, segment int, totalSegments int) ([]map[string]*Attribute, error)

func (*Table) ParallelScanPartial

func (t *Table) ParallelScanPartial(attributeComparisons []AttributeComparison, exclusiveStartKey StartKey, segment, totalSegments int) ([]map[string]*Attribute, StartKey, error)

func (*Table) ParallelScanPartialLimit

func (t *Table) ParallelScanPartialLimit(attributeComparisons []AttributeComparison, exclusiveStartKey StartKey, segment, totalSegments int, limit int64) ([]map[string]*Attribute, StartKey, error)

func (*Table) PutDocument

func (t *Table) PutDocument(key *Key, data interface{}) error

func (*Table) PutItem

func (t *Table) PutItem(hashKey string, rangeKey string, attributes []Attribute) (bool, error)

func (*Table) Query

func (t *Table) Query(attributeComparisons []AttributeComparison) ([]map[string]*Attribute, error)

func (*Table) QueryCallbackIterator

func (t *Table) QueryCallbackIterator(attributeComparisons []AttributeComparison, cb func(map[string]*Attribute) error) error

func (*Table) QueryOnIndex

func (t *Table) QueryOnIndex(attributeComparisons []AttributeComparison, indexName string) ([]map[string]*Attribute, error)

func (*Table) QueryOnIndexCallbackIterator

func (t *Table) QueryOnIndexCallbackIterator(attributeComparisons []AttributeComparison, indexName string, cb func(map[string]*Attribute) error) error

func (*Table) QueryTable

func (t *Table) QueryTable(q Query) ([]map[string]*Attribute, StartKey, error)

func (*Table) QueryTableCallbackIterator

func (t *Table) QueryTableCallbackIterator(query ScanQuery, cb func(map[string]*Attribute) error) error

func (*Table) Scan

func (t *Table) Scan(attributeComparisons []AttributeComparison) ([]map[string]*Attribute, error)

func (*Table) ScanCallbackIterator

func (t *Table) ScanCallbackIterator(attributeComparisons []AttributeComparison, cb func(map[string]*Attribute) error) error

func (*Table) ScanPartial

func (t *Table) ScanPartial(attributeComparisons []AttributeComparison, exclusiveStartKey StartKey) ([]map[string]*Attribute, StartKey, error)

func (*Table) ScanPartialLimit

func (t *Table) ScanPartialLimit(attributeComparisons []AttributeComparison, exclusiveStartKey StartKey, limit int64) ([]map[string]*Attribute, StartKey, error)

func (*Table) UpdateAttributes

func (t *Table) UpdateAttributes(key *Key, attributes []Attribute) (bool, error)

func (*Table) UpdateExpressionUpdateAttributes

func (t *Table) UpdateExpressionUpdateAttributes(key *Key, condition, update *Expression) (bool, error)

type TableDescriptionT

type TableDescriptionT struct {
	AttributeDefinitions   []AttributeDefinitionT
	CreationDateTime       float64
	ItemCount              int64
	KeySchema              []KeySchemaT
	LocalSecondaryIndexes  []LocalSecondaryIndexT
	GlobalSecondaryIndexes []GlobalSecondaryIndexT
	ProvisionedThroughput  ProvisionedThroughputT
	TableName              string
	TableSizeBytes         int64
	TableStatus            string
}

func (*TableDescriptionT) BuildPrimaryKey

func (t *TableDescriptionT) BuildPrimaryKey() (pk PrimaryKey, err error)

type UntypedQuery

type UntypedQuery struct {
	// contains filtered or unexported fields
}

func NewEmptyQuery

func NewEmptyQuery() *UntypedQuery

func NewQuery

func NewQuery(t *Table) *UntypedQuery

func (*UntypedQuery) AddAttributesToGet

func (q *UntypedQuery) AddAttributesToGet(attributes []string)

func (*UntypedQuery) AddConditionExpression

func (q *UntypedQuery) AddConditionExpression(e *Expression)

func (*UntypedQuery) AddCreateRequestTable

func (q *UntypedQuery) AddCreateRequestTable(description TableDescriptionT)

func (*UntypedQuery) AddDeleteRequestTable

func (q *UntypedQuery) AddDeleteRequestTable(description TableDescriptionT)

func (*UntypedQuery) AddExclusiveStartKey

func (q *UntypedQuery) AddExclusiveStartKey(key StartKey) error

func (*UntypedQuery) AddExclusiveStartTableName

func (q *UntypedQuery) AddExclusiveStartTableName(table string) error

func (*UntypedQuery) AddExpected

func (q *UntypedQuery) AddExpected(attributes []Attribute)

func (*UntypedQuery) AddFilterExpression

func (q *UntypedQuery) AddFilterExpression(e *Expression)

func (*UntypedQuery) AddGetRequestItems

func (q *UntypedQuery) AddGetRequestItems(tableKeys map[*Table][]Key)

func (*UntypedQuery) AddIndex

func (q *UntypedQuery) AddIndex(value string)

func (*UntypedQuery) AddItem

func (q *UntypedQuery) AddItem(attributes []Attribute)

The primary key must be included in attributes.

func (*UntypedQuery) AddKey

func (q *UntypedQuery) AddKey(key *Key) error

This way of specifing the key is used when doing a Get. If rangeKey is "", it is assumed to not want to be used

func (*UntypedQuery) AddKeyConditions

func (q *UntypedQuery) AddKeyConditions(comparisons []AttributeComparison)

func (*UntypedQuery) AddLimit

func (q *UntypedQuery) AddLimit(limit int64)

func (*UntypedQuery) AddParallelScanConfiguration

func (q *UntypedQuery) AddParallelScanConfiguration(segment int, totalSegments int)

func (*UntypedQuery) AddProjectionExpression

func (q *UntypedQuery) AddProjectionExpression(e *Expression)

func (*UntypedQuery) AddQueryFilter

func (q *UntypedQuery) AddQueryFilter(comparisons []AttributeComparison)

func (*UntypedQuery) AddScanFilter

func (q *UntypedQuery) AddScanFilter(comparisons []AttributeComparison)
"ScanFilter":{
    "AttributeName1":{"AttributeValueList":[{"S":"AttributeValue"}],"ComparisonOperator":"EQ"}
},

func (*UntypedQuery) AddScanIndexForward

func (q *UntypedQuery) AddScanIndexForward(val bool)

func (*UntypedQuery) AddSelect

func (q *UntypedQuery) AddSelect(value string)

func (*UntypedQuery) AddUpdateExpression

func (q *UntypedQuery) AddUpdateExpression(e *Expression)

func (*UntypedQuery) AddUpdates

func (q *UntypedQuery) AddUpdates(attributes []Attribute, action string)

func (*UntypedQuery) AddWriteRequestItems

func (q *UntypedQuery) AddWriteRequestItems(tableItems map[*Table]map[string][][]Attribute)

func (*UntypedQuery) Marshal

func (q *UntypedQuery) Marshal() ([]byte, error)

func (*UntypedQuery) SetConditionalOperator

func (q *UntypedQuery) SetConditionalOperator(op COP)

func (*UntypedQuery) SetConsistentRead

func (q *UntypedQuery) SetConsistentRead(c bool) error

func (*UntypedQuery) String

func (q *UntypedQuery) String() string

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL