diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2016-06-28 00:47:30 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2016-06-28 00:47:30 -0400 |
| commit | bbdd2c5f6a1ce4640d3e11e158c3630f701419c2 (patch) | |
| tree | 844cd094bbdb96533574d5a0217061a3e004a8af /MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs | |
| parent | c1e83beeac9c71481c6f1e0d6d0cad8a6c384fbe (diff) | |
update xmltv
Diffstat (limited to 'MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs')
| -rw-r--r-- | MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs | 87 |
1 files changed, 51 insertions, 36 deletions
diff --git a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs index f109b34d6..9338a8706 100644 --- a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs +++ b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs @@ -160,8 +160,6 @@ namespace MediaBrowser.Server.Implementations.Persistence "create table if not exists UserDataKeys (ItemId GUID, UserDataKey TEXT Priority INT, PRIMARY KEY (ItemId, UserDataKey))", "create table if not exists ItemValues (ItemId GUID, Type INT, Value TEXT, CleanValue TEXT)", - //"create index if not exists idx_ItemValues on ItemValues(ItemId)", - "create index if not exists idx_ItemValues2 on ItemValues(ItemId,Type)", "create table if not exists ProviderIds (ItemId GUID, Name TEXT, Value TEXT, PRIMARY KEY (ItemId, Name))", // covering index @@ -321,6 +319,7 @@ namespace MediaBrowser.Server.Implementations.Persistence // items by name "create index if not exists idx_ItemValues6 on ItemValues(ItemId,Type,CleanValue)", + "create index if not exists idx_ItemValues7 on ItemValues(Type,CleanValue,ItemId)", // covering index "create index if not exists idx_UserDataKeys3 on UserDataKeys(ItemId,Priority,UserDataKey)" @@ -1776,9 +1775,9 @@ namespace MediaBrowser.Server.Implementations.Persistence return string.Empty; } - private string GetFromText() + private string GetFromText(string alias = "A") { - return " from TypedBaseItems A"; + return " from TypedBaseItems " + alias; } public List<BaseItem> GetItemList(InternalItemsQuery query) @@ -3661,19 +3660,14 @@ namespace MediaBrowser.Server.Implementations.Persistence var typesToCount = query.IncludeItemTypes.ToList(); - if (typesToCount.Count == 0) - { - //typesToCount.Add("Item"); - } - - foreach (var type in typesToCount) + if (typesToCount.Count > 0) { - var itemCountColumnQuery = "Select Count(CleanValue) from ItemValues where ItemValues.CleanValue=CleanName AND Type=@ItemValueType AND ItemId in ("; - itemCountColumnQuery += "select guid" + GetFromText(); + var itemCountColumnQuery = "select group_concat(type, '|')" + GetFromText("B"); var typeSubQuery = new InternalItemsQuery(query.User) { ExcludeItemTypes = query.ExcludeItemTypes, + IncludeItemTypes = query.IncludeItemTypes, MediaTypes = query.MediaTypes, AncestorIds = query.AncestorIds, ExcludeItemIds = query.ExcludeItemIds, @@ -3682,15 +3676,9 @@ namespace MediaBrowser.Server.Implementations.Persistence ParentId = query.ParentId, IsPlayed = query.IsPlayed }; - if (string.Equals(type, "Item", StringComparison.OrdinalIgnoreCase)) - { - typeSubQuery.IncludeItemTypes = query.IncludeItemTypes; - } - else - { - typeSubQuery.IncludeItemTypes = new[] { type }; - } - var whereClauses = GetWhereClauses(typeSubQuery, cmd, type); + var whereClauses = GetWhereClauses(typeSubQuery, cmd, "itemTypes"); + + whereClauses.Add("guid in (select ItemId from ItemValues where ItemValues.CleanValue=A.CleanName AND Type=@ItemValueType)"); var typeWhereText = whereClauses.Count == 0 ? string.Empty : @@ -3698,11 +3686,9 @@ namespace MediaBrowser.Server.Implementations.Persistence itemCountColumnQuery += typeWhereText; - itemCountColumnQuery += ")"; + //itemCountColumnQuery += ")"; - var columnName = type + "Count"; - - itemCountColumns.Add(new Tuple<string, string>(columnName, "(" + itemCountColumnQuery + ") as " + columnName)); + itemCountColumns.Add(new Tuple<string, string>("itemTypes", "(" + itemCountColumnQuery + ") as itemTypes")); } var columns = _retriveItemColumns.ToList(); @@ -3731,7 +3717,15 @@ namespace MediaBrowser.Server.Implementations.Persistence " where " + string.Join(" AND ", innerWhereClauses.ToArray()); var whereText = " where Type=@SelectType"; - whereText += " And CleanName In (Select CleanValue from ItemValues where Type=@ItemValueType AND ItemId in (select guid from TypedBaseItems" + innerWhereText + "))"; + + if (typesToCount.Count == 0) + { + whereText += " And CleanName In (Select CleanValue from ItemValues where Type=@ItemValueType AND ItemId in (select guid from TypedBaseItems" + innerWhereText + "))"; + } + else + { + whereText += " And itemTypes not null"; + } var outerQuery = new InternalItemsQuery(query.User) { @@ -3812,6 +3806,8 @@ namespace MediaBrowser.Server.Implementations.Persistence ? (CommandBehavior.SequentialAccess | CommandBehavior.SingleResult) : CommandBehavior.SequentialAccess; + //Logger.Debug("GetItemValues: " + cmd.CommandText); + using (var reader = cmd.ExecuteReader(commandBehavior)) { LogQueryTime("GetItemValues", cmd, now); @@ -3830,7 +3826,7 @@ namespace MediaBrowser.Server.Implementations.Persistence var item = GetItem(reader); if (item != null) { - var countStartColumn = columns.Count - typesToCount.Count; + var countStartColumn = columns.Count - 1; list.Add(new Tuple<BaseItem, ItemCounts>(item, GetItemCounts(reader, countStartColumn, typesToCount))); } @@ -3861,35 +3857,54 @@ namespace MediaBrowser.Server.Implementations.Persistence { var counts = new ItemCounts(); - for (var i = 0; i < typesToCount.Count; i++) + if (typesToCount.Count == 0) + { + return counts; + } + + var typeString = reader.IsDBNull(countStartColumn) ? null : reader.GetString(countStartColumn); + + if (string.IsNullOrWhiteSpace(typeString)) { - var value = reader.GetInt32(countStartColumn + i); + return counts; + } - var type = typesToCount[i]; - if (string.Equals(type, "Series", StringComparison.OrdinalIgnoreCase)) + var allTypes = typeString.Split(new[] {'|'}, StringSplitOptions.RemoveEmptyEntries) + .ToLookup(i => i).ToList(); + + foreach (var type in allTypes) + { + var value = type.ToList().Count; + var typeName = type.Key; + + if (string.Equals(typeName, typeof(Series).FullName, StringComparison.OrdinalIgnoreCase)) { counts.SeriesCount = value; } - else if (string.Equals(type, "Episode", StringComparison.OrdinalIgnoreCase)) + else if (string.Equals(typeName, typeof(Episode).FullName, StringComparison.OrdinalIgnoreCase)) { counts.EpisodeCount = value; } - else if (string.Equals(type, "Movie", StringComparison.OrdinalIgnoreCase)) + else if (string.Equals(typeName, typeof(Movie).FullName, StringComparison.OrdinalIgnoreCase)) { counts.MovieCount = value; } - else if (string.Equals(type, "MusicAlbum", StringComparison.OrdinalIgnoreCase)) + else if (string.Equals(typeName, typeof(MusicAlbum).FullName, StringComparison.OrdinalIgnoreCase)) { counts.AlbumCount = value; } - else if (string.Equals(type, "Audio", StringComparison.OrdinalIgnoreCase)) + else if (string.Equals(typeName, typeof(Audio).FullName, StringComparison.OrdinalIgnoreCase)) { counts.SongCount = value; } - else if (string.Equals(type, "Game", StringComparison.OrdinalIgnoreCase)) + else if (string.Equals(typeName, typeof(Game).FullName, StringComparison.OrdinalIgnoreCase)) { counts.GameCount = value; } + else if (string.Equals(typeName, typeof(Trailer).FullName, StringComparison.OrdinalIgnoreCase)) + { + counts.TrailerCount = value; + } counts.ItemCount += value; } |
