Rust Compile Time ORM robustness,async, pure Rust Dynamic SQL
APACHE-2.0 License
Bot releases are hidden (Show)
Published by zhuxiujia over 1 year ago
v4.0.59
decimal
depPublished by zhuxiujia over 1 year ago
v4.0.58
Published by zhuxiujia over 1 year ago
v4.0.57
Published by zhuxiujia over 1 year ago
v4.0.56
Published by zhuxiujia over 1 year ago
v4.0.55
field_name!
macro and field_key!
macrouse std::collections::{BTreeMap, HashMap};
use rbatis::{field_key, field_name, make_table, make_table_field_map, make_table_field_map_btree, make_table_field_vec};
#[derive(Clone, Debug,Eq,PartialEq,Default)]
pub struct Base {
pub pc_banner_img: Option<String>,
pub h5_banner_img: Option<String>,
}
#[derive(Clone, Debug,Eq,PartialEq,Default)]
pub struct BizActivity {
pub base: Base,
pub id: Option<String>,
}
#[test]
fn test_make_table_field_vec() {
let t= BizActivity{
base: Base { pc_banner_img: Some("1".to_string()), h5_banner_img: None },
id: Some("id".to_string()),
};
let arr = vec![t];
let c = make_table_field_vec!(&arr,id);
assert_eq!(c,vec!["id".to_string()]);
println!("{:?}",c);
}
#[test]
fn test_make_table_field_vec_2() {
let t= BizActivity{
base: Base { pc_banner_img: Some("1".to_string()), h5_banner_img: None },
id: None,
};
let arr = vec![t];
let c = make_table_field_vec!(&arr,base.pc_banner_img);
assert_eq!(c,vec!["1".to_string()]);
println!("{:?}",c);
}
#[test]
fn test_make_table_field_map() {
let t= BizActivity{
base: Base { pc_banner_img: Some("1".to_string()), h5_banner_img: None },
id: Some("id".to_string()),
};
let arr = vec![t];
let c = make_table_field_map!(&arr,id);
assert_eq!(c,{
let mut m=HashMap::new();
m.insert("id".to_string(),BizActivity{
base: Base { pc_banner_img: Some("1".to_string()), h5_banner_img: None },
id: Some("id".to_string()),
});
m
});
println!("{:?}",c);
}
#[test]
fn test_make_table_field_map_2() {
let t= BizActivity{
base: Base { pc_banner_img: Some("1".to_string()), h5_banner_img: None },
id: Some("id".to_string()),
};
let arr = vec![t];
let c = make_table_field_map!(&arr,base.pc_banner_img);
assert_eq!(c,{
let mut m=HashMap::new();
m.insert("1".to_string(),BizActivity{
base: Base { pc_banner_img: Some("1".to_string()), h5_banner_img: None },
id: Some("id".to_string()),
});
m
});
println!("{:?}",c);
}
#[test]
fn test_make_table_field_btree() {
let t= BizActivity{
base: Base { pc_banner_img: Some("1".to_string()), h5_banner_img: None },
id: Some("id".to_string()),
};
let arr = vec![t];
let c = make_table_field_map_btree!(&arr,id);
assert_eq!(c,{
let mut m=BTreeMap::new();
m.insert("id".to_string(),BizActivity{
base: Base { pc_banner_img: Some("1".to_string()), h5_banner_img: None },
id: Some("id".to_string()),
});
m
});
println!("{:?}",c);
}
#[test]
fn test_make_table_field_btree_2() {
let t= BizActivity{
base: Base { pc_banner_img: Some("1".to_string()), h5_banner_img: None },
id: Some("id".to_string()),
};
let arr = vec![t];
let c = make_table_field_map_btree!(&arr,base.pc_banner_img);
assert_eq!(c,{
let mut m=BTreeMap::new();
m.insert("1".to_string(),BizActivity{
base: Base { pc_banner_img: Some("1".to_string()), h5_banner_img: None },
id: Some("id".to_string()),
});
m
});
println!("{:?}",c);
}
#[test]
fn test_field_name(){
let name = field_name!(BizActivity.id);
assert_eq!(name,"id");
}
#[test]
fn test_field_name_2(){
let name = field_name!(BizActivity.base.pc_banner_img);
assert_eq!(name,"pc_banner_img");
}
#[test]
fn test_field_key(){
let name = field_key!(BizActivity::id);
assert_eq!(name,"id");
}
#[test]
fn test_field_key_2(){
let name = field_key!(BizActivity::base::pc_banner_img);
assert_eq!(name,"pc_banner_img");
}
Published by zhuxiujia over 1 year ago
v4.0.53
Published by zhuxiujia over 1 year ago
v4.0.51
fetch
method to query
Published by zhuxiujia over 1 year ago
v4.0.50
rbatis-codegen/codgen/syntax_tree
to rbatis-codegen/codgen/syntax_tree_pysql
Published by zhuxiujia almost 2 years ago
v4.0.49
Published by zhuxiujia almost 2 years ago
v4.0.48
impl_select_page
allow arg limit_sql
to Override the default limit statementPublished by zhuxiujia almost 2 years ago
v4.0.47
use rbatis::rbatis::Rbatis;
use rbatis::rbdc::datetime::FastDateTime;
use rbatis::table_sync::{SqliteTableSync, TableSync};
use rbdc_sqlite::driver::SqliteDriver;
use rbs::to_value;
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)]
pub struct RBUser {
pub id: i32,
pub name: Option<String>,
pub remark: Option<String>,
pub create_time: Option<FastDateTime>,
pub version: Option<i64>,
pub delete_flag: Option<i32>,
}
#[tokio::main]
pub async fn main() {
fast_log::init(fast_log::Config::new().console()).expect("rbatis init fail");
let rb = Rbatis::new();
rb.init(SqliteDriver {}, &format!("sqlite://target/sqlite.db"))
.unwrap();
let mut s = SqliteTableSync::default();
s.sql_id = " PRIMARY KEY AUTOINCREMENT NOT NULL ".to_string();
s.sync(rb.acquire().await.unwrap(), to_value!(RBUser {
id: 0,
name: Some("".to_string()),
remark: Some("".to_string()),
create_time: Some(FastDateTime::utc()),
version: Some(1),
delete_flag: Some(1),
}), "rb_user")
.await
.unwrap();
}
Published by zhuxiujia almost 2 years ago
v4.0.46
sql()
for example
use rbatis::sql::IntoSql;
impl_select!(BizActivity{select_by_method(ids:&[&str],logic:HashMap<&str,Value>) -> Option => "`where ${logic.sql()} and id in ${ids.sql()} limit 1`"});
//use
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct BizActivity {
pub id: Option<String>,
pub name: Option<String>,
pub pc_link: Option<String>,
pub h5_link: Option<String>,
pub pc_banner_img: Option<String>,
pub h5_banner_img: Option<String>,
pub sort: Option<String>,
pub status: Option<i32>,
pub remark: Option<String>,
pub create_time: Option<FastDateTime>,
pub version: Option<i64>,
pub delete_flag: Option<i32>,
}
#[tokio::main]
pub async fn main() {
fast_log::init( fast_log::Config::new() .console() .level(log::LevelFilter::Debug) ) .expect("rbatis init fail");
let mut rb = init_db().await;
let mut logic = HashMap::new();
logic.insert("and id = ", Value::I32(1));
logic.insert("and id != ", Value::I32(2));
let data = BizActivity::select_by_method(&mut rb, &["1", "2"], logic).await;
}
2022-12-24 00:26:03.7494548 INFO rbatis::plugin::log - [rbatis] [448884328362020865] Fetch ==> select * from biz_activity where id in ('1','2') and id != 2 and id = 1 limit 1
Published by zhuxiujia almost 2 years ago
v4.0.44
Published by zhuxiujia almost 2 years ago
v4.0.43
pub struct LogicDeletePlugin {}
impl SqlIntercept for LogicDeletePlugin {
fn do_intercept(
&self,
_rb: &Rbatis,
sql: &mut String,
_args: &mut Vec<Value>,
_is_prepared_sql: bool,
) -> Result<(), Error> {
println!("[LogicDeletePlugin] sql=> {}", sql);
Ok(())
}
}
#[tokio::main]
pub async fn main() {
let rb = Rbatis::new();
rb.init(
rbdc_sqlite::driver::SqliteDriver {},
"sqlite://target/sqlite.db",
)
.unwrap();
// Add dynamically,don't need mut
rb.sql_intercepts.push(Box::new(LogicDeletePlugin {}));
}
Published by zhuxiujia almost 2 years ago
v4.0.42
delete_in_column
select_in_column
Published by zhuxiujia almost 2 years ago
v4.0.41
Published by zhuxiujia almost 2 years ago
v4.0.40
Published by zhuxiujia about 2 years ago
v4.0.39
Published by zhuxiujia about 2 years ago
v4.0.37
Published by zhuxiujia about 2 years ago
v4.0.36