MCPcopy Create free account
hub / github.com/NodeDB-Lab/nodedb / handle_set

Function handle_set

nodedb/src/control/server/resp/handler_kv.rs:41–131  ·  view source on GitHub ↗
(
    cmd: &RespCommand,
    session: &RespSession,
    state: &SharedState,
)

Source from the content-addressed store, hash-verified

39}
40
41pub(super) async fn handle_set(
42 cmd: &RespCommand,
43 session: &RespSession,
44 state: &SharedState,
45) -> RespValue {
46 if cmd.argc() < 2 {
47 return RespValue::err("ERR wrong number of arguments for 'set' command");
48 }
49
50 let key = cmd.args[0].clone();
51 let value = cmd.args[1].clone();
52
53 // Parse optional flags: EX, PX, NX, XX.
54 let mut ttl_ms: u64 = 0;
55 let mut nx = false;
56 let mut xx = false;
57 let mut i = 2;
58 while i < cmd.argc() {
59 match cmd.arg_str(i).map(|s| s.to_uppercase()) {
60 Some(ref flag) if flag == "EX" => {
61 if let Some(secs) = cmd.arg_i64(i + 1) {
62 ttl_ms = (secs as u64) * 1000;
63 i += 2;
64 } else {
65 return RespValue::err("ERR value is not an integer or out of range");
66 }
67 }
68 Some(ref flag) if flag == "PX" => {
69 if let Some(ms) = cmd.arg_i64(i + 1) {
70 ttl_ms = ms as u64;
71 i += 2;
72 } else {
73 return RespValue::err("ERR value is not an integer or out of range");
74 }
75 }
76 Some(ref flag) if flag == "NX" => {
77 nx = true;
78 i += 1;
79 }
80 Some(ref flag) if flag == "XX" => {
81 xx = true;
82 i += 1;
83 }
84 _ => {
85 return RespValue::err(format!(
86 "ERR syntax error at '{}'",
87 cmd.arg_str(i).unwrap_or("?")
88 ));
89 }
90 }
91 }
92
93 // NX/XX conditional write: check existence first.
94 if nx || xx {
95 let check = PhysicalPlan::Kv(KvOp::Get {
96 collection: session.collection.clone(),
97 key: key.clone(),
98 rls_filters: Vec::new(),

Callers 1

executeFunction · 0.70

Calls 10

dispatch_kvFunction · 0.85
dispatch_kv_writeFunction · 0.85
argcMethod · 0.80
arg_strMethod · 0.80
arg_i64Method · 0.80
errFunction · 0.50
okFunction · 0.50
cloneMethod · 0.45
is_emptyMethod · 0.45
assignMethod · 0.45

Tested by

no test coverage detected