use serde::{Deserialize, Serialize};
use uuid::Uuid;
use clickhouse::sql::Identifier;
use clickhouse::{Client, Row, error::Result};
#[tokio::main]
async fn main() -> Result<()> {
let table_name = "chrs_session_id";
let session_id = Uuid::new_v4().to_string();
let client = Client::default()
.with_url("http://localhost:8123")
.with_setting("session_id", &session_id);
client
.query("CREATE TEMPORARY TABLE ? (i Int32)")
.bind(Identifier(table_name))
.execute()
.await?;
#[derive(Row, Serialize, Deserialize, Debug)]
struct MyRow {
i: i32,
}
let mut insert = client.insert::<MyRow>(table_name).await?;
insert.write(&MyRow { i: 42 }).await?;
insert.end().await?;
let data = client
.query("SELECT ?fields FROM ?")
.bind(Identifier(table_name))
.fetch_all::<MyRow>()
.await?;
println!("Temporary table data: {data:?}");
Ok(())
}