Author: tolusha
Date: 2011-11-30 06:28:27 -0500 (Wed, 30 Nov 2011)
New Revision: 5246
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/dataflow/ItemDataConsumer.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/dataflow/TransactionChangesLog.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NodeImpl.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SessionDataManager.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/ACLInheritanceSupportedWorkspaceDataManager.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/CacheableWorkspaceDataManager.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/ShareableSupportedWorkspaceDataManager.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/VersionableWorkspaceDataManager.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/WorkspacePersistentDataManager.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/session/LocalWorkspaceStorageDataManagerProxy.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/session/TransactionableDataManager.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/inmemory/InmemoryStorageConnection.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCStorageConnection.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/MultiDbJDBCConnection.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/SingleDbJDBCConnection.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/CQJDBCStorageConnection.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/MultiDbJDBCConnection.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/SingleDbJDBCConnection.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/statistics/StatisticsJDBCStorageConnection.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/storage/WorkspaceStorageConnection.java
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/BaseStandaloneTest.java
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/TestGetNodesLazily.java
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/dataflow/persistent/TestCacheableWorkspaceDataManager.java
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/dataflow/persistent/TestWorkspaceStorageCacheInClusterMode.java
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/dataflow/persistent/cache/jbosscache/TestJBossCacheWorkspaceStorageCache.java
Log:
EXOJCR-1654: get rid of setMaxRows in the query
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/dataflow/ItemDataConsumer.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/dataflow/ItemDataConsumer.java 2011-11-30
10:16:17 UTC (rev 5245)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/dataflow/ItemDataConsumer.java 2011-11-30
11:28:27 UTC (rev 5246)
@@ -110,14 +110,16 @@
* @param parent
* the parent data
* @param fromOrderNum
- * the last order number returned in previous request
- * @param limit
- * the recommended amount of children nodes to return
+ * the returned list of child nodes should not contain the node with order
number
+ * less than <code>fromOrderNum</code>
+ * @param toOrderNum
+ * the returned list of child nodes should not contain the node with order
number
+ * more than <code>toOrderNum</code>
* @param childs
- * will contain the resulted children nodes
+ * will contain the resulted child nodes
* @return true if there are data to retrieve for next request and false in other case
*/
- boolean getChildNodesDataByPage(NodeData parent, int fromOrderNum, int limit,
List<NodeData> childs)
+ boolean getChildNodesDataByPage(NodeData parent, int fromOrderNum, int toOrderNum,
List<NodeData> childs)
throws RepositoryException;
/**
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/dataflow/TransactionChangesLog.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/dataflow/TransactionChangesLog.java 2011-11-30
10:16:17 UTC (rev 5245)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/dataflow/TransactionChangesLog.java 2011-11-30
11:28:27 UTC (rev 5246)
@@ -168,7 +168,9 @@
{
ItemData item = state.getData();
if (item.getParentIdentifier().equals(rootIdentifier) && item.isNode()
== forNodes)
+ {
list.add(state);
+ }
}
return list;
}
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NodeImpl.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NodeImpl.java 2011-11-30
10:16:17 UTC (rev 5245)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NodeImpl.java 2011-11-30
11:28:27 UTC (rev 5246)
@@ -3515,7 +3515,10 @@
{
private final SessionDataManager dataManager;
- private final int limit;
+ /**
+ * The approximate count of the nodes which can be retrieved from storage by
request.
+ */
+ private final int pageSize;
private int fromOrderNum = 0;
@@ -3523,6 +3526,9 @@
private int pos = 0;
+ /**
+ * The count of child nodes. Calculated only once when asked.
+ */
private int size = -1;
private LazyNodeIterator lazyNodeItetator = new LazyNodeIterator(new
ArrayList<NodeData>());
@@ -3532,10 +3538,10 @@
this(dataManager, session.getLazyNodeIteratorPageSize());
}
- LazyNodeIteratorByPage(SessionDataManager dataManager, int limit) throws
RepositoryException
+ LazyNodeIteratorByPage(SessionDataManager dataManager, int pageSize) throws
RepositoryException
{
this.dataManager = dataManager;
- this.limit = limit;
+ this.pageSize = pageSize;
}
/**
@@ -3622,11 +3628,21 @@
public void skip(long skipNum)
{
pos += skipNum;
- long leftToSkip = lazyNodeItetator.trySkip(skipNum, false);
- if (leftToSkip != 0)
+
+ // iterator is empty, no need to invoke trySkip() method since it returns
+ // decreased by 1 the skipNum parameter
+ if (!lazyNodeItetator.hasNext())
{
- readNextPage(leftToSkip + 1);
+ readNextPage(skipNum);
}
+ else
+ {
+ long leftToSkip = lazyNodeItetator.trySkip(skipNum, false);
+ if (leftToSkip != 0)
+ {
+ readNextPage(leftToSkip);
+ }
+ }
}
/**
@@ -3669,7 +3685,8 @@
List<NodeData> storedNodes = new ArrayList<NodeData>();
try
{
- hasNext = dataManager.getChildNodesDataByPage(nodeData(), fromOrderNum,
limit, storedNodes);
+ hasNext =
+ dataManager.getChildNodesDataByPage(nodeData(), fromOrderNum, fromOrderNum
+ pageSize - 1, storedNodes);
}
catch (RepositoryException e)
{
@@ -3681,7 +3698,7 @@
int size = storedNodes.size();
- fromOrderNum = size == 0 ? fromOrderNum + limit : storedNodes.get(size -
1).getOrderNumber() + 1;
+ fromOrderNum = size == 0 ? fromOrderNum + pageSize : storedNodes.get(size -
1).getOrderNumber() + 1;
// skip some nodes
if (size != 0)
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SessionDataManager.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SessionDataManager.java 2011-11-30
10:16:17 UTC (rev 5245)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SessionDataManager.java 2011-11-30
11:28:27 UTC (rev 5246)
@@ -991,7 +991,7 @@
/**
* {@inheritDoc}
*/
- public boolean getChildNodesDataByPage(final NodeData parent, int fromOrderNum, int
limit, List<NodeData> childs)
+ public boolean getChildNodesDataByPage(final NodeData parent, int fromOrderNum, int
toOrderNum, List<NodeData> childs)
throws RepositoryException
{
long start = 0;
@@ -1006,7 +1006,7 @@
boolean hasNext = false;
if (!isNew(parent.getIdentifier()))
{
- hasNext = transactionableManager.getChildNodesDataByPage(parent,
fromOrderNum, limit, childs);
+ hasNext = transactionableManager.getChildNodesDataByPage(parent,
fromOrderNum, toOrderNum, childs);
}
// merge data
@@ -1022,7 +1022,7 @@
descendants.put(childNode.getIdentifier(), childNode);
}
- int minOrderNum = childs.size() != 0 ? childs.get(0).getOrderNumber() :-1;
+ int minOrderNum = childs.size() != 0 ? childs.get(0).getOrderNumber() : -1;
int maxOrderNum = childs.size() != 0 ? childs.get(childs.size() -
1).getOrderNumber() : -1;
// merge data
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/ACLInheritanceSupportedWorkspaceDataManager.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/ACLInheritanceSupportedWorkspaceDataManager.java 2011-11-30
10:16:17 UTC (rev 5245)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/ACLInheritanceSupportedWorkspaceDataManager.java 2011-11-30
11:28:27 UTC (rev 5246)
@@ -73,10 +73,10 @@
/**
* {@inheritDoc}
*/
- public boolean getChildNodesDataByPage(NodeData parent, int fromOrderNum, int limit,
List<NodeData> childs)
+ public boolean getChildNodesDataByPage(NodeData parent, int fromOrderNum, int
toOrderNum, List<NodeData> childs)
throws RepositoryException
{
- return persistentManager.getChildNodesDataByPage(parent, fromOrderNum, limit,
childs);
+ return persistentManager.getChildNodesDataByPage(parent, fromOrderNum, toOrderNum,
childs);
}
/**
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/CacheableWorkspaceDataManager.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/CacheableWorkspaceDataManager.java 2011-11-30
10:16:17 UTC (rev 5245)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/CacheableWorkspaceDataManager.java 2011-11-30
11:28:27 UTC (rev 5246)
@@ -594,7 +594,7 @@
/**
* {@inheritDoc}
*/
- public boolean getChildNodesDataByPage(final NodeData nodeData, final int
fromOrderNum, final int limit,
+ public boolean getChildNodesDataByPage(final NodeData nodeData, final int
fromOrderNum, final int toOrderNum,
final List<NodeData> childs) throws RepositoryException
{
// if child nodes lazy iteration feature not supported by cache
@@ -655,7 +655,8 @@
public Boolean run() throws RepositoryException
{
boolean hasNext =
- CacheableWorkspaceDataManager.super.getChildNodesDataByPage(nodeData,
fromOrderNum, limit, childs);
+ CacheableWorkspaceDataManager.super.getChildNodesDataByPage(nodeData,
fromOrderNum, toOrderNum,
+ childs);
if (cache.isEnabled())
{
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/ShareableSupportedWorkspaceDataManager.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/ShareableSupportedWorkspaceDataManager.java 2011-11-30
10:16:17 UTC (rev 5245)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/ShareableSupportedWorkspaceDataManager.java 2011-11-30
11:28:27 UTC (rev 5246)
@@ -73,10 +73,10 @@
/**
* {@inheritDoc}
*/
- public boolean getChildNodesDataByPage(NodeData parent, int fromOrderNum, int limit,
List<NodeData> childs)
+ public boolean getChildNodesDataByPage(NodeData parent, int fromOrderNum, int
toOrderNum, List<NodeData> childs)
throws RepositoryException
{
- return persistentManager.getChildNodesDataByPage(parent, fromOrderNum, limit,
childs);
+ return persistentManager.getChildNodesDataByPage(parent, fromOrderNum, toOrderNum,
childs);
}
/**
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/VersionableWorkspaceDataManager.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/VersionableWorkspaceDataManager.java 2011-11-30
10:16:17 UTC (rev 5245)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/VersionableWorkspaceDataManager.java 2011-11-30
11:28:27 UTC (rev 5246)
@@ -91,14 +91,14 @@
* {@inheritDoc}
*/
@Override
- public boolean getChildNodesDataByPage(NodeData nodeData, int fromOrderNum, int limit,
List<NodeData> childs)
+ public boolean getChildNodesDataByPage(NodeData nodeData, int fromOrderNum, int
toOrderNum, List<NodeData> childs)
throws RepositoryException
{
if (isSystemDescendant(nodeData.getQPath()) &&
!this.equals(versionDataManager))
{
- return versionDataManager.getChildNodesDataByPage(nodeData, fromOrderNum, limit,
childs);
+ return versionDataManager.getChildNodesDataByPage(nodeData, fromOrderNum,
toOrderNum, childs);
}
- return super.getChildNodesDataByPage(nodeData, fromOrderNum, limit, childs);
+ return super.getChildNodesDataByPage(nodeData, fromOrderNum, toOrderNum, childs);
}
/**
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/WorkspacePersistentDataManager.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/WorkspacePersistentDataManager.java 2011-11-30
10:16:17 UTC (rev 5245)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/WorkspacePersistentDataManager.java 2011-11-30
11:28:27 UTC (rev 5246)
@@ -629,13 +629,13 @@
/**
* {@inheritDoc}
*/
- public boolean getChildNodesDataByPage(final NodeData nodeData, int fromOrderNum, int
limit,
+ public boolean getChildNodesDataByPage(final NodeData nodeData, int fromOrderNum, int
toOrderNum,
List<NodeData> childNodes) throws RepositoryException
{
final WorkspaceStorageConnection con = dataContainer.openConnection();
try
{
- return con.getChildNodesDataByPage(nodeData, fromOrderNum, limit, childNodes);
+ return con.getChildNodesDataByPage(nodeData, fromOrderNum, toOrderNum,
childNodes);
}
finally
{
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/session/LocalWorkspaceStorageDataManagerProxy.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/session/LocalWorkspaceStorageDataManagerProxy.java 2011-11-30
10:16:17 UTC (rev 5245)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/session/LocalWorkspaceStorageDataManagerProxy.java 2011-11-30
11:28:27 UTC (rev 5246)
@@ -154,10 +154,10 @@
/**
* {@inheritDoc}
*/
- public boolean getChildNodesDataByPage(NodeData parent, int fromOrderNum, int limit,
List<NodeData> childs)
+ public boolean getChildNodesDataByPage(NodeData parent, int fromOrderNum, int
toOrderNum, List<NodeData> childs)
throws RepositoryException
{
- return storageDataManager.getChildNodesDataByPage(parent, fromOrderNum, limit,
copyNodes(childs));
+ return storageDataManager.getChildNodesDataByPage(parent, fromOrderNum, toOrderNum,
copyNodes(childs));
}
/**
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/session/TransactionableDataManager.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/session/TransactionableDataManager.java 2011-11-30
10:16:17 UTC (rev 5245)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/session/TransactionableDataManager.java 2011-11-30
11:28:27 UTC (rev 5246)
@@ -105,10 +105,10 @@
/**
* {@inheritDoc}
*/
- public boolean getChildNodesDataByPage(final NodeData parent, int fromOrderNum, int
limit, List<NodeData> childs)
+ public boolean getChildNodesDataByPage(final NodeData parent, int fromOrderNum, int
toOrderNum, List<NodeData> childs)
throws RepositoryException
{
- boolean hasNext = storageDataManager.getChildNodesDataByPage(parent, fromOrderNum,
limit, childs);
+ boolean hasNext = storageDataManager.getChildNodesDataByPage(parent, fromOrderNum,
toOrderNum, childs);
if (txStarted())
{
@@ -116,10 +116,9 @@
List<ItemState> txChanges =
transactionLog.getChildrenChanges(parent.getIdentifier(), true);
if (txChanges.size() > 0)
{
-
- int minOrderNum = childs.size() != 0 ? childs.get(0).getOrderNumber() :-1;
+ int minOrderNum = childs.size() != 0 ? childs.get(0).getOrderNumber() : -1;
int maxOrderNum = childs.size() != 0 ? childs.get(childs.size() -
1).getOrderNumber() : -1;
-
+
for (ItemState state : txChanges)
{
NodeData data = (NodeData)state.getData();
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/inmemory/InmemoryStorageConnection.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/inmemory/InmemoryStorageConnection.java 2011-11-30
10:16:17 UTC (rev 5245)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/inmemory/InmemoryStorageConnection.java 2011-11-30
11:28:27 UTC (rev 5246)
@@ -362,7 +362,7 @@
/**
* {@inheritDoc}
*/
- public boolean getChildNodesDataByPage(NodeData parent, int fromOrderNum, int limit,
List<NodeData> childs)
+ public boolean getChildNodesDataByPage(NodeData parent, int fromOrderNum, int
toOrderNum, List<NodeData> childs)
throws RepositoryException
{
throw new UnsupportedOperationException(
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCStorageConnection.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCStorageConnection.java 2011-11-30
10:16:17 UTC (rev 5245)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCStorageConnection.java 2011-11-30
11:28:27 UTC (rev 5246)
@@ -1187,7 +1187,7 @@
* @throws RepositoryException
* @throws IllegalStateException
*/
- public boolean getChildNodesDataByPage(NodeData parent, int fromOrderNum, int limit,
List<NodeData> childNodes)
+ public boolean getChildNodesDataByPage(NodeData parent, int fromOrderNum, int
toOrderNum, List<NodeData> childNodes)
throws RepositoryException, IllegalStateException
{
// not supported by non-CQ deprecated JDBC container
@@ -2928,7 +2928,7 @@
protected abstract ResultSet findNodesAndProperties(String lastNodeId, int offset, int
limit) throws SQLException;
- protected abstract ResultSet findChildNodesByParentIdentifier(String parentCid, int
fromOrderNum, int limit)
+ protected abstract ResultSet findChildNodesByParentIdentifier(String parentCid, int
fromOrderNum, int toOrderNum)
throws SQLException;
protected abstract int addReference(PropertyData data) throws SQLException,
IOException;
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/MultiDbJDBCConnection.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/MultiDbJDBCConnection.java 2011-11-30
10:16:17 UTC (rev 5245)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/MultiDbJDBCConnection.java 2011-11-30
11:28:27 UTC (rev 5246)
@@ -422,7 +422,7 @@
/**
* {@inheritDoc}
*/
- protected ResultSet findChildNodesByParentIdentifier(String parentCid, int
lastOrderNum, int limit)
+ protected ResultSet findChildNodesByParentIdentifier(String parentCid, int
fromOrderNum, int toOrderNum)
throws SQLException
{
throw new UnsupportedOperationException("findChildNodesByParentIdentifier is
not supported for old queries");
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/SingleDbJDBCConnection.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/SingleDbJDBCConnection.java 2011-11-30
10:16:17 UTC (rev 5245)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/SingleDbJDBCConnection.java 2011-11-30
11:28:27 UTC (rev 5246)
@@ -436,7 +436,7 @@
/**
* {@inheritDoc}
*/
- protected ResultSet findChildNodesByParentIdentifier(String parentCid, int
lastOrderNum, int limit)
+ protected ResultSet findChildNodesByParentIdentifier(String parentCid, int
fromOrderNum, int toOrderNum)
throws SQLException
{
throw new UnsupportedOperationException("findChildNodesByParentIdentifier is
not supported for old queries");
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/CQJDBCStorageConnection.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/CQJDBCStorageConnection.java 2011-11-30
10:16:17 UTC (rev 5245)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/CQJDBCStorageConnection.java 2011-11-30
11:28:27 UTC (rev 5246)
@@ -388,23 +388,17 @@
* {@inheritDoc}
*/
@Override
- public boolean getChildNodesDataByPage(NodeData parent, int fromOrderNum, int limit,
List<NodeData> childNodes)
+ public boolean getChildNodesDataByPage(NodeData parent, int fromOrderNum, int
toOrderNum, List<NodeData> childNodes)
throws RepositoryException, IllegalStateException
{
checkIfOpened();
ResultSet resultSet = null;
try
{
- // query will return nodes and properties in same result set
- // last node can be incomplete, so reading one more ahead, to be sure returning
- // at least "limit" nodes.
- int rowsLimit = (limit + 1) * 4;
- resultSet =
findChildNodesByParentIdentifier(getInternalId(parent.getIdentifier()), fromOrderNum,
rowsLimit);
+ resultSet =
findChildNodesByParentIdentifier(getInternalId(parent.getIdentifier()), fromOrderNum,
toOrderNum);
TempNodeData data = null;
- int resultSetSize = 0;
while (resultSet.next())
{
- resultSetSize++;
if (data == null)
{
data = new TempNodeData(resultSet);
@@ -425,19 +419,14 @@
}
values.add(new TempPropertyData(resultSet));
}
- // last node can be incomplete, so removed
- boolean hasNext = resultSetSize == rowsLimit;
- if (!hasNext)
+
+ if (data != null)
{
- // the last one node
- if (data != null)
- {
- NodeData nodeData = loadNodeFromTemporaryNodeData(data, parent.getQPath(),
parent.getACL());
- childNodes.add(nodeData);
- }
+ NodeData nodeData = loadNodeFromTemporaryNodeData(data, parent.getQPath(),
parent.getACL());
+ childNodes.add(nodeData);
}
- return hasNext;
+ return childNodes.size() != 0 ? true : getLastOrderNumber(parent) >
toOrderNum;
}
catch (SQLException e)
{
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/MultiDbJDBCConnection.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/MultiDbJDBCConnection.java 2011-11-30
10:16:17 UTC (rev 5245)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/MultiDbJDBCConnection.java 2011-11-30
11:28:27 UTC (rev 5246)
@@ -212,7 +212,7 @@
FIND_NODES_BY_PARENTID_LAZILY_CQ =
"select I.*, P.NAME AS PROP_NAME, V.ORDER_NUM, V.DATA from JCR_MITEM I,
JCR_MITEM P, JCR_MVALUE V"
- + " where I.I_CLASS=1 and I.PARENT_ID=? and I.N_ORDER_NUM >= ?
and"
+ + " where I.I_CLASS=1 and I.PARENT_ID=? and I.N_ORDER_NUM >= ? and
I.N_ORDER_NUM <= ? and"
+ " P.I_CLASS=2 and P.PARENT_ID=I.ID and
(
P.NAME='[http://www.jcp.org/jcr/1.0]primaryType' or"
+ "
P.NAME='[http://www.jcp.org/jcr/1.0]mixinTypes' or"
+ "
P.NAME='[http://www.exoplatform.com/jcr/exo/1.0]owner'
or"
@@ -645,7 +645,7 @@
/**
* {@inheritDoc}
*/
- protected ResultSet findChildNodesByParentIdentifier(String parentCid, int
fromOrderNum, int limit)
+ protected ResultSet findChildNodesByParentIdentifier(String parentCid, int
fromOrderNum, int toOrderNum)
throws SQLException
{
if (findNodesByParentIdLazilyCQ == null)
@@ -659,7 +659,7 @@
findNodesByParentIdLazilyCQ.setString(1, parentCid);
findNodesByParentIdLazilyCQ.setInt(2, fromOrderNum);
- findNodesByParentIdLazilyCQ.setMaxRows(limit);
+ findNodesByParentIdLazilyCQ.setInt(3, toOrderNum);
return findNodesByParentIdLazilyCQ.executeQuery();
}
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/SingleDbJDBCConnection.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/SingleDbJDBCConnection.java 2011-11-30
10:16:17 UTC (rev 5245)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/SingleDbJDBCConnection.java 2011-11-30
11:28:27 UTC (rev 5246)
@@ -217,7 +217,7 @@
FIND_NODES_BY_PARENTID_LAZILY_CQ =
"select I.*, P.NAME AS PROP_NAME, V.ORDER_NUM, V.DATA from JCR_SITEM I,
JCR_SITEM P, JCR_SVALUE V"
+ " where I.I_CLASS=1 and I.CONTAINER_NAME=? and I.PARENT_ID=? and
I.N_ORDER_NUM >= ? and "
- + " P.I_CLASS=2 and P.CONTAINER_NAME=? and P.PARENT_ID=I.ID and"
+ + " I.N_ORDER_NUM <= ? and P.I_CLASS=2 and P.CONTAINER_NAME=? and
P.PARENT_ID=I.ID and"
+ " (
P.NAME='[http://www.jcp.org/jcr/1.0]primaryType' or"
+ "
P.NAME='[http://www.jcp.org/jcr/1.0]mixinTypes' or"
+ "
P.NAME='[http://www.exoplatform.com/jcr/exo/1.0]owner'
or"
@@ -500,7 +500,7 @@
/**
* {@inheritDoc}
*/
- protected ResultSet findChildNodesByParentIdentifier(String parentCid, int
fromOrderNum, int limit)
+ protected ResultSet findChildNodesByParentIdentifier(String parentCid, int
fromOrderNum, int toOrderNum)
throws SQLException
{
if (findNodesByParentIdLazilyCQ == null)
@@ -511,8 +511,8 @@
findNodesByParentIdLazilyCQ.setString(1, containerName);
findNodesByParentIdLazilyCQ.setString(2, parentCid);
findNodesByParentIdLazilyCQ.setInt(3, fromOrderNum);
- findNodesByParentIdLazilyCQ.setString(4, containerName);
- findNodesByParentIdLazilyCQ.setMaxRows(limit);
+ findNodesByParentIdLazilyCQ.setInt(4, toOrderNum);
+ findNodesByParentIdLazilyCQ.setString(5, containerName);
return findNodesByParentIdLazilyCQ.executeQuery();
}
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/statistics/StatisticsJDBCStorageConnection.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/statistics/StatisticsJDBCStorageConnection.java 2011-11-30
10:16:17 UTC (rev 5245)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/statistics/StatisticsJDBCStorageConnection.java 2011-11-30
11:28:27 UTC (rev 5246)
@@ -82,7 +82,7 @@
/**
* The description of the statistics corresponding to the method
* <code>getChildNodesDataByPage(NodeData nodeData, int fromOrderNum,
- * int limit, List<NodeData>
childNodes)</code>
+ * int toOrderNum, List<NodeData>
childNodes)</code>
*/
private static final String GET_CHILD_NODES_DATA_BY_PAGE_DESCR =
"getChildNodesDataByPage";
@@ -593,14 +593,14 @@
/**
* {@inheritDoc}
*/
- public boolean getChildNodesDataByPage(NodeData parent, int fromOrderNum, int limit,
List<NodeData> childs)
+ public boolean getChildNodesDataByPage(NodeData parent, int fromOrderNum, int
toOrderNum, List<NodeData> childs)
throws RepositoryException
{
Statistics s = ALL_STATISTICS.get(GET_CHILD_NODES_DATA_BY_PAGE_DESCR);
try
{
s.begin();
- return wcs.getChildNodesDataByPage(parent, fromOrderNum, limit, childs);
+ return wcs.getChildNodesDataByPage(parent, fromOrderNum, toOrderNum, childs);
}
finally
{
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/storage/WorkspaceStorageConnection.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/storage/WorkspaceStorageConnection.java 2011-11-30
10:16:17 UTC (rev 5245)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/storage/WorkspaceStorageConnection.java 2011-11-30
11:28:27 UTC (rev 5246)
@@ -245,14 +245,16 @@
* @param parent
* the parent data
* @param fromOrderNum
- * the last order number returned in previous request
- * @param limit
- * the recommended amount of children nodes to return
+ * the returned list of child nodes should not contain the node with order
number
+ * less than <code>fromOrderNum</code>
+ * @param toOrderNum
+ * the returned list of child nodes should not contain the node with order
number
+ * more than <code>toOrderNum</code>
* @param childs
- * will contain the resulted children nodes
+ * will contain the resulted child nodes
* @return true if there are data to retrieve for next request and false in other case
*/
- boolean getChildNodesDataByPage(NodeData parent, int fromOrderNum, int limit,
List<NodeData> childs)
+ boolean getChildNodesDataByPage(NodeData parent, int fromOrderNum, int toOrderNum,
List<NodeData> childs)
throws RepositoryException;
/**
Modified:
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/BaseStandaloneTest.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/BaseStandaloneTest.java 2011-11-30
10:16:17 UTC (rev 5245)
+++
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/BaseStandaloneTest.java 2011-11-30
11:28:27 UTC (rev 5246)
@@ -767,7 +767,7 @@
* @see
org.exoplatform.services.jcr.storage.WorkspaceStorageConnection#getChildNodesDataByPage(org.exoplatform.services.jcr.datamodel.NodeData,
int, int, java.util.List)
*/
@Override
- public boolean getChildNodesDataByPage(NodeData parent, int fromOrderNum, int
limit, List<NodeData> childs)
+ public boolean getChildNodesDataByPage(NodeData parent, int fromOrderNum, int
toOrderNum, List<NodeData> childs)
throws RepositoryException
{
return false;
Modified:
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/TestGetNodesLazily.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/TestGetNodesLazily.java 2011-11-30
10:16:17 UTC (rev 5245)
+++
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/core/TestGetNodesLazily.java 2011-11-30
11:28:27 UTC (rev 5246)
@@ -24,6 +24,8 @@
import org.exoplatform.services.jcr.impl.Constants;
import org.exoplatform.services.transaction.TransactionService;
+import java.util.NoSuchElementException;
+
import javax.jcr.Node;
import javax.jcr.NodeIterator;
import javax.jcr.RangeIterator;
@@ -87,7 +89,7 @@
session.save();
assertChildNodes(testRoot, nodesCount);
}
-
+
/**
* All child they reordered one by one and though must be returned in same order
*/
@@ -145,7 +147,7 @@
session.save();
nodesCount++;
-
+
String newNodeName = "child" + (nodesCount - 1);
session.move("/" + newNodeName, testRoot.getPath() + "/" +
newNodeName);
@@ -355,6 +357,19 @@
next = (NodeImpl)iterator.next();
assertEquals(116, iterator.getPosition());
assertEquals(115, next.getProperty(INDEX_PROPERTY).getLong());
+
+ iterator = testRoot.getNodesLazily();
+ long size = iterator.getSize();
+ iterator.skip(size);
+
+ try
+ {
+ iterator.next();
+ fail("Exception should be thrown");
+ }
+ catch (NoSuchElementException e)
+ {
+ }
}
//=============== stuff ===============
Modified:
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/dataflow/persistent/TestCacheableWorkspaceDataManager.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/dataflow/persistent/TestCacheableWorkspaceDataManager.java 2011-11-30
10:16:17 UTC (rev 5245)
+++
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/dataflow/persistent/TestCacheableWorkspaceDataManager.java 2011-11-30
11:28:27 UTC (rev 5246)
@@ -624,7 +624,7 @@
return null;
}
- public boolean getChildNodesDataByPage(NodeData parent, int fromOrderNum, int
limit, List<NodeData> childs)
+ public boolean getChildNodesDataByPage(NodeData parent, int fromOrderNum, int
toOrderNum, List<NodeData> childs)
throws RepositoryException
{
return false;
Modified:
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/dataflow/persistent/TestWorkspaceStorageCacheInClusterMode.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/dataflow/persistent/TestWorkspaceStorageCacheInClusterMode.java 2011-11-30
10:16:17 UTC (rev 5245)
+++
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/dataflow/persistent/TestWorkspaceStorageCacheInClusterMode.java 2011-11-30
11:28:27 UTC (rev 5246)
@@ -962,7 +962,7 @@
return null;
}
- public boolean getChildNodesDataByPage(NodeData parent, int fromOrderNum, int
limit, List<NodeData> childs)
+ public boolean getChildNodesDataByPage(NodeData parent, int fromOrderNum, int
toOrderNum, List<NodeData> childs)
throws RepositoryException
{
return false;
Modified:
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/dataflow/persistent/cache/jbosscache/TestJBossCacheWorkspaceStorageCache.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/dataflow/persistent/cache/jbosscache/TestJBossCacheWorkspaceStorageCache.java 2011-11-30
10:16:17 UTC (rev 5245)
+++
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/dataflow/persistent/cache/jbosscache/TestJBossCacheWorkspaceStorageCache.java 2011-11-30
11:28:27 UTC (rev 5246)
@@ -326,7 +326,7 @@
return null;
}
- public boolean getChildNodesDataByPage(NodeData parent, int fromOrderNum, int
limit, List<NodeData> childs)
+ public boolean getChildNodesDataByPage(NodeData parent, int fromOrderNum, int
toOrderNum, List<NodeData> childs)
throws RepositoryException
{
return false;