use crate::error::ParseError;
use crate::filter::builder::Filter;
use crate::record::Sqllog;
pub(crate) fn filter_by_exec_time<I>(
iter: I,
min_ms: f32,
) -> impl Iterator<Item = Result<Sqllog, ParseError>>
where
I: Iterator<Item = Result<Sqllog, ParseError>>,
{
iter.filter(move |item| match item {
Ok(sqllog) => sqllog.exectime >= min_ms,
Err(_) => false,
})
}
pub(crate) fn filter_by_sql_contains<'a, I>(
iter: I,
pattern: &str,
) -> impl Iterator<Item = Result<Sqllog, ParseError>> + 'a
where
I: Iterator<Item = Result<Sqllog, ParseError>> + 'a,
{
let pattern = pattern.to_string();
iter.filter(move |item| match item {
Ok(sqllog) => sqllog.sql.contains(&pattern),
Err(_) => false,
})
}
pub(crate) fn apply_filter<I>(
iter: I,
filter: Filter,
) -> impl Iterator<Item = Result<Sqllog, ParseError>>
where
I: Iterator<Item = Result<Sqllog, ParseError>>,
{
iter.filter(move |item| match item {
Ok(sqllog) => filter.matches(sqllog),
Err(_) => false,
})
}
pub(crate) fn apply_filter_keep_errors<I>(
iter: I,
filter: Filter,
) -> impl Iterator<Item = Result<Sqllog, ParseError>>
where
I: Iterator<Item = Result<Sqllog, ParseError>>,
{
iter.filter(move |item| match item {
Ok(sqllog) => filter.matches(sqllog),
Err(_) => true,
})
}