From 5b296eb488f117bad688b6a2b4b7bcf77f2e0146 Mon Sep 17 00:00:00 2001 From: Kavin <20838718+FireMasterK@users.noreply.github.com> Date: Sat, 19 Nov 2022 00:06:01 +0000 Subject: [PATCH] Handle playlist video querying correctly. --- .../me/kavin/piped/utils/DatabaseHelper.java | 38 ++++++++++--------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/src/main/java/me/kavin/piped/utils/DatabaseHelper.java b/src/main/java/me/kavin/piped/utils/DatabaseHelper.java index 47539fe..e417bf0 100644 --- a/src/main/java/me/kavin/piped/utils/DatabaseHelper.java +++ b/src/main/java/me/kavin/piped/utils/DatabaseHelper.java @@ -129,6 +129,26 @@ public class DatabaseHelper { } } + public static List getPlaylistVideosFromPlaylistId(SharedSessionContract s, String id, boolean fetchChannel) { + var query = s.createNativeQuery("SELECT {playlist_videos.*}, {channels.*} FROM playlist_videos JOIN channels ON playlist_videos.uploader_id = channels.uploader_id JOIN playlists_videos_ids ON playlist_videos.id = playlists_videos_ids.videos_id JOIN playlists ON playlists.id = playlists_videos_ids.playlist_id WHERE playlists.playlist_id = :id") + .addEntity("playlist_videos", PlaylistVideo.class) + .addEntity("channels", Channel.class) + .setParameter("id", UUID.fromString(id)); + + return query.getResultList().stream().map(o -> { + var arr = (Object[]) o; + var pv = ((PlaylistVideo) arr[0]); + pv.setChannel((Channel) arr[1]); + return pv; + }).toList(); + } + + public static List getPlaylistVideosFromPlaylistId(String id, boolean fetchChannel) { + try (StatelessSession s = DatabaseSessionFactory.createStatelessSession()) { + return getPlaylistVideosFromPlaylistId(s, id, fetchChannel); + } + } + public static List getPlaylistVideosFromIds(SharedSessionContract s, Collection id) { CriteriaBuilder cb = s.getCriteriaBuilder(); CriteriaQuery cr = cb.createQuery(PlaylistVideo.class); @@ -138,24 +158,6 @@ public class DatabaseHelper { return s.createQuery(cr).list(); } - public static List getPlaylistVideosFromPlaylistId(SharedSessionContract s, String id, boolean fetchChannel) { - CriteriaBuilder cb = s.getCriteriaBuilder(); - CriteriaQuery cr = cb.createQuery(PlaylistVideo.class); - var root = cr.from(PlaylistVideo.class); - cr.select(root); - root.fetch("channel", JoinType.LEFT); - var plRoot = cr.from(Playlist.class); - cr.where(cb.equal(plRoot.get("playlist_id"), UUID.fromString(id))); - - return s.createQuery(cr).list(); - } - - public static List getPlaylistVideosFromPlaylistId(String id, boolean fetchChannel) { - try (StatelessSession s = DatabaseSessionFactory.createStatelessSession()) { - return getPlaylistVideosFromPlaylistId(s, id, fetchChannel); - } - } - public static PubSub getPubSubFromId(SharedSessionContract s, String id) { CriteriaBuilder cb = s.getCriteriaBuilder(); CriteriaQuery cr = cb.createQuery(PubSub.class);