58 lines
1.7 KiB
Python
58 lines
1.7 KiB
Python
|
|
# database/schema.py
|
||
|
|
PRAGMA_FOREIGN_KEYS = "PRAGMA foreign_keys = ON;"
|
||
|
|
|
||
|
|
CREATE_TABLES_SQL = """
|
||
|
|
CREATE TABLE IF NOT EXISTS folders (
|
||
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
|
|
path TEXT UNIQUE NOT NULL,
|
||
|
|
parent_id INTEGER,
|
||
|
|
last_scanned TIMESTAMP,
|
||
|
|
FOREIGN KEY (parent_id) REFERENCES folders(id) ON DELETE CASCADE
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS files (
|
||
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
|
|
folder_id INTEGER NOT NULL,
|
||
|
|
filename TEXT NOT NULL,
|
||
|
|
filepath TEXT UNIQUE NOT NULL,
|
||
|
|
size INTEGER NOT NULL,
|
||
|
|
mtime REAL NOT NULL,
|
||
|
|
rating INTEGER DEFAULT 0 CHECK (rating >= 0 AND rating <= 5),
|
||
|
|
favorite INTEGER DEFAULT 0 CHECK (favorite IN (0, 1)),
|
||
|
|
FOREIGN KEY (folder_id) REFERENCES folders(id) ON DELETE CASCADE
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS metadata (
|
||
|
|
file_id INTEGER PRIMARY KEY,
|
||
|
|
prompt_json TEXT,
|
||
|
|
workflow_json TEXT,
|
||
|
|
positive_prompt TEXT,
|
||
|
|
negative_prompt TEXT,
|
||
|
|
seed INTEGER,
|
||
|
|
model_name TEXT,
|
||
|
|
sampler TEXT,
|
||
|
|
steps INTEGER,
|
||
|
|
cfg REAL,
|
||
|
|
FOREIGN KEY (file_id) REFERENCES files(id) ON DELETE CASCADE
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS tags (
|
||
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
|
|
name TEXT UNIQUE NOT NULL
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS file_tags (
|
||
|
|
file_id INTEGER NOT NULL,
|
||
|
|
tag_id INTEGER NOT NULL,
|
||
|
|
PRIMARY KEY (file_id, tag_id),
|
||
|
|
FOREIGN KEY (file_id) REFERENCES files(id) ON DELETE CASCADE,
|
||
|
|
FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE
|
||
|
|
);
|
||
|
|
"""
|
||
|
|
|
||
|
|
CREATE_INDEXES_SQL = """
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_folders_path ON folders(path);
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_files_filepath ON files(filepath);
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_files_folder_id ON files(folder_id);
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_tags_name ON tags(name);
|
||
|
|
"""
|