mirror of
				https://github.com/jellyfin/jellyfin.git
				synced 2025-11-03 19:17:24 -05:00 
			
		
		
		
	review
This commit is contained in:
		
							parent
							
								
									3b5214e595
								
							
						
					
					
						commit
						0835b26889
					
				@ -2270,7 +2270,7 @@ namespace Emby.Server.Implementations.Data
 | 
				
			|||||||
            return query.IncludeItemTypes.Any(x => _seriesTypes.Contains(x));
 | 
					            return query.IncludeItemTypes.Any(x => _seriesTypes.Contains(x));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private List<string> GetFinalColumnsToSelect(InternalItemsQuery query, List<string> columns)
 | 
					        private void SetFinalColumnsToSelect(InternalItemsQuery query, List<string> columns)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            foreach (var field in _allFields)
 | 
					            foreach (var field in _allFields)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@ -2438,8 +2438,6 @@ namespace Emby.Server.Implementations.Data
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                columns.Add(builder.ToString());
 | 
					                columns.Add(builder.ToString());
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					 | 
				
			||||||
            return columns;
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private void BindSearchParams(InternalItemsQuery query, IStatement statement)
 | 
					        private void BindSearchParams(InternalItemsQuery query, IStatement statement)
 | 
				
			||||||
@ -2541,8 +2539,10 @@ namespace Emby.Server.Implementations.Data
 | 
				
			|||||||
                query.Limit = query.Limit.Value + 4;
 | 
					                query.Limit = query.Limit.Value + 4;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var commandTextBuilder = new StringBuilder("select ")
 | 
					            var columns = new List<string> { "count(distinct PresentationUniqueKey)" };
 | 
				
			||||||
                .AppendJoin(',', GetFinalColumnsToSelect(query, new List<string> { "count(distinct PresentationUniqueKey)" }))
 | 
					            SetFinalColumnsToSelect(query, columns);
 | 
				
			||||||
 | 
					            var commandTextBuilder = new StringBuilder("select ", 256)
 | 
				
			||||||
 | 
					                .AppendJoin(',', columns)
 | 
				
			||||||
                .Append(FromText)
 | 
					                .Append(FromText)
 | 
				
			||||||
                .Append(GetJoinUserDataText(query));
 | 
					                .Append(GetJoinUserDataText(query));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -2595,8 +2595,10 @@ namespace Emby.Server.Implementations.Data
 | 
				
			|||||||
                query.Limit = query.Limit.Value + 4;
 | 
					                query.Limit = query.Limit.Value + 4;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var commandTextBuilder = new StringBuilder("select ")
 | 
					            var columns = _retriveItemColumns.ToList();
 | 
				
			||||||
                .AppendJoin(',', GetFinalColumnsToSelect(query, _retriveItemColumns.ToList()))
 | 
					            SetFinalColumnsToSelect(query, columns);
 | 
				
			||||||
 | 
					            var commandTextBuilder = new StringBuilder("select ", 1024)
 | 
				
			||||||
 | 
					                .AppendJoin(',', columns)
 | 
				
			||||||
                .Append(FromText)
 | 
					                .Append(FromText)
 | 
				
			||||||
                .Append(GetJoinUserDataText(query));
 | 
					                .Append(GetJoinUserDataText(query));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -2618,13 +2620,13 @@ namespace Emby.Server.Implementations.Data
 | 
				
			|||||||
                if (query.Limit.HasValue || offset > 0)
 | 
					                if (query.Limit.HasValue || offset > 0)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    commandTextBuilder.Append(" LIMIT ")
 | 
					                    commandTextBuilder.Append(" LIMIT ")
 | 
				
			||||||
                        .Append((query.Limit ?? int.MaxValue).ToString(CultureInfo.InvariantCulture));
 | 
					                        .Append(query.Limit ?? int.MaxValue);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (offset > 0)
 | 
					                if (offset > 0)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    commandTextBuilder.Append(" OFFSET ")
 | 
					                    commandTextBuilder.Append(" OFFSET ")
 | 
				
			||||||
                        .Append(offset.ToString(CultureInfo.InvariantCulture));
 | 
					                        .Append(offset);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -2784,8 +2786,10 @@ namespace Emby.Server.Implementations.Data
 | 
				
			|||||||
                query.Limit = query.Limit.Value + 4;
 | 
					                query.Limit = query.Limit.Value + 4;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var commandTextBuilder = new StringBuilder("select ")
 | 
					            var columns = _retriveItemColumns.ToList();
 | 
				
			||||||
                .AppendJoin(',', GetFinalColumnsToSelect(query, _retriveItemColumns.ToList()))
 | 
					            SetFinalColumnsToSelect(query, columns);
 | 
				
			||||||
 | 
					            var commandTextBuilder = new StringBuilder("select ", 512)
 | 
				
			||||||
 | 
					                .AppendJoin(',', columns)
 | 
				
			||||||
                .Append(FromText)
 | 
					                .Append(FromText)
 | 
				
			||||||
                .Append(GetJoinUserDataText(query));
 | 
					                .Append(GetJoinUserDataText(query));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -2811,13 +2815,13 @@ namespace Emby.Server.Implementations.Data
 | 
				
			|||||||
                if (query.Limit.HasValue || offset > 0)
 | 
					                if (query.Limit.HasValue || offset > 0)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    commandTextBuilder.Append(" LIMIT ")
 | 
					                    commandTextBuilder.Append(" LIMIT ")
 | 
				
			||||||
                        .Append((query.Limit ?? int.MaxValue).ToString(CultureInfo.InvariantCulture));
 | 
					                        .Append(query.Limit ?? int.MaxValue);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (offset > 0)
 | 
					                if (offset > 0)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    commandTextBuilder.Append(" OFFSET ")
 | 
					                    commandTextBuilder.Append(" OFFSET ")
 | 
				
			||||||
                        .Append(offset.ToString(CultureInfo.InvariantCulture));
 | 
					                        .Append(offset);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -2836,20 +2840,24 @@ namespace Emby.Server.Implementations.Data
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                commandTextBuilder.Append(" select ");
 | 
					                commandTextBuilder.Append(" select ");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                List<string> columnsToSelect;
 | 
				
			||||||
                if (EnableGroupByPresentationUniqueKey(query))
 | 
					                if (EnableGroupByPresentationUniqueKey(query))
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    commandTextBuilder.AppendJoin(',', GetFinalColumnsToSelect(query, new List<string> { "count (distinct PresentationUniqueKey)" }));
 | 
					                    columnsToSelect = new List<string> { "count (distinct PresentationUniqueKey)" };
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                else if (query.GroupBySeriesPresentationUniqueKey)
 | 
					                else if (query.GroupBySeriesPresentationUniqueKey)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    commandTextBuilder.AppendJoin(',', GetFinalColumnsToSelect(query, new List<string> { "count (distinct SeriesPresentationUniqueKey)" }));
 | 
					                    columnsToSelect = new List<string> { "count (distinct SeriesPresentationUniqueKey)" };
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                else
 | 
					                else
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    commandTextBuilder.AppendJoin(',', GetFinalColumnsToSelect(query, new List<string> { "count (guid)" }));
 | 
					                    columnsToSelect = new List<string> { "count (guid)" };
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                commandTextBuilder.Append(FromText)
 | 
					                SetFinalColumnsToSelect(query, columnsToSelect);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                commandTextBuilder.AppendJoin(',', columnsToSelect)
 | 
				
			||||||
 | 
					                    .Append(FromText)
 | 
				
			||||||
                    .Append(GetJoinUserDataText(query));
 | 
					                    .Append(GetJoinUserDataText(query));
 | 
				
			||||||
                if (!string.IsNullOrEmpty(whereText))
 | 
					                if (!string.IsNullOrEmpty(whereText))
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
@ -3062,8 +3070,10 @@ namespace Emby.Server.Implementations.Data
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            var now = DateTime.UtcNow;
 | 
					            var now = DateTime.UtcNow;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var commandTextBuilder = new StringBuilder("select ")
 | 
					            var columns = new List<string> { "guid" };
 | 
				
			||||||
                .AppendJoin(',', GetFinalColumnsToSelect(query, new List<string> { "guid" }))
 | 
					            SetFinalColumnsToSelect(query, columns);
 | 
				
			||||||
 | 
					            var commandTextBuilder = new StringBuilder("select ", 256)
 | 
				
			||||||
 | 
					                .AppendJoin(',', columns)
 | 
				
			||||||
                .Append(FromText)
 | 
					                .Append(FromText)
 | 
				
			||||||
                .Append(GetJoinUserDataText(query));
 | 
					                .Append(GetJoinUserDataText(query));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -3084,13 +3094,13 @@ namespace Emby.Server.Implementations.Data
 | 
				
			|||||||
                if (query.Limit.HasValue || offset > 0)
 | 
					                if (query.Limit.HasValue || offset > 0)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    commandTextBuilder.Append(" LIMIT ")
 | 
					                    commandTextBuilder.Append(" LIMIT ")
 | 
				
			||||||
                        .Append((query.Limit ?? int.MaxValue).ToString(CultureInfo.InvariantCulture));
 | 
					                        .Append(query.Limit ?? int.MaxValue);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (offset > 0)
 | 
					                if (offset > 0)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    commandTextBuilder.Append(" OFFSET ")
 | 
					                    commandTextBuilder.Append(" OFFSET ")
 | 
				
			||||||
                        .Append(offset.ToString(CultureInfo.InvariantCulture));
 | 
					                        .Append(offset);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -3133,7 +3143,9 @@ namespace Emby.Server.Implementations.Data
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            var now = DateTime.UtcNow;
 | 
					            var now = DateTime.UtcNow;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var commandText = "select " + string.Join(',', GetFinalColumnsToSelect(query, new List<string> { "guid", "path" })) + FromText;
 | 
					            var columns = new List<string> { "guid", "path" };
 | 
				
			||||||
 | 
					            SetFinalColumnsToSelect(query, columns);
 | 
				
			||||||
 | 
					            var commandText = "select " + string.Join(',', columns) + FromText;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var whereClauses = GetWhereClauses(query, null);
 | 
					            var whereClauses = GetWhereClauses(query, null);
 | 
				
			||||||
            if (whereClauses.Count != 0)
 | 
					            if (whereClauses.Count != 0)
 | 
				
			||||||
