Amarok-Datenbank per Skript abfragen

Ich benutze mit Begeisterung Amarok, um meine Musiksammlung auf dem PC zu verwalten und anzuhören. Aber abgesehen von den Features, die das Programm schon liefert, kann man die darunterliegende Datenbank mit eigenen SQL Abfragen auswerten.

Hier ein schönes Beispiel, wenn man mal für ein Erscheinungsjahr alle seine Alben wissen will:

$ sqlite3 ~/.kde/share/apps/amarok/collection.db
sqlite> SELECT DISTINCT
artist.name, album.name, year.name, genre.name
FROM tags
LEFT JOIN year ON year.id = tags.year
LEFT JOIN genre ON genre.id = tags.genre
LEFT JOIN artist ON artist.id = tags.artist
LEFT JOIN album ON album.id = tags.album
WHERE year.name = '2009'
ORDER BY artist.name, album.name;

Oder aber eine Liste aller Alben inkl. deren Länge:

sqlite> SELECT
  artist.name, album.name,
  SUM(tags.length)/60.0
FROM tags
LEFT JOIN artist ON artist.id = tags.artist
LEFT JOIN album ON album.id = tags.album
group by
  artist.name, album.name
ORDER by
  artist.name, album.name

Oder eine Liste aller Alben bei denen mindestens ein Song noch nie gespielt wurde:

sqlite> SELECT DISTINCT
         artist.name,
         album.name
FROM     tags
         LEFT JOIN album
         ON       album.id=tags.album
         LEFT JOIN artist
         ON       artist.id=tags.artist
         LEFT JOIN statistics
         ON       statistics.url      =tags.url
              AND statistics.deviceid = tags.deviceid
where
  statistics.playcounter is null
order by
         artist.name,
         album.name

Oder eine Liste aller Alben, von denen noch kein einziger Song gespielt wurde:

select DISTINCT
  artist.name, album.name
from album
JOIN tags   ON album.id=tags.album
JOIN artist ON artist.id=tags.artist
WHERE
  not EXISTS (
    select 1
    from tags
    join statistics on statistics.url=tags.url
                   and statistics.deviceid=tags.deviceid
    WHERE tags.album = album.id and statistics.playcounter >= 0
  )
ORDER BY
  artist.name, album.name