Don't flush immediately during NoSQL writes

Most NoSQL systems require one or more RPCs to remote servers, which
has a much higher latency than a write to a local MySQL server.
To support setAutoFlush(false) in these cases we want to allow the
schema handle to buffer any writes made by the access interfaces
until the current operation is over.

Change-Id: Ib642bbf021b25f054b0777d2d4302161300a3b4b
Signed-off-by: Shawn O. Pearce <sop@google.com>
diff --git a/src/main/java/com/google/gwtorm/nosql/generic/GenericAccess.java b/src/main/java/com/google/gwtorm/nosql/generic/GenericAccess.java
index c58eb23..739c3da 100644
--- a/src/main/java/com/google/gwtorm/nosql/generic/GenericAccess.java
+++ b/src/main/java/com/google/gwtorm/nosql/generic/GenericAccess.java
@@ -215,11 +215,18 @@
     return new ListResultSet<T>(res);
   }
 
+  private void maybeFlush() throws OrmException {
+    if (db.isAutoFlush()) {
+      db.flush();
+    }
+  }
+
   @Override
   public void insert(Iterable<T> instances) throws OrmException {
     for (T obj : instances) {
       insertOne(obj);
     }
+    maybeFlush();
   }
 
   private void insertOne(T nObj) throws OrmException {
@@ -234,6 +241,7 @@
     for (T obj : instances) {
       upsertOne(obj, true);
     }
+    maybeFlush();
   }
 
   @Override
@@ -241,6 +249,7 @@
     for (T obj : instances) {
       upsertOne(obj, false);
     }
+    maybeFlush();
   }
 
   private void upsertOne(T newObj, boolean mustExist) throws OrmException {
@@ -316,6 +325,7 @@
       db.delete(dataRowKey(primaryKey(oldObj)));
       pruneOldIndexes(oldObj, null);
     }
+    maybeFlush();
   }
 
   @Override