feat: add fts indexing

This commit is contained in:
2026-04-15 08:31:06 -04:00
parent ac343a5477
commit 562f4bb073
11 changed files with 393 additions and 83 deletions

View File

@@ -1,34 +1,42 @@
-- CREATE TABLE files (
-- id INTEGER PRIMARY KEY,
-- path TEXT NOT NULL UNIQUE,
-- language TEXT NOT NULL,
-- package TEXT,
-- hash TEXT NOT NULL,
-- indexed_at DATETIME DEFAULT CURRENT_TIMESTAMP
-- );
--
-- CREATE TABLE symbols (
-- id INTEGER PRIMARY KEY,
-- file_id INTEGER NOT NULL REFERENCES files(id) ON DELETE CASCADE,
-- name TEXT NOT NULL,
-- kind TEXT NOT NULL CHECK(kind IN (
-- 'function', 'method', 'class', 'type',
-- 'interface', 'constant', 'variable', 'constructor'
-- )),
-- line INTEGER NOT NULL,
-- line_end INTEGER,
-- col INTEGER,
-- col_end INTEGER,
-- exported BOOLEAN,
-- parent_id INTEGER REFERENCES symbols(id),
-- UNIQUE(file_id, name, kind, line)
-- );
--
-- CREATE INDEX idx_symbols_name ON symbols(name);
-- CREATE INDEX idx_symbols_kind ON symbols(kind);
-- CREATE INDEX idx_symbols_file_line ON symbols(file_id, line);
-- CREATE INDEX idx_symbols_parent ON symbols(parent_id);
-- CREATE INDEX idx_symbols_exported ON symbols(exported, kind);
-- CREATE INDEX idx_files_path ON files(path);
-- CREATE INDEX idx_files_language ON files(language);
-- CREATE INDEX idx_files_package ON files(package);
CREATE TABLE files (
id INTEGER PRIMARY KEY,
path TEXT NOT NULL UNIQUE,
language TEXT NOT NULL,
package TEXT,
hash TEXT NOT NULL,
indexed_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE symbols (
id INTEGER PRIMARY KEY,
file_id INTEGER NOT NULL REFERENCES files(id) ON DELETE CASCADE,
name TEXT NOT NULL,
kind TEXT NOT NULL CHECK(kind IN (
'function', 'method', 'class', 'type',
'interface', 'constant', 'variable', 'constructor'
)),
line INTEGER NOT NULL,
line_end INTEGER,
col INTEGER,
col_end INTEGER,
exported BOOLEAN,
parent_id INTEGER REFERENCES symbols(id),
UNIQUE(file_id, name, kind, line)
);
CREATE INDEX idx_symbols_name ON symbols(name);
CREATE INDEX idx_symbols_kind ON symbols(kind);
CREATE INDEX idx_symbols_file_line ON symbols(file_id, line);
CREATE INDEX idx_symbols_parent ON symbols(parent_id);
CREATE INDEX idx_symbols_exported ON symbols(exported, kind);
CREATE INDEX idx_files_path ON files(path);
CREATE INDEX idx_files_language ON files(language);
CREATE INDEX idx_files_package ON files(package);
-- FTS5 virtual table for full-text search of file contents.
-- content is stored here (not external content), keyed by file_id.
CREATE VIRTUAL TABLE file_contents USING fts5(
file_id UNINDEXED,
content,
tokenize='porter unicode61'
);