59 lines
1.6 KiB
SQL
59 lines
1.6 KiB
SQL
CREATE TABLE IF NOT EXISTS 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 IF NOT EXISTS 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',
|
|
'reference',
|
|
'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 IF NOT EXISTS idx_symbols_name ON symbols (name);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_symbols_kind ON symbols (kind);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_symbols_file_line ON symbols (file_id, line);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_symbols_parent ON symbols (parent_id);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_symbols_exported ON symbols (exported, kind);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_files_path ON files (path);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_files_language ON files (LANGUAGE);
|
|
|
|
CREATE INDEX IF NOT EXISTS 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 IF NOT EXISTS file_contents USING fts5 (
|
|
file_id UNINDEXED,
|
|
content,
|
|
tokenize = 'porter unicode61'
|
|
);
|