Help us shape the future of Go! Take the 2026 Go Developer Survey

db

package
v0.3.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 21, 2026 License: Apache-2.0 Imports: 7 Imported by: 0

Documentation

Overview

Package db implements SQLite-backed persistence for the file/symbol cache shared between the Go and Python implementations of AST-Digger. It corresponds to ast_digger/db.py in the Python implementation.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type FileMeta

type FileMeta struct {
	// Mtime is the last-observed modification time of the file (seconds
	// since epoch, matching Python's os.path.getmtime()).
	Mtime float64
	// Hash is the content hash (SHA-256) of the file at Mtime.
	Hash string
	// Language identifies the parser/language used ("python", "typescript",
	// "go", ...).
	Language string
}

FileMeta holds the cached metadata AST-Digger tracks per source file, as stored in the `files` table. It mirrors the (mtime, hash, language) tuple returned by Python's SymbolDatabase.get_all_files().

type SymbolDatabase

type SymbolDatabase struct {
	// contains filtered or unexported fields
}

SymbolDatabase manages the SQLite cache database (`.workspace_cache/symbols.db`) shared with the Python implementation. It corresponds to Python's ast_digger.db.SymbolDatabase.

func NewSymbolDatabase

func NewSymbolDatabase(dbPath string) (*SymbolDatabase, error)

NewSymbolDatabase opens (creating if necessary) the SQLite database at dbPath and ensures its schema matches the shared cache schema. dbPath may be ":memory:" for an in-memory database.

If dbPath refers to an existing file whose schema is missing required tables/columns (i.e. it was created by an incompatible/older version of either implementation), the file is deleted and rebuilt from scratch. This mirrors Python's SymbolDatabase._init_db() "detect and self-heal" behavior; callers are not expected to see an error in that case.

func (*SymbolDatabase) Close

func (db *SymbolDatabase) Close() error

Close closes the underlying database connection.

func (*SymbolDatabase) DeleteFileCache

func (db *SymbolDatabase) DeleteFileCache(filePath string) error

DeleteFileCache removes filePath's metadata (and, via ON DELETE CASCADE, its symbols) from the cache.

func (*SymbolDatabase) GetAllFiles

func (db *SymbolDatabase) GetAllFiles() (map[string]FileMeta, error)

GetAllFiles returns the metadata of every file currently tracked in the cache, keyed by file path.

func (*SymbolDatabase) GetSymbolsInDirectory

func (db *SymbolDatabase) GetSymbolsInDirectory(dirPath string) ([]parser.SymbolData, error)

GetSymbolsInDirectory returns all cached symbols whose file path is dirPath itself or lies under dirPath. An empty dirPath or "." returns every cached symbol.

func (*SymbolDatabase) UpdateFileCache

func (db *SymbolDatabase) UpdateFileCache(filePath string, mtime float64, hash string, language string, symbols []parser.SymbolData) error

UpdateFileCache replaces the cached metadata and symbols for filePath with mtime/hash/language/symbols, inside a single transaction.

NOTE on the CASCADE-delete-through-INSERT-OR-REPLACE trick: like Python's SymbolDatabase.update_file_cache(), this method does NOT explicitly "DELETE FROM symbols WHERE file_path = ?" before inserting the new symbols. Instead it relies on a SQLite implementation detail: "INSERT OR REPLACE INTO files ..." resolves a PRIMARY KEY conflict by deleting the conflicting row and then inserting the new one, and because this connection has "PRAGMA foreign_keys = ON" set, that internal DELETE triggers the "ON DELETE CASCADE" on symbols.file_path, wiping out all of the previous symbol rows for filePath before the fresh INSERTs below run. This is intentional behavior-parity with the Python implementation (see ast_digger/db.py: SymbolDatabase.update_file_cache) and must not be "simplified" by adding an explicit DELETE, since callers/tests may depend on the exact statement ordering matching the Python original.

func (*SymbolDatabase) UpdateFileMtime

func (db *SymbolDatabase) UpdateFileMtime(filePath string, mtime float64) error

UpdateFileMtime updates the cached mtime of filePath without touching its hash, language, or symbols. It corresponds to Python's SymbolDatabase.update_file_mtime(), used by the Outliner (task 6) to refresh mtime after a cache hit that skips re-parsing.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL