use edn_derive::Serialize;
use transistor::client::Crux;
use transistor::types::error::CruxError;
use transistor::types::Actions;
use transistor::types::{query::Query, CruxId};
async fn query() -> Result<(), CruxError> {
let crux = Database {
crux__db___id: CruxId::new("crux"),
name: "Crux Datalog".to_string(),
is_sql: false,
};
let psql = Database {
crux__db___id: CruxId::new("postgres"),
name: "Postgres".to_string(),
is_sql: true,
};
let mysql = Database {
crux__db___id: CruxId::new("mysql"),
name: "MySQL".to_string(),
is_sql: true,
};
let client = Crux::new("localhost", "3000").http_client();
let actions = Actions::new()
.append_put(crux)
.append_put(psql)
.append_put(mysql);
let _ = client.tx_log(actions).await.unwrap();
let query_is_sql = Query::find(vec!["?p1", "?n"])
.unwrap()
.where_clause(vec!["?p1 :name ?n", "?p1 :is-sql true"])
.unwrap()
.build();
let is_sql = client.query(query_is_sql.unwrap()).await.unwrap();
let query_is_no_sql = Query::find(vec!["?p1", "?n", "?s"])
.unwrap()
.where_clause(vec!["?p1 :name ?n", "?p1 :is-sql ?s", "?p1 :is-sql false"])
.unwrap()
.with_full_results()
.build()
.unwrap();
let is_no_sql = client.query(query_is_no_sql).await.unwrap();
Ok(())
}
#[tokio::main]
async fn main() {
let _ = query().await.unwrap();
}
#[tokio::test]
async fn test_query() {
let _ = query().await.unwrap();
}
#[derive(Debug, Clone, Serialize)]
#[allow(non_snake_case)]
pub struct Database {
crux__db___id: CruxId,
name: String,
is_sql: bool,
}