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
This commit is contained in:
+13
-4
@@ -11,8 +11,6 @@ CREATE TABLE IF NOT EXISTS schema_versions (
|
||||
-- Insert initial version
|
||||
INSERT INTO schema_versions (version, applied_at, description)
|
||||
VALUES (1, strftime('%s', 'now') * 1000, 'Initial schema');
|
||||
INSERT INTO schema_versions (version, applied_at, description)
|
||||
VALUES (2, strftime('%s', 'now') * 1000, 'Add filePath and language to unresolved_refs');
|
||||
|
||||
-- =============================================================================
|
||||
-- Core Tables
|
||||
@@ -51,6 +49,7 @@ CREATE TABLE IF NOT EXISTS edges (
|
||||
metadata TEXT, -- JSON object
|
||||
line INTEGER,
|
||||
col INTEGER,
|
||||
provenance TEXT DEFAULT NULL,
|
||||
FOREIGN KEY (source) REFERENCES nodes(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (target) REFERENCES nodes(id) ON DELETE CASCADE
|
||||
);
|
||||
@@ -75,9 +74,9 @@ CREATE TABLE IF NOT EXISTS unresolved_refs (
|
||||
reference_kind TEXT NOT NULL,
|
||||
line INTEGER NOT NULL,
|
||||
col INTEGER NOT NULL,
|
||||
file_path TEXT,
|
||||
language TEXT,
|
||||
candidates TEXT, -- JSON array
|
||||
file_path TEXT NOT NULL DEFAULT '',
|
||||
language TEXT NOT NULL DEFAULT 'unknown',
|
||||
FOREIGN KEY (from_node_id) REFERENCES nodes(id) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
@@ -136,6 +135,9 @@ CREATE INDEX IF NOT EXISTS idx_files_modified_at ON files(modified_at);
|
||||
-- Unresolved refs indexes
|
||||
CREATE INDEX IF NOT EXISTS idx_unresolved_from_node ON unresolved_refs(from_node_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_unresolved_name ON unresolved_refs(reference_name);
|
||||
CREATE INDEX IF NOT EXISTS idx_unresolved_file_path ON unresolved_refs(file_path);
|
||||
CREATE INDEX IF NOT EXISTS idx_unresolved_from_name ON unresolved_refs(from_node_id, reference_name);
|
||||
CREATE INDEX IF NOT EXISTS idx_edges_provenance ON edges(provenance);
|
||||
|
||||
-- =============================================================================
|
||||
-- Vector Storage (for future semantic search)
|
||||
@@ -152,3 +154,10 @@ CREATE TABLE IF NOT EXISTS vectors (
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_vectors_model ON vectors(model);
|
||||
|
||||
-- Project metadata for version/provenance tracking
|
||||
CREATE TABLE IF NOT EXISTS project_metadata (
|
||||
key TEXT PRIMARY KEY,
|
||||
value TEXT NOT NULL,
|
||||
updated_at INTEGER NOT NULL
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user