1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
#[macro_export] macro_rules! query_deserialize ( ($v:expr, ($($field:ident:$type:ty),+)) => { $v.iter().map(|r| { let ($($field,)+) = r; ($(icbiadb::deserialize_object::<$type>($field),)+) }).collect::<Vec<_>>() }; ); #[macro_export] macro_rules! if_not_exists_create { ($db:expr, $name:literal, ($($key:ident:$type:ty $([$($opt:ident) +])?),+)) => { if !$db.exists($name) { let mut table = $db.new_table($name); table $( .add_field::<$type>(stringify!($key)) $( $( .option(stringify!($opt), true) )+ )? )+; $db.create(table); } }; } #[macro_export] macro_rules! query { ($db:expr, $name:literal, select $($field:ident),+;) => {{ let mut query = $db.query($name); query.records().iter() .map(|record| { let ($($field,)+) = ($( record.get(stringify!($field).as_bytes()).unwrap(), )+); ($($field,)+) }) .collect::<Vec<_>>() }}; ($db:expr, $name:literal, select $($field:ident),+;filter $f:block) => {{ let mut query = $db.query($name); let lam_filter = |$($field:&icbiadb::types::bv::BvObject),+| $f; query.records().iter() .filter_map(|record| { let ($($field,)+) = ($( record.get(stringify!($field).as_bytes()).unwrap(), )+); if lam_filter($($field.into(),)+) { return Some(($($field,)+)) } None }) .collect::<Vec<_>>() }}; ($db:expr, $name:literal, $(insert ($($key:ident=$val:expr),+)),+) => {{ $( let row = vec![$((stringify!($key).as_bytes().to_vec(), icbiadb::serialize_object(&$val))),+].iter().cloned() .collect::<std::collections::HashMap<_, _>>(); $db.insert_row($name, icbiadb::database::table::types::TableRow::from_hashmap(row)).unwrap(); )+ }}; ($db:expr, $name:literal, insert_many $v:expr) => { $db.insert_many($name, $v).unwrap(); }; }