Skip to content

Commit 06a8c35

Browse files
committed
Add XM | XX features to JSON.SET command
1 parent d99c79b commit 06a8c35

File tree

2 files changed

+27
-4
lines changed

2 files changed

+27
-4
lines changed

src/RediSharp.Core/RedisJsonCommands.cs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,17 @@ public static class RedisJsonCommands
99
{
1010
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull,
1111
};
12-
public static RedisResult JsonSet(this IDatabase db, string key, string path, object obj)
12+
public static RedisResult JsonSet(this IDatabase db, RedisKey key, string path, object obj, When when = When.Always)
1313
{
1414
var json = JsonSerializer.Serialize(obj);
15-
var result = db.Execute("JSON.SET", key, path, json);
16-
return result;
15+
switch(when)
16+
{
17+
case When.Exists:
18+
return db.Execute("JSON.SET", key, path, json, "XX");
19+
case When.NotExists:
20+
return db.Execute("JSON.SET", key, path, json, "NX");
21+
default:
22+
return db.Execute("JSON.SET", key, path, json);
23+
}
1724
}
1825
}

tests/RediSharp.Tests/UnitTest1.cs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,22 @@ public void TestJsonSet()
2727
{
2828
var obj = new Person { Name = "Shachar", Age = 23 };
2929
_mock.Object.JsonSet("Person:Shachar", "$", obj);
30-
_mock.Verify(x => x.Execute("JSON.SET", "Person:Shachar", "$", "{\"Name\":\"Shachar\",\"Age\":23}" ));
30+
_mock.Verify(x => x.Execute("JSON.SET", "Person:Shachar", "$", "{\"Name\":\"Shachar\",\"Age\":23}"));
31+
}
32+
33+
[Fact]
34+
public void TestJsonSetExist()
35+
{
36+
var obj = new Person { Name = "Shachar", Age = 23 };
37+
_mock.Object.JsonSet("Person:Shachar", "$", obj, When.Exists);
38+
_mock.Verify(x => x.Execute("JSON.SET", "Person:Shachar", "$", "{\"Name\":\"Shachar\",\"Age\":23}", "XX"));
39+
}
40+
41+
[Fact]
42+
public void TestJsonSetNotExist()
43+
{
44+
var obj = new Person { Name = "Shachar", Age = 23 };
45+
_mock.Object.JsonSet("Person:Shachar", "$", obj, When.NotExists);
46+
_mock.Verify(x => x.Execute("JSON.SET", "Person:Shachar", "$", "{\"Name\":\"Shachar\",\"Age\":23}", "NX"));
3147
}
3248
}

0 commit comments

Comments
 (0)