diff options
| author | metamuffin <metamuffin@disroot.org> | 2026-02-26 03:02:24 +0100 |
|---|---|---|
| committer | metamuffin <metamuffin@disroot.org> | 2026-02-26 03:02:24 +0100 |
| commit | eb6648770e7de66ccafe44d114ecbb2c1eaf444d (patch) | |
| tree | 2bce9f579b3ea7313f84df94b27fad813c66e9e1 /database/src | |
| parent | 7f7deec27e69ed110c52caddaa3a0c04430e71d9 (diff) | |
| download | jellything-eb6648770e7de66ccafe44d114ecbb2c1eaf444d.tar jellything-eb6648770e7de66ccafe44d114ecbb2c1eaf444d.tar.bz2 jellything-eb6648770e7de66ccafe44d114ecbb2c1eaf444d.tar.zst | |
implement application-side continuation tokens
Diffstat (limited to 'database/src')
| -rw-r--r-- | database/src/kv/tests.rs | 10 | ||||
| -rw-r--r-- | database/src/lib.rs | 1 | ||||
| -rw-r--r-- | database/src/query_syntax.rs | 6 |
3 files changed, 10 insertions, 7 deletions
diff --git a/database/src/kv/tests.rs b/database/src/kv/tests.rs index 85ee5d7..e3e6b3b 100644 --- a/database/src/kv/tests.rs +++ b/database/src/kv/tests.rs @@ -1,5 +1,5 @@ use crate::{ - Database, Filter, Query, Sort, Value, + Database, Filter, Query, Value, test_shared::{AGE, NAME, new_alice, new_bob, new_charlie}, }; use anyhow::Result; @@ -68,7 +68,7 @@ pub fn query_match_int() -> Result<()> { db.transaction(&mut |txn| { result = txn.query_single(Query { filter: Filter::Match(Path(vec![AGE.0]), Value::U32(35)), - sort: Sort::None, + ..Default::default() })?; Ok(()) })?; @@ -95,7 +95,7 @@ pub fn query_match_str() -> Result<()> { db.transaction(&mut |txn| { result = txn.query_single(Query { filter: Filter::Match(Path(vec![NAME.0]), "Alice".into()), - sort: Sort::None, + ..Default::default() })?; Ok(()) })?; @@ -114,7 +114,7 @@ pub fn query_match_str_after() -> Result<()> { db.transaction(&mut |txn| { result = txn.query_single(Query { filter: Filter::Match(Path(vec![NAME.0]), "Alice".into()), - sort: Sort::None, + ..Default::default() })?; Ok(()) })?; @@ -132,7 +132,7 @@ pub fn query_match_str_after() -> Result<()> { db.transaction(&mut |txn| { result = txn.query_single(Query { filter: Filter::Match(Path(vec![NAME.0]), "Alice".into()), - sort: Sort::None, + ..Default::default() })?; Ok(()) })?; diff --git a/database/src/lib.rs b/database/src/lib.rs index 1f491de..13e4a0d 100644 --- a/database/src/lib.rs +++ b/database/src/lib.rs @@ -35,6 +35,7 @@ pub trait Transaction { #[derive(Debug, Default, Clone, PartialEq)] pub struct Query<'a> { + pub continuation: Option<Vec<u8>>, pub filter: Filter<'a>, pub sort: Sort, } diff --git a/database/src/query_syntax.rs b/database/src/query_syntax.rs index f3d1166..9efc3d5 100644 --- a/database/src/query_syntax.rs +++ b/database/src/query_syntax.rs @@ -91,16 +91,17 @@ impl FromStr for Query<'static> { Ok(Self { filter: Filter::from_str(filter)?, sort: Sort::from_str(sort)?, + ..Default::default() }) } else if let Some(sort) = s.strip_prefix("SORT ") { Ok(Self { - filter: Filter::True, sort: Sort::from_str(sort)?, + ..Default::default() }) } else if let Some(filter) = s.strip_prefix("FILTER") { Ok(Self { filter: Filter::from_str(filter)?, - sort: Sort::None, + ..Default::default() }) } else { bail!("invalid query") @@ -192,6 +193,7 @@ fn test_parse() { multi: MultiBehaviour::First, offset: None, }), + ..Default::default() } ) } |