Macro rbatis::impl_select

source ·
macro_rules! impl_select {
    ($table:ty{}) => { ... };
    ($table:ty{},$table_name:expr) => { ... };
    ($table:ty{$fn_name:ident $(< $($gkey:ident:$gtype:path $(,)?)* >)? ($($param_key:ident:$param_type:ty $(,)?)*) => $sql:expr}$(,$table_name:expr)?) => { ... };
    ($table:ty{$fn_name:ident $(< $($gkey:ident:$gtype:path $(,)?)* >)? ($($param_key:ident:$param_type:ty $(,)?)*) -> $container:tt => $sql:expr}$(,$table_name:expr)?) => { ... };
}
Expand description

PySql: gen sql => SELECT (column1,column2,column3,…) FROM table_name (column1,column2,column3,…) *** WHERE ***

example:

 use rbatis::{Error, RBatis};
 #[derive(serde::Serialize, serde::Deserialize)]
 pub struct MockTable{ pub id: Option<String> }
 /// default
rbatis::impl_select!(MockTable{});
rbatis::impl_select!(MockTable{select_all_by_id(id:&str,name:&str) => "where id = #{id} and name = #{name}"});
 /// container result
rbatis::impl_select!(MockTable{select_by_id(id:String) -> Option => "where id = #{id} limit 1"});
rbatis::impl_select!(MockTable{select_by_id2(id:String) -> Vec => "where id = #{id} limit 1"});

 //usage
 async fn test_select(rb:&RBatis) -> Result<(),Error>{
    let r = MockTable::select_by_column(rb,"id","1").await?;
    let r = MockTable::select_all_by_id(rb,"1","xxx").await?;
    let r:Option<MockTable> = MockTable::select_by_id(rb,"1".to_string()).await?;
    let r:Vec<MockTable> = MockTable::select_by_id2(rb,"1".to_string()).await?;
    Ok(())
 }