tried glue but found it can ONLY exec and return single strings

main
Bel LaPointe 2025-02-28 15:12:49 -07:00
parent 5924d28b71
commit 8ce43b449d
3 changed files with 4127 additions and 7 deletions

4071
src/rust/Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -4,3 +4,5 @@ version = "0.1.0"
edition = "2024"
[dependencies]
futures = "0.3.31"
gluesql = { version = "0.16.3", features = ["gluesql_memory_storage"] }

View File

@ -1,14 +1,61 @@
pub fn add(left: u64, right: u64) -> u64 {
left + right
mod main {
use {
gluesql::{
gluesql_memory_storage::MemoryStorage,
prelude::Glue,
core::store::{GStore, GStoreMut},
core::ast::Statement,
}
};
pub fn run() {
let mut db = DB::new(Glue::new(MemoryStorage::default()));
db.init().expect("db init failed");
}
struct DB<T: GStore + GStoreMut> {
db: Glue<T>,
}
impl<T: GStore + GStoreMut> DB<T> {
fn new(db: Glue<T>) -> DB<T> {
DB{db: db}
}
fn init(self: &mut DB<T>) -> Result<(), String> {
self.exec("DROP TABLE IF EXISTS t")?;
self.exec("DROP TABLE IF EXISTS t2")?;
self.exec("CREATE TABLE t (id INTEGER PRIMARY KEY, k TEXT, v TEXT)")?;
self.exec("CREATE TABLE t2 (id INTEGER PRIMARY KEY, t_id INTEGER, FOREIGN KEY (t_id) REFERENCES t (id))")?;
Ok(())
}
fn exec(self: &mut DB<T>, q: &str) -> Result<(), String> {
futures::executor::block_on(async {
match self.db.execute(q).await {
Ok(_) => Ok(()),
Err(err) => Err(err.to_string())
}
})
}
fn insert(self: &mut DB<T>, q: &str) -> Result<(), String> {
futures::executor::block_on(async {
match self.db.execute(q).await {
Ok(_) => Ok(()),
Err(err) => Err(err.to_string())
}
})
}
}
}
#[cfg(test)]
mod tests {
use super::*;
use super::*;
#[test]
fn it_works() {
let result = add(2, 2);
assert_eq!(result, 4);
}
fn mvp() {
main::run();
}
}