# Copyright 2021 (c) Anna Schumaker. # # Table: genres # +---------+------+------+ # | genreid | name | sort | # +---------+------+------+ # # Index: genre_index # +-----------------+ # | name -> genreid | # +-----------------+ # # Map: genre_map # +---------+---------+ # | genreid | trackid | # +---------+---------+ from . import execute from . import objects from . import track class Genre(objects.Tag): def do_get_column(self, column): return execute(f"SELECT {column} FROM genres " "WHERE genreid=?", [ self.rowid ]) class GenreTable(objects.Table): def __init__(self): objects.Table.__init__(self, "genres", Genre) def do_create(self): execute("CREATE TABLE IF NOT EXISTS genres " "(genreid INTEGER PRIMARY KEY, " " name TEXT UNIQUE, " " sort TEXT)") execute("CREATE INDEX IF NOT EXISTS genre_index " "ON genres(name)") def do_insert(self, name): return execute("INSERT INTO genres (name, sort) " "VALUES (?, ?)", (name, name.casefold())) def do_delete(self, genre): return execute("DELETE FROM genres WHERE genreid=?", [ int(genre) ]) def do_get(self, rowid): return execute("SELECT genreid FROM genres " "WHERE genreid=?", [ rowid ]) def do_lookup(self, name): return execute("SELECT genreid FROM genres " "WHERE name=?", [ name ]) class GenreMap(objects.Map): def __init__(self): objects.Map.__init__(self, "genre_map", Genre, track.Track) self.lookup_tracks = self.lookup_rhs self.lookup_genres = self.lookup_lhs def do_create(self): execute("CREATE TABLE IF NOT EXISTS genre_map " "(genreid INTEGER, " " trackid INTEGER, " " FOREIGN KEY(genreid) REFERENCES genres(genreid), " " FOREIGN KEY(trackid) REFERENCES tracks(trackid), " " UNIQUE(genreid, trackid))") def do_insert(self, genre, track): execute("INSERT INTO genre_map (genreid, trackid) " "VALUES (?, ?)", [ int(genre), int(track) ]) def do_delete(self, genre, track): return execute("DELETE FROM genre_map WHERE genreid=? AND trackid=?", [ int(genre), int(track) ]) def do_lookup_rhs(self, genre): return execute("SELECT trackid FROM genre_map " "WHERE genreid=?", [ int(genre) ]) def do_lookup_lhs(self, track): return execute("SELECT genreid FROM genre_map " "WHERE trackid=?", [ int(track) ]) def delete_track(self, track): for genre in self.lookup_genres(track): self.delete(genre, track) Table = GenreTable() Map = GenreMap()