mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-12-16 22:13:06 +03:00
update query fields
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user