[exo-jcr-commits] exo-jcr SVN: r5246 - in jcr/trunk/exo.jcr.component.core/src: main/java/org/exoplatform/services/jcr/impl/core and 13 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Wed Nov 30 06:28:28 EST 2011


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;



More information about the exo-jcr-commits mailing list