| Crates.io | surrealex |
| lib.rs | surrealex |
| version | 0.3.0 |
| created_at | 2025-07-06 08:50:11.722346+00 |
| updated_at | 2025-09-11 10:07:50.305342+00 |
| description | Dead simple SurrealDB query generator |
| homepage | |
| repository | https://github.com/MordechaiHadad/surrealex |
| max_upload_size | |
| id | 1740003 |
| size | 27,879 |
Dead simple SurrealDB query generator.
A Rust library for building SurrealQL queries with a fluent, type-safe API.
QueryBuilderCondition enumSELECT, FROM, WHERE, FETCH, ORDER BY, LIMIT, and STARTAdd to your Cargo.toml:
[dependencies]
surrealex = "0.1.0"
Or from Git:
[dependencies]
surrealex = { git = "https://github.com/MordechaiHadad/surrealex" }
Run:
cargo build
Basic example:
use surrealex::{QueryBuilder, Condition};
let query = QueryBuilder::new()
.select("id, name")
.from("user")
.add_where("age > 18")
.order_by("age DESC")
.limit(10)
.build()
.unwrap();
assert_eq!(query,
"SELECT id, name FROM user WHERE age > 18 ORDER BY age DESC LIMIT 10"
);
Complex conditions:
let cond = Condition::And(vec![
Condition::Simple("age > 18".into()),
Condition::Or(vec![
Condition::Simple("status = 'active'".into()),
Condition::Simple("status = 'pending'".into()),
]),
]);
let query = QueryBuilder::new()
.from("user")
.add_condition(cond)
.build()
.unwrap();
assert_eq!(query,
"SELECT * FROM user WHERE (age > 18 AND (status = 'active' OR status = 'pending'))"
);
See src/lib.rs for full documentation.
Perform two-step graph expansions with explicit directions and optional alias using graph_traverse:
use surrealex::{QueryBuilder, Direction, GraphExpandParams};
let sql = QueryBuilder::new()
.from("user")
.graph_traverse(GraphExpandParams {
from: (Direction::Out, "friends".into()),
to: (Direction::In, "posts".into()),
alias: Some("friend_posts".into()),
})
.build()
.unwrap();
assert_eq!(sql,
"SELECT * FROM user ->friends->posts.* AS friend_posts"
);