Skip to content

Commit 9c84eec

Browse files
authored
Merge pull request #182 from rocksdict/fix-get-none
fix get None value
2 parents d097734 + bc37ce9 commit 9c84eec

2 files changed

Lines changed: 16 additions & 13 deletions

File tree

src/rdict.rs

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -348,13 +348,8 @@ impl Rdict {
348348
/// Use list of keys for batch get.
349349
fn __getitem__<'py>(&self, key: &Bound<PyAny>, py: Python<'py>) -> PyResult<Bound<'py, PyAny>> {
350350
match self.get(key, None, None, py) {
351-
Ok(v) => {
352-
if v.is_none() {
353-
Err(PyKeyError::new_err(format!("key {key} not found")))
354-
} else {
355-
Ok(v)
356-
}
357-
}
351+
Ok(None) => Err(PyKeyError::new_err(format!("key {key} not found"))),
352+
Ok(Some(v)) => Ok(v),
358353
Err(e) => Err(e),
359354
}
360355
}
@@ -377,7 +372,7 @@ impl Rdict {
377372
default: Option<Bound<'py, PyAny>>,
378373
read_opt: Option<&ReadOptionsPy>,
379374
py: Python<'py>,
380-
) -> PyResult<Bound<'py, PyAny>> {
375+
) -> PyResult<Option<Bound<'py, PyAny>>> {
381376
let db = self.get_db()?;
382377
let read_opt_option = match read_opt {
383378
None => None,
@@ -395,7 +390,9 @@ impl Rdict {
395390
Some(cf) => cf.clone(),
396391
};
397392
if let Ok(keys) = key.cast() {
398-
return Ok(self.get_batch_inner(db, keys, default, py, &cf)?.into_any());
393+
return Ok(Some(
394+
self.get_batch_inner(db, keys, default, py, &cf)?.into_any(),
395+
));
399396
}
400397
let key_bytes = encode_key(key, self.opt_py.raw_mode)?;
401398
let value_result = db
@@ -405,17 +402,17 @@ impl Rdict {
405402
None => {
406403
// try to return default value
407404
if let Some(default) = default {
408-
Ok(default)
405+
Ok(Some(default))
409406
} else {
410-
Ok(py.None().bind(py).to_owned())
407+
Ok(None)
411408
}
412409
}
413-
Some(slice) => Ok(decode_value(
410+
Some(slice) => Ok(Some(decode_value(
414411
py,
415412
slice.as_ref(),
416413
&self.loads,
417414
self.opt_py.raw_mode,
418-
)?),
415+
)?)),
419416
}
420417
}
421418

test/test_rdict.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,12 @@ def testGetItem(self):
6868
lambda: self.test_dict[250] if self.test_dict is not None else None,
6969
)
7070

71+
def testGetNoneValue(self):
72+
assert self.test_dict is not None
73+
self.test_dict["none"] = None
74+
self.assertIsNone(self.test_dict["none"])
75+
self.assertIsNone(self.test_dict.get("none"))
76+
7177
def testDelItem(self):
7278
assert self.test_dict is not None
7379
# no exception raise when deleting non-existing key

0 commit comments

Comments
 (0)