예제 #1
0
        /*public override PagingSpec<Movie> GetPaged(PagingSpec<Movie> pagingSpec)
         *      {
         *              if (pagingSpec.SortKey == "downloadedQuality")
         *              {
         *                      var mapper = _database.GetDataMapper();
         *                      var offset = pagingSpec.PagingOffset();
         *                      var limit = pagingSpec.PageSize;
         *                      var direction = "ASC";
         *                      if (pagingSpec.SortDirection == NzbDrone.Core.Datastore.SortDirection.Descending)
         *                      {
         *                              direction = "DESC";
         *                      }
         *                      var q = mapper.Query<Movie>($"SELECT * from \"Movies\" , \"MovieFiles\", \"QualityDefinitions\" WHERE Movies.MovieFileId=MovieFiles.Id AND instr(MovieFiles.Quality, ('quality\": ' || QualityDefinitions.Quality || \",\")) > 0 ORDER BY QualityDefinitions.Title {direction} LIMIT {offset},{limit};");
         *                      var q2 = mapper.Query<Movie>("SELECT * from \"Movies\" , \"MovieFiles\", \"QualityDefinitions\" WHERE Movies.MovieFileId=MovieFiles.Id AND instr(MovieFiles.Quality, ('quality\": ' || QualityDefinitions.Quality || \",\")) > 0 ORDER BY QualityDefinitions.Title ASC;");
         *
         *                      //var ok = q.BuildQuery();
         *                  var q3 = Query.OrderBy("json_extract([t2].[quality], '$.quality') DESC");
         *
         *                      pagingSpec.Records = q3.ToList();
         *                      pagingSpec.TotalRecords = q3.GetRowCount();
         *
         *              }
         *              else
         *              {
         *                      pagingSpec = base.GetPaged(pagingSpec);
         *                  //pagingSpec.Records = GetPagedQuery(Query, pagingSpec).ToList();
         *                  //pagingSpec.TotalRecords = GetPagedQuery(Query, pagingSpec).GetRowCount();
         *              }
         *
         *              if (pagingSpec.Records.Count == 0 && pagingSpec.Page != 1)
         *              {
         *                      var lastPossiblePage = pagingSpec.TotalRecords / pagingSpec.PageSize + 1;
         *                      pagingSpec.Page = lastPossiblePage;
         *                      return GetPaged(pagingSpec);
         *              }
         *
         *              return pagingSpec;
         *      }*/

        /*protected override SortBuilder<Movie> GetPagedQuery(QueryBuilder<Movie> query, PagingSpec<Movie> pagingSpec)
         * {
         *  return DataMapper.Query<Movie>().Join<Movie, AlternativeTitle>(JoinType.Left, m => m.AlternativeTitles,
         *      (m, t) => m.Id == t.MovieId).Where(pagingSpec.FilterExpression)
         *      .OrderBy(pagingSpec.OrderByClause(), pagingSpec.ToSortDirection())
         *      .Skip(pagingSpec.PagingOffset())
         *      .Take(pagingSpec.PageSize);
         * }*/

        /*protected override SortBuilder<Movie> GetPagedQuery(QueryBuilder<Movie> query, PagingSpec<Movie> pagingSpec)
         * {
         *  var newQuery = base.GetPagedQuery(query.Join<Movie, AlternativeTitle>(JoinType.Left, m => m.JoinAlternativeTitles, (movie, title) => title.MovieId == movie.Id), pagingSpec);
         *  System.Console.WriteLine(newQuery.ToString());
         *  return newQuery;
         * }*/

        public SortBuilder <Movie> GetMoviesWithoutFilesQuery(QueryBuilder <Movie> Query, PagingSpec <Movie> pagingSpec)
        {
            return(Query.Where(pagingSpec.FilterExpression)
                   .AndWhere(m => m.MovieFileId == 0)
                   .OrderBy(pagingSpec.OrderByClause(x => x.SortTitle), pagingSpec.ToSortDirection())
                   .Skip(pagingSpec.PagingOffset())
                   .Take(pagingSpec.PageSize));
        }
예제 #2
0
 private SortBuilder <Movie> MoviesWhereCutoffUnmetQuery(QueryBuilder <Movie> Query, PagingSpec <Movie> pagingSpec, List <QualitiesBelowCutoff> qualitiesBelowCutoff)
 {
     return(Query.Where(pagingSpec.FilterExpression)
            .AndWhere(m => m.MovieFileId != 0)
            .AndWhere(BuildQualityCutoffWhereClause(qualitiesBelowCutoff))
            .OrderBy(pagingSpec.OrderByClause(x => x.SortTitle), pagingSpec.ToSortDirection())
            .Skip(pagingSpec.PagingOffset())
            .Take(pagingSpec.PageSize));
 }
