Inventur/inventur_db/src/jrtables.rs
2024-08-28 19:49:12 +02:00

96 lines
2.7 KiB
Rust

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<String>, field_types: Vec<crate::FIELDTYPE>, uid: i32) -> Result<i32, diesel::result::Error> {
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::<i32>(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<usize, diesel::result::Error> {
diesel::update(jrtables.find(tblid))
.set(name.eq(new_name))
.execute(conn)
}
pub fn delete_jrtable(conn: &mut MysqlConnection, tblid: i32) -> Result<usize, diesel::result::Error> {
diesel::delete(jrtables.find(tblid))
.execute(conn)
}
pub fn get_all_tables(conn: &mut MysqlConnection) -> Result<Vec<Jrtable>, diesel::result::Error> {
jrtables
.select(Jrtable::as_select())
.load(conn)
}
pub fn get_tbl(conn: &mut MysqlConnection, tblid: i32) -> Result<Jrtable, diesel::result::Error> {
jrtables
.find(tblid)
.select(Jrtable::as_select())
.first(conn)
}
pub fn get_ncols(conn: &mut MysqlConnection, tblid: i32) -> Result<usize, diesel::result::Error> {
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<usize, diesel::result::Error> {
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<Vec<i32>, diesel::result::Error> {
jrtables
.filter(owner_id.eq(uid))
.select(id)
.load::<i32>(conn)
}
pub fn get_owner_id(conn: &mut MysqlConnection, tblid: i32) -> Result<i32, diesel::result::Error> {
jrtables
.find(tblid)
.select(owner_id)
.first::<i32>(conn)
}
pub fn get_tbl_by_name_uid(conn: &mut MysqlConnection, tblname: &String, uid: i32) -> Result<i32, diesel::result::Error> {
jrtables
.filter(owner_id.eq(uid))
.filter(name.eq(tblname))
.select(id)
.first::<i32>(conn)
}