static int
_db_table_updater_images_0(sqlite3 *db, const char *table, unsigned int current_version, int is_last_run) {
    char *errmsg;
    int r, ret;

    errmsg = NULL;
    r = sqlite3_exec(db,
                     "CREATE TABLE IF NOT EXISTS images ("
                     "id INTEGER PRIMARY KEY, "
                     "title TEXT, "
                     "artist TEXT, "
                     "date INTEGER NOT NULL, "
                     "width INTEGER NOT NULL, "
                     "height INTEGER NOT NULL, "
                     "orientation INTEGER NOT NULL, "
                     "gps_lat REAL DEFAULT 0.0, "
                     "gps_long REAL DEFAULT 0.0, "
                     "gps_alt REAL DEFAULT 0.0"
                     ")",
                     NULL, NULL, &errmsg);
    if (r != SQLITE_OK) {
        fprintf(stderr, "ERROR: could not create 'images' table: %s\n", errmsg);
        sqlite3_free(errmsg);
        return -1;
    }

    r = sqlite3_exec(db,
                     "CREATE INDEX IF NOT EXISTS images_date_idx ON images ("
                     "date"
                     ")",
                     NULL, NULL, &errmsg);
    if (r != SQLITE_OK) {
        fprintf(stderr, "ERROR: could not create 'images_date_idx' index: %s\n",
                errmsg);
        sqlite3_free(errmsg);
        return -2;
    }

    ret = lms_db_create_trigger_if_not_exists(db,
            "delete_images_on_files_deleted "
            "DELETE ON files FOR EACH ROW BEGIN "
            " DELETE FROM images WHERE id = OLD.id; END;");
    if (ret != 0)
        goto done;

    ret = lms_db_create_trigger_if_not_exists(db,
            "delete_files_on_images_deleted "
            "DELETE ON images FOR EACH ROW BEGIN "
            " DELETE FROM files WHERE id = OLD.id; END;");

done:
    return ret;
}
static int
_db_table_updater_playlists_0(sqlite3 *db, const char *table, unsigned int current_version, int is_last_run) {
    char *errmsg;
    int r, ret;

    errmsg = NULL;
    r = sqlite3_exec(db,
                     "CREATE TABLE IF NOT EXISTS playlists ("
                     "id INTEGER PRIMARY KEY, "
                     "title TEXT, "
                     "n_entries INTEGER NOT NULL"
                     ")",
                     NULL, NULL, &errmsg);
    if (r != SQLITE_OK) {
        fprintf(stderr, "ERROR: could not create 'playlists' table: %s\n",
                errmsg);
        sqlite3_free(errmsg);
        return -1;
    }

    r = sqlite3_exec(db,
                     "CREATE INDEX IF NOT EXISTS playlists_title_idx ON "
                     "playlists (title)",
                     NULL, NULL, &errmsg);
    if (r != SQLITE_OK) {
        fprintf(stderr,
                "ERROR: could not create 'playlists_title_idx' index: %s\n",
                errmsg);
        sqlite3_free(errmsg);
        return -2;
    }

    ret = lms_db_create_trigger_if_not_exists(db,
        "delete_playlists_on_files_deleted "
        "DELETE ON files FOR EACH ROW BEGIN "
        " DELETE FROM playlists WHERE id = OLD.id; END;");
    if (ret != 0)
        goto done;

    ret = lms_db_create_trigger_if_not_exists(db,
        "delete_files_on_playlists_deleted "
        "DELETE ON playlists FOR EACH ROW BEGIN "
        " DELETE FROM files WHERE id = OLD.id; END;");

  done:
    return ret;
}