Coverage for packages/sql-smith/src/sql_smith/query/abstract_query.py: 100%

14 statements  

« prev     ^ index     » next       coverage.py v7.11.0, created at 2024-01-01 00:00 +0000

1from abc import abstractmethod 

2 

3from sql_smith.interfaces import EngineInterface, QueryInterface 

4from sql_smith.query.query import Query 

5 

6 

7class AbstractQuery(QueryInterface): 

8 """Base class for queries.""" 

9 

10 def __init__(self, engine: "EngineInterface"): 

11 super().__init__() 

12 self._engine = engine 

13 

14 @abstractmethod 

15 def as_expression(self) -> "ExpressionInterface": 

16 raise NotImplementedError("Must override as_expression") 

17 

18 @abstractmethod 

19 def start_expression(self) -> "ExpressionInterface": 

20 raise NotImplementedError("Must override start_expression") 

21 

22 def compile(self) -> "Query": 

23 """Compiles the query and returns the Query object""" 

24 query = self.as_expression() 

25 return Query(query.sql(self._engine), query.params(self._engine)) 

26 

27 def sql(self, engine: "EngineInterface") -> str: 

28 return self.as_expression().sql(engine) 

29 

30 def params(self, engine: "EngineInterface") -> str: 

31 return self.as_expression().params(engine)