rbatis

Rust Compile Time ORM robustness,async, pure Rust Dynamic SQL

APACHE-2.0 License

Downloads
1.1M
Stars
2.3K
Committers
25

Bot releases are hidden (Show)

rbatis - v4.0.59

Published by zhuxiujia over 1 year ago

v4.0.59

  • remove decimal dep
rbatis - v4.0.58

Published by zhuxiujia over 1 year ago

v4.0.58

  • fix macro for VSCode Intelligent prompt
rbatis - v4.0.57

Published by zhuxiujia over 1 year ago

v4.0.57

  • htmlsql_select_page only define one method
rbatis - v4.0.56

Published by zhuxiujia over 1 year ago

v4.0.56

  • remove some VSCode code warning
rbatis - v4.0.55

Published by zhuxiujia over 1 year ago

v4.0.55

  • support deep path field_name!macro and field_key! macro
    for example:
use 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");
    }
rbatis - v4.0.53

Published by zhuxiujia over 1 year ago

v4.0.53

  • edit(debug/release) log print
rbatis - v4.0.51

Published by zhuxiujia over 1 year ago

v4.0.51

  • rename fetch method to query
  • edit log print format
rbatis - v4.0.50

Published by zhuxiujia over 1 year ago

v4.0.50

  • add some doc
  • rename package name rbatis-codegen/codgen/syntax_tree to rbatis-codegen/codgen/syntax_tree_pysql
  • rename some trait RbatisRef's get_rbatis() rename to rbatis_ref()
rbatis - v4.0.49

Published by zhuxiujia almost 2 years ago

v4.0.49

  • fix .sql() method
rbatis - v4.0.48

Published by zhuxiujia almost 2 years ago

v4.0.48

  • impl_select_page allow arg limit_sql to Override the default limit statement
rbatis - v4.0.47

Published by zhuxiujia almost 2 years ago

v4.0.47

  • edit TableSync plugin(support PRIMARY KEY AUTOINCREMENT NOT NULL)
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();
}

rbatis - v4.0.46

Published by zhuxiujia almost 2 years ago

v4.0.46

  • support new method 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
rbatis - v4.0.44

Published by zhuxiujia almost 2 years ago

v4.0.44

  • fix #326
rbatis - v4.0.43

Published by zhuxiujia almost 2 years ago

v4.0.43

  • support Add and delete interceptors dynamically

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 {}));
}
rbatis - v4.0.42

Published by zhuxiujia almost 2 years ago

v4.0.42

rbatis - v4.0.41

Published by zhuxiujia almost 2 years ago

v4.0.41

  • fix update_by_column method
rbatis - v4.0.40

Published by zhuxiujia almost 2 years ago

v4.0.40

  • support macro(impl_select,impl_delete...) custom table_name
  • support html_sql/py_sql support generic type
rbatis - v4.0.39

Published by zhuxiujia about 2 years ago

v4.0.39

  • Automatically determine whether it is currently in debug_mode. and show build detail if debug_mode is open!
  • on debug_mode use log::debug!() print database rows
  • if --release , debug_mode auto disable
rbatis - v4.0.37

Published by zhuxiujia about 2 years ago

v4.0.37

  • Fix compilation warnings and compilation failures caused by unspecified Result
rbatis - v4.0.36

Published by zhuxiujia about 2 years ago

v4.0.36

  • fix fetch_decode methods with #250