|
|
|
@ -2548,57 +2548,53 @@ namespace Emby.Server.Implementations.Data
|
|
|
|
|
{
|
|
|
|
|
using (var connection = CreateConnection(true))
|
|
|
|
|
{
|
|
|
|
|
return connection.RunInTransaction(db =>
|
|
|
|
|
{
|
|
|
|
|
var list = new List<BaseItem>();
|
|
|
|
|
var list = new List<BaseItem>();
|
|
|
|
|
|
|
|
|
|
using (var statement = PrepareStatementSafe(db, commandText))
|
|
|
|
|
using (var statement = PrepareStatementSafe(connection, commandText))
|
|
|
|
|
{
|
|
|
|
|
if (EnableJoinUserData(query))
|
|
|
|
|
{
|
|
|
|
|
if (EnableJoinUserData(query))
|
|
|
|
|
{
|
|
|
|
|
statement.TryBind("@UserId", query.User.Id);
|
|
|
|
|
}
|
|
|
|
|
statement.TryBind("@UserId", query.User.Id);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BindSimilarParams(query, statement);
|
|
|
|
|
BindSimilarParams(query, statement);
|
|
|
|
|
|
|
|
|
|
// Running this again will bind the params
|
|
|
|
|
GetWhereClauses(query, statement);
|
|
|
|
|
// Running this again will bind the params
|
|
|
|
|
GetWhereClauses(query, statement);
|
|
|
|
|
|
|
|
|
|
foreach (var row in statement.ExecuteQuery())
|
|
|
|
|
foreach (var row in statement.ExecuteQuery())
|
|
|
|
|
{
|
|
|
|
|
var item = GetItem(row, query);
|
|
|
|
|
if (item != null)
|
|
|
|
|
{
|
|
|
|
|
var item = GetItem(row, query);
|
|
|
|
|
if (item != null)
|
|
|
|
|
{
|
|
|
|
|
list.Add(item);
|
|
|
|
|
}
|
|
|
|
|
list.Add(item);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Hack for right now since we currently don't support filtering out these duplicates within a query
|
|
|
|
|
if (query.EnableGroupByMetadataKey)
|
|
|
|
|
// Hack for right now since we currently don't support filtering out these duplicates within a query
|
|
|
|
|
if (query.EnableGroupByMetadataKey)
|
|
|
|
|
{
|
|
|
|
|
var limit = query.Limit ?? int.MaxValue;
|
|
|
|
|
limit -= 4;
|
|
|
|
|
var newList = new List<BaseItem>();
|
|
|
|
|
|
|
|
|
|
foreach (var item in list)
|
|
|
|
|
{
|
|
|
|
|
var limit = query.Limit ?? int.MaxValue;
|
|
|
|
|
limit -= 4;
|
|
|
|
|
var newList = new List<BaseItem>();
|
|
|
|
|
AddItem(newList, item);
|
|
|
|
|
|
|
|
|
|
foreach (var item in list)
|
|
|
|
|
if (newList.Count >= limit)
|
|
|
|
|
{
|
|
|
|
|
AddItem(newList, item);
|
|
|
|
|
|
|
|
|
|
if (newList.Count >= limit)
|
|
|
|
|
{
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
list = newList;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
LogQueryTime("GetItemList", commandText, now);
|
|
|
|
|
list = newList;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return list;
|
|
|
|
|
LogQueryTime("GetItemList", commandText, now);
|
|
|
|
|
|
|
|
|
|
}, ReadTransactionMode);
|
|
|
|
|
return list;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|