refactor(schema): consolidate schema definition to single source of truth
This commit is contained in:
42
main.go
42
main.go
@@ -3,6 +3,7 @@ package main
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"embed"
|
||||
"flag"
|
||||
"fmt"
|
||||
"os"
|
||||
@@ -85,43 +86,10 @@ func run(root, dbPath string, force bool) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
//go:embed db/schema.sql
|
||||
var schemaSQL string
|
||||
|
||||
func createSchema(ctx context.Context, sqlDB *sql.DB) error {
|
||||
schema := `
|
||||
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',
|
||||
'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);
|
||||
`
|
||||
_, err := sqlDB.ExecContext(ctx, schema)
|
||||
_, err := sqlDB.ExecContext(ctx, schemaSQL)
|
||||
return err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user