From eb6648770e7de66ccafe44d114ecbb2c1eaf444d Mon Sep 17 00:00:00 2001 From: metamuffin Date: Thu, 26 Feb 2026 03:02:24 +0100 Subject: implement application-side continuation tokens --- database/src/kv/tests.rs | 10 +++++----- database/src/lib.rs | 1 + database/src/query_syntax.rs | 6 ++++-- 3 files changed, 10 insertions(+), 7 deletions(-) (limited to 'database') 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>, 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() } ) } -- cgit v1.3