use datafusion::physical_plan::{DisplayFormatType, ExecutionPlan};
use std::cell::Cell;
use std::fmt;
thread_local! {
static IS_INTERNAL_OPTIMIZER_CHECK: Cell<bool> = const { Cell::new(false) };
}
pub(crate) fn is_internal_optimizer_check() -> bool {
IS_INTERNAL_OPTIMIZER_CHECK.with(|c| c.get())
}
pub(crate) struct InternalOptimizerGuard(bool);
impl InternalOptimizerGuard {
pub fn new() -> Self {
let prev = IS_INTERNAL_OPTIMIZER_CHECK.with(|c| {
let prev = c.get();
c.set(true);
prev
});
Self(prev)
}
}
impl Drop for InternalOptimizerGuard {
fn drop(&mut self) {
IS_INTERNAL_OPTIMIZER_CHECK.with(|c| c.set(self.0));
}
}
pub(crate) struct DefaultDisplay<'a>(pub &'a dyn ExecutionPlan);
impl fmt::Display for DefaultDisplay<'_> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
self.0.fmt_as(DisplayFormatType::Default, f)
}
}