mirror of https://github.com/gabehf/Koito.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
162 lines
4.1 KiB
162 lines
4.1 KiB
-- name: SearchArtists :many
|
|
SELECT id, name, musicbrainz_id, image, score
|
|
FROM (
|
|
SELECT
|
|
a.id,
|
|
a.name,
|
|
a.musicbrainz_id,
|
|
a.image,
|
|
similarity(aa.alias, $1) AS score,
|
|
ROW_NUMBER() OVER (PARTITION BY a.id ORDER BY similarity(aa.alias, $1) DESC) AS rn
|
|
FROM artist_aliases aa
|
|
JOIN artists_with_name a ON aa.artist_id = a.id
|
|
WHERE similarity(aa.alias, $1) > 0.22
|
|
) ranked
|
|
WHERE rn = 1
|
|
ORDER BY score DESC
|
|
LIMIT $2;
|
|
|
|
-- name: SearchArtistsBySubstring :many
|
|
SELECT id, name, musicbrainz_id, image, score
|
|
FROM (
|
|
SELECT
|
|
a.id,
|
|
a.name,
|
|
a.musicbrainz_id,
|
|
a.image,
|
|
1.0 AS score, -- why
|
|
ROW_NUMBER() OVER (PARTITION BY a.id ORDER BY aa.alias) AS rn
|
|
FROM artist_aliases aa
|
|
JOIN artists_with_name a ON aa.artist_id = a.id
|
|
WHERE aa.alias ILIKE $1 || '%'
|
|
) ranked
|
|
WHERE rn = 1
|
|
ORDER BY score DESC
|
|
LIMIT $2;
|
|
|
|
-- name: SearchTracks :many
|
|
SELECT
|
|
ranked.id,
|
|
ranked.title,
|
|
ranked.musicbrainz_id,
|
|
ranked.release_id,
|
|
ranked.image,
|
|
ranked.score,
|
|
(
|
|
SELECT json_agg(json_build_object('id', a.id, 'name', a.name))
|
|
FROM artist_tracks at
|
|
JOIN artists_with_name a ON a.id = at.artist_id
|
|
WHERE at.track_id = ranked.id
|
|
) AS artists
|
|
FROM (
|
|
SELECT
|
|
t.id,
|
|
t.title,
|
|
t.musicbrainz_id,
|
|
t.release_id,
|
|
r.image,
|
|
similarity(ta.alias, $1) AS score,
|
|
ROW_NUMBER() OVER (PARTITION BY t.id ORDER BY similarity(ta.alias, $1) DESC) AS rn
|
|
FROM track_aliases ta
|
|
JOIN tracks_with_title t ON ta.track_id = t.id
|
|
JOIN releases r ON t.release_id = r.id
|
|
WHERE similarity(ta.alias, $1) > 0.22
|
|
) ranked
|
|
WHERE rn = 1
|
|
ORDER BY score DESC, title
|
|
LIMIT $2;
|
|
|
|
-- name: SearchTracksBySubstring :many
|
|
SELECT
|
|
ranked.id,
|
|
ranked.title,
|
|
ranked.musicbrainz_id,
|
|
ranked.release_id,
|
|
ranked.image,
|
|
ranked.score,
|
|
(
|
|
SELECT json_agg(json_build_object('id', a.id, 'name', a.name))
|
|
FROM artist_tracks at
|
|
JOIN artists_with_name a ON a.id = at.artist_id
|
|
WHERE at.track_id = ranked.id
|
|
) AS artists
|
|
FROM (
|
|
SELECT
|
|
t.id,
|
|
t.title,
|
|
t.musicbrainz_id,
|
|
t.release_id,
|
|
r.image,
|
|
1.0 AS score,
|
|
ROW_NUMBER() OVER (PARTITION BY t.id ORDER BY ta.alias) AS rn
|
|
FROM track_aliases ta
|
|
JOIN tracks_with_title t ON ta.track_id = t.id
|
|
JOIN releases r ON t.release_id = r.id
|
|
WHERE ta.alias ILIKE $1 || '%'
|
|
) ranked
|
|
WHERE rn = 1
|
|
ORDER BY score DESC, title
|
|
LIMIT $2;
|
|
|
|
-- name: SearchReleases :many
|
|
SELECT
|
|
ranked.id,
|
|
ranked.title,
|
|
ranked.musicbrainz_id,
|
|
ranked.image,
|
|
ranked.various_artists,
|
|
ranked.score,
|
|
(
|
|
SELECT json_agg(DISTINCT jsonb_build_object('id', a.id, 'name', a.name))
|
|
FROM artists_with_name a
|
|
JOIN artist_releases ar ON ar.artist_id = a.id
|
|
WHERE ar.release_id = ranked.id
|
|
) AS artists
|
|
FROM (
|
|
SELECT
|
|
r.id,
|
|
r.title,
|
|
r.musicbrainz_id,
|
|
r.image,
|
|
r.various_artists,
|
|
similarity(ra.alias, $1) AS score,
|
|
ROW_NUMBER() OVER (PARTITION BY r.id ORDER BY similarity(ra.alias, $1) DESC) AS rn
|
|
FROM release_aliases ra
|
|
JOIN releases_with_title r ON ra.release_id = r.id
|
|
WHERE similarity(ra.alias, $1) > 0.22
|
|
) ranked
|
|
WHERE rn = 1
|
|
ORDER BY score DESC, title
|
|
LIMIT $2;
|
|
|
|
-- name: SearchReleasesBySubstring :many
|
|
SELECT
|
|
ranked.id,
|
|
ranked.title,
|
|
ranked.musicbrainz_id,
|
|
ranked.image,
|
|
ranked.various_artists,
|
|
ranked.score,
|
|
(
|
|
SELECT json_agg(DISTINCT jsonb_build_object('id', a.id, 'name', a.name))
|
|
FROM artists_with_name a
|
|
JOIN artist_releases ar ON ar.artist_id = a.id
|
|
WHERE ar.release_id = ranked.id
|
|
) AS artists
|
|
FROM (
|
|
SELECT
|
|
r.id,
|
|
r.title,
|
|
r.musicbrainz_id,
|
|
r.image,
|
|
r.various_artists,
|
|
1.0 AS score, -- idk why
|
|
ROW_NUMBER() OVER (PARTITION BY r.id ORDER BY ra.alias) AS rn
|
|
FROM release_aliases ra
|
|
JOIN releases_with_title r ON ra.release_id = r.id
|
|
WHERE ra.alias ILIKE $1 || '%'
|
|
) ranked
|
|
WHERE rn = 1
|
|
ORDER BY score DESC, title
|
|
LIMIT $2;
|