Author: jukka Date: Thu Nov 1 14:04:36 2012 New Revision: 1404599 URL: http://svn.apache.org/viewvc?rev=1404599&view=rev Log: OAK-413: TreeLocation.getStatus() cost increases as more content is read below this location
Allow an unconnected child builder to be acquired from a connected parent builder when that child node has not yet been modified. Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilder.java Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilder.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilder.java?rev=1404599&r1=1404598&r2=1404599&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilder.java (original) +++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilder.java Thu Nov 1 14:04:36 2012 @@ -69,7 +69,7 @@ import static org.apache.jackrabbit.oak. */ public class MemoryNodeBuilder implements NodeBuilder { - static final NodeState NULL_STATE = new MemoryNodeState( + private static final NodeState NULL_STATE = new MemoryNodeState( ImmutableMap.<String, PropertyState>of(), ImmutableMap.<String, NodeState>of()); @@ -120,7 +120,7 @@ public class MemoryNodeBuilder implement this.name = checkNotNull(name); this.root = parent.root; - this.revision = parent.revision; + this.revision = -1; this.baseState = null; this.writeState = null; @@ -173,7 +173,7 @@ public class MemoryNodeBuilder implement } else if (baseState != null) { return baseState; } else { - throw new IllegalStateException("This node does not exist"); + return NULL_STATE; } } @@ -368,7 +368,9 @@ public class MemoryNodeBuilder implement @Override public NodeBuilder child(String name) { read(); // shortcut when dealing with a read-only child node - if (writeState == null && baseState.hasChildNode(name)) { + if (baseState != null + && baseState.hasChildNode(name) + && (writeState == null || !writeState.nodes.containsKey(name))) { return createChildBuilder(name); }