fix db query for album tracks
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Thu, 29 Aug 2024 09:23:19 +0000 (11:23 +0200)
committerMarcel van der Veldt <m.vanderveldt@outlook.com>
Thu, 29 Aug 2024 09:23:19 +0000 (11:23 +0200)
music_assistant/server/controllers/media/albums.py
music_assistant/server/controllers/media/base.py
music_assistant/server/controllers/media/tracks.py
music_assistant/server/helpers/database.py

index 6a41fcc9e18fedfba4c4d146fb29ab1f18511d4a..f52aba65cba06f96b9a0db40a6804839f2cf42ec 100644 (file)
@@ -286,9 +286,9 @@ class AlbumsController(MediaControllerBase[Album]):
         item_id: str | int,
     ) -> list[Track]:
         """Return in-database album tracks for the given database album."""
-        subquery = f"SELECT track_id FROM {DB_TABLE_ALBUM_TRACKS} WHERE album_id = {item_id}"
-        query = f"WHERE tracks.item_id in ({subquery})"
-        return await self.mass.music.tracks._get_library_items_by_query(extra_query_parts=[query])
+        return await self.mass.music.tracks._get_library_items_by_query(
+            extra_query_parts=[f"WHERE album_tracks.album_id = {item_id}"],
+        )
 
     async def _add_library_item(self, item: Album) -> int:
         """Add a new record to the database."""
index aa2ecdc6d14ddc70fe27b0ebac62afb5b8b40155..dffc20c9b9ed77b259fc3a2abb1f301918c4729b 100644 (file)
@@ -745,6 +745,7 @@ class MediaControllerBase(Generic[ItemCls], metaclass=ABCMeta):
         if query_parts:
             sql_query += " WHERE " + " AND ".join(query_parts)
         # build final query
+        sql_query += f" GROUP BY {self.db_table}.item_id"
         if order_by:
             if sort_key := SORT_KEYS.get(order_by):
                 sql_query += f" ORDER BY {sort_key}"
index e4b7d853a6f46248826ecc9aa4fc422395b4f87a..a9220f099d98b33a4e2a0e9f126ea7f2d8279ec9 100644 (file)
@@ -82,8 +82,10 @@ class TracksController(MediaControllerBase[Track]):
                     'disc_number', album_tracks.disc_number,
                     'track_number', album_tracks.track_number,
                     'images', json_extract(albums.metadata, '$.images')
-                ) FROM albums JOIN album_tracks on album_tracks.track_id = tracks.item_id  WHERE albums.item_id = album_tracks.album_id) AS track_album
-            FROM tracks"""  # noqa: E501
+                ) FROM albums WHERE albums.item_id = album_tracks.album_id) AS track_album
+            FROM tracks
+            LEFT JOIN album_tracks on album_tracks.track_id = tracks.item_id
+            """  # noqa: E501
         # register (extra) api handlers
         api_base = self.api_base
         self.mass.register_api_command(f"music/{api_base}/track_versions", self.versions)
index 7cada57137250678845660793f58a11d86fe8c81..9e0e37e12a813da3f9d0f8371497dc59fac65939 100644 (file)
@@ -80,7 +80,7 @@ class DatabaseConnection:
         """Perform async initialization."""
         self._db = await aiosqlite.connect(self.db_path)
         self._db.row_factory = aiosqlite.Row
-        await self.execute("PRAGMA analysis_limit=400;")
+        await self.execute("PRAGMA analysis_limit=10000;")
         await self.execute("PRAGMA optimize;")
         await self.commit()