예제 #3
0
 private SortBuilder <History> GetPagedQuery(PagingSpec <History> pagingSpec)
 {
     return(Query.Join <History, Series>(JoinType.Inner, h => h.Series, (h, s) => h.SeriesId == s.Id)
            .Join <History, Episode>(JoinType.Inner, h => h.Episode, (h, e) => h.EpisodeId == e.Id)
            .Where(pagingSpec.FilterExpression)
            .OrderBy(pagingSpec.OrderByClause(), pagingSpec.ToSortDirection())
            .Skip(pagingSpec.PagingOffset())
            .Take(pagingSpec.PageSize));
 }
예제 #4
0
 private SortBuilder <Movie> MoviesWhereCutoffUnmetQuery(PagingSpec <Movie> pagingSpec, List <QualitiesBelowCutoff> qualitiesBelowCutoff)
 {
     return(Query.Join <Movie, MovieFile>(JoinType.Left, e => e.MovieFile, (e, s) => e.MovieFileId == s.Id)
            .Where(pagingSpec.FilterExpression)
            .AndWhere(m => m.MovieFileId != 0)
            .AndWhere(BuildQualityCutoffWhereClause(qualitiesBelowCutoff))
            .OrderBy(pagingSpec.OrderByClause(), pagingSpec.ToSortDirection())
            .Skip(pagingSpec.PagingOffset())
            .Take(pagingSpec.PageSize));
 }
예제 #5
0
 private SortBuilder <Episode> GetMissingEpisodesQuery(PagingSpec <Episode> pagingSpec, DateTime currentTime, int startingSeasonNumber)
 {
     return(Query.Join <Episode, Series>(JoinType.Inner, e => e.Series, (e, s) => e.SeriesId == s.Id)
            .Where(pagingSpec.FilterExpression)
            .AndWhere(e => e.EpisodeFileId == 0)
            .AndWhere(e => e.SeasonNumber >= startingSeasonNumber)
            .AndWhere(BuildAirDateUtcCutoffWhereClause(currentTime))
            .OrderBy(pagingSpec.OrderByClause(), pagingSpec.ToSortDirection())
            .Skip(pagingSpec.PagingOffset())
            .Take(pagingSpec.PageSize));
 }
예제 #6
0
 private SortBuilder <Episode> EpisodesWhereCutoffUnmetQuery(PagingSpec <Episode> pagingSpec, List <QualitiesBelowCutoff> qualitiesBelowCutoff, int startingSeasonNumber)
 {
     return(Query.Join <Episode, Series>(JoinType.Inner, e => e.Series, (e, s) => e.SeriesId == s.Id)
            .Join <Episode, EpisodeFile>(JoinType.Left, e => e.EpisodeFile, (e, s) => e.EpisodeFileId == s.Id)
            .Where(pagingSpec.FilterExpression)
            .AndWhere(e => e.EpisodeFileId != 0)
            .AndWhere(e => e.SeasonNumber >= startingSeasonNumber)
            .AndWhere(BuildQualityCutoffWhereClause(qualitiesBelowCutoff))
            .OrderBy(pagingSpec.OrderByClause(), pagingSpec.ToSortDirection())
            .Skip(pagingSpec.PagingOffset())
            .Take(pagingSpec.PageSize));
 }
예제 #7
0
 private SortBuilder <Episode> GetEpisodesWithoutFilesQuery(PagingSpec <Episode> pagingSpec, DateTime currentTime, int startingSeasonNumber)
 {
     return(Query.Join <Episode, Series>(JoinType.Inner, e => e.Series, (e, s) => e.SeriesId == s.Id)
            .Where(e => e.EpisodeFileId == 0)
            .AndWhere(e => e.SeasonNumber >= startingSeasonNumber)
            .AndWhere(e => e.AirDateUtc <= currentTime)
            .AndWhere(e => e.Monitored)
            .AndWhere(e => e.Series.Monitored)
            .OrderBy(pagingSpec.OrderByClause(), pagingSpec.ToSortDirection())
            .Skip(pagingSpec.PagingOffset())
            .Take(pagingSpec.PageSize));
 }
