Improve artist search

Replicate recent changes in title search to artist search
This commit is contained in:
Keith Edmunds 2023-10-06 10:58:15 +01:00
parent 6d48bcc9d0
commit b3905e062d
2 changed files with 13 additions and 3 deletions

View File

@ -704,13 +704,23 @@ class Tracks(Base):
@classmethod
def search_artists(cls, session: scoped_session, text: str) -> List["Tracks"]:
"""Search case-insenstively for artists containing str"""
"""
Search case-insenstively for artists containing str
The query performs an outer join with 'joinedload' to populate the results
from the Playdates table at the same time. unique() needed; see
https://docs.sqlalchemy.org/en/20/orm/queryguide/relationships.html#joined-eager-loading
"""
return (
session.execute(
select(cls).where(cls.artist.ilike(f"%{text}%")).order_by(cls.title)
select(cls)
.options(joinedload(Tracks.playdates))
.where(cls.artist.ilike(f"%{text}%"))
.order_by(cls.title)
)
.scalars()
.unique()
.all()
)

View File

@ -1953,7 +1953,7 @@ class DbDialog(QDialog):
if self.ui.radioTitle.isChecked():
matches = Tracks.search_titles(self.session, "%" + s)
else:
matches = Tracks.search_artists(self.session, s)
matches = Tracks.search_artists(self.session, "%" + s)
if matches:
for track in matches:
last_played = None