@ -3209,8 +3221,10 @@ namespace Emby.Server.Implementations.Data
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            var now = DateTime.UtcNow;
 | 
					            var now = DateTime.UtcNow;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            var columns = new List<string> { "guid" };
 | 
				
			||||||
 | 
					            SetFinalColumnsToSelect(query, columns);
 | 
				
			||||||
            var commandText = "select "
 | 
					            var commandText = "select "
 | 
				
			||||||
                            + string.Join(',', GetFinalColumnsToSelect(query, new List<string> { "guid" }))
 | 
					                            + string.Join(',', columns)
 | 
				
			||||||
                            + FromText
 | 
					                            + FromText
 | 
				
			||||||
                            + GetJoinUserDataText(query);
 | 
					                            + GetJoinUserDataText(query);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -3251,19 +3265,23 @@ namespace Emby.Server.Implementations.Data
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                commandText = string.Empty;
 | 
					                commandText = string.Empty;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                List<string> columnsToSelect;
 | 
				
			||||||
                if (EnableGroupByPresentationUniqueKey(query))
 | 
					                if (EnableGroupByPresentationUniqueKey(query))
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    commandText += " select " + string.Join(',', GetFinalColumnsToSelect(query, new List<string> { "count (distinct PresentationUniqueKey)" })) + FromText;
 | 
					                    columnsToSelect = new List<string> { "count (distinct PresentationUniqueKey)" };
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                else if (query.GroupBySeriesPresentationUniqueKey)
 | 
					                else if (query.GroupBySeriesPresentationUniqueKey)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    commandText += " select " + string.Join(',', GetFinalColumnsToSelect(query, new List<string> { "count (distinct SeriesPresentationUniqueKey)" })) + FromText;
 | 
					                    columnsToSelect = new List<string> { "count (distinct SeriesPresentationUniqueKey)" };
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                else
 | 
					                else
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    commandText += " select " + string.Join(',', GetFinalColumnsToSelect(query, new List<string> { "count (guid)" })) + FromText;
 | 
					                    columnsToSelect = new List<string> { "count (guid)" };
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                SetFinalColumnsToSelect(query, columnsToSelect);
 | 
				
			||||||
 | 
					                commandText += " select " + string.Join(',', columnsToSelect) + FromText;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                commandText += GetJoinUserDataText(query)
 | 
					                commandText += GetJoinUserDataText(query)
 | 
				
			||||||
                            + whereText;
 | 
					                            + whereText;
 | 
				
			||||||
                statementTexts.Add(commandText);
 | 
					                statementTexts.Add(commandText);
 | 
				
			||||||
