NodeJS DAX client doesn't support Update item having same field name with the condition expression.
Hello team,
So recently, I was trying to enable DAX instead of using the normal DynamoDB client. And I found this issue. When I'm issuing a Update with this:
```
"Update": {
"Key": {
"id": {
"S": "de26b619-d3e1-4de9-a338-12f95780538f"
}
},
"ConditionExpression": "#a0 = :v0 AND #a1 = :v1",
"ExpressionAttributeNames": {
"#a0": "tenantId",
"#a1": "_version",
"#a2": "updatedAt",
"#a3": "_version",
"#a4": "totalAmountOutstanding",
"#a5": "items"
},
"ExpressionAttributeValues": {
":v0": {
"S": "HelmTest"
},
":v1": {
"N": "1"
},
":v2": {
"N": "1650900411690"
},
":v3": {
"N": "2"
},
...
```
So basically, I'm using the field `_version` to implement optimistic locking. When using DAX to run this update, I got the error:
```
{
"errorType": "Error",
"errorMessage": "ValidationException: Two document paths overlap with each other; must remove or rewrite one of these paths _version",
"code": "ValidationException",
"time": 1650900411978,
"retryable": false,
"requestId": null,
"statusCode": -1,
"_tubeInvalid": false,
"waitForRecoveryBeforeRetrying": false,
"stack": [
"Error: ValidationException: Two document paths overlap with each other; must remove or rewrite one of these paths _version",
" at Function.newValidationException (/node_modules/amazon-dax-client/src/RequestValidator.js:383:12)",
" at /node_modules/amazon-dax-client/src/RequestValidator.js:84:34",
" at Array.forEach (<anonymous>)",
" at Function.validateExprAttrNames (/node_modules/amazon-dax-client/src/RequestValidator.js:78:30)",
" at Function.validateExpression (/node_modules/amazon-dax-client/src/RequestValidator.js:217:42)",
" at /node_modules/amazon-dax-client/src/BaseOperations.js:603:26",
" at processTicksAndRejections (internal/process/task_queues.js:95:5)",
" at p2 (/node_modules/dynamoose/lib/aws/ddb/internal.ts:30:17)",
" at /node_modules/dynamoose/lib/Transaction.ts:99:23",
```
The library complains that it won't allow me to use `_version` many times. I looked into the source code, and this is confirmed:
```
let attrs = new Set();
Object.keys(attrNames).forEach((k) => {
let v = attrNames[k];
if(k == null) {
throw new AmazonClientException('ExpressionAttributeNames contains invalid key: null');
}
if(attrs.has(v)) {
throw RequestValidator.newValidationException('Two document paths overlap with each other; must remove or rewrite one of these paths ' + v);
}
attrs.add(v);
```
I believe this is a bug in the library, as this is a normal use case and it should be allowed. For now, I've turned off the DAX and gone back to the normal DynamoDB client, where things are working.