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(())
}