github rbatis/rbatis v4.3.5

latest releases: v4.5.22, v4.5.21, v4.5.20...
11 months ago

v4.3.5

  • edit Intercept trait, add before and after method
  • log plugin move to intercepts. move to impl Intercept for LogInterceptor
impl Intercept for LogInterceptor {
    fn before(
        &self,
        task_id: i64,
        _rb: &dyn Executor,
        sql: &mut String,
        args: &mut Vec<Value>,
    ) -> Result<(), Error> {
        if self.get_level_filter() == LevelFilter::Off {
            return Ok(());
        }
        let level = self.to_level().unwrap();
        //send sql/args
        let op;
        if sql.trim_start().starts_with("select") {
            op = "query";
        } else {
            op = "exec ";
        }
        log!(level,"[rbatis] [{}] {} => `{}` {}",task_id,op,&sql,RbsValueDisplay { inner: args });
        Ok(())
    }

    fn after(
        &self,
        task_id: i64,
        _rb: &dyn Executor,
        sql: &mut String,
        _args: &mut Vec<Value>,
        result: Result<ResultType<&mut ExecResult, &mut Vec<Value>>, &mut Error>,
    ) -> Result<(), Error> {
        if self.get_level_filter() == LevelFilter::Off {
            return Ok(());
        }
        let level = self.to_level().unwrap();
        //recv sql/args
        match result {
            Ok(result) => {
                let op;
                if sql.trim_start().starts_with("select") {
                    op = "query";
                } else {
                    op = "exec ";
                }
                match result {
                    ResultType::Exec(result) => {
                        log!(level,"[rbatis] [{}] {}  <= rows_affected={}",task_id, op, result);
                    }
                    ResultType::Query(data) => {
                        if is_debug_mode() {
                            log!(level,"[rbatis] [{}] {} <= len={},rows={}",
                                        task_id,
                                        op,
                                        data.len(),
                                        RbsValueDisplay { inner: data }
                                );
                        } else {
                            log!(level,"[rbatis] [{}] {} <= len={}", task_id, op, data.len());
                        }
                    }
                }
            }
            Err(e) => {
                log!(level,"[rbatis] [{}] exec  <= {}", task_id, e);
            }
        }
        Ok(())
    }
}
  • now RBatis struct is very clean
pub struct RBatis {
    // the connection pool
    pub pool: Arc<OnceLock<Pool>>,
    // intercept vec(default the intercepts[0] is a log interceptor)
    pub intercepts: Arc<SyncVec<Arc<dyn Intercept>>>,
}
  • Speed increases because interceptor logging optimizes the log printing process, speeding up every query and update operation by 200ns-300ns

Don't miss a new rbatis release

NewReleases is sending notifications on new releases.