]> source.dussan.org Git - vaadin-framework.git/commitdiff
Merge of (#9529) to Vaadin 7. 54/554/1
authorAnna Koskinen <anna@vaadin.com>
Fri, 21 Dec 2012 14:53:54 +0000 (16:53 +0200)
committerAnna Koskinen <anna@vaadin.com>
Fri, 21 Dec 2012 14:53:54 +0000 (16:53 +0200)
Limit unnecessary database queries.

Change-Id: Iae2ed72dd2d044f02abe775f2289126c5f5dbe1d

server/src/com/vaadin/data/util/sqlcontainer/SQLContainer.java

index 12cb892090e5173e7e532dc8c435a5ce8875c9b8..065810a7b432d5ae1fcf5bad7e8e6ae4ec5f9c80 100644 (file)
@@ -854,7 +854,21 @@ public class SQLContainer implements Container, Container.Filterable,
      * Does NOT remove sorting or filtering rules!
      */
     public void refresh() {
-        sizeDirty = true;
+        refresh(true);
+    }
+
+    /**
+     * Refreshes the container. If <code>setSizeDirty</code> is
+     * <code>false</code>, assumes that the current size is up to date. This is
+     * used in {@link #updateCount()} to refresh the contents when we know the
+     * size was just updated.
+     * 
+     * @param setSizeDirty
+     */
+    private void refresh(boolean setSizeDirty) {
+        if (setSizeDirty) {
+            sizeDirty = true;
+        }
         currentOffset = 0;
         cachedItems.clear();
         itemIndexes.clear();
@@ -1105,12 +1119,13 @@ public class SQLContainer implements Container, Container.Filterable,
                         "The query delegate doesn't support filtering", e);
             }
             int newSize = delegate.getCount();
+            sizeUpdated = new Date();
+            sizeDirty = false;
             if (newSize != size) {
                 size = newSize;
-                refresh();
+                // Size is up to date so don't set it back to dirty in refresh()
+                refresh(false);
             }
-            sizeUpdated = new Date();
-            sizeDirty = false;
             getLogger().log(Level.FINER,
                     "Updated row count. New count is: " + size);
         } catch (SQLException e) {