The original Artist-CD-Track sample can be found here: http://search.cpan.org/dist/DBIx-Class/lib/DBIx/Class/Manual/Example.pod.
The Muldis-D translation can be found here: http://muldis.com/CD.html.
The Andl implementation is below. Note that they are not strictly comparable because:
- Andl provides no persistence. The results are only in memory.
- Andl provides limited output formatting.
artist := {{ artistid:=0, name:='' }} [false] cd := {{ cdid:=0, artistid:=0, title:='', year:=0 }} [false] track := {{ trackid:=0, cdid:= 0, title:='' }} [false] artist_data := { { name := 'Michael Jackson'}, { name := 'Eminem' } } [{ *artistid := ord() }] artist := artist union artist_data cd_data := { { title := 'Thriller', name := 'Michael Jackson' }, { title := 'Bad', name := 'Michael Jackson' }, { title := 'The Marshall Mathers LP', name := 'Eminem' } } [{ *cdid := ord() }] cd := cd union (cd_data join artist)[{ title, cdid, artistid, year:=0}] track_data := { { title := 'Beat It' , cd := 'Thriller' }, { title := 'Billie Jean' , cd := 'Thriller' }, { title := 'Dirty Diana' , cd := 'Bad' }, { title := 'Smooth Criminal' , cd := 'Bad' }, { title := 'Leave Me Alone' , cd := 'Bad' }, { title := 'Stan' , cd := 'The Marshall Mathers LP' }, { title := 'The Way I Am' , cd := 'The Marshall Mathers LP' } } [{ *trackid := ord() }] track := track union (track_data join cd[{ *cd := title }]) [{ trackid, title, cdid }] get_tracks_by_cd(t) => cd[ title = t {*title} ] join track get_tracks_by_artist(a) => (artist[ name = a {*name}] join cd) [{cdid}] join track get_cd_by_track(t) => track [ title = t {cdid} ] join cd get_cds_by_artist(a) => artist [name = a {artistid} ] join cd get_artist_by_track(t) => (track [title = t { cdid }] join cd) [{artistid}] join artist get_artist_by_cd(t) => (cd [title = t { cdid }] join cd) [{artistid}] join artist get_tracks_by_cd('Bad') [{ i'Track title' := title }] get_tracks_by_artist('Michael Jackson') [{ i'Track title' := title }] get_cd_by_track('Stan') [{ i'CD title' := title }] get_cds_by_artist('Michael Jackson') [{ i'CD title' := title }] get_artist_by_track('Dirty Diana') [{ i'Artist name' := name }] get_artist_by_cd('The Marshall Mathers LP') [{ i'Artist name' := name }]
The output looks like this.
Track title --------------- Dirty Diana Smooth Criminal Leave Me Alone Track title --------------- Beat It Billie Jean Dirty Diana Smooth Criminal Leave Me Alone CD title ----------------------- The Marshall Mathers LP CD title ---------- Thriller Bad Artist name --------------- Michael Jackson Artist name ----------- Eminem