Skip to content

Commit 9ec174a

Browse files
⚡ Bolt: [performance improvement] Optimize SQLite insertions by replacing execute with executemany in _record_user_decision (#234)
Eliminates an N+1 performance bottleneck during batch file processing by grouping user feedback into a single `executemany` database insertion. Avoids executing repeated SQL parsing and reduces Python-to-C API crossover overhead, speeding up processing for large file groups. Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> Co-authored-by: thebearwithabite <216692431+thebearwithabite@users.noreply.github.com>
1 parent 17ac67a commit 9ec174a

1 file changed

Lines changed: 19 additions & 11 deletions

File tree

interactive_batch_processor.py

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1358,20 +1358,28 @@ def _record_user_decision(self, session_id: str, group: BatchGroup, user_decisio
13581358
"""Record user decision for learning"""
13591359
try:
13601360
with sqlite3.connect(self.batch_db_path) as conn:
1361-
for fp in group.file_previews:
1362-
conn.execute("""
1363-
INSERT INTO user_feedback
1364-
(feedback_id, session_id, file_path, predicted_action, user_action, feedback_time, comments)
1365-
VALUES (?, ?, ?, ?, ?, ?, ?)
1366-
""", (
1367-
hashlib.md5(f"{session_id}_{fp.file_path}_{datetime.now().isoformat()}".encode()).hexdigest()[:12],
1361+
now_iso = datetime.now().isoformat()
1362+
action = user_decision.get("action", "unknown")
1363+
comments = json.dumps(user_decision)
1364+
1365+
rows = [
1366+
(
1367+
hashlib.md5(f"{session_id}_{fp.file_path}_{now_iso}".encode()).hexdigest()[:12],
13681368
session_id,
13691369
fp.file_path,
13701370
fp.predicted_category,
1371-
user_decision.get("action", "unknown"),
1372-
datetime.now().isoformat(),
1373-
json.dumps(user_decision)
1374-
))
1371+
action,
1372+
now_iso,
1373+
comments
1374+
)
1375+
for fp in group.file_previews
1376+
]
1377+
1378+
conn.executemany("""
1379+
INSERT INTO user_feedback
1380+
(feedback_id, session_id, file_path, predicted_action, user_action, feedback_time, comments)
1381+
VALUES (?, ?, ?, ?, ?, ?, ?)
1382+
""", rows)
13751383
conn.commit()
13761384
except Exception as e:
13771385
self.logger.error(f"Error recording user decision: {e}")

0 commit comments

Comments
 (0)