Coverage for xerini/enums.py: 100%

35 statements  

« 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""" 

4 

5from typing import Optional 

6from enum import StrEnum, auto 

7from sql_metadata import QueryType 

8 

9 

10class StatementType(StrEnum): 

11 """Type of Statements we will deal with""" 

12 

13 MOVEMENT = auto() 

14 UPDATE = auto() 

15 VIEW = auto() 

16 IGNORE_ME = auto() 

17 

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 

37 

38 

39class TableWriteType(StrEnum): 

40 """Type of writing being done by a statement""" 

41 

42 UPDATING = auto() 

43 REBUILDING = auto() 

44 DELETING = auto() 

45 NO_WRITING = auto() 

46 

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