use bitflags::bitflags;
bitflags! {
#[derive(Copy, Clone, Debug)]
pub struct OptFlags: u32 {
const PROJECTION_PUSHDOWN = 1;
const PREDICATE_PUSHDOWN = 1 << 2;
const CLUSTER_WITH_COLUMNS = 1 << 3;
const TYPE_COERCION = 1 << 4;
const SIMPLIFY_EXPR = 1 << 5;
const TYPE_CHECK = 1 << 6;
const SLICE_PUSHDOWN = 1 << 7;
const COMM_SUBPLAN_ELIM = 1 << 8;
const COMM_SUBEXPR_ELIM = 1 << 9;
const GPU = 1 << 10;
const STREAMING = 1 << 11;
const EAGER = 1 << 12;
const ROW_ESTIMATE = 1 << 13;
const FAST_PROJECTION = 1 << 14;
const CHECK_ORDER_OBSERVE = 1 << 15;
const SORT_COLLAPSE = 1 << 16;
}
}
impl OptFlags {
pub fn schema_only() -> Self {
Self::TYPE_COERCION | Self::TYPE_CHECK
}
pub fn eager(&self) -> bool {
self.contains(OptFlags::EAGER)
}
pub fn cluster_with_columns(&self) -> bool {
self.contains(OptFlags::CLUSTER_WITH_COLUMNS)
}
pub fn predicate_pushdown(&self) -> bool {
self.contains(OptFlags::PREDICATE_PUSHDOWN)
}
pub fn projection_pushdown(&self) -> bool {
self.contains(OptFlags::PROJECTION_PUSHDOWN)
}
pub fn simplify_expr(&self) -> bool {
self.contains(OptFlags::SIMPLIFY_EXPR)
}
pub fn slice_pushdown(&self) -> bool {
self.contains(OptFlags::SLICE_PUSHDOWN)
}
pub fn streaming(&self) -> bool {
self.contains(OptFlags::STREAMING)
}
pub fn fast_projection(&self) -> bool {
self.contains(OptFlags::FAST_PROJECTION)
}
pub fn gpu(&self) -> bool {
self.contains(OptFlags::GPU)
}
}
impl Default for OptFlags {
fn default() -> Self {
Self::from_bits_truncate(u32::MAX) & !Self::STREAMING & !Self::EAGER & !Self::GPU
}
}
pub type AllowedOptimizations = OptFlags;