Coverage for packages/sql-smith/src/sql_smith/query_factory.py: 88%
26 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 typing import Any, Union
3from sql_smith.engine import BasicEngine
6class QueryFactory:
7 """Factory class for creating queries"""
9 def __init__(self, engine: "EngineInterface" = None):
10 if engine is None:
11 self._engine = BasicEngine()
12 else:
13 self._engine = engine
15 def select(self, *columns: Union[str, "StatementInterface"]) -> "SelectQuery":
16 """Create a SELECT query"""
17 query = self._engine.make_select()
18 if len(columns) == 0:
19 return query
21 return query.columns(*columns)
23 def select_distinct(
24 self, *columns: Union[str, "StatementInterface"]
25 ) -> "SelectQuery":
26 """Create a SELECT DISTINCT query"""
27 return self.select(*columns).distinct()
29 def insert(self, table: str, column_values: dict[str, Any] = None) -> "InsertQuery":
30 """Create an INSERT query"""
31 query = self._engine.make_insert().into(table)
32 if column_values:
33 query = query.map(column_values)
35 return query
37 def delete(self, table: str) -> "DeleteQuery":
38 """Create a DELETE query"""
39 return self._engine.make_delete().from_(table)
41 def update(self, table: str, value_set=None) -> "UpdateQuery":
42 """Create an UPDATE query"""
43 query = self._engine.make_update().table(table)
44 if value_set:
45 query.set(value_set)
47 return query