Skip to content

Commit 679b1fe

Browse files
committed
add demo and silence warnings
1 parent f6f81e4 commit 679b1fe

File tree

3 files changed

+100
-2
lines changed

3 files changed

+100
-2
lines changed

optd-mvp/src/entities/prelude.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.0
22
3+
#![allow(unused_imports)]
4+
35
pub use super::cascades_group::Entity as CascadesGroup;
46
pub use super::logical_children::Entity as LogicalChildren;
57
pub use super::logical_expression::Entity as LogicalExpression;

optd-mvp/src/main.rs

Lines changed: 96 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,97 @@
1-
fn main() {
2-
println!("Hello, world!");
1+
use sea_orm::*;
2+
use sea_orm_migration::prelude::*;
3+
use serde_json::json;
4+
5+
mod entities;
6+
mod migrator;
7+
8+
use entities::{prelude::*, *};
9+
use optd_mvp::DATABASE_URL;
10+
11+
#[tokio::main]
12+
async fn main() {
13+
basic_demo().await;
14+
}
15+
16+
async fn basic_demo() {
17+
let db = Database::connect(DATABASE_URL).await.unwrap();
18+
19+
// Create a new `CascadesGroup`.
20+
let group = cascades_group::ActiveModel {
21+
winner: ActiveValue::Set(None),
22+
is_optimized: ActiveValue::Set(false),
23+
..Default::default()
24+
}
25+
.save(&db)
26+
.await
27+
.unwrap();
28+
29+
// Create a new logical expression.
30+
let l_expr = logical_expression::ActiveModel {
31+
group_id: group.id.clone(),
32+
fingerprint: ActiveValue::Set(42), // Example fingerprint
33+
kind: ActiveValue::Set(1), // Example variant tag
34+
data: ActiveValue::Set(json!({ // Example operator
35+
"type": "Scan",
36+
"table": "lineitem",
37+
"predicate": "l_quantity < 10",
38+
})),
39+
..Default::default()
40+
}
41+
.save(&db)
42+
.await
43+
.unwrap();
44+
45+
// Create a link between the group and the logical expression in the junction table.
46+
let _link = logical_children::ActiveModel {
47+
group_id: group.id.clone(),
48+
logical_expression_id: l_expr.id.clone(),
49+
}
50+
.insert(&db)
51+
.await
52+
.unwrap();
53+
54+
// Basic lookup test on each table.
55+
{
56+
let groups: Vec<cascades_group::Model> = CascadesGroup::find().all(&db).await.unwrap();
57+
assert_eq!(groups.len(), 1);
58+
59+
let l_expressions: Vec<logical_expression::Model> =
60+
LogicalExpression::find().all(&db).await.unwrap();
61+
assert_eq!(l_expressions.len(), 1);
62+
}
63+
64+
// Retrieve all logical expressions that belong to this group with lazy loading.
65+
{
66+
let group = CascadesGroup::find_by_id(*group.id.try_as_ref().unwrap())
67+
.one(&db)
68+
.await
69+
.unwrap()
70+
.unwrap();
71+
72+
let group_expressions: Vec<logical_expression::Model> = group
73+
.find_related(LogicalExpression)
74+
.all(&db)
75+
.await
76+
.unwrap();
77+
assert_eq!(group_expressions.len(), 1);
78+
}
79+
80+
// Retrieve all logical expressions that belong to this group with eager loading.
81+
{
82+
let group_with_expressions: Vec<(cascades_group::Model, Vec<logical_expression::Model>)> =
83+
CascadesGroup::find()
84+
.find_with_related(LogicalExpression)
85+
.all(&db)
86+
.await
87+
.unwrap();
88+
assert_eq!(group_with_expressions.len(), 1);
89+
assert_eq!(group_with_expressions[0].1.len(), 1);
90+
}
91+
92+
// Clean up everything. Since everything is cascading, we only need to manually delete the group
93+
// and then SeaORM will take care of the expression and the junction.
94+
group.delete(&db).await.unwrap();
95+
96+
println!("Demo Finished!");
397
}

optd-mvp/src/migrator/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ use sea_orm_migration::prelude::*;
22

33
mod memo;
44

5+
/// This struct is just a helper to execute migrations easily.
6+
#[allow(dead_code)]
57
pub struct Migrator;
68

79
#[async_trait::async_trait]

0 commit comments

Comments
 (0)