Coverage for packages/sql-smith/src/sql_smith/query/union_query.py: 40%
25 statements
« prev ^ index » next coverage.py v7.11.0, created at 2024-01-01 00:00 +0000
« prev ^ index » next coverage.py v7.11.0, created at 2024-01-01 00:00 +0000
1from sql_smith.capability import CanUnionMixin, HasOrderByMixin
2from sql_smith.functions import express
3from sql_smith.query import AbstractQuery
6class UnionQuery(CanUnionMixin, HasOrderByMixin, AbstractQuery):
7 """Implements a union query."""
9 def __init__(
10 self,
11 engine: "EngineInterface",
12 left: "StatementInterface",
13 right: "StatementInterface",
14 ):
15 super().__init__(engine)
16 self._order_by = []
17 self._all = False
18 self._left = left
19 self._right = right
21 def all(self, state: bool = True) -> "UnionQuery":
22 """Sets ALL."""
23 self._all = state
24 return self
26 def as_expression(self) -> "ExpressionInterface":
27 query = self.start_expression()
28 query = self.__apply_all(query)
29 query = self.__apply_right(query)
30 query = self._apply_order_by(query)
31 return query
33 def start_expression(self) -> "ExpressionInterface":
34 return express("{} UNION", self._left)
36 def __apply_all(self, query: "ExpressionInterface") -> "ExpressionInterface":
37 return query.append("ALL") if self._all else query
39 def __apply_right(self, query: "ExpressionInterface") -> "ExpressionInterface":
40 return query.append("{}", self._right)