[exo-jcr-commits] exo-jcr SVN: r751 - in jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage: jdbc and 1 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Wed Nov 18 09:10:56 EST 2009


Author: pnedonosko
Date: 2009-11-18 09:10:55 -0500 (Wed, 18 Nov 2009)
New Revision: 751

Modified:
   jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoader.java
   jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/DBConstants.java
   jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCStorageConnection.java
   jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/MultiDbJDBCConnection.java
   jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/SingleDbJDBCConnection.java
Log:
EXOJCR-248: get childs optimization

Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoader.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoader.java	2009-11-18 13:59:56 UTC (rev 750)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JDBCCacheLoader.java	2009-11-18 14:10:55 UTC (rev 751)
@@ -277,7 +277,6 @@
                   NodeData nodeData = (NodeData)conn.getItemData(nodeId);
                   if (nodeData != null)
                   {
-                     // TODO get child props info
                      List<PropertyDataInfo> childProps = conn.getChildProperties(nodeId);
                      if (childProps.size() <= 0)
                      {
@@ -375,7 +374,6 @@
     */
    public boolean exists(Fqn name) throws Exception
    {
-      // TODO Will be created specialization code to checking exist node or property in DB without getting NodeData or PropertyData from DB.
       JDBCStorageConnection conn = (JDBCStorageConnection)dataContainer.openConnection();
 
       boolean exists;
@@ -479,55 +477,48 @@
    {
       // return child nodes names
 
-      Set<String> childs;
-
-      // /$NODES/<NODE_ID>
-      if (name.size() == 2)
+      JDBCStorageConnection conn = (JDBCStorageConnection)dataContainer.openConnection();
+      try
       {
-         JDBCStorageConnection conn = (JDBCStorageConnection)dataContainer.openConnection();
-         try
+         // /$NODES/<NODE_ID>
+         if (name.size() == 2)
          {
             String nodeId = (String)name.get(1);
-            childs = new LinkedHashSet<String>();
+            return conn.getChildNodeNames(nodeId);
+         }
+         else if (name.equals(JBossCacheStorage.NODES))
+         {
+            // TODO return all Nodes in workspace
+            return new LinkedHashSet<String>();
             
-            for (String nodeName : conn.getChildNodeNames(nodeId))
-            {
-               childs.add(nodeName);
-            }
          }
-         finally
+         else if (name.equals(JBossCacheStorage.PROPS))
          {
-            conn.close();
+            // TODO return all Properties in workspace
+            return new LinkedHashSet<String>();
          }
+         else if (name.equals(JBossCacheStorage.LOCKS))
+         {
+            // TODO return all Locks in workspace
+            return new LinkedHashSet<String>();
+         }
+         else if (name.equals(Fqn.ROOT))
+         {
+            Set<String> childs = new LinkedHashSet<String>();
+            childs.add(JBossCacheStorage.NODES);
+            childs.add(JBossCacheStorage.PROPS);
+            childs.add(JBossCacheStorage.LOCKS);
+            return childs;
+         }
+         else
+         {
+            return null;
+         }
       }
-      else if (name.equals(JBossCacheStorage.NODES))
+      finally
       {
-         // TODO return all Nodes in workspace
-         childs = new LinkedHashSet<String>();
+         conn.close();
       }
-      else if (name.equals(JBossCacheStorage.PROPS))
-      {
-         // TODO return all Properties in workspace
-         childs = new LinkedHashSet<String>();
-      }
-      else if (name.equals(JBossCacheStorage.LOCKS))
-      {
-         // TODO return all Locks in workspace
-         childs = new LinkedHashSet<String>();
-      }
-      else if (name.equals(Fqn.ROOT))
-      {
-         childs = new LinkedHashSet<String>();
-         childs.add(JBossCacheStorage.NODES);
-         childs.add(JBossCacheStorage.PROPS);
-         childs.add(JBossCacheStorage.LOCKS);
-      }
-      else
-      {
-         childs = null;
-      }
-
-      return childs;
    }
 
    /**

Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/DBConstants.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/DBConstants.java	2009-11-18 13:59:56 UTC (rev 750)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/DBConstants.java	2009-11-18 14:10:55 UTC (rev 751)
@@ -126,6 +126,11 @@
     * FIND_NODES_BY_PARENTID.
     */
    protected String FIND_NODES_BY_PARENTID;
+   
+   /**
+    * FIND_NODES_NAME_BY_PARENTID.
+    */
+   protected String FIND_NODES_NAME_BY_PARENTID;
 
    /**
     * FIND_PROPERTIES_BY_PARENTID.

Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCStorageConnection.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCStorageConnection.java	2009-11-18 13:59:56 UTC (rev 750)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCStorageConnection.java	2009-11-18 14:10:55 UTC (rev 751)
@@ -58,7 +58,9 @@
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.util.ArrayList;
+import java.util.LinkedHashSet;
 import java.util.List;
+import java.util.Set;
 import java.util.StringTokenizer;
 
 import javax.jcr.InvalidItemStateException;
@@ -2009,7 +2011,7 @@
    public String getItemIdentifier(String parentId, String name) throws RepositoryException, IllegalStateException
    {
       checkIfOpened();
-      
+
       try
       {
          ResultSet item = findItemIdentifier(getInternalId(parentId), name);
@@ -2022,7 +2024,7 @@
       {
          throw new RepositoryException(e);
       }
-      
+
       return null;
    }
 
@@ -2038,7 +2040,7 @@
    {
 
       checkIfOpened();
-      
+
       try
       {
          ResultSet item = findItemName(getInternalId(propertyId));
@@ -2051,7 +2053,7 @@
       {
          throw new RepositoryException(e);
       }
-      
+
       return null;
    }
 
@@ -2086,15 +2088,31 @@
       }
    }
 
-   public List<String> getChildNodeNames(String parentId) throws RepositoryException, IllegalStateException
+   /**
+    * Get child nodes names set.
+    *
+    * @param parentId parent Node id.
+    * @return Set of String (id)
+    * @throws RepositoryException if error
+    * @throws IllegalStateException if connection closed
+    */
+   public Set<String> getChildNodeNames(String parentId) throws RepositoryException, IllegalStateException
    {
       checkIfOpened();
+
       try
       {
-         ResultSet node = findChildNodesByParentIdentifier(getInternalId(parentId));
-         List<String> childrens = new ArrayList<String>();
-         //while (node.next())
-         //childrens.add((NodeData)itemData(parent.getQPath(), node, I_CLASS_NODE, parent.getACL()));
+         ResultSet node = findChildNodesNameByParentIdentifier(getInternalId(parentId));
+         Set<String> childrens = new LinkedHashSet<String>();
+         while (node.next())
+         {
+            String childName = node.getString(COLUMN_NAME);
+            if (!childrens.add(childName))
+            {
+               throw new RepositoryException("FATAL Child node name dublicated '" + childName + "' on parent "
+                  + parentId);
+            }
+         }
 
          return childrens;
       }
@@ -2104,13 +2122,13 @@
       }
    }
 
-   public List<String> getAllPropertyIdentifiers() throws RepositoryException, IllegalStateException
+   public Set<String> getAllPropertyIdentifiers() throws RepositoryException, IllegalStateException
    {
       checkIfOpened();
       try
       {
          ResultSet node = findChildNodesByParentIdentifier(getInternalId("???"));
-         List<String> childrens = new ArrayList<String>();
+         Set<String> childrens = new LinkedHashSet<String>();
          //while (node.next())
          //childrens.add((NodeData)itemData(parent.getQPath(), node, I_CLASS_NODE, parent.getACL()));
 
@@ -2122,13 +2140,13 @@
       }
    }
 
-   public List<String> getAllNodeIdentifiers() throws RepositoryException, IllegalStateException
+   public Set<String> getAllNodeIdentifiers() throws RepositoryException, IllegalStateException
    {
       checkIfOpened();
       try
       {
          ResultSet node = findChildNodesByParentIdentifier(getInternalId("???"));
-         List<String> childrens = new ArrayList<String>();
+         Set<String> childrens = new LinkedHashSet<String>();
          //while (node.next())
          //childrens.add((NodeData)itemData(parent.getQPath(), node, I_CLASS_NODE, parent.getACL()));
 
@@ -2156,9 +2174,6 @@
 
    protected abstract ResultSet findChildPropertiesByParentIdentifier(String parentIdentifier) throws SQLException;
 
-   protected abstract ResultSet findChildPropertiesIdNameByParentIdentifier(String parentIdentifier)
-      throws SQLException;
-
    protected abstract int addReference(PropertyData data) throws SQLException, IOException;
 
    protected abstract int renameNode(NodeData data) throws SQLException;
@@ -2189,6 +2204,11 @@
 
    // JBC related
 
+   protected abstract ResultSet findChildPropertiesIdNameByParentIdentifier(String parentIdentifier)
+      throws SQLException;
+
+   protected abstract ResultSet findChildNodesNameByParentIdentifier(String parentIdentifier) throws SQLException;
+
    protected abstract ResultSet findItemIdentifier(String parentCid, String name) throws SQLException;
 
    protected abstract ResultSet findItemName(String cid) throws SQLException;

Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/MultiDbJDBCConnection.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/MultiDbJDBCConnection.java	2009-11-18 13:59:56 UTC (rev 750)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/MultiDbJDBCConnection.java	2009-11-18 14:10:55 UTC (rev 751)
@@ -78,6 +78,8 @@
 
    protected PreparedStatement findNodesByParentId;
 
+   protected PreparedStatement findNodesNameByParentId;
+
    protected PreparedStatement findPropertiesByParentId;
 
    protected PreparedStatement findPropertiesIdNameByParentId;
@@ -192,12 +194,14 @@
 
       FIND_NODES_BY_PARENTID = "select * from JCR_MITEM" + " where I_CLASS=1 and PARENT_ID=?" + " order by N_ORDER_NUM";
 
+      FIND_NODES_NAME_BY_PARENTID = "select NAME from JCR_MITEM" + " where I_CLASS=1 and PARENT_ID=?" + " order by N_ORDER_NUM";
+      
       FIND_PROPERTIES_BY_PARENTID = "select * from JCR_MITEM" + " where I_CLASS=2 and PARENT_ID=?" + " order by ID";
 
       FIND_PROPERTIES_IDNAME_BY_PARENTID = "select ID, NAME from JCR_MITEM" + " where I_CLASS=2 and PARENT_ID=?";
-      
+
       FIND_ITEM_IDENTIFIER = "select ID from JCR_MITEM" + " where PARENT_ID=? and NAME=?";
-      
+
       FIND_ITEM_NAME = "select NAME from JCR_MITEM" + " where ID=?";
 
       INSERT_NODE =
@@ -451,17 +455,6 @@
       return findPropertiesByParentId.executeQuery();
    }
 
-   protected ResultSet findChildPropertiesIdNameByParentIdentifier(String parentIdentifier) throws SQLException
-   {
-      if (findPropertiesIdNameByParentId == null)
-         findPropertiesIdNameByParentId = dbConnection.prepareStatement(FIND_PROPERTIES_IDNAME_BY_PARENTID);
-      else
-         findPropertiesIdNameByParentId.clearParameters();
-
-      findPropertiesIdNameByParentId.setString(1, parentIdentifier);
-      return findPropertiesIdNameByParentId.executeQuery();
-   }
-
    // -------- values processing ------------
 
    /**
@@ -577,13 +570,34 @@
     * {@inheritDoc}
     */
    @Override
+   protected ResultSet findChildPropertiesIdNameByParentIdentifier(String parentIdentifier) throws SQLException
+   {
+      if (findPropertiesIdNameByParentId == null)
+      {
+         findPropertiesIdNameByParentId = dbConnection.prepareStatement(FIND_PROPERTIES_IDNAME_BY_PARENTID);
+      }
+      else
+      {
+         findPropertiesIdNameByParentId.clearParameters();
+      }
+      findPropertiesIdNameByParentId.setString(1, parentIdentifier);
+      return findPropertiesIdNameByParentId.executeQuery();
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
    protected ResultSet findItemIdentifier(String parentCid, String name) throws SQLException
    {
       if (findItemIdentifier == null)
+      {
          findItemIdentifier = dbConnection.prepareStatement(FIND_ITEM_IDENTIFIER);
+      }
       else
+      {
          findItemIdentifier.clearParameters();
-
+      }
       findItemIdentifier.setString(1, parentCid);
       findItemIdentifier.setString(2, name);
       return findItemIdentifier.executeQuery();
@@ -596,11 +610,32 @@
    protected ResultSet findItemName(String cid) throws SQLException
    {
       if (findItemName == null)
+      {
          findItemName = dbConnection.prepareStatement(FIND_ITEM_NAME);
+      }
       else
+      {
          findItemName.clearParameters();
-
+      }
       findItemName.setString(1, cid);
       return findItemName.executeQuery();
    }
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   protected ResultSet findChildNodesNameByParentIdentifier(String parentIdentifier) throws SQLException
+   {
+      if (findNodesNameByParentId == null)
+      {
+         findNodesNameByParentId = dbConnection.prepareStatement(FIND_NODES_NAME_BY_PARENTID);
+      }
+      else
+      {
+         findNodesNameByParentId.clearParameters();
+      }
+      findNodesNameByParentId.setString(1, parentIdentifier);
+      return findNodesNameByParentId.executeQuery();
+   }
 }

Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/SingleDbJDBCConnection.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/SingleDbJDBCConnection.java	2009-11-18 13:59:56 UTC (rev 750)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/db/SingleDbJDBCConnection.java	2009-11-18 14:10:55 UTC (rev 751)
@@ -75,6 +75,8 @@
 
    protected PreparedStatement findNodesByParentId;
 
+   protected PreparedStatement findNodesNameByParentId;
+
    protected PreparedStatement findPropertiesByParentId;
 
    protected PreparedStatement findPropertiesIdNameByParentId;
@@ -199,6 +201,9 @@
       FIND_NODES_BY_PARENTID =
          "select * from JCR_SITEM" + " where I_CLASS=1 and CONTAINER_NAME=? and PARENT_ID=?" + " order by N_ORDER_NUM";
 
+      FIND_NODES_NAME_BY_PARENTID =
+         "select NAME from JCR_SITEM" + " where I_CLASS=1 and CONTAINER_NAME=? and PARENT_ID=?" + " order by N_ORDER_NUM";
+
       FIND_PROPERTIES_BY_PARENTID =
          "select * from JCR_SITEM" + " where I_CLASS=2 and CONTAINER_NAME=? and PARENT_ID=?" + " order by ID";
 
@@ -623,4 +628,22 @@
       findItemName.setString(1, cid);
       return findItemName.executeQuery();
    }
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   protected ResultSet findChildNodesNameByParentIdentifier(String parentIdentifier) throws SQLException
+   {
+      if (findNodesNameByParentId == null)
+      {
+         findNodesNameByParentId = dbConnection.prepareStatement(FIND_NODES_NAME_BY_PARENTID);
+      }
+      else
+      {
+         findNodesNameByParentId.clearParameters();
+      }
+      findNodesNameByParentId.setString(1, parentIdentifier);
+      return findNodesNameByParentId.executeQuery();
+   }
 }



More information about the exo-jcr-commits mailing list