Expand description
Dynamic support for any engine
§Examples
use serde::{Serialize, Deserialize};
use serde_json::json;
use std::borrow::Cow;
use surrealdb::sql;
use surrealdb::engine::any::connect;
use surrealdb::opt::auth::Root;
#[derive(Serialize, Deserialize)]
struct Name {
first: Cow<'static, str>,
last: Cow<'static, str>,
}
#[derive(Serialize, Deserialize)]
struct Person {
title: Cow<'static, str>,
name: Name,
marketing: bool,
}
#[tokio::main]
async fn main() -> surrealdb::Result<()> {
let db = connect("ws://localhost:8000").await?;
// Signin as a namespace, database, or root user
db.signin(Root {
username: "root",
password: "root",
}).await?;
// Select a specific namespace / database
db.use_ns("namespace").use_db("database").await?;
// Create a new person with a random ID
let created: Vec<Person> = db.create("person")
.content(Person {
title: "Founder & CEO".into(),
name: Name {
first: "Tobie".into(),
last: "Morgan Hitchcock".into(),
},
marketing: true,
})
.await?;
// Create a new person with a specific ID
let created: Option<Person> = db.create(("person", "jaime"))
.content(Person {
title: "Founder & COO".into(),
name: Name {
first: "Jaime".into(),
last: "Morgan Hitchcock".into(),
},
marketing: false,
})
.await?;
// Update a person record with a specific ID
let updated: Option<Person> = db.update(("person", "jaime"))
.merge(json!({"marketing": true}))
.await?;
// Select all people records
let people: Vec<Person> = db.select("person").await?;
// Perform a custom advanced query
let sql = r#"
SELECT marketing, count()
FROM type::table($table)
GROUP BY marketing
"#;
let groups = db.query(sql)
.bind(("table", "person"))
.await?;
Ok(())
}
Structs§
- Any
- A dynamic connection that supports any engine and allows you to pick at runtime
Traits§
- Into
Endpoint - A trait for converting inputs to a server address object
Functions§
- connect
- Connects to a local, remote or embedded database