use diesel::prelude::*; use diesel::mysql::MysqlConnection; use crate::models; use crate::schema; use crate::jrcolumns; use models::{ Jrtable, NewJrtable }; use schema::jrtables::dsl::{ jrtables, id, name, owner_id }; pub fn create_jrtable(conn: &mut MysqlConnection, tblname: &String, field_names: Vec, field_types: Vec, uid: i32) -> Result { let jrtable = NewJrtable { name: tblname.to_string(), owner_id: uid }; let tbl = diesel::insert_into(crate::schema::jrtables::table) .values(&jrtable) .execute(conn); if tbl.is_err() { return Err(tbl.err().unwrap()); } let tblid = jrtables .order(id.desc()) .select(id) .first::(conn); if tblid.is_err() { return Err(tblid.err().unwrap()); } let tblid = tblid.unwrap(); let cols = jrcolumns::create_jrcolumns_empty_tbl(conn, tblid, field_names, field_types); if cols.is_err() { return Err(cols.err().unwrap()); } Ok(tblid) } pub fn rename_jrtable(conn: &mut MysqlConnection, tblid: i32, new_name: &str) -> Result { diesel::update(jrtables.find(tblid)) .set(name.eq(new_name)) .execute(conn) } pub fn delete_jrtable(conn: &mut MysqlConnection, tblid: i32) -> Result { diesel::delete(jrtables.find(tblid)) .execute(conn) } pub fn get_all_tables(conn: &mut MysqlConnection) -> Result, diesel::result::Error> { jrtables .select(Jrtable::as_select()) .load(conn) } pub fn get_tbl(conn: &mut MysqlConnection, tblid: i32) -> Result { jrtables .find(tblid) .select(Jrtable::as_select()) .first(conn) } pub fn get_ncols(conn: &mut MysqlConnection, tblid: i32) -> Result { use schema::jrcolumns::dsl::{ jrcolumns, jrtable_id }; jrcolumns .filter(jrtable_id.eq(tblid)) .execute(conn) } pub fn get_nrows(conn: &mut MysqlConnection, tblid: i32) -> Result { use schema::jrentries::dsl::{jrentries, jrtable_id}; jrentries .filter(jrtable_id.eq(tblid)) .execute(conn) } pub fn get_tblids_uid(conn: &mut MysqlConnection, uid: i32) -> Result, diesel::result::Error> { jrtables .filter(owner_id.eq(uid)) .select(id) .load::(conn) } pub fn get_owner_id(conn: &mut MysqlConnection, tblid: i32) -> Result { jrtables .find(tblid) .select(owner_id) .first::(conn) } pub fn get_tbl_by_name_uid(conn: &mut MysqlConnection, tblname: &String, uid: i32) -> Result { jrtables .filter(owner_id.eq(uid)) .filter(name.eq(tblname)) .select(id) .first::(conn) }