feat: add fts indexing
This commit is contained in:
@@ -38,7 +38,13 @@ Example queries:
|
||||
SELECT c.name as parent, s.name, s.kind, s.line FROM symbols s JOIN symbols c ON s.parent_id=c.id WHERE c.name='AuthService'
|
||||
|
||||
-- Overview: symbols per area
|
||||
SELECT CASE WHEN f.path LIKE 'backend/%' THEN 'backend' WHEN f.path LIKE 'frontend/%' THEN 'frontend' ELSE 'other' END as area, COUNT(*) FROM symbols s JOIN files f ON s.file_id=f.id GROUP BY area`;
|
||||
SELECT CASE WHEN f.path LIKE 'backend/%' THEN 'backend' WHEN f.path LIKE 'frontend/%' THEN 'frontend' ELSE 'other' END as area, COUNT(*) FROM symbols s JOIN files f ON s.file_id=f.id GROUP BY area
|
||||
|
||||
-- Full-text search for content across all files
|
||||
SELECT f.path, snippet(file_contents, 1, '>>>', '<<<', '...', 20) as match FROM file_contents fc JOIN files f ON f.id=fc.file_id WHERE file_contents MATCH 'handleRequest' ORDER BY rank LIMIT 10
|
||||
|
||||
-- FTS search scoped to a directory
|
||||
SELECT f.path, snippet(file_contents, 1, '>>>', '<<<', '...', 20) as match FROM file_contents fc JOIN files f ON f.id=fc.file_id WHERE file_contents MATCH 'database migration' AND f.path LIKE 'backend/%' ORDER BY rank LIMIT 10`;
|
||||
|
||||
function findGitRoot(cwd: string): string | null {
|
||||
try {
|
||||
|
||||
@@ -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'
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user