SurrealDB create INSERT SELECT



examples/surrealdb/insert-select/Cargo.toml
[package]
name = "in-docker-demo"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
surrealdb = "2.0"
serde = { version = "1.0", features = ["derive"] }
tokio = { version = "1.35", features = ["macros", "rt-multi-thread"] }

examples/surrealdb/insert-select/src/main.rs
use serde::{Deserialize, Serialize};
use surrealdb::engine::remote::ws::Ws;
use surrealdb::opt::auth::Root;
use surrealdb::sql::Thing;
use surrealdb::Surreal;

#[derive(Debug, Serialize, Deserialize)]
struct Message {
    text: String,
}

#[derive(Debug, Deserialize)]
struct Record {
    #[allow(dead_code)]
    id: Thing,
}

#[tokio::main]
async fn main() -> surrealdb::Result<()> {
    let host = "127.0.0.1";
    let port = "8000";
    let dsn = format!("{host}:{port}");
    let db = Surreal::new::<Ws>(dsn).await?;

    db.signin(Root {
        username: "root",
        password: "root",
    })
    .await?;

    db.use_ns("demo").use_db("demo-1").await?;

    let args = std::env::args().collect::<Vec<String>>();
    if args.len() == 2 {
        // Create a new message with a random id
        let created: Option<Record> = db
            .create("messages")
            .content(Message {
                text: args[1].to_owned(),
            })
            .await?;
        dbg!(created);
    } else {
        // Select all the messages records
        let mut response = db.query("SELECT * from messages").await?;
        let messages: Vec<Message> = response.take(0)?;
        for message in &messages {
            println!("{}", message.text);
        }
    }

    Ok(())
}

$ cargo run -q "Hello World"
[src/main.rs:34:9] created = [
    Record {
        id: Thing {
            tb: "messages",
            id: String(
                "85d6tb5du6fsxp31wtnj",
            ),
        },
    },
]

$ cargo run -q
Hello World

$ cargo run -q "Other message"
[src/main.rs:34:9] created = [
    Record {
        id: Thing {
            tb: "messages",
            id: String(
                "z17l4ylmkbyfj05iozqs",
            ),
        },
    },
]

$ cargo run -q
Hello World
Other message