cvium 4 years ago
parent
commit
0835b26889

+ 59 - 38
Emby.Server.Implementations/Data/SqliteItemRepository.cs

@@ -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 ")
-                .AppendJoin(',', GetFinalColumnsToSelect(query, new List<string> { "count(distinct PresentationUniqueKey)" }))
+            var columns = 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 ")
-                .AppendJoin(',', GetFinalColumnsToSelect(query, _retriveItemColumns.ToList()))
+            var columns = _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 ")
-                .AppendJoin(',', GetFinalColumnsToSelect(query, _retriveItemColumns.ToList()))
+            var columns = _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 ")
-                .AppendJoin(',', GetFinalColumnsToSelect(query, new List<string> { "guid" }))
+            var columns = 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 in (" + string.Join(',', itemValueTypes.Select(i => i.ToString(CultureInfo.InvariantCulture))) + ")");
+                ("Type=" + itemValueTypes[0]) :
+                ("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 - 0
MediaBrowser.Common/Extensions/StringBuilderExtensions.cs

@@ -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;
+        }
+    }
+}

+ 1 - 4
MediaBrowser.Controller/Providers/DirectoryService.cs

@@ -60,10 +60,7 @@ namespace MediaBrowser.Controller.Providers
         }
         }
 
 
         public IReadOnlyList<string> GetFilePaths(string path)
         public IReadOnlyList<string> GetFilePaths(string path)
-            => GetFilePaths(path, false, false);
-
-        public IReadOnlyList<string> GetSortedFilePaths(string path, bool clearCache)
-            => GetFilePaths(path, clearCache, true);
+            => GetFilePaths(path, false);
 
 
         public IReadOnlyList<string> GetFilePaths(string path, bool clearCache, bool sort = false)
         public IReadOnlyList<string> GetFilePaths(string path, bool clearCache, bool sort = false)
         {
         {

+ 0 - 2
MediaBrowser.Controller/Providers/IDirectoryService.cs

@@ -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);
     }
     }
 }
 }

+ 1 - 1
MediaBrowser.Providers/MediaInfo/SubtitleResolver.cs

@@ -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);
         }
         }

+ 0 - 20
tests/Jellyfin.Server.Implementations.Tests/Data/SqliteItemRepositoryTests.cs

@@ -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)