Skip to content

Commit f2869a0

Browse files
CopilotMte90
andcommitted
Optimize metadata updates with batch function
Co-authored-by: Mte90 <403283+Mte90@users.noreply.github.com>
1 parent 1308c11 commit f2869a0

File tree

2 files changed

+36
-5
lines changed

2 files changed

+36
-5
lines changed

analyzer.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import concurrent.futures
1212
import threading
1313

14-
from db import store_file, needs_reindex, set_project_metadata, get_project_metadata
14+
from db import store_file, needs_reindex, set_project_metadata_batch, get_project_metadata
1515
from external_api import get_embedding_for_text, call_coding_api
1616
from llama_index.core import Document
1717
from logger import get_logger
@@ -474,10 +474,13 @@ def analyze_local_path_sync(
474474
duration = end_time - start_time
475475

476476
try:
477-
set_project_metadata(database_path, "last_indexed_at", time.strftime("%Y-%m-%d %H:%M:%S"))
478-
set_project_metadata(database_path, "last_index_duration", str(duration))
479-
set_project_metadata(database_path, "files_indexed", str(file_count))
480-
set_project_metadata(database_path, "files_skipped", str(skipped_count))
477+
# Use batch update for efficiency - single database transaction
478+
set_project_metadata_batch(database_path, {
479+
"last_indexed_at": time.strftime("%Y-%m-%d %H:%M:%S"),
480+
"last_index_duration": str(duration),
481+
"files_indexed": str(file_count),
482+
"files_skipped": str(skipped_count)
483+
})
481484
except Exception:
482485
logger.exception("Failed to store indexing metadata")
483486

db.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -424,6 +424,34 @@ def set_project_metadata(database_path: str, key: str, value: str) -> None:
424424
conn.close()
425425

426426

427+
def set_project_metadata_batch(database_path: str, metadata: Dict[str, str]) -> None:
428+
"""
429+
Set multiple project metadata key-value pairs in a single transaction.
430+
More efficient than multiple set_project_metadata calls.
431+
432+
Args:
433+
database_path: Path to the database
434+
metadata: Dictionary of key-value pairs to set
435+
"""
436+
conn = _get_connection(database_path)
437+
try:
438+
cur = conn.cursor()
439+
for key, value in metadata.items():
440+
cur.execute(
441+
"""
442+
INSERT INTO project_metadata (key, value, updated_at)
443+
VALUES (?, ?, datetime('now'))
444+
ON CONFLICT(key) DO UPDATE SET
445+
value=excluded.value,
446+
updated_at=datetime('now')
447+
""",
448+
(key, value)
449+
)
450+
conn.commit()
451+
finally:
452+
conn.close()
453+
454+
427455
def get_project_metadata(database_path: str, key: str) -> Optional[str]:
428456
"""
429457
Get a project metadata value by key.

0 commit comments

Comments
 (0)