[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