zero4rs 2.0.0

zero4rs is a powerful, pragmatic, and extremely fast web framework for Rust
Documentation
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)
}