diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2017-05-22 00:54:02 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2017-05-22 00:54:02 -0400 |
| commit | 54cf0da75826d641b28a34afece7a4cb0eaaaec2 (patch) | |
| tree | 8d6f313fe9d71a5ecaf7a235eff4c5db6e68990b /Emby.Server.Implementations/Data/SqliteItemRepository.cs | |
| parent | 41ea0d99f4ee953d6e955c355cef0e5088f9b9fd (diff) | |
update query fields
Diffstat (limited to 'Emby.Server.Implementations/Data/SqliteItemRepository.cs')
| -rw-r--r-- | Emby.Server.Implementations/Data/SqliteItemRepository.cs | 254 |
1 files changed, 170 insertions, 84 deletions
diff --git a/Emby.Server.Implementations/Data/SqliteItemRepository.cs b/Emby.Server.Implementations/Data/SqliteItemRepository.cs index 49bf9e39c..fbd97b6a2 100644 --- a/Emby.Server.Implementations/Data/SqliteItemRepository.cs +++ b/Emby.Server.Implementations/Data/SqliteItemRepository.cs @@ -1415,66 +1415,69 @@ namespace Emby.Server.Implementations.Data var index = 5; - var hasProgramAttributes = item as IHasProgramAttributes; - if (hasProgramAttributes != null) + if (HasProgramAttributes(query)) { - if (!reader.IsDBNull(index)) + var hasProgramAttributes = item as IHasProgramAttributes; + if (hasProgramAttributes != null) { - hasProgramAttributes.IsMovie = reader.GetBoolean(index); - } - index++; + if (!reader.IsDBNull(index)) + { + hasProgramAttributes.IsMovie = reader.GetBoolean(index); + } + index++; - if (!reader.IsDBNull(index)) - { - hasProgramAttributes.IsSports = reader.GetBoolean(index); - } - index++; + if (!reader.IsDBNull(index)) + { + hasProgramAttributes.IsSports = reader.GetBoolean(index); + } + index++; - if (!reader.IsDBNull(index)) - { - hasProgramAttributes.IsKids = reader.GetBoolean(index); - } - index++; + if (!reader.IsDBNull(index)) + { + hasProgramAttributes.IsKids = reader.GetBoolean(index); + } + index++; - if (!reader.IsDBNull(index)) - { - hasProgramAttributes.IsSeries = reader.GetBoolean(index); - } - index++; + if (!reader.IsDBNull(index)) + { + hasProgramAttributes.IsSeries = reader.GetBoolean(index); + } + index++; - if (!reader.IsDBNull(index)) - { - hasProgramAttributes.IsLive = reader.GetBoolean(index); - } - index++; + if (!reader.IsDBNull(index)) + { + hasProgramAttributes.IsLive = reader.GetBoolean(index); + } + index++; - if (!reader.IsDBNull(index)) - { - hasProgramAttributes.IsNews = reader.GetBoolean(index); - } - index++; + if (!reader.IsDBNull(index)) + { + hasProgramAttributes.IsNews = reader.GetBoolean(index); + } + index++; - if (!reader.IsDBNull(index)) - { - hasProgramAttributes.IsPremiere = reader.GetBoolean(index); - } - index++; + if (!reader.IsDBNull(index)) + { + hasProgramAttributes.IsPremiere = reader.GetBoolean(index); + } + index++; - if (!reader.IsDBNull(index)) - { - hasProgramAttributes.EpisodeTitle = reader.GetString(index); - } - index++; + if (!reader.IsDBNull(index)) + { + hasProgramAttributes.EpisodeTitle = reader.GetString(index); + } + index++; - if (!reader.IsDBNull(index)) + if (!reader.IsDBNull(index)) + { + hasProgramAttributes.IsRepeat = reader.GetBoolean(index); + } + index++; + } + else { - hasProgramAttributes.IsRepeat = reader.GetBoolean(index); + index += 9; } - index++; - } - else - { - index += 9; } if (!reader.IsDBNull(index)) @@ -1483,7 +1486,7 @@ namespace Emby.Server.Implementations.Data } index++; - if (query.HasField(ItemFields.CustomRating)) + if (HasField(query, ItemFields.CustomRating)) { if (!reader.IsDBNull(index)) { @@ -1498,7 +1501,7 @@ namespace Emby.Server.Implementations.Data } index++; - if (query.HasField(ItemFields.Settings)) + if (HasField(query, ItemFields.Settings)) { if (!reader.IsDBNull(index)) { @@ -1525,7 +1528,7 @@ namespace Emby.Server.Implementations.Data } index++; - if (query.HasField(ItemFields.ExternalEtag)) + if (HasField(query, ItemFields.ExternalEtag)) { if (!reader.IsDBNull(index)) { @@ -1534,11 +1537,14 @@ namespace Emby.Server.Implementations.Data index++; } - if (!reader.IsDBNull(index)) + if (HasField(query, ItemFields.DateLastRefreshed)) { - item.DateLastRefreshed = reader[index].ReadDateTime(); + if (!reader.IsDBNull(index)) + { + item.DateLastRefreshed = reader[index].ReadDateTime(); + } + index++; } - index++; if (!reader.IsDBNull(index)) { @@ -1558,7 +1564,7 @@ namespace Emby.Server.Implementations.Data } index++; - if (query.HasField(ItemFields.Overview)) + if (HasField(query, ItemFields.Overview)) { if (!reader.IsDBNull(index)) { @@ -1585,7 +1591,7 @@ namespace Emby.Server.Implementations.Data } index++; - if (query.HasField(ItemFields.HomePageUrl)) + if (HasField(query, ItemFields.HomePageUrl)) { if (!reader.IsDBNull(index)) { @@ -1594,7 +1600,7 @@ namespace Emby.Server.Implementations.Data index++; } - if (query.HasField(ItemFields.DisplayMediaType)) + if (HasField(query, ItemFields.DisplayMediaType)) { if (!reader.IsDBNull(index)) { @@ -1603,7 +1609,7 @@ namespace Emby.Server.Implementations.Data index++; } - if (query.HasField(ItemFields.SortName)) + if (HasField(query, ItemFields.SortName)) { if (!reader.IsDBNull(index)) { @@ -1618,7 +1624,7 @@ namespace Emby.Server.Implementations.Data } index++; - if (query.HasField(ItemFields.VoteCount)) + if (HasField(query, ItemFields.VoteCount)) { if (!reader.IsDBNull(index)) { @@ -1627,7 +1633,7 @@ namespace Emby.Server.Implementations.Data index++; } - if (query.HasField(ItemFields.DateCreated)) + if (HasField(query, ItemFields.DateCreated)) { if (!reader.IsDBNull(index)) { @@ -1645,7 +1651,7 @@ namespace Emby.Server.Implementations.Data item.Id = reader.GetGuid(index); index++; - if (query.HasField(ItemFields.Genres)) + if (HasField(query, ItemFields.Genres)) { if (!reader.IsDBNull(index)) { @@ -1680,13 +1686,16 @@ namespace Emby.Server.Implementations.Data } index++; - if (!reader.IsDBNull(index)) + if (HasField(query, ItemFields.DateLastSaved)) { - item.DateLastSaved = reader[index].ReadDateTime(); + if (!reader.IsDBNull(index)) + { + item.DateLastSaved = reader[index].ReadDateTime(); + } + index++; } - index++; - if (query.HasField(ItemFields.Settings)) + if (HasField(query, ItemFields.Settings)) { if (!reader.IsDBNull(index)) { @@ -1695,7 +1704,7 @@ namespace Emby.Server.Implementations.Data index++; } - if (query.HasField(ItemFields.Studios)) + if (HasField(query, ItemFields.Studios)) { if (!reader.IsDBNull(index)) { @@ -1704,7 +1713,7 @@ namespace Emby.Server.Implementations.Data index++; } - if (query.HasField(ItemFields.Tags)) + if (HasField(query, ItemFields.Tags)) { if (!reader.IsDBNull(index)) { @@ -1729,7 +1738,7 @@ namespace Emby.Server.Implementations.Data } index++; - if (query.HasField(ItemFields.OriginalTitle)) + if (HasField(query, ItemFields.OriginalTitle)) { if (!reader.IsDBNull(index)) { @@ -1748,7 +1757,7 @@ namespace Emby.Server.Implementations.Data } index++; - if (query.HasField(ItemFields.DateLastMediaAdded)) + if (HasField(query, ItemFields.DateLastMediaAdded)) { var folder = item as Folder; if (folder != null && !reader.IsDBNull(index)) @@ -1814,7 +1823,7 @@ namespace Emby.Server.Implementations.Data } index++; - if (query.HasField(ItemFields.PresentationUniqueKey)) + if (HasField(query, ItemFields.PresentationUniqueKey)) { if (!reader.IsDBNull(index)) { @@ -1823,7 +1832,7 @@ namespace Emby.Server.Implementations.Data index++; } - if (query.HasField(ItemFields.InheritedParentalRatingValue)) + if (HasField(query, ItemFields.InheritedParentalRatingValue)) { if (!reader.IsDBNull(index)) { @@ -1832,7 +1841,7 @@ namespace Emby.Server.Implementations.Data index++; } - if (query.HasField(ItemFields.Tags)) + if (HasField(query, ItemFields.Tags)) { if (!reader.IsDBNull(index)) { @@ -1841,7 +1850,7 @@ namespace Emby.Server.Implementations.Data index++; } - if (query.HasField(ItemFields.ExternalSeriesId)) + if (HasField(query, ItemFields.ExternalSeriesId)) { if (!reader.IsDBNull(index)) { @@ -1850,7 +1859,7 @@ namespace Emby.Server.Implementations.Data index++; } - if (query.HasField(ItemFields.Taglines)) + if (HasField(query, ItemFields.Taglines)) { if (!reader.IsDBNull(index)) { @@ -1859,7 +1868,7 @@ namespace Emby.Server.Implementations.Data index++; } - if (query.HasField(ItemFields.Keywords)) + if (HasField(query, ItemFields.Keywords)) { if (!reader.IsDBNull(index)) { @@ -1883,7 +1892,7 @@ namespace Emby.Server.Implementations.Data index++; } - if (query.HasField(ItemFields.ProductionLocations)) + if (HasField(query, ItemFields.ProductionLocations)) { if (!reader.IsDBNull(index)) { @@ -1892,7 +1901,7 @@ namespace Emby.Server.Implementations.Data index++; } - if (query.HasField(ItemFields.ThemeSongIds)) + if (HasField(query, ItemFields.ThemeSongIds)) { if (!reader.IsDBNull(index)) { @@ -1901,7 +1910,7 @@ namespace Emby.Server.Implementations.Data index++; } - if (query.HasField(ItemFields.ThemeVideoIds)) + if (HasField(query, ItemFields.ThemeVideoIds)) { if (!reader.IsDBNull(index)) { @@ -1942,14 +1951,17 @@ namespace Emby.Server.Implementations.Data } index++; - if (hasSeries != null) + if (HasField(query, ItemFields.SeriesPresentationUniqueKey)) { - if (!reader.IsDBNull(index)) + if (hasSeries != null) { - hasSeries.SeriesPresentationUniqueKey = reader.GetString(index); + if (!reader.IsDBNull(index)) + { + hasSeries.SeriesPresentationUniqueKey = reader.GetString(index); + } } + index++; } - index++; return item; } @@ -2259,13 +2271,73 @@ namespace Emby.Server.Implementations.Data return new[] { field.ToString() }; } + private bool HasField(InternalItemsQuery query, ItemFields name) + { + var fields = query.DtoOptions.Fields; + + switch (name) + { + case ItemFields.HomePageUrl: + case ItemFields.Keywords: + case ItemFields.DisplayMediaType: + case ItemFields.VoteCount: + case ItemFields.CustomRating: + case ItemFields.ProductionLocations: + case ItemFields.Settings: + case ItemFields.OriginalTitle: + case ItemFields.Taglines: + case ItemFields.SortName: + case ItemFields.Studios: + case ItemFields.Tags: + case ItemFields.ThemeSongIds: + case ItemFields.ThemeVideoIds: + case ItemFields.DateCreated: + case ItemFields.Overview: + case ItemFields.Genres: + case ItemFields.DateLastMediaAdded: + case ItemFields.ExternalEtag: + case ItemFields.PresentationUniqueKey: + case ItemFields.InheritedParentalRatingValue: + case ItemFields.ExternalSeriesId: + case ItemFields.SeriesPresentationUniqueKey: + case ItemFields.DateLastRefreshed: + case ItemFields.DateLastSaved: + return fields.Contains(name); + case ItemFields.ServiceName: + return true; + default: + return true; + } + } + + private bool HasProgramAttributes(InternalItemsQuery query) + { + if (query.IncludeItemTypes.Length == 0) + { + return true; + } + + var types = new string[] + { + "Program", + "Recording", + "TvChannel", + "LiveTvAudioRecording", + "LiveTvVideoRecording", + "LiveTvProgram", + "LiveTvTvChannel" + }; + + return types.Any(i => query.IncludeItemTypes.Contains(i, StringComparer.OrdinalIgnoreCase)); + } + private string[] GetFinalColumnsToSelect(InternalItemsQuery query, string[] startColumns) { var list = startColumns.ToList(); foreach (var field in allFields) { - if (!query.HasField(field)) + if (!HasField(query, field)) { foreach (var fieldToRemove in GetColumnNamesFromField(field).ToList()) { @@ -2274,6 +2346,19 @@ namespace Emby.Server.Implementations.Data } } + if (!HasProgramAttributes(query)) + { + list.Remove("IsKids"); + list.Remove("IsMovie"); + list.Remove("IsSports"); + list.Remove("IsSeries"); + list.Remove("IsLive"); + list.Remove("IsNews"); + list.Remove("IsPremiere"); + list.Remove("EpisodeTitle"); + list.Remove("IsRepeat"); + } + if (!query.DtoOptions.EnableImages) { list.Remove("Images"); @@ -2400,7 +2485,7 @@ namespace Emby.Server.Implementations.Data query.Limit = query.Limit.Value + 4; } - var commandText = "select " + string.Join(",", GetFinalColumnsToSelect(query, new [] { "count(distinct PresentationUniqueKey)" })) + GetFromText(); + var commandText = "select " + string.Join(",", GetFinalColumnsToSelect(query, new[] { "count(distinct PresentationUniqueKey)" })) + GetFromText(); commandText += GetJoinUserDataText(query); var whereClauses = GetWhereClauses(query, null); @@ -3671,6 +3756,7 @@ namespace Emby.Server.Implementations.Data if (!string.IsNullOrWhiteSpace(query.SlugName)) { + Logger.Info("Searching by SlugName for {0}", query.SlugName); whereClauses.Add("CleanName=@SlugName"); if (statement != null) { |