@ -5232,30 +5250,30 @@ AND Type = @InternalPersonType)");
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            var now = DateTime.UtcNow;
 | 
					            var now = DateTime.UtcNow;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var stringBuilder = new StringBuilder("Select Value From ItemValues where Type");
 | 
					            var stringBuilder = new StringBuilder("Select Value From ItemValues where Type", 128);
 | 
				
			||||||
            if (itemValueTypes.Length == 1)
 | 
					            if (itemValueTypes.Length == 1)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                stringBuilder.Append('=')
 | 
					                stringBuilder.Append('=')
 | 
				
			||||||
                    .Append(itemValueTypes[0].ToString(CultureInfo.InvariantCulture));
 | 
					                    .Append(itemValueTypes[0]);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            else
 | 
					            else
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                stringBuilder.Append(" in (")
 | 
					                stringBuilder.Append(" in (")
 | 
				
			||||||
                    .AppendJoin(',', itemValueTypes.Select(i => i.ToString(CultureInfo.InvariantCulture)))
 | 
					                    .AppendJoin(',', itemValueTypes)
 | 
				
			||||||
                    .Append(')');
 | 
					                    .Append(')');
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (withItemTypes.Count > 0)
 | 
					            if (withItemTypes.Count > 0)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                stringBuilder.Append(" AND ItemId In (select guid from typedbaseitems where type in (")
 | 
					                stringBuilder.Append(" AND ItemId In (select guid from typedbaseitems where type in (")
 | 
				
			||||||
                    .AppendJoin(',', withItemTypes.Select(i => "'" + i + "'"))
 | 
					                    .AppendJoinInSingleQuotes(',', withItemTypes)
 | 
				
			||||||
                    .Append("))");
 | 
					                    .Append("))");
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (excludeItemTypes.Count > 0)
 | 
					            if (excludeItemTypes.Count > 0)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                stringBuilder.Append(" AND ItemId not In (select guid from typedbaseitems where type in (")
 | 
					                stringBuilder.Append(" AND ItemId not In (select guid from typedbaseitems where type in (")
 | 
				
			||||||
                    .AppendJoin(',', excludeItemTypes.Select(i => "'" + i + "'"))
 | 
					                    .AppendJoinInSingleQuotes(',', excludeItemTypes)
 | 
				
			||||||
                    .Append("))");
 | 
					                    .Append("))");
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -5296,14 +5314,14 @@ AND Type = @InternalPersonType)");
 | 
				
			|||||||
            var now = DateTime.UtcNow;
 | 
					            var now = DateTime.UtcNow;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var typeClause = itemValueTypes.Length == 1 ?
 | 
					            var typeClause = itemValueTypes.Length == 1 ?
 | 
				
			||||||
                ("Type=" + itemValueTypes[0].ToString(CultureInfo.InvariantCulture)) :
 | 
					                ("Type=" + itemValueTypes[0]) :
 | 
				
			||||||
                ("Type in (" + string.Join(',', itemValueTypes.Select(i => i.ToString(CultureInfo.InvariantCulture))) + ")");
 | 
					                ("Type in (" + string.Join(',', itemValueTypes) + ")");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            InternalItemsQuery typeSubQuery = null;
 | 
					            InternalItemsQuery typeSubQuery = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            string itemCountColumns = null;
 | 
					            string itemCountColumns = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var stringBuilder = new StringBuilder();
 | 
					            var stringBuilder = new StringBuilder(1024);
 | 
				
			||||||
            var typesToCount = query.IncludeItemTypes;
 | 
					            var typesToCount = query.IncludeItemTypes;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (typesToCount.Length > 0)
 | 
					            if (typesToCount.Length > 0)
 | 
				
			||||||
