Skip to content

Commit 53beb1b

Browse files
committed
feat: schema v2 migration, database performance, batch query methods
- Add provenance column on edges for tracking how edges were created - Add project_metadata table for version/provenance tracking - Make unresolved_refs file_path/language NOT NULL with defaults - Add composite indexes for unresolved_refs and edges.provenance - Update v2 migration to handle all new schema additions - Record schema version on initialize to prevent re-migration - Add dynamic prepared statement cache (getDynamicStmt) for varying SQL - Add batch methods: getNodesByIds, getNodesByKinds, getFileHashMap, getFileSyncMap - Add project metadata methods: getMetadata, setMetadata, getAllMetadata - Optimize getStats to use single aggregate query - Optimize getStaleFiles to use temporary table JOIN - Add provenance parameter to getOutgoingEdges - Add intent field to SearchOptions type
1 parent 4825661 commit 53beb1b

5 files changed

Lines changed: 258 additions & 67 deletions

File tree

src/db/index.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,14 @@ export class DatabaseConnection {
5252
const schema = fs.readFileSync(schemaPath, 'utf-8');
5353
db.exec(schema);
5454

55+
// Record current schema version so migrations aren't re-applied on open
56+
const currentVersion = getCurrentVersion(db);
57+
if (currentVersion < CURRENT_SCHEMA_VERSION) {
58+
db.prepare(
59+
'INSERT OR IGNORE INTO schema_versions (version, applied_at, description) VALUES (?, ?, ?)'
60+
).run(CURRENT_SCHEMA_VERSION, Date.now(), 'Initial schema includes all migrations');
61+
}
62+
5563
return new DatabaseConnection(db, dbPath);
5664
}
5765

src/db/migrations.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,19 @@ interface Migration {
2929
const migrations: Migration[] = [
3030
{
3131
version: 2,
32-
description: 'Add filePath and language to unresolved_refs for performance',
32+
description: 'Add project metadata, provenance tracking, and unresolved ref context',
3333
up: (db) => {
3434
db.exec(`
35-
ALTER TABLE unresolved_refs ADD COLUMN file_path TEXT;
36-
ALTER TABLE unresolved_refs ADD COLUMN language TEXT;
35+
CREATE TABLE IF NOT EXISTS project_metadata (
36+
key TEXT PRIMARY KEY,
37+
value TEXT NOT NULL,
38+
updated_at INTEGER NOT NULL
39+
);
40+
ALTER TABLE unresolved_refs ADD COLUMN file_path TEXT NOT NULL DEFAULT '';
41+
ALTER TABLE unresolved_refs ADD COLUMN language TEXT NOT NULL DEFAULT 'unknown';
42+
ALTER TABLE edges ADD COLUMN provenance TEXT DEFAULT NULL;
43+
CREATE INDEX IF NOT EXISTS idx_unresolved_file_path ON unresolved_refs(file_path);
44+
CREATE INDEX IF NOT EXISTS idx_edges_provenance ON edges(provenance);
3745
`);
3846
},
3947
},

0 commit comments

Comments
 (0)