summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/goamz/goamz/dynamodb/update_item.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/goamz/goamz/dynamodb/update_item.go')
-rw-r--r--vendor/github.com/goamz/goamz/dynamodb/update_item.go94
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
+}