banshee r3402 - in trunk/banshee: . src/Libraries/Hyena/Hyena.Data src/Libraries/Hyena/Hyena.Data.Sqlite



Author: gburt
Date: Mon Mar 10 17:19:20 2008
New Revision: 3402
URL: http://svn.gnome.org/viewvc/banshee?rev=3402&view=rev

Log:
2008-03-10  Gabriel Burt  <gabriel burt gmail com>

	* src/Libraries/Hyena/Hyena.Data.Sqlite/SqliteModelCache.cs: Avoid
	unnecessary db queries in saving/restoring selection.  Fix bugs with
	IndexOf method.

	* src/Libraries/Hyena/Hyena.Data/DictionaryModelCache.cs: Add lock
	around Clear command.


Modified:
   trunk/banshee/ChangeLog
   trunk/banshee/src/Libraries/Hyena/Hyena.Data.Sqlite/SqliteModelCache.cs
   trunk/banshee/src/Libraries/Hyena/Hyena.Data/DictionaryModelCache.cs

Modified: trunk/banshee/src/Libraries/Hyena/Hyena.Data.Sqlite/SqliteModelCache.cs
==============================================================================
--- trunk/banshee/src/Libraries/Hyena/Hyena.Data.Sqlite/SqliteModelCache.cs	(original)
+++ trunk/banshee/src/Libraries/Hyena/Hyena.Data.Sqlite/SqliteModelCache.cs	Mon Mar 10 17:19:20 2008
@@ -122,7 +122,7 @@
                         SELECT OrderID FROM {0}
                             WHERE
                                 ModelID = {1} AND
-                                ItemID = (SELECT {2} FROM {3} WHERE {4} = ?)",
+                                ItemID IN (SELECT {2} FROM {3} WHERE {4} = ?) LIMIT 1",
                         CacheTableName, uid, model.JoinPrimaryKey, model.JoinTable, model.JoinColumn
                     )
                 );
@@ -232,9 +232,6 @@
                 if (rows == 0)
                     return -1;
 
-                if (item_id == FirstOrderId)
-                    return 0;
-
                 long target_id = connection.Query<long> (select_single_command, item_id);
                 if (target_id == 0) {
                     return -1;
@@ -276,11 +273,13 @@
             }
         }
 
+        private bool saved_selection = false;
         private void SaveSelection ()
         {
-            connection.Execute (delete_selection_command);
-
             if (model.Selection.Count > 0 && !(has_select_all_item && model.Selection.AllSelected)) {
+                connection.Execute (delete_selection_command);
+                saved_selection = true;
+
                 long start, end;
                 foreach (Hyena.Collections.RangeCollection.Range range in model.Selection.Ranges) {
                     start = range.Start;
@@ -294,6 +293,8 @@
 
                     connection.Execute (save_selection_command, start, end - start + 1);
                 }
+            } else {
+                saved_selection = false;
             }
         }
 
@@ -309,10 +310,12 @@
 
             model.Selection.Clear (false);
 
-            using (IDataReader reader = connection.Query (get_selection_command)) {
-                while (reader.Read ()) {
-                    selected_id = Convert.ToInt64 (reader[0]) - first_id;
-                    model.Selection.QuietSelect ((int)selected_id);
+            if (saved_selection) {
+                using (IDataReader reader = connection.Query (get_selection_command)) {
+                    while (reader.Read ()) {
+                        selected_id = Convert.ToInt64 (reader[0]) - first_id;
+                        model.Selection.QuietSelect ((int)selected_id);
+                    }
                 }
             }
 

Modified: trunk/banshee/src/Libraries/Hyena/Hyena.Data/DictionaryModelCache.cs
==============================================================================
--- trunk/banshee/src/Libraries/Hyena/Hyena.Data/DictionaryModelCache.cs	(original)
+++ trunk/banshee/src/Libraries/Hyena/Hyena.Data/DictionaryModelCache.cs	Mon Mar 10 17:19:20 2008
@@ -56,7 +56,9 @@
 
         public override void Clear ()
         {
-            cache.Clear ();
+            lock (this) {
+                cache.Clear ();
+            }
         }
     }
 }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]