diff --git a/codex-lens/src/codexlens/indexing/symbol_extractor.py b/codex-lens/src/codexlens/indexing/symbol_extractor.py index 2af0be08..092541a2 100644 --- a/codex-lens/src/codexlens/indexing/symbol_extractor.py +++ b/codex-lens/src/codexlens/indexing/symbol_extractor.py @@ -47,6 +47,15 @@ class SymbolExtractor: self.db_conn = sqlite3.connect(str(self.db_path)) self._ensure_tables() + def __enter__(self) -> "SymbolExtractor": + """Context manager entry: connect to database.""" + self.connect() + return self + + def __exit__(self, exc_type: Any, exc_val: Any, exc_tb: Any) -> None: + """Context manager exit: close database connection.""" + self.close() + def _ensure_tables(self) -> None: """Create symbols and relationships tables if they don't exist.""" if not self.db_conn: diff --git a/codex-lens/src/codexlens/search/hybrid_search.py b/codex-lens/src/codexlens/search/hybrid_search.py index 532e4cfd..726dec88 100644 --- a/codex-lens/src/codexlens/search/hybrid_search.py +++ b/codex-lens/src/codexlens/search/hybrid_search.py @@ -241,12 +241,15 @@ class HybridSearchEngine: try: # Check if semantic chunks table exists import sqlite3 - conn = sqlite3.connect(index_path) - cursor = conn.execute( - "SELECT name FROM sqlite_master WHERE type='table' AND name='semantic_chunks'" - ) - has_semantic_table = cursor.fetchone() is not None - conn.close() + try: + with sqlite3.connect(index_path) as conn: + cursor = conn.execute( + "SELECT name FROM sqlite_master WHERE type='table' AND name='semantic_chunks'" + ) + has_semantic_table = cursor.fetchone() is not None + except sqlite3.Error as e: + self.logger.error("Database check failed in vector search: %s", e) + return [] if not has_semantic_table: self.logger.info(