update query fields

This commit is contained in:
Luke Pulverenti
2017-05-22 00:54:02 -04:00
parent 41ea0d99f4
commit 54cf0da758
41 changed files with 622 additions and 387 deletions

View File

@@ -1415,66 +1415,69 @@ namespace Emby.Server.Implementations.Data
var index = 5;
var hasProgramAttributes = item as IHasProgramAttributes;
if (hasProgramAttributes != null)
if (HasProgramAttributes(query))
{
if (!reader.IsDBNull(index))
var hasProgramAttributes = item as IHasProgramAttributes;
if (hasProgramAttributes != null)
{
hasProgramAttributes.IsMovie = reader.GetBoolean(index);
}
index++;
if (!reader.IsDBNull(index))
{
hasProgramAttributes.IsMovie = reader.GetBoolean(index);
}
index++;
if (!reader.IsDBNull(index))
{
hasProgramAttributes.IsSports = reader.GetBoolean(index);
}
index++;
if (!reader.IsDBNull(index))
{
hasProgramAttributes.IsSports = reader.GetBoolean(index);
}
index++;
if (!reader.IsDBNull(index))
{
hasProgramAttributes.IsKids = reader.GetBoolean(index);
}
index++;
if (!reader.IsDBNull(index))
{
hasProgramAttributes.IsKids = reader.GetBoolean(index);
}
index++;
if (!reader.IsDBNull(index))
{
hasProgramAttributes.IsSeries = reader.GetBoolean(index);
}
index++;
if (!reader.IsDBNull(index))
{
hasProgramAttributes.IsSeries = reader.GetBoolean(index);
}
index++;
if (!reader.IsDBNull(index))
{
hasProgramAttributes.IsLive = reader.GetBoolean(index);
}
index++;
if (!reader.IsDBNull(index))
{
hasProgramAttributes.IsLive = reader.GetBoolean(index);
}
index++;
if (!reader.IsDBNull(index))
{
hasProgramAttributes.IsNews = reader.GetBoolean(index);
}
index++;
if (!reader.IsDBNull(index))
{
hasProgramAttributes.IsNews = reader.GetBoolean(index);
}
index++;
if (!reader.IsDBNull(index))
{
hasProgramAttributes.IsPremiere = reader.GetBoolean(index);
}
index++;
if (!reader.IsDBNull(index))
{
hasProgramAttributes.IsPremiere = reader.GetBoolean(index);
}
index++;
if (!reader.IsDBNull(index))
{
hasProgramAttributes.EpisodeTitle = reader.GetString(index);
}
index++;
if (!reader.IsDBNull(index))
{
hasProgramAttributes.EpisodeTitle = reader.GetString(index);
}
index++;
if (!reader.IsDBNull(index))
{
hasProgramAttributes.IsRepeat = reader.GetBoolean(index);
if (!reader.IsDBNull(index))
{
hasProgramAttributes.IsRepeat = reader.GetBoolean(index);
}
index++;
}
else
{
index += 9;
}
index++;
}
else
{
index += 9;
}
if (!reader.IsDBNull(index))
@@ -1483,7 +1486,7 @@ namespace Emby.Server.Implementations.Data
}
index++;
if (query.HasField(ItemFields.CustomRating))
if (HasField(query, ItemFields.CustomRating))
{
if (!reader.IsDBNull(index))
{
@@ -1498,7 +1501,7 @@ namespace Emby.Server.Implementations.Data
}
index++;
if (query.HasField(ItemFields.Settings))
if (HasField(query, ItemFields.Settings))
{
if (!reader.IsDBNull(index))
{
@@ -1525,7 +1528,7 @@ namespace Emby.Server.Implementations.Data
}
index++;
if (query.HasField(ItemFields.ExternalEtag))
if (HasField(query, ItemFields.ExternalEtag))
{
if (!reader.IsDBNull(index))
{
@@ -1534,11 +1537,14 @@ namespace Emby.Server.Implementations.Data
index++;
}
if (!reader.IsDBNull(index))
if (HasField(query, ItemFields.DateLastRefreshed))
{
item.DateLastRefreshed = reader[index].ReadDateTime();
if (!reader.IsDBNull(index))
{
item.DateLastRefreshed = reader[index].ReadDateTime();
}
index++;
}
index++;
if (!reader.IsDBNull(index))
{
@@ -1558,7 +1564,7 @@ namespace Emby.Server.Implementations.Data
}
index++;
if (query.HasField(ItemFields.Overview))
if (HasField(query, ItemFields.Overview))
{
if (!reader.IsDBNull(index))
{
@@ -1585,7 +1591,7 @@ namespace Emby.Server.Implementations.Data
}
index++;
if (query.HasField(ItemFields.HomePageUrl))
if (HasField(query, ItemFields.HomePageUrl))
{
if (!reader.IsDBNull(index))
{
@@ -1594,7 +1600,7 @@ namespace Emby.Server.Implementations.Data
index++;
}
if (query.HasField(ItemFields.DisplayMediaType))
if (HasField(query, ItemFields.DisplayMediaType))
{
if (!reader.IsDBNull(index))
{
@@ -1603,7 +1609,7 @@ namespace Emby.Server.Implementations.Data
index++;
}
if (query.HasField(ItemFields.SortName))
if (HasField(query, ItemFields.SortName))
{
if (!reader.IsDBNull(index))
{
@@ -1618,7 +1624,7 @@ namespace Emby.Server.Implementations.Data
}
index++;
if (query.HasField(ItemFields.VoteCount))
if (HasField(query, ItemFields.VoteCount))
{
if (!reader.IsDBNull(index))
{
@@ -1627,7 +1633,7 @@ namespace Emby.Server.Implementations.Data
index++;
}
if (query.HasField(ItemFields.DateCreated))
if (HasField(query, ItemFields.DateCreated))
{
if (!reader.IsDBNull(index))
{
@@ -1645,7 +1651,7 @@ namespace Emby.Server.Implementations.Data
item.Id = reader.GetGuid(index);
index++;
if (query.HasField(ItemFields.Genres))
if (HasField(query, ItemFields.Genres))
{
if (!reader.IsDBNull(index))
{
@@ -1680,13 +1686,16 @@ namespace Emby.Server.Implementations.Data
}
index++;
if (!reader.IsDBNull(index))
if (HasField(query, ItemFields.DateLastSaved))
{
item.DateLastSaved = reader[index].ReadDateTime();
if (!reader.IsDBNull(index))
{
item.DateLastSaved = reader[index].ReadDateTime();
}
index++;
}
index++;
if (query.HasField(ItemFields.Settings))
if (HasField(query, ItemFields.Settings))
{
if (!reader.IsDBNull(index))
{
@@ -1695,7 +1704,7 @@ namespace Emby.Server.Implementations.Data
index++;
}
if (query.HasField(ItemFields.Studios))
if (HasField(query, ItemFields.Studios))
{
if (!reader.IsDBNull(index))
{
@@ -1704,7 +1713,7 @@ namespace Emby.Server.Implementations.Data
index++;
}
if (query.HasField(ItemFields.Tags))
if (HasField(query, ItemFields.Tags))
{
if (!reader.IsDBNull(index))
{
@@ -1729,7 +1738,7 @@ namespace Emby.Server.Implementations.Data
}
index++;
if (query.HasField(ItemFields.OriginalTitle))
if (HasField(query, ItemFields.OriginalTitle))
{
if (!reader.IsDBNull(index))
{
@@ -1748,7 +1757,7 @@ namespace Emby.Server.Implementations.Data
}
index++;
if (query.HasField(ItemFields.DateLastMediaAdded))
if (HasField(query, ItemFields.DateLastMediaAdded))
{
var folder = item as Folder;
if (folder != null && !reader.IsDBNull(index))
@@ -1814,7 +1823,7 @@ namespace Emby.Server.Implementations.Data
}
index++;
if (query.HasField(ItemFields.PresentationUniqueKey))
if (HasField(query, ItemFields.PresentationUniqueKey))
{
if (!reader.IsDBNull(index))
{
@@ -1823,7 +1832,7 @@ namespace Emby.Server.Implementations.Data
index++;
}
if (query.HasField(ItemFields.InheritedParentalRatingValue))
if (HasField(query, ItemFields.InheritedParentalRatingValue))
{
if (!reader.IsDBNull(index))
{
@@ -1832,7 +1841,7 @@ namespace Emby.Server.Implementations.Data
index++;
}
if (query.HasField(ItemFields.Tags))
if (HasField(query, ItemFields.Tags))
{
if (!reader.IsDBNull(index))
{
@@ -1841,7 +1850,7 @@ namespace Emby.Server.Implementations.Data
index++;
}
if (query.HasField(ItemFields.ExternalSeriesId))
if (HasField(query, ItemFields.ExternalSeriesId))
{
if (!reader.IsDBNull(index))
{
@@ -1850,7 +1859,7 @@ namespace Emby.Server.Implementations.Data
index++;
}
if (query.HasField(ItemFields.Taglines))
if (HasField(query, ItemFields.Taglines))
{
if (!reader.IsDBNull(index))
{
@@ -1859,7 +1868,7 @@ namespace Emby.Server.Implementations.Data
index++;
}
if (query.HasField(ItemFields.Keywords))
if (HasField(query, ItemFields.Keywords))
{
if (!reader.IsDBNull(index))
{
@@ -1883,7 +1892,7 @@ namespace Emby.Server.Implementations.Data
index++;
}
if (query.HasField(ItemFields.ProductionLocations))
if (HasField(query, ItemFields.ProductionLocations))
{
if (!reader.IsDBNull(index))
{
@@ -1892,7 +1901,7 @@ namespace Emby.Server.Implementations.Data
index++;
}
if (query.HasField(ItemFields.ThemeSongIds))
if (HasField(query, ItemFields.ThemeSongIds))
{
if (!reader.IsDBNull(index))
{
@@ -1901,7 +1910,7 @@ namespace Emby.Server.Implementations.Data
index++;
}
if (query.HasField(ItemFields.ThemeVideoIds))
if (HasField(query, ItemFields.ThemeVideoIds))
{
if (!reader.IsDBNull(index))
{
@@ -1942,14 +1951,17 @@ namespace Emby.Server.Implementations.Data
}
index++;
if (hasSeries != null)
if (HasField(query, ItemFields.SeriesPresentationUniqueKey))
{
if (!reader.IsDBNull(index))
if (hasSeries != null)
{
hasSeries.SeriesPresentationUniqueKey = reader.GetString(index);
if (!reader.IsDBNull(index))
{
hasSeries.SeriesPresentationUniqueKey = reader.GetString(index);
}
}
index++;
}
index++;
return item;
}
@@ -2259,13 +2271,73 @@ namespace Emby.Server.Implementations.Data
return new[] { field.ToString() };
}
private bool HasField(InternalItemsQuery query, ItemFields name)
{
var fields = query.DtoOptions.Fields;
switch (name)
{
case ItemFields.HomePageUrl:
case ItemFields.Keywords:
case ItemFields.DisplayMediaType:
case ItemFields.VoteCount:
case ItemFields.CustomRating:
case ItemFields.ProductionLocations:
case ItemFields.Settings:
case ItemFields.OriginalTitle:
case ItemFields.Taglines:
case ItemFields.SortName:
case ItemFields.Studios:
case ItemFields.Tags:
case ItemFields.ThemeSongIds:
case ItemFields.ThemeVideoIds:
case ItemFields.DateCreated:
case ItemFields.Overview:
case ItemFields.Genres:
case ItemFields.DateLastMediaAdded:
case ItemFields.ExternalEtag:
case ItemFields.PresentationUniqueKey:
case ItemFields.InheritedParentalRatingValue:
case ItemFields.ExternalSeriesId:
case ItemFields.SeriesPresentationUniqueKey:
case ItemFields.DateLastRefreshed:
case ItemFields.DateLastSaved:
return fields.Contains(name);
case ItemFields.ServiceName:
return true;
default:
return true;
}
}
private bool HasProgramAttributes(InternalItemsQuery query)
{
if (query.IncludeItemTypes.Length == 0)
{
return true;
}
var types = new string[]
{
"Program",
"Recording",
"TvChannel",
"LiveTvAudioRecording",
"LiveTvVideoRecording",
"LiveTvProgram",
"LiveTvTvChannel"
};
return types.Any(i => query.IncludeItemTypes.Contains(i, StringComparer.OrdinalIgnoreCase));
}
private string[] GetFinalColumnsToSelect(InternalItemsQuery query, string[] startColumns)
{
var list = startColumns.ToList();
foreach (var field in allFields)
{
if (!query.HasField(field))
if (!HasField(query, field))
{
foreach (var fieldToRemove in GetColumnNamesFromField(field).ToList())
{
@@ -2274,6 +2346,19 @@ namespace Emby.Server.Implementations.Data
}
}
if (!HasProgramAttributes(query))
{
list.Remove("IsKids");
list.Remove("IsMovie");
list.Remove("IsSports");
list.Remove("IsSeries");
list.Remove("IsLive");
list.Remove("IsNews");
list.Remove("IsPremiere");
list.Remove("EpisodeTitle");
list.Remove("IsRepeat");
}
if (!query.DtoOptions.EnableImages)
{
list.Remove("Images");
@@ -2400,7 +2485,7 @@ namespace Emby.Server.Implementations.Data
query.Limit = query.Limit.Value + 4;
}
var commandText = "select " + string.Join(",", GetFinalColumnsToSelect(query, new [] { "count(distinct PresentationUniqueKey)" })) + GetFromText();
var commandText = "select " + string.Join(",", GetFinalColumnsToSelect(query, new[] { "count(distinct PresentationUniqueKey)" })) + GetFromText();
commandText += GetJoinUserDataText(query);
var whereClauses = GetWhereClauses(query, null);
@@ -3671,6 +3756,7 @@ namespace Emby.Server.Implementations.Data
if (!string.IsNullOrWhiteSpace(query.SlugName))
{
Logger.Info("Searching by SlugName for {0}", query.SlugName);
whereClauses.Add("CleanName=@SlugName");
if (statement != null)
{