Skip to content

Commit e4f3e7a

Browse files
KurimuzonAkumaSpEcHiDe
authored andcommitted
Add index on usernames.id
Closes: KurimuzonAkuma/kurigram#70 Fixes: merge-conflict with pyrogram/pyrogram@c434828
1 parent 1dd4fa0 commit e4f3e7a

File tree

2 files changed

+28
-17
lines changed

2 files changed

+28
-17
lines changed

pyrogram/storage/file_storage.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
FOREIGN KEY (id) REFERENCES peers(id)
3939
);
4040
41-
CREATE INDEX idx_usernames_username ON usernames (username);
41+
CREATE INDEX IF NOT EXISTS idx_usernames_username ON usernames (username);
4242
"""
4343

4444
UPDATE_STATE_SCHEMA = """
@@ -99,6 +99,12 @@ async def update(self):
9999

100100
version += 1
101101

102+
if version == 5:
103+
with self.conn:
104+
self.conn.executescript("CREATE INDEX IF NOT EXISTS idx_usernames_id ON usernames (id);")
105+
106+
version += 1
107+
102108
await self.version(version)
103109

104110
async def open(self):

pyrogram/storage/sqlite_storage.py

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,10 @@
7575
number INTEGER PRIMARY KEY
7676
);
7777
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);
8182
8283
CREATE TRIGGER trg_peers_last_update_on
8384
AFTER UPDATE
@@ -112,7 +113,7 @@ def get_input_peer(peer_id: int, access_hash: int, peer_type: str):
112113

113114

114115
class SQLiteStorage(Storage):
115-
VERSION = 5
116+
VERSION = 6
116117
USERNAME_TTL = 8 * 60 * 60
117118

118119
def __init__(self, name: str):
@@ -158,23 +159,27 @@ def _update_peers_impl(self, peers):
158159
peers_data = []
159160
usernames_data = []
160161
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))
163165

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])
169168

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+
)
174178

179+
if usernames_data:
175180
self.conn.executemany(
176181
"REPLACE INTO usernames (id, username) VALUES (?, ?)",
177-
[(id, username) for username in usernames] if usernames else [(id, None)]
182+
usernames_data
178183
)
179184

180185
async def update_peers(self, peers: List[Tuple[int, int, str, List[str], str]]):

0 commit comments

Comments
 (0)