update next up queries
This commit is contained in:
parent
c2d0fd9985
commit
d84bb7160f
|
@ -2443,6 +2443,66 @@ namespace Emby.Server.Implementations.Data
|
||||||
return " from TypedBaseItems " + alias;
|
return " from TypedBaseItems " + alias;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int GetCount(InternalItemsQuery query)
|
||||||
|
{
|
||||||
|
if (query == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("query");
|
||||||
|
}
|
||||||
|
|
||||||
|
CheckDisposed();
|
||||||
|
|
||||||
|
//Logger.Info("GetItemList: " + _environmentInfo.StackTrace);
|
||||||
|
|
||||||
|
var now = DateTime.UtcNow;
|
||||||
|
|
||||||
|
// Hack for right now since we currently don't support filtering out these duplicates within a query
|
||||||
|
if (query.Limit.HasValue && query.EnableGroupByMetadataKey)
|
||||||
|
{
|
||||||
|
query.Limit = query.Limit.Value + 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
var commandText = "select " + string.Join(",", GetFinalColumnsToSelect(query, new [] { "count(distinct PresentationUniqueKey)" })) + GetFromText();
|
||||||
|
commandText += GetJoinUserDataText(query);
|
||||||
|
|
||||||
|
var whereClauses = GetWhereClauses(query, null);
|
||||||
|
|
||||||
|
var whereText = whereClauses.Count == 0 ?
|
||||||
|
string.Empty :
|
||||||
|
" where " + string.Join(" AND ", whereClauses.ToArray());
|
||||||
|
|
||||||
|
commandText += whereText;
|
||||||
|
|
||||||
|
//commandText += GetGroupBy(query);
|
||||||
|
|
||||||
|
int count = 0;
|
||||||
|
|
||||||
|
using (WriteLock.Read())
|
||||||
|
{
|
||||||
|
using (var connection = CreateConnection(true))
|
||||||
|
{
|
||||||
|
using (var statement = PrepareStatementSafe(connection, commandText))
|
||||||
|
{
|
||||||
|
if (EnableJoinUserData(query))
|
||||||
|
{
|
||||||
|
statement.TryBind("@UserId", query.User.Id);
|
||||||
|
}
|
||||||
|
|
||||||
|
BindSimilarParams(query, statement);
|
||||||
|
|
||||||
|
// Running this again will bind the params
|
||||||
|
GetWhereClauses(query, statement);
|
||||||
|
|
||||||
|
count = statement.ExecuteQuery().SelectScalarInt().First();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LogQueryTime("GetCount", commandText, now);
|
||||||
|
}
|
||||||
|
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
public List<BaseItem> GetItemList(InternalItemsQuery query)
|
public List<BaseItem> GetItemList(InternalItemsQuery query)
|
||||||
{
|
{
|
||||||
if (query == null)
|
if (query == null)
|
||||||
|
@ -2859,7 +2919,7 @@ namespace Emby.Server.Implementations.Data
|
||||||
}
|
}
|
||||||
if (string.Equals(name, ItemSortBy.SeriesDatePlayed, StringComparison.OrdinalIgnoreCase))
|
if (string.Equals(name, ItemSortBy.SeriesDatePlayed, StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
return new Tuple<string, bool>("(Select MAX(LastPlayedDate) from TypedBaseItems B" + GetJoinUserDataText(query) + " where B.SeriesPresentationUniqueKey=A.PresentationUniqueKey)", false);
|
return new Tuple<string, bool>("(Select MAX(LastPlayedDate) from TypedBaseItems B" + GetJoinUserDataText(query) + " where Played=1 and B.SeriesPresentationUniqueKey=A.PresentationUniqueKey)", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
return new Tuple<string, bool>(name, false);
|
return new Tuple<string, bool>(name, false);
|
||||||
|
|
|
@ -1279,6 +1279,26 @@ namespace Emby.Server.Implementations.Library
|
||||||
return ItemRepository.GetItemList(query);
|
return ItemRepository.GetItemList(query);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int GetCount(InternalItemsQuery query)
|
||||||
|
{
|
||||||
|
if (query.Recursive && query.ParentId.HasValue)
|
||||||
|
{
|
||||||
|
var parent = GetItemById(query.ParentId.Value);
|
||||||
|
if (parent != null)
|
||||||
|
{
|
||||||
|
SetTopParentIdsOrAncestors(query, new List<BaseItem> { parent });
|
||||||
|
query.ParentId = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (query.User != null)
|
||||||
|
{
|
||||||
|
AddUserToQuery(query, query.User);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ItemRepository.GetCount(query);
|
||||||
|
}
|
||||||
|
|
||||||
public IEnumerable<BaseItem> GetItemList(InternalItemsQuery query, List<BaseItem> parents)
|
public IEnumerable<BaseItem> GetItemList(InternalItemsQuery query, List<BaseItem> parents)
|
||||||
{
|
{
|
||||||
SetTopParentIdsOrAncestors(query, parents);
|
SetTopParentIdsOrAncestors(query, parents);
|
||||||
|
|
|
@ -138,16 +138,24 @@ namespace MediaBrowser.Controller.Entities.TV
|
||||||
var enableSeriesPresentationKey = ConfigurationManager.Configuration.EnableSeriesPresentationUniqueKey;
|
var enableSeriesPresentationKey = ConfigurationManager.Configuration.EnableSeriesPresentationUniqueKey;
|
||||||
var seriesKey = GetUniqueSeriesKey(this);
|
var seriesKey = GetUniqueSeriesKey(this);
|
||||||
|
|
||||||
var result = LibraryManager.GetItemsResult(new InternalItemsQuery(user)
|
var result = LibraryManager.GetCount(new InternalItemsQuery(user)
|
||||||
{
|
{
|
||||||
AncestorWithPresentationUniqueKey = enableSeriesPresentationKey ? null : seriesKey,
|
AncestorWithPresentationUniqueKey = enableSeriesPresentationKey ? null : seriesKey,
|
||||||
SeriesPresentationUniqueKey = enableSeriesPresentationKey ? seriesKey : null,
|
SeriesPresentationUniqueKey = enableSeriesPresentationKey ? seriesKey : null,
|
||||||
IncludeItemTypes = new[] { typeof(Season).Name },
|
IncludeItemTypes = new[] { typeof(Season).Name },
|
||||||
IsVirtualItem = false,
|
IsVirtualItem = false,
|
||||||
Limit = 0
|
Limit = 0,
|
||||||
|
DtoOptions = new Dto.DtoOptions
|
||||||
|
{
|
||||||
|
Fields = new List<ItemFields>
|
||||||
|
{
|
||||||
|
|
||||||
|
},
|
||||||
|
EnableImages = false
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
return result.TotalRecordCount;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override int GetRecursiveChildCount(User user)
|
public override int GetRecursiveChildCount(User user)
|
||||||
|
@ -159,19 +167,23 @@ namespace MediaBrowser.Controller.Entities.TV
|
||||||
{
|
{
|
||||||
AncestorWithPresentationUniqueKey = enableSeriesPresentationKey ? null : seriesKey,
|
AncestorWithPresentationUniqueKey = enableSeriesPresentationKey ? null : seriesKey,
|
||||||
SeriesPresentationUniqueKey = enableSeriesPresentationKey ? seriesKey : null,
|
SeriesPresentationUniqueKey = enableSeriesPresentationKey ? seriesKey : null,
|
||||||
|
DtoOptions = new Dto.DtoOptions
|
||||||
|
{
|
||||||
|
Fields = new List<ItemFields>
|
||||||
|
{
|
||||||
|
|
||||||
|
},
|
||||||
|
EnableImages = false
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
if (query.SortBy.Length == 0)
|
|
||||||
{
|
|
||||||
query.SortBy = new[] { ItemSortBy.SortName };
|
|
||||||
}
|
|
||||||
if (query.IncludeItemTypes.Length == 0)
|
if (query.IncludeItemTypes.Length == 0)
|
||||||
{
|
{
|
||||||
query.IncludeItemTypes = new[] { typeof(Episode).Name, typeof(Season).Name };
|
query.IncludeItemTypes = new[] { typeof(Episode).Name, typeof(Season).Name };
|
||||||
}
|
}
|
||||||
query.IsVirtualItem = false;
|
query.IsVirtualItem = false;
|
||||||
query.Limit = 0;
|
query.Limit = 0;
|
||||||
var totalRecordCount = LibraryManager.GetItemsResult(query).TotalRecordCount;
|
var totalRecordCount = LibraryManager.GetCount(query);
|
||||||
|
|
||||||
return totalRecordCount;
|
return totalRecordCount;
|
||||||
}
|
}
|
||||||
|
|
|
@ -571,5 +571,6 @@ namespace MediaBrowser.Controller.Library
|
||||||
|
|
||||||
void RegisterIgnoredPath(string path);
|
void RegisterIgnoredPath(string path);
|
||||||
void UnRegisterIgnoredPath(string path);
|
void UnRegisterIgnoredPath(string path);
|
||||||
|
int GetCount(InternalItemsQuery query);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -163,6 +163,8 @@ namespace MediaBrowser.Controller.Persistence
|
||||||
/// <returns>Task.</returns>
|
/// <returns>Task.</returns>
|
||||||
Task UpdateInheritedValues(CancellationToken cancellationToken);
|
Task UpdateInheritedValues(CancellationToken cancellationToken);
|
||||||
|
|
||||||
|
int GetCount(InternalItemsQuery query);
|
||||||
|
|
||||||
QueryResult<Tuple<BaseItem, ItemCounts>> GetGenres(InternalItemsQuery query);
|
QueryResult<Tuple<BaseItem, ItemCounts>> GetGenres(InternalItemsQuery query);
|
||||||
QueryResult<Tuple<BaseItem, ItemCounts>> GetMusicGenres(InternalItemsQuery query);
|
QueryResult<Tuple<BaseItem, ItemCounts>> GetMusicGenres(InternalItemsQuery query);
|
||||||
QueryResult<Tuple<BaseItem, ItemCounts>> GetGameGenres(InternalItemsQuery query);
|
QueryResult<Tuple<BaseItem, ItemCounts>> GetGameGenres(InternalItemsQuery query);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user