diff options
Diffstat (limited to 'py_bindings')
| -rw-r--r-- | py_bindings/log_db.pyi | 6 | ||||
| -rw-r--r-- | py_bindings/requirements.txt | 1 | ||||
| -rw-r--r-- | py_bindings/src/lib.rs | 29 |
3 files changed, 26 insertions, 10 deletions
diff --git a/py_bindings/log_db.pyi b/py_bindings/log_db.pyi index 53aa118..aeb6421 100644 --- a/py_bindings/log_db.pyi +++ b/py_bindings/log_db.pyi @@ -26,11 +26,11 @@ class DB: def configure() -> Config: ... def upsert(self, record: Record) -> None: ... def get(self, key: str) -> Record: ... - def find_by(self, key: str, value: "Value") -> list[Record]: ... - def batch_find_by(self, key: str, values: list["Value"]) -> list[tuple[int, Record]]: ... + def find_by(self, key: str, value: "Value", offset: int = ..., limit: int = ...) -> list[Record]: ... + def batch_find_by(self, key: str, values: list["Value"], offset: int = ..., limit: int = ...) -> list[tuple[int, Record]]: ... def delete(self, key: str) -> list[Record]: ... def delete_by(self, key: str, value: "Value") -> list[Record]: ... - def range_by(self, key: str, start: "Bound", end: "Bound") -> list[Record]: ... + def range_by(self, key: str, start: "Bound", end: "Bound", offset: int = ..., limit: int = ...) -> list[Record]: ... def tx_begin(self) -> None: ... def tx_commit(self) -> None: ... def tx_rollback(self) -> None: ... diff --git a/py_bindings/requirements.txt b/py_bindings/requirements.txt new file mode 100644 index 0000000..017c460 --- /dev/null +++ b/py_bindings/requirements.txt @@ -0,0 +1 @@ +maturin==1.8.2 diff --git a/py_bindings/src/lib.rs b/py_bindings/src/lib.rs index 9a14d19..ce62dd7 100644 --- a/py_bindings/src/lib.rs +++ b/py_bindings/src/lib.rs @@ -1,6 +1,7 @@ use std::str::FromStr; +use std::usize; -use log_db::{self, OwnedBounds}; +use log_db::{self, OwnedBounds, QueryParams, DEFAULT_QUERY_PARAMS}; use pyo3::exceptions::PyException; use pyo3::prelude::*; use rust_decimal::Decimal; @@ -299,31 +300,45 @@ impl DB { .map_err(|e| PyException::new_err(e.to_string())) } - // TODO: refactor out &String - pub fn find_by(&mut self, field: PyField, key: &Value) -> PyResult<Vec<PyRecord>> { + #[pyo3(signature = (field, key, offset = DEFAULT_QUERY_PARAMS.offset, limit = DEFAULT_QUERY_PARAMS.limit))] + pub fn find_by( + &mut self, + field: PyField, + key: &Value, + offset: usize, + limit: usize, + ) -> PyResult<Vec<PyRecord>> { + let params = QueryParams { offset, limit }; self.db - .find_by(&field, &key.record_value) + .find_by_with_params(&field, &key.record_value, ¶ms) .map_err(|e| PyException::new_err(e.to_string())) } - // batch_find_by + #[pyo3(signature = (field, keys, offset = DEFAULT_QUERY_PARAMS.offset, limit = DEFAULT_QUERY_PARAMS.limit))] pub fn batch_find_by( &mut self, field: PyField, keys: Vec<Value>, + offset: usize, + limit: usize, ) -> PyResult<Vec<(usize, PyRecord)>> { + let params = QueryParams { offset, limit }; let keys: Vec<log_db::Value> = keys.into_iter().map(|key| key.record_value).collect(); self.db - .batch_find_by(&field, &keys) + .batch_find_by_with_params(&field, &keys, ¶ms) .map_err(|e| PyException::new_err(e.to_string())) } + #[pyo3(signature = (field, start, end, offset = DEFAULT_QUERY_PARAMS.offset, limit = DEFAULT_QUERY_PARAMS.limit))] pub fn range_by( &mut self, field: PyField, start: &PyRangeBound, end: &PyRangeBound, + offset: usize, + limit: usize, ) -> PyResult<Vec<PyRecord>> { + let params = QueryParams { offset, limit }; let range = OwnedBounds::new( match start { PyRangeBound::Unbounded() => StdBound::Unbounded, @@ -338,7 +353,7 @@ impl DB { ); self.db - .range_by(&field, range) + .range_by_with_params(&field, range, ¶ms) .map_err(|e| PyException::new_err(e.to_string())) } |
