From fdf8711dc4f271b24a2731e5bbe75cca9dabf8c9 Mon Sep 17 00:00:00 2001 From: haruharuharuby Date: Wed, 18 Dec 2019 12:43:29 +0100 Subject: [PATCH] add custom expression on update operation --- packages/dynamodb-data-mapper/src/DataMapper.ts | 3 +++ .../src/namedParameters/UpdateOptions.ts | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/packages/dynamodb-data-mapper/src/DataMapper.ts b/packages/dynamodb-data-mapper/src/DataMapper.ts index 0c923dae..9cd9d131 100644 --- a/packages/dynamodb-data-mapper/src/DataMapper.ts +++ b/packages/dynamodb-data-mapper/src/DataMapper.ts @@ -956,6 +956,7 @@ export class DataMapper { } let { condition, + customExpression, onMissing = 'remove', skipVersionCheck = this.skipVersionCheck, } = options; @@ -986,6 +987,8 @@ export class DataMapper { if (onMissing === 'remove') { expr.remove(key); } + } else if (customExpression) { + expr.set(key, customExpression) } else { const marshalled = marshallValue(fieldSchema, inputMember); if (marshalled) { diff --git a/packages/dynamodb-data-mapper/src/namedParameters/UpdateOptions.ts b/packages/dynamodb-data-mapper/src/namedParameters/UpdateOptions.ts index c582dde8..dd0527e8 100644 --- a/packages/dynamodb-data-mapper/src/namedParameters/UpdateOptions.ts +++ b/packages/dynamodb-data-mapper/src/namedParameters/UpdateOptions.ts @@ -8,6 +8,12 @@ export interface UpdateOptions { */ condition?: ConditionExpression; + + /** + * A customExpression overwrite Value attribute of UpdateExpression if specfied + */ + customExpression?: AttributeValue | FunctionExpression | MathematicalExpression | any; + /** * Whether the absence of a value defined in the schema should be treated as * a directive to remove the property from the item.