pub mod models;
pub use models::*;
use sqlx::Execute;
use sqlx::MySql;
use sqlx::Pool;
use sqlx::QueryBuilder;
use crate::core::error2::Error;
use crate::core::error2::Result;
const BIND_LIMIT: usize = 65535;
pub async fn save_region(record: &RegionCreator, pool: &Pool<MySql>) -> Result<u64> {
let insert_result =
sqlx::query(r#"INSERT INTO t_regions (f_region_name,f_parent_id) VALUES (?, ?)"#)
.bind(record.region_name.to_owned())
.bind(record.parent_id)
.execute(pool)
.await
.map_err(|e| Error::throw("保存失败", Some(e)))?;
Ok(insert_result.last_insert_id())
}
pub async fn save_region_bulk(records: Vec<RegionCreator>, pool: &Pool<MySql>) -> Result<bool> {
let mut query_builder: QueryBuilder<MySql> =
QueryBuilder::new("INSERT INTO t_regions (f_region_name,f_parent_id) ");
query_builder.push_values(records.iter().take(BIND_LIMIT / 2), |mut b, record| {
b.push_bind(record.region_name.to_owned())
.push_bind(record.parent_id);
});
let query = query_builder.build();
let _sql = query.sql();
if let Err(e) = query.execute(pool).await {
log::info!("批量保存失败: error={:?}", e);
return Ok(true);
}
Ok(true)
}