@ -5326,6 +5344,7 @@ AND Type = @InternalPersonType)");
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                stringBuilder.Append(" where ")
 | 
					                stringBuilder.Append(" where ")
 | 
				
			||||||
                    .AppendJoin(" AND ", whereClauses)
 | 
					                    .AppendJoin(" AND ", whereClauses)
 | 
				
			||||||
 | 
					                    .Append(" AND ")
 | 
				
			||||||
                    .Append("guid in (select ItemId from ItemValues where ItemValues.CleanValue=A.CleanName AND ")
 | 
					                    .Append("guid in (select ItemId from ItemValues where ItemValues.CleanValue=A.CleanName AND ")
 | 
				
			||||||
                    .Append(typeClause)
 | 
					                    .Append(typeClause)
 | 
				
			||||||
                    .Append(")) as itemTypes");
 | 
					                    .Append(")) as itemTypes");
 | 
				
			||||||
@ -5359,7 +5378,7 @@ AND Type = @InternalPersonType)");
 | 
				
			|||||||
                IsSeries = query.IsSeries
 | 
					                IsSeries = query.IsSeries
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            columns = GetFinalColumnsToSelect(query, columns);
 | 
					            SetFinalColumnsToSelect(query, columns);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var innerWhereClauses = GetWhereClauses(innerQuery, null);
 | 
					            var innerWhereClauses = GetWhereClauses(innerQuery, null);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -5431,13 +5450,13 @@ AND Type = @InternalPersonType)");
 | 
				
			|||||||
                if (query.Limit.HasValue || offset > 0)
 | 
					                if (query.Limit.HasValue || offset > 0)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    stringBuilder.Append(" LIMIT ")
 | 
					                    stringBuilder.Append(" LIMIT ")
 | 
				
			||||||
                        .Append((query.Limit ?? int.MaxValue).ToString(CultureInfo.InvariantCulture));
 | 
					                        .Append(query.Limit ?? int.MaxValue);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (offset > 0)
 | 
					                if (offset > 0)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    stringBuilder.Append(" OFFSET ")
 | 
					                    stringBuilder.Append(" OFFSET ")
 | 
				
			||||||
                        .Append(offset.ToString(CultureInfo.InvariantCulture));
 | 
					                        .Append(offset);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -5454,8 +5473,10 @@ AND Type = @InternalPersonType)");
 | 
				
			|||||||
            if (query.EnableTotalRecordCount)
 | 
					            if (query.EnableTotalRecordCount)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                stringBuilder.Clear();
 | 
					                stringBuilder.Clear();
 | 
				
			||||||
 | 
					                var columnsToSelect = new List<string> { "count (distinct PresentationUniqueKey)" };
 | 
				
			||||||
 | 
					                SetFinalColumnsToSelect(query, columnsToSelect);
 | 
				
			||||||
                stringBuilder.Append("select ")
 | 
					                stringBuilder.Append("select ")
 | 
				
			||||||
                    .AppendJoin(',', GetFinalColumnsToSelect(query, new List<string> { "count (distinct PresentationUniqueKey)" }))
 | 
					                    .AppendJoin(',', columnsToSelect)
 | 
				
			||||||
                    .Append(FromText)
 | 
					                    .Append(FromText)
 | 
				
			||||||
                    .Append(GetJoinUserDataText(query))
 | 
					                    .Append(GetJoinUserDataText(query))
 | 
				
			||||||
                    .Append(whereText);
 | 
					                    .Append(whereText);
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										34
									
								
								MediaBrowser.Common/Extensions/StringBuilderExtensions.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								MediaBrowser.Common/Extensions/StringBuilderExtensions.cs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,34 @@
 | 
				
			|||||||
 | 
					using System.Collections.Generic;
 | 
				
			||||||
 | 
					using System.Text;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace MediaBrowser.Common.Extensions
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /// <summary>
 | 
				
			||||||
 | 
					    /// Extension methods for the <see cref="StringBuilder"/> class.
 | 
				
			||||||
 | 
					    /// </summary>
 | 
				
			||||||
 | 
					    public static class StringBuilderExtensions
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// Concatenates and appends the members of a collection in single quotes using the specified delimiter.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        /// <param name="builder">The string builder.</param>
 | 
				
			||||||
 | 
					        /// <param name="delimiter">The character delimiter.</param>
 | 
				
			||||||
 | 
					        /// <param name="values">The collection of strings to concatenate.</param>
 | 
				
			||||||
 | 
					        /// <returns>The updated string builder.</returns>
 | 
				
			||||||
 | 
					        public static StringBuilder AppendJoinInSingleQuotes(this StringBuilder builder, char delimiter, IReadOnlyList<string> values)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            for (var i = 0; i < values.Count; i++)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                builder.Append('\'')
 | 
				
			||||||
 | 
					                    .Append(values[i])
 | 
				
			||||||
 | 
					                    .Append('\'')
 | 
				
			||||||
 | 
					                    .Append(delimiter);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // remove last ,
 | 
				
			||||||
 | 
					            builder.Length--;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            return builder;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -60,10 +60,7 @@ namespace MediaBrowser.Controller.Providers
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public IReadOnlyList<string> GetFilePaths(string path)
 | 
					        public IReadOnlyList<string> GetFilePaths(string path)
 | 
				
			||||||
            => GetFilePaths(path, false, false);
 | 
					            => GetFilePaths(path, false);
 | 
				
			||||||
 | 
					 | 
				
			||||||
        public IReadOnlyList<string> GetSortedFilePaths(string path, bool clearCache)
 | 
					 | 
				
			||||||
            => GetFilePaths(path, clearCache, true);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public IReadOnlyList<string> GetFilePaths(string path, bool clearCache, bool sort = false)
 | 
					        public IReadOnlyList<string> GetFilePaths(string path, bool clearCache, bool sort = false)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
				
			|||||||
