[Pkg-cli-apps-commits] [banshee] 01/02: Import upstream patch to fix SQLite performance regression

Chow Loong Jin hyperair at debian.org
Fri Jan 23 05:35:42 UTC 2015


This is an automated email from the git hooks/post-receive script.

hyperair pushed a commit to branch experimental
in repository banshee.

commit afa00a468190f697211420c74127a58d70d4c962
Author: Chow Loong Jin <hyperair at debian.org>
Date:   Fri Jan 23 13:10:12 2015 +0800

    Import upstream patch to fix SQLite performance regression
    
    Closes: #766560
---
 ...x-performance-for-the-new-SQLite-s-query-.patch | 156 +++++++++++++++++++++
 debian/patches/series                              |   1 +
 2 files changed, 157 insertions(+)

diff --git a/debian/patches/Database-fix-performance-for-the-new-SQLite-s-query-.patch b/debian/patches/Database-fix-performance-for-the-new-SQLite-s-query-.patch
new file mode 100644
index 0000000..3d3034a
--- /dev/null
+++ b/debian/patches/Database-fix-performance-for-the-new-SQLite-s-query-.patch
@@ -0,0 +1,156 @@
+From: Samuel Gyger <gygersamuel at gmail.com>
+Date: Fri, 12 Dec 2014 17:07:45 +0100
+Subject: Database: fix performance for the new SQLite's query planner
+ (bgo#740879)
+
+Starting with sqlite version 3.8.6, a new query planner is used.
+To get back the performance on filling the CoreCache Table,
+this commit provides hints to sqlite (using the UNLIKELY statement).
+But the UNLIKELY statement is only supported in version 3.8.1 and
+above, so in order not to raise the version of the dependency on
+sqlite, we can use this new clause conditionally.
+
+Applied-Upstream: yes
+Origin: commit:fd3f08ec702f3a38918e0a96d2fc01d74af64ee4
+Bug-Debian: https://bugs.debian.org/766560
+Bug: https://bugzilla.gnome.org/show_bug.cgi?id=740879
+---
+ .../DatabaseAlbumArtistListModel.cs                            |  2 +-
+ .../Banshee.Collection.Database/DatabaseAlbumListModel.cs      |  2 +-
+ .../Banshee.Collection.Database/DatabaseArtistListModel.cs     |  2 +-
+ .../Banshee.Collection.Database/DatabaseFilterListModel.cs     |  7 ++++---
+ .../Banshee.Collection.Database/DatabaseQueryFilterModel.cs    |  5 +++--
+ .../Banshee.Collection.Database/DatabaseYearListModel.cs       |  2 +-
+ .../Banshee.Services/Banshee.Database/BansheeDbConnection.cs   | 10 ++++++++++
+ 7 files changed, 21 insertions(+), 9 deletions(-)
+
+diff --git a/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseAlbumArtistListModel.cs b/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseAlbumArtistListModel.cs
+index dee9c81..e91018b 100644
+--- a/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseAlbumArtistListModel.cs
++++ b/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseAlbumArtistListModel.cs
+@@ -46,7 +46,7 @@ namespace Banshee.Collection.Database
+             ReloadFragmentFormat = @"
+                 FROM CoreArtists WHERE CoreArtists.ArtistID IN
+                     (SELECT CoreAlbums.ArtistID FROM CoreAlbums, CoreTracks, CoreCache{0}
+-                        WHERE CoreCache.ModelID = {1} AND
++                        WHERE {4}(CoreCache.ModelID = {1}) AND
+                               CoreTracks.AlbumID = CoreAlbums.AlbumID AND
+                               EXISTS (SELECT 1 FROM CoreArtists WHERE ArtistID = CoreAlbums.ArtistID) AND
+                               CoreCache.ItemID = {2} {3})
+diff --git a/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseAlbumListModel.cs b/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseAlbumListModel.cs
+index 2550ab0..88235aa 100644
+--- a/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseAlbumListModel.cs
++++ b/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseAlbumListModel.cs
+@@ -58,7 +58,7 @@ namespace Banshee.Collection.Database
+             ReloadFragmentFormat = @"
+                 FROM CoreAlbums WHERE CoreAlbums.AlbumID IN
+                         (SELECT CoreTracks.AlbumID FROM CoreTracks, CoreCache{0}
+-                            WHERE CoreCache.ModelID = {1} AND
++                            WHERE {4}(CoreCache.ModelID = {1}) AND
+                                   CoreCache.ItemId = {2} {3})
+                     ORDER BY CoreAlbums.TitleSortKey, CoreAlbums.ArtistNameSortKey";
+         }
+diff --git a/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseArtistListModel.cs b/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseArtistListModel.cs
+index f7a2b4b..171e9e2 100644
+--- a/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseArtistListModel.cs
++++ b/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseArtistListModel.cs
+@@ -49,7 +49,7 @@ namespace Banshee.Collection.Database
+             ReloadFragmentFormat = @"
+                 FROM CoreArtists WHERE CoreArtists.ArtistID IN
+                     (SELECT CoreTracks.ArtistID FROM CoreTracks, CoreCache{0}
+-                        WHERE CoreCache.ModelID = {1} AND
++                        WHERE {4}(CoreCache.ModelID = {1}) AND
+                               CoreCache.ItemID = {2} {3})
+                     ORDER BY NameSortKey";
+         }
+diff --git a/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseFilterListModel.cs b/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseFilterListModel.cs
+index 018a0f4..2a5d4fd 100644
+--- a/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseFilterListModel.cs
++++ b/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseFilterListModel.cs
+@@ -57,10 +57,10 @@ namespace Banshee.Collection.Database
+         }
+ 
+         protected readonly U select_all_item;
+-        private HyenaSqliteConnection connection;
++        private BansheeDbConnection connection;
+ 
+         public DatabaseFilterListModel (string name, string label, Banshee.Sources.DatabaseSource source,
+-                                        DatabaseTrackListModel trackModel, HyenaSqliteConnection connection, SqliteModelProvider<T> provider, U selectAllItem, string uuid)
++                                        DatabaseTrackListModel trackModel, BansheeDbConnection connection, SqliteModelProvider<T> provider, U selectAllItem, string uuid)
+             : base (trackModel)
+         {
+             this.source = source;
+@@ -124,7 +124,8 @@ namespace Banshee.Collection.Database
+                         "{0}.{1} AND CoreTracks.TrackID = {0}.{2}",
+                         FilteredModel.JoinTable, FilteredModel.JoinPrimaryKey, FilteredModel.JoinColumn)
+                     : "CoreTracks.TrackID",
+-                filtered ? GetFilterFragment () : ""
++                filtered ? GetFilterFragment () : "",
++                connection.LikelihoodSupport ? "UNLIKELY" : ""
+             );
+         }
+ 
+diff --git a/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseQueryFilterModel.cs b/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseQueryFilterModel.cs
+index a4c00fb..339e351 100644
+--- a/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseQueryFilterModel.cs
++++ b/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseQueryFilterModel.cs
+@@ -37,6 +37,7 @@ using Hyena.Data.Sqlite;
+ using Mono.Unix;
+ 
+ using Banshee.ServiceStack;
++using Banshee.Database;
+ 
+ namespace Banshee.Collection.Database
+ {
+@@ -51,7 +52,7 @@ namespace Banshee.Collection.Database
+         private string select_all_fmt;
+ 
+         public DatabaseQueryFilterModel (Banshee.Sources.DatabaseSource source, DatabaseTrackListModel trackModel,
+-            HyenaSqliteConnection connection, string select_all_fmt, string uuid, QueryField field, string filter_column)
++            BansheeDbConnection connection, string select_all_fmt, string uuid, QueryField field, string filter_column)
+             : base (field.Name, field.Label, source, trackModel, connection, QueryFilterInfo<T>.CreateProvider (filter_column, field), new QueryFilterInfo<T> (), String.Format ("{0}-{1}", uuid, field.Name))
+         {
+             this.field = field;
+@@ -59,7 +60,7 @@ namespace Banshee.Collection.Database
+ 
+             ReloadFragmentFormat = @"
+                 FROM CoreTracks, CoreCache{0}
+-                    WHERE CoreCache.ModelID = {1} AND CoreCache.ItemID = {2} {3}
++                    WHERE {4}(CoreCache.ModelID = {1}) AND CoreCache.ItemID = {2} {3}
+                     ORDER BY Value";
+ 
+             QueryFields = new QueryFieldSet (query_filter_field);
+diff --git a/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseYearListModel.cs b/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseYearListModel.cs
+index b58d1df..5f96d2f 100644
+--- a/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseYearListModel.cs
++++ b/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseYearListModel.cs
+@@ -47,7 +47,7 @@ namespace Banshee.Collection.Database
+                 FROM (SELECT MIN(CoreTracks.TrackID) AS TrackID, CoreTracks.Year FROM CoreTracks GROUP BY CoreTracks.Year) AS CoreTracks
+                 WHERE CoreTracks.Year IN
+                     (SELECT CoreTracks.Year FROM CoreTracks, CoreCache{0}
+-                        WHERE CoreCache.ModelID = {1} AND
++                        WHERE {4}(CoreCache.ModelID = {1}) AND
+                               CoreCache.ItemID = {2} {3})
+                     ORDER BY Year";
+         }
+diff --git a/src/Core/Banshee.Services/Banshee.Database/BansheeDbConnection.cs b/src/Core/Banshee.Services/Banshee.Database/BansheeDbConnection.cs
+index e9bbbf5..3ae0728 100644
+--- a/src/Core/Banshee.Services/Banshee.Database/BansheeDbConnection.cs
++++ b/src/Core/Banshee.Services/Banshee.Database/BansheeDbConnection.cs
+@@ -52,6 +52,16 @@ namespace Banshee.Database
+             get { return configuration; }
+         }
+ 
++        private bool? likelihood_support = null;
++        public bool LikelihoodSupport {
++            get {
++                if (!likelihood_support.HasValue) {
++                    likelihood_support = Query<bool> ("SELECT sqlite_version () >= '3.8.1'");
++                }
++                return likelihood_support.Value;
++            }
++        }
++
+         public BansheeDbConnection () : this (DatabaseFile)
+         {
+             validate_schema = ApplicationContext.CommandLine.Contains ("validate-db-schema");
diff --git a/debian/patches/series b/debian/patches/series
index 598fcbd..069221d 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,3 +1,4 @@
 Enable-MPRIS-extension-by-default.patch
 Use-dbus-2.patch
 Fix-ambiguity-in-DateTime-class.patch
+Database-fix-performance-for-the-new-SQLite-s-query-.patch

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-cli-apps/packages/banshee.git



More information about the Pkg-cli-apps-commits mailing list