From 4023fe5b11534bc4dc7c58a079812d848d185684 Mon Sep 17 00:00:00 2001 From: Chris Turner Date: Thu, 28 Jun 2012 17:08:20 -0700 Subject: [PATCH] Support conditional PUT --- src/rotary/client.clj | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/rotary/client.clj b/src/rotary/client.clj index 8617118..e6cd3f6 100644 --- a/src/rotary/client.clj +++ b/src/rotary/client.clj @@ -13,6 +13,7 @@ DescribeTableResult DeleteTableRequest DeleteItemRequest + ExpectedAttributeValue GetItemRequest GetItemResult Key @@ -178,14 +179,22 @@ (as-map [result] (item-map (.getItem result)))) +(defn- expected-value [req expected] + (when expected + (.setExpected req (fmap #(if (instance? Boolean %) + (ExpectedAttributeValue. %) + (ExpectedAttributeValue. (to-attr-value %))) + expected)))) + (defn put-item "Add an item (a Clojure map) to a DynamoDB table." - [cred table item] + [cred table item & {:keys [expected]}] (.putItem (db-client cred) (doto (PutItemRequest.) (.setTableName table) - (.setItem (fmap to-attr-value item))))) + (.setItem (fmap to-attr-value item)) + (expected-value expected)))) (defn- item-key "Create a Key object from a value."