82 lines
1.4 KiB
Python
Raw Normal View History

from dataclasses import dataclass
from datetime import datetime
from enum import Enum
from typing import Dict, List, Optional
from typing_extensions import Literal
StatementType = Literal[ # SELECT + values from OperationTypeClass
"SELECT",
"INSERT",
"UPDATE",
"DELETE",
"CREATE",
"ALTER",
"DROP",
"CUSTOM",
"UNKNOWN",
]
@dataclass
class Container:
name: str
parent: Optional["Container"] = None
class ColumnType(str, Enum):
# Can add types that take parameters in the future
INTEGER = "INTEGER"
FLOAT = "FLOAT" # Double precision (64 bit)
STRING = "STRING"
BOOLEAN = "BOOLEAN"
DATETIME = "DATETIME"
@dataclass
class Column:
name: str
type: ColumnType
nullable: bool
ColumnRef = str
ColumnMapping = Dict[ColumnRef, Column]
@dataclass
class Table:
name: str
container: Container
columns: List[ColumnRef]
column_mapping: Optional[ColumnMapping]
def is_view(self) -> bool:
return False
@dataclass
class View(Table):
definition: str
parents: List[Table]
def is_view(self) -> bool:
return True
@dataclass
class FieldAccess:
column: ColumnRef
table: Table
@dataclass
class Query:
text: str
type: StatementType
actor: str
timestamp: datetime
fields_accessed: List[FieldAccess] # Has at least one entry
object_modified: Optional[Table] = None # Can be only part of a table