@ -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 ) )
if ( ! reader . IsDBNull ( index ) )
{
hasProgramAttributes . IsRepeat = reader . GetBoolean ( index ) ;
}
index + + ;
}
else
{
hasProgramAttributes . IsRepeat = reader . GetBoolean ( index ) ;
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 )
{