diff options
Diffstat (limited to 'vendor/github.com/goamz/goamz/dynamodb/update_item.go')
-rw-r--r-- | vendor/github.com/goamz/goamz/dynamodb/update_item.go | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/vendor/github.com/goamz/goamz/dynamodb/update_item.go b/vendor/github.com/goamz/goamz/dynamodb/update_item.go new file mode 100644 index 000000000..280eb4bed --- /dev/null +++ b/vendor/github.com/goamz/goamz/dynamodb/update_item.go @@ -0,0 +1,94 @@ +package dynamodb + +import simplejson "github.com/bitly/go-simplejson" + +/* +Construct an update item query. + +The query can be composed via chaining and then executed via Execute() + +Usage: + update := table.UpdateItem(key) + .ReturnValues(dynamodb.UPDATED_NEW) + .UpdateExpression("SET Counter = Counter + :incr") + .UpdateCondition("Counter < :checkVal") + .ExpressionAttributes(NewNumberAttribute(":incr", "1"), NewNumberAttribute(":checkVal", 42)) + result, err := update.Execute() + if err == nil { + log.Printf("Counter is now %v", result.Attributes["Counter"].Value) + } + +*/ +func (t *Table) UpdateItem(key *Key) *UpdateItem { + q := NewQuery(t) + q.AddKey(t, key) + return &UpdateItem{table: t, query: q} +} + +type UpdateItem struct { + table *Table + query *Query + hasReturnValues bool +} + +// Specify how return values are to be provided. +func (u *UpdateItem) ReturnValues(returnValues ReturnValues) *UpdateItem { + u.hasReturnValues = (returnValues != NONE) + u.query.AddReturnValues(returnValues) + return u +} + +/* +Specify an update expression and optional attribute settings at the same time. + + update.UpdateExpression("SET Foo = Foo + :incr", dynamodb.NewNumberAttribute(":incr", "7")) + +is equivalent to + + update.UpdateExpression("SET Foo = Foo + :incr") + .ExpressionAttributes(NewNumberAttribute(":incr", "7")) + +*/ +func (u *UpdateItem) UpdateExpression(expression string, attributes ...Attribute) *UpdateItem { + u.query.AddUpdateExpression(expression) + u.ExpressionAttributes(attributes...) + return u +} + +// Specify attribute substitutions to be used in expressions. +func (u *UpdateItem) ExpressionAttributes(attributes ...Attribute) *UpdateItem { + u.query.AddExpressionAttributes(attributes) + return u +} + +// Specify a check condition for conditional updates. +func (u *UpdateItem) ConditionExpression(expression string) *UpdateItem { + u.query.AddConditionExpression(expression) + return u +} + +// Execute this query. +func (u *UpdateItem) Execute() (*UpdateResult, error) { + jsonResponse, err := u.table.Server.queryServer(target("UpdateItem"), u.query) + + if err != nil { + return nil, err + } + + if u.hasReturnValues { + resp, err := simplejson.NewJson(jsonResponse) + if err != nil { + return nil, err + } + attrib, err := resp.Get("Attributes").Map() + if err != nil { + return nil, err + } + return &UpdateResult{parseAttributes(attrib)}, nil + } + return nil, nil +} + +type UpdateResult struct { + Attributes map[string]*Attribute +} |