Added
- **! Added `Table.contains(self: SelfTable, attribute_name: str, attribute_value: Any) -> bool`.**
- **! Added `Table.not_contains(self: SelfTable, attribute_name: str, attribute_value: Any) -> bool`.**
- **! Added `Table.map(self: SelfTable, func: (tuple[Any, ...]) -> (tuple[Any, ...] | None), *, write: bool = False) -> list[tuple[Any, ...]]`.**
- **! Added `Table.filter(self: SelfTable, func: (tuple[Any, ...]) -> bool, *, write: bool = False) -> list[tuple[Any, ...]]`.**
- **! Added `Table.contains_row(self: SelfTable, row: tuple[Any, ...]) -> bool`.**
- **! Added `Table.not_contains_row(self: SelfTable, row: tuple[Any, ...]) -> bool`.**
- Added `Table.add_rows(self: SelfTable, rows: Iterable[tuple[Any, ...]], *, lock: bool = True) -> None`.
- Added `Table.get_attribute_index(self: SelfTable, name: str) -> int`.
Fixed
- **Fixed problem with writing `\n` and `\r` to database.**
- `Database.add_table` checks that the table's name is unique, and its attributes' names are unique.