|
75 | 75 | number INTEGER PRIMARY KEY |
76 | 76 | ); |
77 | 77 |
|
78 | | -CREATE INDEX idx_peers_id ON peers (id); |
79 | | -CREATE INDEX idx_peers_phone_number ON peers (phone_number); |
80 | | -CREATE INDEX idx_usernames_username ON usernames (username); |
| 78 | +CREATE INDEX IF NOT EXISTS idx_peers_id ON peers (id); |
| 79 | +CREATE INDEX IF NOT EXISTS idx_peers_phone_number ON peers (phone_number); |
| 80 | +CREATE INDEX IF NOT EXISTS idx_usernames_id ON usernames (id); |
| 81 | +CREATE INDEX IF NOT EXISTS idx_usernames_username ON usernames (username); |
81 | 82 |
|
82 | 83 | CREATE TRIGGER trg_peers_last_update_on |
83 | 84 | AFTER UPDATE |
@@ -112,7 +113,7 @@ def get_input_peer(peer_id: int, access_hash: int, peer_type: str): |
112 | 113 |
|
113 | 114 |
|
114 | 115 | class SQLiteStorage(Storage): |
115 | | - VERSION = 5 |
| 116 | + VERSION = 6 |
116 | 117 | USERNAME_TTL = 8 * 60 * 60 |
117 | 118 |
|
118 | 119 | def __init__(self, name: str): |
@@ -158,23 +159,27 @@ def _update_peers_impl(self, peers): |
158 | 159 | peers_data = [] |
159 | 160 | usernames_data = [] |
160 | 161 | ids_to_delete = [] |
161 | | - for peer_data in peers: |
162 | | - id, access_hash, type, usernames, phone_number = peer_data |
| 162 | + for id, access_hash, type, usernames, phone_number in peers: |
| 163 | + ids_to_delete.append((id,)) |
| 164 | + peers_data.append((id, access_hash, type, phone_number)) |
163 | 165 |
|
164 | | - self.conn.execute( |
165 | | - "REPLACE INTO peers (id, access_hash, type, phone_number)" |
166 | | - "VALUES (?, ?, ?, ?)", |
167 | | - (id, access_hash, type, phone_number) |
168 | | - ) |
| 166 | + if usernames: |
| 167 | + usernames_data.extend([(id, username) for username in usernames]) |
169 | 168 |
|
170 | | - self.conn.execute( |
171 | | - "DELETE FROM usernames WHERE id = ?", |
172 | | - (id,) |
173 | | - ) |
| 169 | + self.conn.executemany( |
| 170 | + "REPLACE INTO peers (id, access_hash, type, phone_number) VALUES (?, ?, ?, ?)", |
| 171 | + peers_data |
| 172 | + ) |
| 173 | + |
| 174 | + self.conn.executemany( |
| 175 | + "DELETE FROM usernames WHERE id = ?", |
| 176 | + ids_to_delete |
| 177 | + ) |
174 | 178 |
|
| 179 | + if usernames_data: |
175 | 180 | self.conn.executemany( |
176 | 181 | "REPLACE INTO usernames (id, username) VALUES (?, ?)", |
177 | | - [(id, username) for username in usernames] if usernames else [(id, None)] |
| 182 | + usernames_data |
178 | 183 | ) |
179 | 184 |
|
180 | 185 | async def update_peers(self, peers: List[Tuple[int, int, str, List[str], str]]): |
|
0 commit comments