@ -15,8 +15,6 @@ namespace MediaBrowser.Controller.Providers
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        IReadOnlyList<string> GetFilePaths(string path);
 | 
					        IReadOnlyList<string> GetFilePaths(string path);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        IReadOnlyList<string> GetSortedFilePaths(string path, bool clearCache);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        IReadOnlyList<string> GetFilePaths(string path, bool clearCache, bool sort = false);
 | 
					        IReadOnlyList<string> GetFilePaths(string path, bool clearCache, bool sort = false);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -187,7 +187,7 @@ namespace MediaBrowser.Providers.MediaInfo
 | 
				
			|||||||
            IDirectoryService directoryService,
 | 
					            IDirectoryService directoryService,
 | 
				
			||||||
            bool clearCache)
 | 
					            bool clearCache)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var files = directoryService.GetSortedFilePaths(folder, clearCache);
 | 
					            var files = directoryService.GetFilePaths(folder, clearCache, true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            AddExternalSubtitleStreams(streams, videoPath, startIndex, files);
 | 
					            AddExternalSubtitleStreams(streams, videoPath, startIndex, files);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
				
			|||||||
@ -164,10 +164,7 @@ namespace Jellyfin.Server.Implementations.Tests.Data
 | 
				
			|||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public static IEnumerable<object[]> DeserializeImages_ValidAndInvalid_TestData()
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            yield return new object[]
 | 
					            yield return new object[]
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                string.Empty,
 | 
					                string.Empty,
 | 
				
			||||||
@ -215,23 +212,6 @@ namespace Jellyfin.Server.Implementations.Tests.Data
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [Theory]
 | 
					 | 
				
			||||||
        [MemberData(nameof(DeserializeImages_ValidAndInvalid_TestData))]
 | 
					 | 
				
			||||||
        public void DeserializeImages_ValidAndInvalid_Success(string value, ItemImageInfo[] expected)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            var result = _sqliteItemRepository.DeserializeImages(value);
 | 
					 | 
				
			||||||
            Assert.Equal(expected.Length, result.Length);
 | 
					 | 
				
			||||||
            for (int i = 0; i < expected.Length; i++)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                Assert.Equal(expected[i].Path, result[i].Path);
 | 
					 | 
				
			||||||
                Assert.Equal(expected[i].Type, result[i].Type);
 | 
					 | 
				
			||||||
                Assert.Equal(expected[i].DateModified, result[i].DateModified);
 | 
					 | 
				
			||||||
                Assert.Equal(expected[i].Width, result[i].Width);
 | 
					 | 
				
			||||||
                Assert.Equal(expected[i].Height, result[i].Height);
 | 
					 | 
				
			||||||
                Assert.Equal(expected[i].BlurHash, result[i].BlurHash);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        [Theory]
 | 
					        [Theory]
 | 
				
			||||||
        [MemberData(nameof(DeserializeImages_Valid_TestData))]
 | 
					        [MemberData(nameof(DeserializeImages_Valid_TestData))]
 | 
				
			||||||
        public void SerializeImages_Valid_Success(string expected, ItemImageInfo[] value)
 | 
					        public void SerializeImages_Valid_Success(string expected, ItemImageInfo[] value)
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user