|
1 | 1 | import posixpath |
2 | | -from typing import Optional |
| 2 | +from typing import Optional, NamedTuple |
3 | 3 |
|
4 | 4 | import ydb |
| 5 | + |
5 | 6 | from .cursor import Cursor |
6 | 7 | from .errors import InterfaceError, ProgrammingError, DatabaseError, InternalError, NotSupportedError |
7 | 8 |
|
@@ -48,19 +49,25 @@ def check_exists(self, table_path): |
48 | 49 | return False |
49 | 50 |
|
50 | 51 | def set_isolation_level(self, isolation_level: str): |
| 52 | + class IsolationSettings(NamedTuple): |
| 53 | + ydb_mode: ydb.AbstractTransactionModeBuilder |
| 54 | + interactive: bool |
| 55 | + |
51 | 56 | ydb_isolation_settings_map = { |
52 | | - IsolationLevel.AUTOCOMMIT: (ydb.SerializableReadWrite(), False), |
53 | | - IsolationLevel.SERIALIZABLE: (ydb.SerializableReadWrite(), True), |
54 | | - IsolationLevel.ONLINE_READONLY: (ydb.OnlineReadOnly(), False), |
55 | | - IsolationLevel.ONLINE_READONLY_INCONSISTENT: (ydb.OnlineReadOnly().with_allow_inconsistent_reads(), False), |
56 | | - IsolationLevel.STALE_READONLY: (ydb.StaleReadOnly(), False), |
57 | | - IsolationLevel.SNAPSHOT_READONLY: (ydb.SnapshotReadOnly(), True), |
| 57 | + IsolationLevel.AUTOCOMMIT: IsolationSettings(ydb.SerializableReadWrite(), interactive=False), |
| 58 | + IsolationLevel.SERIALIZABLE: IsolationSettings(ydb.SerializableReadWrite(), interactive=True), |
| 59 | + IsolationLevel.ONLINE_READONLY: IsolationSettings(ydb.OnlineReadOnly(), interactive=False), |
| 60 | + IsolationLevel.ONLINE_READONLY_INCONSISTENT: IsolationSettings( |
| 61 | + ydb.OnlineReadOnly().with_allow_inconsistent_reads(), interactive=False |
| 62 | + ), |
| 63 | + IsolationLevel.STALE_READONLY: IsolationSettings(ydb.StaleReadOnly(), interactive=False), |
| 64 | + IsolationLevel.SNAPSHOT_READONLY: IsolationSettings(ydb.SnapshotReadOnly(), interactive=True), |
58 | 65 | } |
59 | 66 | ydb_isolation_settings = ydb_isolation_settings_map[isolation_level] |
60 | 67 | if self.transaction and self.transaction.tx_id: |
61 | 68 | raise InternalError("Failed to set transaction mode: transaction is already began") |
62 | | - self.tx_mode = ydb_isolation_settings[0] |
63 | | - self.interactive_transaction = ydb_isolation_settings[1] |
| 69 | + self.tx_mode = ydb_isolation_settings.ydb_mode |
| 70 | + self.interactive_transaction = ydb_isolation_settings.interactive |
64 | 71 |
|
65 | 72 | def get_isolation_level(self) -> str: |
66 | 73 | if self.tx_mode.name == ydb.SerializableReadWrite().name: |
|
0 commit comments