예제 #8
0
        public void should_convert_descending_to_desc()
        {
            var pagingSpec = new PagingSpec<Episode>
            {
                Page = 1,
                PageSize = 10,
                SortDirection = SortDirection.Descending,
                SortKey = "AirDate"
            };

            pagingSpec.ToSortDirection().Should().Be(Marr.Data.QGen.SortDirection.Desc);
        }
예제 #9
0
        public void should_convert_descending_to_desc()
        {
            var pagingSpec = new PagingSpec <Album>
            {
                Page          = 1,
                PageSize      = 10,
                SortDirection = SortDirection.Descending,
                SortKey       = "ReleaseDate"
            };

            pagingSpec.ToSortDirection().Should().Be(Marr.Data.QGen.SortDirection.Desc);
        }
예제 #10
0
        public void should_convert_ascending_to_asc()
        {
            var pagingSpec = new PagingSpec <Episode>
            {
                Page          = 1,
                PageSize      = 10,
                SortDirection = SortDirection.Ascending,
                SortKey       = "AirDate"
            };

            pagingSpec.ToSortDirection().Should().Be(Marr.Data.QGen.SortDirection.Asc);
        }
예제 #11
0
        public void should_convert_default_to_asc()
        {
            var pagingSpec = new PagingSpec <Movie>
            {
                Page          = 1,
                PageSize      = 10,
                SortDirection = SortDirection.Default,
                SortKey       = "AirDate"
            };

            pagingSpec.ToSortDirection().Should().Be(Marr.Data.QGen.SortDirection.Asc);
        }
예제 #12
0
        public override PagingSpec <History> GetPaged(PagingSpec <History> pagingSpec)
        {
            var pagingQuery = Query.Join <History, Series>(JoinType.Inner, h => h.Series, (h, s) => h.SeriesId == s.Id)
                              .Join <History, Episode>(JoinType.Inner, h => h.Episode, (h, e) => h.EpisodeId == e.Id)
                              .OrderBy(pagingSpec.OrderByClause(), pagingSpec.ToSortDirection())
                              .Skip(pagingSpec.PagingOffset())
                              .Take(pagingSpec.PageSize);

            pagingSpec.Records = pagingQuery.ToList();

            //TODO: Use the same query for count and records
            pagingSpec.TotalRecords = Count();

            return(pagingSpec);
        }
예제 #13
0
        private QueryBuilder <Album> GetCutOffAlbumsQuery(PagingSpec <Album> pagingSpec, List <QualitiesBelowCutoff> qualitiesBelowCutoff)
        {
            string sortKey;
            string monitored = "(Albums.[Monitored] = 0) OR (Artists.[Monitored] = 0)";

            if (pagingSpec.FilterExpressions.FirstOrDefault().ToString().Contains("True"))
            {
                monitored = "(Albums.[Monitored] = 1) AND (Artists.[Monitored] = 1)";
            }

            if (pagingSpec.SortKey == "releaseDate")
            {
                sortKey = "Albums." + pagingSpec.SortKey;
            }
            else if (pagingSpec.SortKey == "artist.sortName")
            {
                sortKey = "Artists." + pagingSpec.SortKey.Split('.').Last();
            }
            else if (pagingSpec.SortKey == "albumTitle")
            {
                sortKey = "Albums.title";
            }
            else
            {
                sortKey = "Albums.releaseDate";
            }

            string query = string.Format("SELECT Albums.* " +
                                         "FROM Albums " +
                                         "JOIN Artists on Albums.ArtistMetadataId == Artists.ArtistMetadataId " +
                                         "JOIN AlbumReleases ON AlbumReleases.AlbumId == Albums.Id " +
                                         "JOIN Tracks ON Tracks.AlbumReleaseId == AlbumReleases.Id " +
                                         "JOIN TrackFiles ON TrackFiles.Id == Tracks.TrackFileId " +
                                         "WHERE {0} " +
                                         "AND AlbumReleases.Monitored = 1 " +
                                         "GROUP BY Albums.Id " +
                                         "HAVING {1} " +
                                         "ORDER BY {2} {3} LIMIT {4} OFFSET {5}",
                                         monitored,
                                         BuildQualityCutoffWhereClause(qualitiesBelowCutoff),
                                         sortKey,
                                         pagingSpec.ToSortDirection(),
                                         pagingSpec.PageSize,
                                         pagingSpec.PagingOffset());

            return(Query.QueryText(query));
        }