fn after_hook()

in src/plugin/plugin_pdo.rs [206:231]


fn after_hook(
    _: Option<i64>, span: Box<dyn Any>, execute_data: &mut ExecuteData, return_value: &mut ZVal,
) -> crate::Result<()> {
    let mut span = span.downcast::<Span>().unwrap();

    if log_exception(&mut *span).is_some() {
        return Ok(());
    }

    if let Some(b) = return_value.as_bool() {
        if !b {
            return after_hook_when_false(get_this_mut(execute_data)?, &mut span);
        }
    } else if let Some(obj) = return_value.as_mut_z_obj() {
        let cls = obj.get_class();
        let pdo_cls = ClassEntry::from_globals("PDOStatement").unwrap();
        if cls.is_instance_of(pdo_cls) {
            return after_hook_when_pdo_statement(get_this_mut(execute_data)?, obj);
        } else {
            let cls = cls.get_name().to_str()?;
            debug!(cls, "not a subclass of PDOStatement");
        }
    }

    Ok(())
}