|
@@ -2443,6 +2443,66 @@ namespace Emby.Server.Implementations.Data
|
|
|
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)
|
|
|
{
|
|
|
if (query == null)
|
|
@@ -2859,7 +2919,7 @@ namespace Emby.Server.Implementations.Data
|
|
|
}
|
|
|
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);
|