|
|
|
@ -3521,20 +3521,6 @@ namespace Emby.Server.Implementations.Data
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var includeTypes = query.IncludeItemTypes.SelectMany(MapIncludeItemTypes).ToArray();
|
|
|
|
|
if (includeTypes.Length == 1)
|
|
|
|
|
{
|
|
|
|
|
whereClauses.Add("type=@type");
|
|
|
|
|
if (statement != null)
|
|
|
|
|
{
|
|
|
|
|
statement.TryBind("@type", includeTypes[0]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (includeTypes.Length > 1)
|
|
|
|
|
{
|
|
|
|
|
var inClause = string.Join(",", includeTypes.Select(i => "'" + i + "'"));
|
|
|
|
|
whereClauses.Add($"type in ({inClause})");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Only specify excluded types if no included types are specified
|
|
|
|
|
if (includeTypes.Length == 0)
|
|
|
|
|
{
|
|
|
|
@ -3553,6 +3539,19 @@ namespace Emby.Server.Implementations.Data
|
|
|
|
|
whereClauses.Add($"type not in ({inClause})");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (includeTypes.Length == 1)
|
|
|
|
|
{
|
|
|
|
|
whereClauses.Add("type=@type");
|
|
|
|
|
if (statement != null)
|
|
|
|
|
{
|
|
|
|
|
statement.TryBind("@type", includeTypes[0]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (includeTypes.Length > 1)
|
|
|
|
|
{
|
|
|
|
|
var inClause = string.Join(",", includeTypes.Select(i => "'" + i + "'"));
|
|
|
|
|
whereClauses.Add($"type in ({inClause})");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (query.ChannelIds.Length == 1)
|
|
|
|
|
{
|
|
|
|
@ -4927,7 +4926,7 @@ where AncestorIdText not null and ItemValues.Value not null and ItemValues.Type
|
|
|
|
|
// Not crazy about having this all the way down here, but at least it's in one place
|
|
|
|
|
readonly Dictionary<string, string[]> _types = GetTypeMapDictionary();
|
|
|
|
|
|
|
|
|
|
private IEnumerable<string> MapIncludeItemTypes(string value)
|
|
|
|
|
private string[] MapIncludeItemTypes(string value)
|
|
|
|
|
{
|
|
|
|
|
if (_types.TryGetValue(value, out string[] result))
|
|
|
|
|
{
|
|
|
|
@ -5611,32 +5610,32 @@ where AncestorIdText not null and ItemValues.Value not null and ItemValues.Type
|
|
|
|
|
return counts;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private List<Tuple<int, string>> GetItemValuesToSave(BaseItem item, List<string> inheritedTags)
|
|
|
|
|
private List<(int, string)> GetItemValuesToSave(BaseItem item, List<string> inheritedTags)
|
|
|
|
|
{
|
|
|
|
|
var list = new List<Tuple<int, string>>();
|
|
|
|
|
var list = new List<(int, string)>();
|
|
|
|
|
|
|
|
|
|
if (item is IHasArtist hasArtist)
|
|
|
|
|
{
|
|
|
|
|
list.AddRange(hasArtist.Artists.Select(i => new Tuple<int, string>(0, i)));
|
|
|
|
|
list.AddRange(hasArtist.Artists.Select(i => (0, i)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (item is IHasAlbumArtist hasAlbumArtist)
|
|
|
|
|
{
|
|
|
|
|
list.AddRange(hasAlbumArtist.AlbumArtists.Select(i => new Tuple<int, string>(1, i)));
|
|
|
|
|
list.AddRange(hasAlbumArtist.AlbumArtists.Select(i => (1, i)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
list.AddRange(item.Genres.Select(i => new Tuple<int, string>(2, i)));
|
|
|
|
|
list.AddRange(item.Studios.Select(i => new Tuple<int, string>(3, i)));
|
|
|
|
|
list.AddRange(item.Tags.Select(i => new Tuple<int, string>(4, i)));
|
|
|
|
|
list.AddRange(item.Genres.Select(i => (2, i)));
|
|
|
|
|
list.AddRange(item.Studios.Select(i => (3, i)));
|
|
|
|
|
list.AddRange(item.Tags.Select(i => (4, i)));
|
|
|
|
|
|
|
|
|
|
// keywords was 5
|
|
|
|
|
|
|
|
|
|
list.AddRange(inheritedTags.Select(i => new Tuple<int, string>(6, i)));
|
|
|
|
|
list.AddRange(inheritedTags.Select(i => (6, i)));
|
|
|
|
|
|
|
|
|
|
return list;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void UpdateItemValues(Guid itemId, List<Tuple<int, string>> values, IDatabaseConnection db)
|
|
|
|
|
private void UpdateItemValues(Guid itemId, List<(int, string)> values, IDatabaseConnection db)
|
|
|
|
|
{
|
|
|
|
|
if (itemId.Equals(Guid.Empty))
|
|
|
|
|
{
|
|
|
|
@ -5658,7 +5657,7 @@ where AncestorIdText not null and ItemValues.Value not null and ItemValues.Type
|
|
|
|
|
InsertItemValues(guidBlob, values, db);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void InsertItemValues(byte[] idBlob, List<Tuple<int, string>> values, IDatabaseConnection db)
|
|
|
|
|
private void InsertItemValues(byte[] idBlob, List<(int, string)> values, IDatabaseConnection db)
|
|
|
|
|
{
|
|
|
|
|
var startIndex = 0;
|
|
|
|
|
var limit = 100;
|
|
|
|
|