audiot_core 0.2.0

Library that helps build the search database through the CLI, and eventually can be used to read data from that same database.
Documentation
use crate::persistence::Tokenizer;

#[derive(Default)]
pub struct SqliteSetupArgs {
    pub tokenizer: Tokenizer,
    pub output: String,
}

impl SqliteSetupArgs {
    pub fn create_table_sql(&self) -> Vec<String> {
        let mut all_creates: Vec<String> = Vec::new();
        all_creates.push(format!(
            "CREATE VIRTUAL TABLE if not exists search_release_groups USING fts5(id, artists, title, genres, priority UNINDEXED, tokenize=\"{}\");",
            self.tokenizer
        ));
        all_creates.push(
            "CREATE TABLE if not exists release_groups (id TEXT PRIMARY KEY, primary_type TEXT, json_data JSON);"
                .to_string(),
        );

        all_creates.push(
            "CREATE INDEX release_group_primary_type_idx on release_groups (primary_type);"
                .to_string(),
        );
        all_creates.push("CREATE TABLE if not exists artist_release_groups (artist_id, release_group_id, PRIMARY KEY (artist_id, release_group_id));".to_string());
        all_creates.push("CREATE TABLE if not exists release_group_urls (release_group_id, url_id, url, url_type, PRIMARY KEY(release_group_id, url_id))".to_string());
        all_creates.push(
            "CREATE INDEX release_group_id_idx on release_group_urls (release_group_id);"
                .to_string(),
        );
        all_creates.push(
            "CREATE TABLE if not exists artist_names (id TEXT PRIMARY KEY, name TEXT);".to_string(),
        );

        all_creates
    }
}