Coverage for xerini/enums.py: 100%
35 statements
« prev ^ index » next coverage.py v7.9.2, created at 2025-07-20 19:54 +0000
« prev ^ index » next coverage.py v7.9.2, created at 2025-07-20 19:54 +0000
1"""
2Defines statement types and table writing types
3"""
5from typing import Optional
6from enum import StrEnum, auto
7from sql_metadata import QueryType
10class StatementType(StrEnum):
11 """Type of Statements we will deal with"""
13 MOVEMENT = auto()
14 UPDATE = auto()
15 VIEW = auto()
16 IGNORE_ME = auto()
18 @classmethod
19 def from_query_type(cls, smd_qt: Optional[QueryType] = None):
20 """Maps QueryTypes to StatementTypes"""
21 ans = cls.IGNORE_ME
22 if smd_qt in {QueryType.INSERT, QueryType.CREATE}:
23 ans = cls.MOVEMENT
24 elif smd_qt in {
25 QueryType.UPDATE,
26 QueryType.DELETE,
27 QueryType.ALTER,
28 QueryType.DROP,
29 QueryType.TRUNCATE,
30 }:
31 ans = cls.UPDATE
32 elif smd_qt == QueryType.SELECT:
33 ans = cls.VIEW
34 else:
35 pass
36 return ans
39class TableWriteType(StrEnum):
40 """Type of writing being done by a statement"""
42 UPDATING = auto()
43 REBUILDING = auto()
44 DELETING = auto()
45 NO_WRITING = auto()
47 @classmethod
48 def from_statement_query(
49 cls, stmt_tp: StatementType, qry_tp: Optional[QueryType] = None
50 ):
51 """Maps (StatementType, QueryType) to TableWriteType"""
52 ans = TableWriteType.NO_WRITING
53 if stmt_tp in {StatementType.UPDATE, StatementType.MOVEMENT} and qry_tp in {
54 QueryType.INSERT,
55 QueryType.UPDATE,
56 QueryType.ALTER,
57 }:
58 ans = TableWriteType.UPDATING
59 elif qry_tp in {QueryType.CREATE}:
60 ans = TableWriteType.REBUILDING
61 elif qry_tp in {QueryType.DROP, QueryType.TRUNCATE, QueryType.DELETE}:
62 ans = TableWriteType.DELETING
63 else:
64 pass
65 return ans