use std::time::Duration;
pub(crate) const SLOW_QUERY_THRESHOLD: Duration = Duration::from_secs(1);
macro_rules! log_execution {
( $query:expr, $block:expr ) => {{
let query_string = $query.query_string();
let timer = std::time::Instant::now();
let result = $block;
let elapsed = timer.elapsed();
if elapsed >= crate::logging::SLOW_QUERY_THRESHOLD {
log::warn!(
target: "sqlx::query",
"{} ..., elapsed: {:.3?}\n\n{}\n",
crate::logging::parse_query_summary(query_string),
elapsed,
sqlformat::format(
query_string,
&sqlformat::QueryParams::None,
sqlformat::FormatOptions::default()
)
);
} else {
log::debug!(
target: "sqlx::query",
"{} ..., elapsed: {:.3?}\n\n{}\n",
crate::logging::parse_query_summary(query_string),
elapsed,
sqlformat::format(
query_string,
&sqlformat::QueryParams::None,
sqlformat::FormatOptions::default()
)
);
}
result
}};
}
pub(crate) fn parse_query_summary(query: &str) -> String {
query
.split_whitespace()
.take(3)
.collect::<Vec<&str>>()
.join(" ")
}