@ -22,13 +22,10 @@ using MediaBrowser.Controller.Persistence;
using MediaBrowser.Controller.Playlists ;
using MediaBrowser.Model.Dto ;
using MediaBrowser.Model.Entities ;
using MediaBrowser.Model.IO ;
using MediaBrowser.Model.LiveTv ;
using MediaBrowser.Model.Querying ;
using MediaBrowser.Model.Reflection ;
using MediaBrowser.Model.Serialization ;
using MediaBrowser.Model.System ;
using MediaBrowser.Model.Threading ;
using Microsoft.Extensions.Logging ;
using SQLitePCL.pretty ;
@ -316,8 +313,6 @@ namespace Emby.Server.Implementations.Data
} ;
connection . RunQueries ( postQueries ) ;
//await Vacuum(_connection).ConfigureAwait(false);
}
userDataRepo . Initialize ( WriteLock , _connection , userManager ) ;
@ -623,39 +618,35 @@ namespace Emby.Server.Implementations.Data
{
GetSaveItemCommandText ( ) ,
"delete from AncestorIds where ItemId=@ItemId"
} ) ;
using ( var saveItemStatement = statements [ 0 ] )
using ( var deleteAncestorsStatement = statements [ 1 ] )
{
using ( var deleteAncestorsStatement = statements [ 1 ] )
var requiresReset = false ;
foreach ( var tuple in tuples )
{
var requiresReset = false ;
foreach ( var tuple in tuples )
if ( requiresReset )
{
if ( requiresReset )
{
saveItemStatement . Reset ( ) ;
}
saveItemStatement . Reset ( ) ;
}
var item = tuple . Item1 ;
var topParent = tuple . Item3 ;
var userDataKey = tuple . Item4 ;
var item = tuple . Item1 ;
var topParent = tuple . Item3 ;
var userDataKey = tuple . Item4 ;
SaveItem ( item , topParent , userDataKey , saveItemStatement ) ;
//logger.LogDebug(_saveItemCommand.CommandText);
SaveItem ( item , topParent , userDataKey , saveItemStatement ) ;
var inheritedTags = tuple . Item5 ;
var inheritedTags = tuple . Item5 ;
if ( item . SupportsAncestors )
{
UpdateAncestors ( item . Id , tuple . Item2 , db , deleteAncestorsStatement ) ;
}
if ( item . SupportsAncestors )
{
UpdateAncestors ( item . Id , tuple . Item2 , db , deleteAncestorsStatement ) ;
}
UpdateItemValues ( item . Id , GetItemValuesToSave ( item , inheritedTags ) , db ) ;
UpdateItemValues ( item . Id , GetItemValuesToSave ( item , inheritedTags ) , db ) ;
requiresReset = true ;
}
requiresReset = true ;
}
}
}
@ -989,8 +980,7 @@ namespace Emby.Server.Implementations.Data
}
string artists = null ;
if ( item is IHasArtist hasArtists
& & hasArtists . Artists . Length > 0 )
if ( item is IHasArtist hasArtists & & hasArtists . Artists . Length > 0 )
{
artists = string . Join ( "|" , hasArtists . Artists ) ;
}
@ -1032,7 +1022,8 @@ namespace Emby.Server.Implementations.Data
StringBuilder str = new StringBuilder ( ) ;
foreach ( var i in item . ProviderIds )
{
// Ideally we shouldn't need this IsNullOrWhiteSpace check but we're seeing some cases of bad data slip through
// Ideally we shouldn't need this IsNullOrWhiteSpace check,
// but we're seeing some cases of bad data slip through
if ( string . IsNullOrWhiteSpace ( i . Value ) )
{
continue ;
@ -1082,7 +1073,7 @@ namespace Emby.Server.Implementations.Data
return null ;
}
StringBuilder str = new StringBuilder ( ) ;
foreach ( var i in images )
foreach ( var i in images )
{
if ( string . IsNullOrWhiteSpace ( i . Path ) )
{
@ -1194,7 +1185,7 @@ namespace Emby.Server.Implementations.Data
}
CheckDisposed ( ) ;
//logger.LogInformation("Retrieving item {0}", id.ToString("N"));
using ( WriteLock . Read ( ) )
{
using ( var connection = CreateConnection ( true ) )
@ -2253,7 +2244,7 @@ namespace Emby.Server.Implementations.Data
return true ;
}
return query . IncludeItemTypes . Contains ( "Episode" , StringComparer . OrdinalIgnoreCase ) ;
return query . IncludeItemTypes . Contains ( "Episode" , StringComparer . OrdinalIgnoreCase ) ;
}
private bool HasTrailerTypes ( InternalItemsQuery query )
@ -2411,7 +2402,6 @@ namespace Emby.Server.Implementations.Data
if ( item . ProductionYear . HasValue )
{
//builder.Append("+ ((ProductionYear=@ItemProductionYear) * 10)");
builder . Append ( "+(Select Case When Abs(COALESCE(ProductionYear, 0) - @ItemProductionYear) < 10 Then 10 Else 0 End )" ) ;
builder . Append ( "+(Select Case When Abs(COALESCE(ProductionYear, 0) - @ItemProductionYear) < 5 Then 5 Else 0 End )" ) ;
}
@ -2419,12 +2409,6 @@ namespace Emby.Server.Implementations.Data
//// genres, tags
builder . Append ( "+ ((Select count(CleanValue) from ItemValues where ItemId=Guid and CleanValue in (select CleanValue from itemvalues where ItemId=@SimilarItemId)) * 10)" ) ;
//builder.Append("+ ((Select count(CleanValue) from ItemValues where ItemId=Guid and Type=3 and CleanValue in (select CleanValue from itemvalues where ItemId=@SimilarItemId and type=3)) * 3)");
//builder.Append("+ ((Select count(Name) from People where ItemId=Guid and Name in (select Name from People where ItemId=@SimilarItemId)) * 3)");
//builder.Append("(select group_concat((Select Name from People where ItemId=Guid and Name in (Select Name from People where ItemId=@SimilarItemId)), '|'))");
builder . Append ( ") as SimilarityScore" ) ;
list . Add ( builder . ToString ( ) ) ;
@ -2572,8 +2556,6 @@ namespace Emby.Server.Implementations.Data
commandText + = " where " + string . Join ( " AND " , whereClauses ) ;
}
//commandText += GetGroupBy(query);
using ( WriteLock . Read ( ) )
{
using ( var connection = CreateConnection ( true ) )
@ -2949,7 +2931,6 @@ namespace Emby.Server.Implementations.Data
{
orderBy . Add ( new ValueTuple < string , SortOrder > ( "SimilarityScore" , SortOrder . Descending ) ) ;
orderBy . Add ( new ValueTuple < string , SortOrder > ( ItemSortBy . Random , SortOrder . Ascending ) ) ;
//orderBy.Add(new Tuple<string, SortOrder>(ItemSortBy.Random, SortOrder.Ascending));
}
if ( ! string . IsNullOrEmpty ( query . SearchTerm ) )
@ -3011,7 +2992,6 @@ namespace Emby.Server.Implementations.Data
}
else if ( string . Equals ( name , ItemSortBy . IsFavoriteOrLiked , StringComparison . OrdinalIgnoreCase ) )
{
// (Select Case When Abs(COALESCE(ProductionYear, 0) - @ItemProductionYear) < 10 Then 2 Else 0 End )
return ( "(Select Case When IsFavorite is null Then 0 Else IsFavorite End )" , true ) ;
}
else if ( string . Equals ( name , ItemSortBy . IsFolder , StringComparison . OrdinalIgnoreCase ) )
@ -3384,14 +3364,6 @@ namespace Emby.Server.Implementations.Data
query . IsVirtualItem = false ;
}
var whereClauses = new List < string > ( ) ;
/ *
if ( EnableJoinUserData ( query ) )
{
whereClauses . Add ( "(UserId is null or UserId=@UserId)" ) ;
} * /
var minWidth = query . MinWidth ;
var maxWidth = query . MaxWidth ;
@ -3421,6 +3393,8 @@ namespace Emby.Server.Implementations.Data
}
}
var whereClauses = new List < string > ( ) ;
if ( minWidth . HasValue )
{
whereClauses . Add ( "Width>=@MinWidth" ) ;
@ -3466,43 +3440,6 @@ namespace Emby.Server.Implementations.Data
var tags = query . Tags . ToList ( ) ;
var excludeTags = query . ExcludeTags . ToList ( ) ;
//if (!(query.IsMovie ?? true) || !(query.IsSeries ?? true))
//{
// if (query.IsMovie.HasValue)
// {
// var alternateTypes = new List<string>();
// if (query.IncludeItemTypes.Length == 0 || query.IncludeItemTypes.Contains(typeof(Movie).Name))
// {
// alternateTypes.Add(typeof(Movie).FullName);
// }
// if (query.IncludeItemTypes.Length == 0 || query.IncludeItemTypes.Contains(typeof(Trailer).Name))
// {
// alternateTypes.Add(typeof(Trailer).FullName);
// }
// if (alternateTypes.Count == 0)
// {
// whereClauses.Add("IsMovie=@IsMovie");
// if (statement != null)
// {
// statement.TryBind("@IsMovie", query.IsMovie);
// }
// }
// else
// {
// whereClauses.Add("(IsMovie is null OR IsMovie=@IsMovie)");
// if (statement != null)
// {
// statement.TryBind("@IsMovie", query.IsMovie);
// }
// }
// }
//}
//else
//{
//}
if ( query . IsMovie ? ? false )
{
var alternateTypes = new List < string > ( ) ;
@ -3664,7 +3601,6 @@ namespace Emby.Server.Implementations.Data
if ( ! string . IsNullOrWhiteSpace ( query . Path ) )
{
//whereClauses.Add("(Path=@Path COLLATE NOCASE)");
whereClauses . Add ( "Path=@Path" ) ;
if ( statement ! = null )
{
@ -3726,18 +3662,6 @@ namespace Emby.Server.Implementations.Data
}
}
//if (query.MinPlayers.HasValue)
//{
// whereClauses.Add("Players>=@MinPlayers");
// cmd.Parameters.Add(cmd, "@MinPlayers", DbType.Int32).Value = query.MinPlayers.Value;
//}
//if (query.MaxPlayers.HasValue)
//{
// whereClauses.Add("Players<=@MaxPlayers");
// cmd.Parameters.Add(cmd, "@MaxPlayers", DbType.Int32).Value = query.MaxPlayers.Value;
//}
if ( query . IndexNumber . HasValue )
{
whereClauses . Add ( "IndexNumber=@IndexNumber" ) ;
@ -4547,7 +4471,6 @@ namespace Emby.Server.Implementations.Data
}
var paramName = "@ExcludeProviderId" + index ;
//excludeIds.Add("(COALESCE((select value from ProviderIds where ItemId=Guid and Name = '" + pair.Key + "'), '') <> " + paramName + ")");
excludeIds . Add ( "(ProviderIds is null or ProviderIds not like " + paramName + ")" ) ;
if ( statement ! = null )
{
@ -5457,8 +5380,6 @@ where AncestorIdText not null and ItemValues.Value not null and ItemValues.Type
itemCountColumnQuery + = typeWhereText ;
//itemCountColumnQuery += ")";
itemCountColumns = new Dictionary < string , string > ( )
{
{ "itemTypes" , "(" + itemCountColumnQuery + ") as itemTypes" }