You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by mr...@apache.org on 2013/04/04 17:51:34 UTC
svn commit: r1464605 - in
/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version:
InternalVersionHistoryImpl.java InternalVersionManagerBase.java
NodeStateEx.java
Author: mreutegg
Date: Thu Apr 4 15:51:34 2013
New Revision: 1464605
URL: http://svn.apache.org/r1464605
Log:
JCR-3537: Large number of SQL queries when adding nodes with version history
(patch provided by Todd Pagni)
Modified:
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionHistoryImpl.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionManagerBase.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/NodeStateEx.java
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionHistoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionHistoryImpl.java?rev=1464605&r1=1464604&r2=1464605&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionHistoryImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionHistoryImpl.java Thu Apr 4 15:51:34 2013
@@ -665,7 +665,8 @@ class InternalVersionHistoryImpl extends
node.setPropertyValues(NameConstants.JCR_FROZENMIXINTYPES, PropertyType.NAME, ivalues);
}
- parent.store();
+ parent.store(false);
+ pNode.store(true);
return pNode;
}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionManagerBase.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionManagerBase.java?rev=1464605&r1=1464604&r2=1464605&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionManagerBase.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalVersionManagerBase.java Thu Apr 4 15:51:34 2013
@@ -576,7 +576,8 @@ abstract class InternalVersionManagerBas
n = childn;
} else if (interNT != null) {
childn = n.addNode(name, interNT, null, false);
- n.store();
+ n.store(false);
+ childn.store(true);
n = childn;
} else {
return null;
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/NodeStateEx.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/NodeStateEx.java?rev=1464605&r1=1464604&r2=1464605&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/NodeStateEx.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/NodeStateEx.java Thu Apr 4 15:51:34 2013
@@ -710,8 +710,21 @@ public class NodeStateEx {
* @throws RepositoryException if an error occurs
*/
public void store() throws RepositoryException {
+ store(true);
+ }
+
+ /**
+ * Stores the persistent state and depending on the <code>recursively</code>
+ * flag also stores the modified child nodes recursively.
+ *
+ *
+ * @param recursively whether to store the nodes recursively or just this
+ * single node.
+ * @throws RepositoryException if an error occurs
+ */
+ public void store(boolean recursively) throws RepositoryException {
try {
- store(nodeState);
+ store(nodeState, recursively);
} catch (ItemStateException e) {
throw new RepositoryException(e);
}
@@ -723,7 +736,7 @@ public class NodeStateEx {
* @param state node state to store
* @throws ItemStateException if an error occurs
*/
- private void store(NodeState state)
+ private void store(NodeState state, boolean recursively)
throws ItemStateException {
if (state.getStatus() != ItemState.STATUS_EXISTING) {
@@ -735,10 +748,12 @@ public class NodeStateEx {
stateMgr.store(pstate);
}
}
- // now store all child node entries
- for (ChildNodeEntry entry : state.getChildNodeEntries()) {
- NodeState nstate = (NodeState) stateMgr.getItemState(entry.getId());
- store(nstate);
+ if (recursively) {
+ // now store all child node entries
+ for (ChildNodeEntry entry : state.getChildNodeEntries()) {
+ NodeState nstate = (NodeState) stateMgr.getItemState(entry.getId());
+ store(nstate, true);
+ }
}
// and store itself
stateMgr.store(state);