| 1645 | } |
| 1646 | |
| 1647 | pub fn worst_case_scaling_factor(&self) -> f64 { |
| 1648 | let mut factor = 1.0; |
| 1649 | |
| 1650 | if self.literal_equality { |
| 1651 | factor *= 0.1; |
| 1652 | } |
| 1653 | |
| 1654 | if self.is_null { |
| 1655 | factor *= 0.1; |
| 1656 | } |
| 1657 | |
| 1658 | if self.literal_inequality >= 2 { |
| 1659 | factor *= 0.25; |
| 1660 | } else if self.literal_inequality == 1 { |
| 1661 | factor *= 0.33; |
| 1662 | } |
| 1663 | |
| 1664 | // catch various negated filters, treat them pessimistically |
| 1665 | if !(self.literal_equality || self.is_null || self.literal_inequality > 0) |
| 1666 | && self.any_filter |
| 1667 | { |
| 1668 | factor *= 0.9; |
| 1669 | } |
| 1670 | |
| 1671 | factor |
| 1672 | } |
| 1673 | } |
| 1674 | |
| 1675 | #[derive( |