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);