d664439746
Week 1 fixes: - Move hex to workspace dependencies - Add cargo-criterion, protobuf, grpcurl to flake.nix Week 2 implementation: - musicfs-metadata: MetadataParser with symphonia 0.5 for FLAC, MP3, Opus/Vorbis, M4A/AAC (2 tests) - musicfs-cache: SQLite schema per architecture 4.3.6 with track/disc columns, TEXT content_hash, all required indexes - musicfs-cache/db.rs: Database with upsert, CRUD, mtime lookup (9 tests) - musicfs-cache/metadata.rs: MetadataCache with store/lookup/is_fresh/ invalidate (2 tests) - musicfs-core: Added Metadata error variant 22 tests pass total. Oracle-verified against architecture doc.
59 lines
1.9 KiB
SQL
59 lines
1.9 KiB
SQL
PRAGMA journal_mode = WAL;
|
|
PRAGMA foreign_keys = ON;
|
|
PRAGMA synchronous = NORMAL;
|
|
|
|
CREATE TABLE IF NOT EXISTS files (
|
|
id INTEGER PRIMARY KEY,
|
|
origin_id TEXT NOT NULL,
|
|
real_path TEXT NOT NULL,
|
|
virtual_path TEXT NOT NULL,
|
|
|
|
title TEXT,
|
|
artist TEXT,
|
|
album TEXT,
|
|
album_artist TEXT,
|
|
genre TEXT,
|
|
year INTEGER,
|
|
track INTEGER,
|
|
disc INTEGER,
|
|
duration_ms INTEGER,
|
|
bitrate INTEGER,
|
|
sample_rate INTEGER,
|
|
format TEXT,
|
|
|
|
origin_mtime INTEGER NOT NULL,
|
|
origin_size INTEGER NOT NULL,
|
|
content_hash TEXT,
|
|
chunk_manifest BLOB,
|
|
last_sync INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
|
|
|
|
UNIQUE(origin_id, real_path)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS artwork (
|
|
id INTEGER PRIMARY KEY,
|
|
file_id INTEGER NOT NULL REFERENCES files(id) ON DELETE CASCADE,
|
|
art_type TEXT NOT NULL,
|
|
chunk_hash TEXT NOT NULL,
|
|
width INTEGER,
|
|
height INTEGER,
|
|
mime_type TEXT,
|
|
UNIQUE(file_id, art_type)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS collections (
|
|
id INTEGER PRIMARY KEY,
|
|
name TEXT NOT NULL UNIQUE,
|
|
query_json TEXT NOT NULL,
|
|
created_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now')),
|
|
updated_at INTEGER NOT NULL DEFAULT (strftime('%s', 'now'))
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_files_virtual ON files(virtual_path);
|
|
CREATE INDEX IF NOT EXISTS idx_files_artist_album ON files(artist, album);
|
|
CREATE INDEX IF NOT EXISTS idx_files_content_hash ON files(content_hash);
|
|
CREATE INDEX IF NOT EXISTS idx_files_real ON files(origin_id, real_path);
|
|
CREATE INDEX IF NOT EXISTS idx_files_origin ON files(origin_id);
|
|
CREATE INDEX IF NOT EXISTS idx_files_last_sync ON files(last_sync);
|
|
CREATE INDEX IF NOT EXISTS idx_artwork_file ON artwork(file_id);
|