Skip to content

Commit 2c2ed47

Browse files
committed
update: add test; version: 1.1.0
1 parent 94cb0e0 commit 2c2ed47

File tree

8 files changed

+105
-13
lines changed

8 files changed

+105
-13
lines changed

Cargo.lock

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

charybdis-macros/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[package]
22
name = "charybdis_macros"
33
rust-version = "1.75.0"
4-
version = "1.0.4"
4+
version = "1.1.0"
55
edition = "2021"
66
description = "Proc macro crate for Charybdis ORM"
77
repository = "https://github.com/goranbrkuljan/charybdis"
@@ -12,7 +12,7 @@ categories = ["database"]
1212
proc-macro = true
1313

1414
[dependencies]
15-
charybdis_parser = { version = "1.0.4", path = "../charybdis-parser" }
15+
charybdis_parser = { version = "1.1.0", path = "../charybdis-parser" }
1616
proc-macro2 = "1.0.81"
1717
syn = { version = "2.0.60", features = ["full"] }
1818
quote = "1.0.36"

charybdis-migrate/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
[package]
22
name = "charybdis-migrate"
33
rust-version = "1.75.0"
4-
version = "1.0.4"
4+
version = "1.1.0"
55
edition = "2021"
66
description = "Automatic Migration Tool for Charybdis ORM"
77
repository = "https://github.com/goranbrkuljan/charybdis"
88
license = "MIT"
99
categories = ["database"]
1010

1111
[dependencies]
12-
charybdis_parser = { version = "1.0.4", path = "../charybdis-parser" }
12+
charybdis_parser = { version = "1.1.0", path = "../charybdis-parser" }
1313
scylla = { version = "1.4", features = ["openssl-010"] }
1414
tokio = { version = "1.38.0", features = ["full"] }
1515
colored = "3.0.0"

charybdis-parser/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[package]
22
name = "charybdis_parser"
33
rust-version = "1.75.0"
4-
version = "1.0.4"
4+
version = "1.1.0"
55
edition = "2021"
66
description = "Parser crate for Charybdis ORM"
77
repository = "https://github.com/goranbrkuljan/charybdis"

charybdis/Cargo.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[package]
22
name = "charybdis"
33
rust-version = "1.75.0"
4-
version = "1.0.4"
4+
version = "1.1.0"
55
edition = "2021"
66
description = "High-Performance ORM for ScyllaDB"
77
repository = "https://github.com/goranbrkuljan/charybdis"
@@ -11,8 +11,8 @@ categories = ["database"]
1111
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
1212

1313
[dependencies]
14-
charybdis-migrate = { version = "1.0.4", path = "../charybdis-migrate", optional = true }
15-
charybdis_macros = { version = "1.0.4", path = "../charybdis-macros" }
14+
charybdis-migrate = { version = "1.1.0", path = "../charybdis-migrate", optional = true }
15+
charybdis_macros = { version = "1.1.0", path = "../charybdis-macros" }
1616
chrono = { version = "0.4.38", features = ["serde"] }
1717
futures = "0.3.30"
1818
scylla = { version = "1.4", features = ["full-serialization"] }

charybdis/README.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,7 @@ in `charybdis::operations` module.
312312
use charybdis::errors::CharybdisError;
313313
use charybdis::macros::charybdis_model;
314314
use charybdis::stream::CharybdisModelStream;
315+
use charybdis::scylla::PagingStateResponse;
315316
use charybdis::types::{Date, Text, Uuid};
316317
317318
#[charybdis_model(
@@ -344,6 +345,23 @@ in `charybdis::operations` module.
344345
let post: Option<Post> = Post::maybe_find_first_by_date_and_category_id(date, category_id).execute(db_session).await?;
345346
let post: Option<Post> = Post::maybe_find_first_by_date_and_category_id_and_title(date, category_id, title.clone()).execute(db_session).await?;
346347
348+
// paged finders over partition key + clustering keys
349+
let (paged_posts_iter, paging_state) = Post::find_by_date_and_category_id_paged(date, category_id)
350+
.page_size(10)
351+
.execute(db_session)
352+
.await?;
353+
let paged_posts = paged_posts_iter.collect::<Result<Vec<Post>, CharybdisError>>()?;
354+
355+
if let PagingStateResponse::HasMorePages { state } = paging_state {
356+
let (next_page_iter, next_state) = Post::find_by_date_and_category_id_paged(date, category_id)
357+
.paging_state(state)
358+
.page_size(10)
359+
.execute(db_session)
360+
.await?;
361+
let _next_posts = next_page_iter.collect::<Result<Vec<Post>, CharybdisError>>()?;
362+
assert!(matches!(next_state, PagingStateResponse::NoMorePages));
363+
}
364+
347365
// find by local secondary index
348366
let posts: CharybdisModelStream<Post> = Post::find_by_date_and_title(date, title.clone()).execute(db_session).await?;
349367
let post: Post = Post::find_first_by_date_and_title(date, title.clone()).execute(db_session).await?;

charybdis/tests/integrations/query.rs

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,3 +163,77 @@ async fn model_paged() {
163163
.await
164164
.expect("Failed to delete posts");
165165
}
166+
167+
#[tokio::test]
168+
async fn model_multi_field_paged() {
169+
let db_session = db_session().await;
170+
let category_id = uuid::Uuid::new_v4();
171+
let author_id = uuid::Uuid::new_v4();
172+
let repeated_order_idx = 42;
173+
174+
let posts_to_insert = (0..5)
175+
.map(|i| Post {
176+
category_id,
177+
order_idx: repeated_order_idx,
178+
title: format!("Paged Post {i}"),
179+
content: format!("Paged content {i}"),
180+
author_id,
181+
})
182+
.collect::<Vec<Post>>();
183+
184+
Post::batch()
185+
.chunked_insert(&db_session, &posts_to_insert, 100)
186+
.await
187+
.expect("Failed to insert paged posts");
188+
189+
let (first_page_iter, paging_state_response) = Post::find_by_category_id_and_order_idx_paged(category_id, repeated_order_idx)
190+
.page_size(2)
191+
.execute(&db_session)
192+
.await
193+
.expect("Failed to fetch first page of posts");
194+
195+
let first_page = first_page_iter
196+
.collect::<Result<Vec<Post>, CharybdisError>>()
197+
.expect("Failed to collect first paged posts");
198+
199+
assert_eq!(first_page.len(), 2);
200+
assert!(first_page.iter().all(|post| post.order_idx == repeated_order_idx));
201+
assert!(
202+
matches!(paging_state_response, PagingStateResponse::HasMorePages { .. }),
203+
"Expected paged query to have additional pages"
204+
);
205+
206+
let mut collected_posts = first_page.clone();
207+
208+
if let PagingStateResponse::HasMorePages { state } = paging_state_response {
209+
let (next_page_iter, next_paging_state_response) =
210+
Post::find_by_category_id_and_order_idx_paged(category_id, repeated_order_idx)
211+
.page_size(10)
212+
.paging_state(state)
213+
.execute(&db_session)
214+
.await
215+
.expect("Failed to fetch second page of posts");
216+
217+
let next_page = next_page_iter
218+
.collect::<Result<Vec<Post>, CharybdisError>>()
219+
.expect("Failed to collect second paged posts");
220+
221+
assert_eq!(next_page.len(), 3);
222+
assert!(next_page.iter().all(|post| post.order_idx == repeated_order_idx));
223+
assert!(
224+
matches!(next_paging_state_response, PagingStateResponse::NoMorePages),
225+
"Expected paged query to finish after the second call"
226+
);
227+
228+
collected_posts.extend(next_page);
229+
} else {
230+
panic!("Expected additional pages for multi-field paged query");
231+
}
232+
233+
assert_eq!(collected_posts.len(), posts_to_insert.len());
234+
235+
Post::delete_batch()
236+
.chunked_delete(&db_session, &posts_to_insert, 100)
237+
.await
238+
.expect("Failed to delete paged posts");
239+
}

examples/actix-web/reddit-api/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ tokio = { version = "1.42.0", features = ["rt-multi-thread"] }
88
serde = { version = "1.0.204", features = ["derive"] }
99
serde_json = "1.0.120"
1010
actix-web = { version = "4.9.0", features = ["cookies"] }
11-
charybdis = { version = "1.0.4", features = ["migrate"], path = "../../../charybdis" }
11+
charybdis = { version = "1.1.0", features = ["migrate"], path = "../../../charybdis" }
1212
log = "0.4.20"
1313
scylla = { version = "1.4" }
1414
chrono = "0.4.39"

0 commit comments

Comments
 (0)