96 lines
2.7 KiB
Rust
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)
|
|
}
|