WIP: database services

This commit is contained in:
2026-05-20 16:16:08 +08:00
parent 3ca1138a00
commit 1cfb733443
5 changed files with 92 additions and 89 deletions
+89 -87
View File
@@ -6,14 +6,12 @@ namespace OCES.Resonance.Core;
public static class Database
{
static readonly string DefaultConnectionString = "Data Source=default.rdb;Version=3;";
/// <summary>
/// 获取数据库连接
/// </summary>
/// <param name="dbName">数据库名称(不含扩展名)</param>
/// <returns>数据库连接</returns>
public static IDbConnection GetConnection(string dbName = "default")
static IDbConnection GetConnection(string dbName = "default")
{
string connectionString = $"Data Source={dbName}.rdb;Version=3;";
return new SQLiteConnection(connectionString);
@@ -27,91 +25,95 @@ public static class Database
using var connection = GetConnection();
connection.Open();
const string sql = @"
CREATE TABLE IF NOT EXISTS audio_files (
id INTEGER PRIMARY KEY AUTOINCREMENT,
unique_id TEXT NOT NULL UNIQUE,
short_id TEXT,
md5 TEXT NOT NULL,
path TEXT NOT NULL,
filename TEXT NOT NULL,
folder TEXT NOT NULL,
directory TEXT NOT NULL,
duration REAL NOT NULL,
total_samples REAL NOT NULL,
bit_depth INTEGER NOT NULL,
channels INTEGER NOT NULL,
sample_rate REAL NOT NULL,
type TEXT NOT NULL,
date_added TEXT NOT NULL,
original_modification_date TEXT NOT NULL,
origination_time TEXT NOT NULL,
bpm REAL,
frame_rate TEXT,
timecode INTEGER,
description TEXT,
category TEXT,
subcategory TEXT,
cat_id TEXT,
category_full TEXT,
genre TEXT,
style TEXT,
mood TEXT,
keywords TEXT,
rating INTEGER,
artist TEXT,
composer TEXT,
designer TEXT,
recordist TEXT,
publisher TEXT,
manufacturer TEXT,
originator TEXT,
originator_ref TEXT,
project_name TEXT,
library TEXT,
cd_title TEXT,
track_title TEXT,
episode TEXT,
scene TEXT,
take TEXT,
tape TEXT,
cue_number INTEGER,
sync_point INTEGER,
release_date TEXT,
track_year INTEGER,
is_edited INTEGER,
is_split INTEGER,
location TEXT,
[group] TEXT,
markers TEXT,
comments TEXT,
notes TEXT,
copyright TEXT,
coding_history TEXT,
microphone TEXT,
mic_perspective TEXT,
user1 TEXT,
user2 TEXT,
user3 TEXT,
user4 TEXT,
user5 TEXT,
user6 TEXT,
user7 TEXT,
user8 TEXT,
fx_name TEXT,
channel_layout TEXT,
bwf_umid BLOB,
disk_number INTEGER,
track_number INTEGER,
artwork BLOB,
waveform BLOB,
const string sql = """
INDEX idx_md5 (md5),
INDEX idx_path (path),
INDEX idx_unique_id (unique_id)
);
";
CREATE TABLE IF NOT EXISTS audio_files (
id INTEGER PRIMARY KEY AUTOINCREMENT,
unique_id TEXT NOT NULL UNIQUE,
short_id TEXT,
md5 TEXT NOT NULL,
path TEXT NOT NULL,
filename TEXT NOT NULL,
folder TEXT NOT NULL,
directory TEXT NOT NULL,
duration REAL NOT NULL,
total_samples REAL NOT NULL,
bit_depth INTEGER NOT NULL,
channels INTEGER NOT NULL,
sample_rate REAL NOT NULL,
type TEXT NOT NULL,
date_added TEXT NOT NULL,
original_modification_date TEXT NOT NULL,
origination_time TEXT NOT NULL,
bpm REAL,
frame_rate TEXT,
timecode INTEGER,
description TEXT,
category TEXT,
subcategory TEXT,
cat_id TEXT,
category_full TEXT,
genre TEXT,
style TEXT,
mood TEXT,
keywords TEXT,
rating INTEGER,
artist TEXT,
composer TEXT,
designer TEXT,
recordist TEXT,
publisher TEXT,
manufacturer TEXT,
originator TEXT,
originator_ref TEXT,
project_name TEXT,
library TEXT,
cd_title TEXT,
track_title TEXT,
episode TEXT,
scene TEXT,
take TEXT,
tape TEXT,
cue_number INTEGER,
sync_point INTEGER,
release_date TEXT,
track_year INTEGER,
is_edited INTEGER,
is_split INTEGER,
location TEXT,
[group] TEXT,
markers TEXT,
comments TEXT,
notes TEXT,
copyright TEXT,
coding_history TEXT,
microphone TEXT,
mic_perspective TEXT,
user1 TEXT,
user2 TEXT,
user3 TEXT,
user4 TEXT,
user5 TEXT,
user6 TEXT,
user7 TEXT,
user8 TEXT,
fx_name TEXT,
channel_layout TEXT,
bwf_umid BLOB,
disk_number INTEGER,
track_number INTEGER,
artwork BLOB,
waveform BLOB
);
CREATE INDEX idx_file_name on audio_files(filename);
CREATE INDEX idx_md5 on audio_files(md5);
CREATE INDEX idx_path on audio_files(path);
CREATE INDEX idx_unique_id on audio_files(unique_id);
CREATE INDEX idx_description on audio_files(description);
""";
connection.Execute(sql);
}