You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by re...@apache.org on 2014/04/07 16:51:07 UTC
svn commit: r1585497 - in /jackrabbit/oak/trunk/oak-core/src:
main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java
test/java/org/apache/jackrabbit/oak/plugins/document/BasicDocumentStoreTest.java
Author: reschke
Date: Mon Apr 7 14:51:07 2014
New Revision: 1585497
URL: http://svn.apache.org/r1585497
Log:
OAK-1266 - simplify implementation of update(), add test case
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/BasicDocumentStoreTest.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java?rev=1585497&r1=1585496&r2=1585497&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java Mon Apr 7 14:51:07 2014
@@ -400,30 +400,11 @@ public class RDBDocumentStore implements
@CheckForNull
private <T extends Document> void internalUpdate(Collection<T> collection, List<String> ids, UpdateOp update) {
- Connection connection = null;
- String tableName = getTable(collection);
- try {
- connection = getConnection();
- for (String id : ids) {
- String in = dbRead(connection, tableName, id);
- if (in == null) {
- throw new MicroKernelException(tableName + " " + id + " not found");
- }
- T doc = fromString(collection, in);
- Long oldmodcount = (Long) doc.get(MODCOUNT);
- update.increment(MODCOUNT, 1);
- UpdateUtils.applyChanges(doc, update, comparator);
- String data = asString(doc);
- Long modified = (Long) doc.get(MODIFIED);
- Long modcount = (Long) doc.get(MODCOUNT);
- dbUpdate(connection, tableName, id, modified, modcount, oldmodcount, data);
- invalidateCache(collection, id); // TODO
- }
- connection.commit();
- } catch (Exception ex) {
- throw new MicroKernelException(ex);
- } finally {
- closeConnection(connection);
+
+ for (String id : ids) {
+ UpdateOp up = update.copy();
+ up = up.shallowCopy(id);
+ internalCreateOrUpdate(collection, up, false, true);
}
}
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/BasicDocumentStoreTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/BasicDocumentStoreTest.java?rev=1585497&r1=1585496&r2=1585497&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/BasicDocumentStoreTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/BasicDocumentStoreTest.java Mon Apr 7 14:51:07 2014
@@ -16,6 +16,7 @@
*/
package org.apache.jackrabbit.oak.plugins.document;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
@@ -136,6 +137,32 @@ public class BasicDocumentStoreTest exte
}
@Test
+ public void testUpdateMultiple() {
+ String id = this.getClass().getName() + ".testUpdateMultiple";
+ // create a test node
+ UpdateOp up = new UpdateOp(id, true);
+ up.set("_id", id);
+ boolean success = super.ds.create(Collection.NODES, Collections.singletonList(up));
+ assertTrue(success);
+ removeMe.add(id);
+
+ // update a non-existing one and this one
+ List<String> toupdate = new ArrayList<String>();
+ toupdate.add(id + "-" + UUID.randomUUID());
+ toupdate.add(id);
+
+ UpdateOp up2 = new UpdateOp(id, false);
+ up2.set("foo", "bar");
+ ds.update(Collection.NODES, toupdate, up2);
+
+ // id should be updated
+ ds.invalidateCache();
+ Document d = ds.find(Collection.NODES, id);
+ assertNotNull(d);
+ assertEquals(d.get("foo").toString(), "bar");
+ }
+
+ @Test
public void testCreatePerfSmall() {
createPerf(16);
}