Author: sergiykarpenko
Date: 2009-12-26 04:53:58 -0500 (Sat, 26 Dec 2009)
New Revision: 1198
Modified:
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/monitor/ManagedConnection.java
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/monitor/ManagedPreparedStatement.java
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/monitor/ManagedStatement.java
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/CQJDBCStorageConnection.java
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/MultiDbJDBCConnection.java
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/test/resources/conf/standalone/test-jcr-config.xml
Log:
EXOJCR-302: CQJDBCStorageConnection updated
Modified:
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/monitor/ManagedConnection.java
===================================================================
---
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/monitor/ManagedConnection.java 2009-12-25
20:13:35 UTC (rev 1197)
+++
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/monitor/ManagedConnection.java 2009-12-26
09:53:58 UTC (rev 1198)
@@ -21,15 +21,23 @@
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
+import java.sql.Array;
+import java.sql.Blob;
import java.sql.CallableStatement;
+import java.sql.Clob;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
+import java.sql.NClob;
import java.sql.PreparedStatement;
+import java.sql.SQLClientInfoException;
import java.sql.SQLException;
import java.sql.SQLWarning;
+import java.sql.SQLXML;
import java.sql.Savepoint;
import java.sql.Statement;
+import java.sql.Struct;
import java.util.Map;
+import java.util.Properties;
/**
* Created by The eXo Platform SAS.
@@ -284,4 +292,70 @@
jdbcConn.setTypeMap(map);
}
+public Array createArrayOf(String arg0, Object[] arg1) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
}
+
+public Blob createBlob() throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+}
+
+public Clob createClob() throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+}
+
+public NClob createNClob() throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+}
+
+public SQLXML createSQLXML() throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+}
+
+public Struct createStruct(String arg0, Object[] arg1) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+}
+
+public Properties getClientInfo() throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+}
+
+public String getClientInfo(String arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+}
+
+public boolean isValid(int arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+}
+
+public void setClientInfo(Properties arg0) throws SQLClientInfoException {
+ // TODO Auto-generated method stub
+
+}
+
+public void setClientInfo(String arg0, String arg1)
+ throws SQLClientInfoException {
+ // TODO Auto-generated method stub
+
+}
+
+public boolean isWrapperFor(Class<?> arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+}
+
+public <T> T unwrap(Class<T> arg0) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+}
+
+}
Modified:
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/monitor/ManagedPreparedStatement.java
===================================================================
---
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/monitor/ManagedPreparedStatement.java 2009-12-25
20:13:35 UTC (rev 1197)
+++
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/monitor/ManagedPreparedStatement.java 2009-12-26
09:53:58 UTC (rev 1198)
@@ -28,12 +28,15 @@
import java.sql.Blob;
import java.sql.Clob;
import java.sql.Date;
+import java.sql.NClob;
import java.sql.ParameterMetaData;
import java.sql.PreparedStatement;
import java.sql.Ref;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
+import java.sql.RowId;
import java.sql.SQLException;
+import java.sql.SQLXML;
import java.sql.Time;
import java.sql.Timestamp;
import java.util.Calendar;
@@ -265,4 +268,106 @@
jdbcStmt.setUnicodeStream(parameterIndex, x, length);
}
+public void setAsciiStream(int parameterIndex, InputStream x)
+ throws SQLException {
+ // TODO Auto-generated method stub
+
}
+
+public void setAsciiStream(int parameterIndex, InputStream x, long length)
+ throws SQLException {
+ // TODO Auto-generated method stub
+
+}
+
+public void setBinaryStream(int parameterIndex, InputStream x)
+ throws SQLException {
+ // TODO Auto-generated method stub
+
+}
+
+public void setBinaryStream(int parameterIndex, InputStream x, long length)
+ throws SQLException {
+ // TODO Auto-generated method stub
+
+}
+
+public void setBlob(int parameterIndex, InputStream inputStream)
+ throws SQLException {
+ // TODO Auto-generated method stub
+
+}
+
+public void setBlob(int parameterIndex, InputStream inputStream, long length)
+ throws SQLException {
+ // TODO Auto-generated method stub
+
+}
+
+public void setCharacterStream(int parameterIndex, Reader reader)
+ throws SQLException {
+ // TODO Auto-generated method stub
+
+}
+
+public void setCharacterStream(int parameterIndex, Reader reader, long length)
+ throws SQLException {
+ // TODO Auto-generated method stub
+
+}
+
+public void setClob(int parameterIndex, Reader reader) throws SQLException {
+ // TODO Auto-generated method stub
+
+}
+
+public void setClob(int parameterIndex, Reader reader, long length)
+ throws SQLException {
+ // TODO Auto-generated method stub
+
+}
+
+public void setNCharacterStream(int parameterIndex, Reader value)
+ throws SQLException {
+ // TODO Auto-generated method stub
+
+}
+
+public void setNCharacterStream(int parameterIndex, Reader value, long length)
+ throws SQLException {
+ // TODO Auto-generated method stub
+
+}
+
+public void setNClob(int parameterIndex, NClob value) throws SQLException {
+ // TODO Auto-generated method stub
+
+}
+
+public void setNClob(int parameterIndex, Reader reader) throws SQLException {
+ // TODO Auto-generated method stub
+
+}
+
+public void setNClob(int parameterIndex, Reader reader, long length)
+ throws SQLException {
+ // TODO Auto-generated method stub
+
+}
+
+public void setNString(int parameterIndex, String value) throws SQLException {
+ // TODO Auto-generated method stub
+
+}
+
+public void setRowId(int parameterIndex, RowId x) throws SQLException {
+ // TODO Auto-generated method stub
+
+}
+
+public void setSQLXML(int parameterIndex, SQLXML xmlObject) throws SQLException {
+ // TODO Auto-generated method stub
+
+}
+
+}
Modified:
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/monitor/ManagedStatement.java
===================================================================
---
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/monitor/ManagedStatement.java 2009-12-25
20:13:35 UTC (rev 1197)
+++
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/monitor/ManagedStatement.java 2009-12-26
09:53:58 UTC (rev 1198)
@@ -235,4 +235,29 @@
jdbcStmt.setQueryTimeout(seconds);
}
+public boolean isClosed() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
}
+
+public boolean isPoolable() throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+}
+
+public void setPoolable(boolean poolable) throws SQLException {
+ // TODO Auto-generated method stub
+
+}
+
+public boolean isWrapperFor(Class<?> iface) throws SQLException {
+ // TODO Auto-generated method stub
+ return false;
+}
+
+public <T> T unwrap(Class<T> iface) throws SQLException {
+ // TODO Auto-generated method stub
+ return null;
+}
+
+}
Modified:
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/CQJDBCStorageConnection.java
===================================================================
---
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/CQJDBCStorageConnection.java 2009-12-25
20:13:35 UTC (rev 1197)
+++
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/CQJDBCStorageConnection.java 2009-12-26
09:53:58 UTC (rev 1198)
@@ -86,13 +86,18 @@
*/
protected String FIND_NODES_BY_PARENTID_NEW;
+ /**
+ * GET_PROPERTIES_BY_PARENT_ID
+ */
protected String GET_PROPERTIES_BY_PARENTID;
+ /**
+ * FIND_REFERENCE_PROPERTIES
+ */
protected String FIND_REFERENCE_PROPERTIES;
/**
* Class needed to store node details (property also) since result set is not sorted
in valid way.
- *
*/
private static class TempNodeData
{
@@ -156,20 +161,21 @@
checkIfOpened();
try
{
+ // query will return nodes and properties in same result set
ResultSet resultSet =
findChildNodesByParentIdentifierNew(getInternalId(parent.getIdentifier()));
if (resultSet.next())
{
- Map<String, TempNodeData> tempNodes = loadNodesData(resultSet);
+ Map<String, TempNodeData> tempNodes =
loadTempNodesFromResultSet(resultSet);
- List<NodeData> childrens = new
ArrayList<NodeData>(tempNodes.size());
+ List<NodeData> childNodes = new
ArrayList<NodeData>(tempNodes.size());
QPath parentQPath = parent.getQPath();
AccessControlList parentACL = parent.getACL();
for (TempNodeData data : tempNodes.values())
{
NodeData nodeData = loadNodeFromTemporaryNodeData(data, parentQPath,
parentACL);
- childrens.add(nodeData);
+ childNodes.add(nodeData);
}
- return childrens;
+ return childNodes;
}
else
{
@@ -187,8 +193,8 @@
}
}
- protected Map<String, TempNodeData> loadNodesData(ResultSet resultSet) throws
RepositoryException, IOException,
- SQLException
+ protected Map<String, TempNodeData> loadTempNodesFromResultSet(ResultSet
resultSet) throws RepositoryException,
+ IOException, SQLException
{
Map<String, TempNodeData> nodesData = new LinkedHashMap<String,
TempNodeData>();
@@ -386,7 +392,7 @@
int itemType = resultSet.getInt(COLUMN_CLASS);
if (itemType == I_CLASS_NODE)
{
- Map<String, TempNodeData> node = loadNodesData(resultSet);
+ Map<String, TempNodeData> node =
loadTempNodesFromResultSet(resultSet);
return loadNodeFromTemporaryNodeData(node.get(cid), null, null);
//return loadNodeRecord(resultSet, null, null);
}
@@ -454,7 +460,7 @@
String firstNodeId = resultSet.getString(COLUMN_ID);
// There may be two or more nodes, so load temp NodeDatas and return first
one.
- Map<String, TempNodeData> tempNodes = loadNodesData(resultSet);
+ Map<String, TempNodeData> tempNodes =
loadTempNodesFromResultSet(resultSet);
QPath parentQPath = parent.getQPath();
AccessControlList parentACL = parent.getACL();
@@ -696,70 +702,34 @@
}
}
- /**
- * Return permission values or throw an exception. We assume the node is
mix:privilegeable.
- *
- * @param cid
- * Node id
- * @return list of ACL entries
- * @throws SQLException
- * database error
- * @throws IllegalACLException
- * if property exo:permissions is not found for node
- */
- protected List<AccessControlEntry> readACLPermisions(String cid) throws
SQLException, IllegalACLException
+ protected List<AccessControlEntry> readACLPermisions(String cid, Map<String,
List<byte[]>> properties)
+ throws SQLException, IllegalACLException
{
List<AccessControlEntry> naPermissions = new
ArrayList<AccessControlEntry>();
- ResultSet exoPerm = findPropertyByName(cid,
Constants.EXO_PERMISSIONS.getAsString());
- try
+ List<byte[]> permValues =
properties.get(Constants.EXO_PERMISSIONS.getAsString());
+
+ if (permValues != null)
{
- if (exoPerm.next())
+ for (byte[] value : permValues)
{
- do
- {
- StringTokenizer parser =
- new StringTokenizer(new String(exoPerm.getBytes(COLUMN_VDATA)),
AccessControlEntry.DELIMITER);
- naPermissions.add(new AccessControlEntry(parser.nextToken(),
parser.nextToken()));
- }
- while (exoPerm.next());
-
- return naPermissions;
+ StringTokenizer parser = new StringTokenizer(new String(value),
AccessControlEntry.DELIMITER);
+ naPermissions.add(new AccessControlEntry(parser.nextToken(),
parser.nextToken()));
}
- else
- throw new IllegalACLException("Property exo:permissions is not found for
node with id: "
- + getIdentifier(cid));
+
+ return naPermissions;
}
- finally
- {
- exoPerm.close();
- }
+ else
+ throw new IllegalACLException("Property exo:permissions is not found for
node with id: " + getIdentifier(cid));
}
- /**
- * Return owner value or throw an exception. We assume the node is mix:owneable.
- *
- * @param cid
- * Node id
- * @return ACL owner
- * @throws SQLException
- * database error
- * @throws IllegalACLException
- * Property exo:owner is not found for node
- */
- protected String readACLOwner(String cid) throws SQLException, IllegalACLException
+ protected String readACLOwner(String cid, Map<String, List<byte[]>>
properties) throws IllegalACLException
{
- ResultSet exoOwner = findPropertyByName(cid, Constants.EXO_OWNER.getAsString());
- try
- {
- if (exoOwner.next())
- return new String(exoOwner.getBytes(COLUMN_VDATA));
- else
- throw new IllegalACLException("Property exo:owner is not found for node
with id: " + getIdentifier(cid));
- }
- finally
- {
- exoOwner.close();
- }
+ List<byte[]> ownerValues =
properties.get(Constants.EXO_OWNER.getAsString());
+ if (ownerValues != null)
+ return new String(ownerValues.get(0));
+ else
+ throw new IllegalACLException("Property exo:owner is not found for node
with id: " + getIdentifier(cid));
+
}
/**
@@ -865,16 +835,6 @@
byte[] data = item.getBytes(COLUMN_VDATA);
InternalQName ptName = InternalQName.parse(new String((data != null ? data : new
byte[]{})));
- // // PRIMARY
- // ResultSet ptProp = findPropertyByName(cid,
Constants.JCR_PRIMARYTYPE.getAsString());
- //
- // if (!ptProp.next())
- // throw new PrimaryTypeNotFoundException("FATAL ERROR
primary type record not found. Node "
- // + qpath.getAsString() + ", id " + cid + ",
container " + this.containerName, null);
- //
- // byte[] data = ptProp.getBytes(COLUMN_VDATA);
- // InternalQName ptName = InternalQName.parse(new String((data !=
null ? data : new byte[]{})));
-
// MIXIN
MixinInfo mixins = null;
List<InternalQName> mts = null;
@@ -975,16 +935,27 @@
}
}
- protected PersistedNodeData loadNodeFromTemporaryNodeData(TempNodeData buf, QPath
parentPath, AccessControlList pACL)
- throws RepositoryException, SQLException, IOException
+ /**
+ * Create NodeData from TempNodeData content.
+ *
+ * @param tempData
+ * @param parentPath
+ * @param pACL
+ * @return
+ * @throws RepositoryException
+ * @throws SQLException
+ * @throws IOException
+ */
+ protected PersistedNodeData loadNodeFromTemporaryNodeData(TempNodeData tempData, QPath
parentPath,
+ AccessControlList pACL) throws RepositoryException, SQLException, IOException
{
- String cid = buf.cid;
- String cname = buf.cname;
- int cversion = buf.cversion;
- String cpid = buf.cpid;
- int cindex = buf.cindex;
- int cnordernumb = buf.cnordernumb;
+ String cid = tempData.cid;
+ String cname = tempData.cname;
+ int cversion = tempData.cversion;
+ String cpid = tempData.cpid;
+ int cindex = tempData.cindex;
+ int cnordernumb = tempData.cnordernumb;
AccessControlList parentACL = pACL;
try
@@ -1016,9 +987,10 @@
}
}
- // PRIMARY
+ Map<String, List<byte[]>> properties = tempData.properties;
- List<byte[]> primaryType =
buf.properties.get(Constants.JCR_PRIMARYTYPE.getAsString());
+ // PRIMARY
+ List<byte[]> primaryType =
properties.get(Constants.JCR_PRIMARYTYPE.getAsString());
if (primaryType == null || primaryType.size() == 0)
{
throw new SQLException("Node finded but primaryType property not "
+ cid);
@@ -1028,73 +1000,73 @@
InternalQName ptName = InternalQName.parse(new String((data != null ? data : new
byte[]{})));
// MIXIN
- MixinInfo mixins = null;
- List<InternalQName> mts = null;
+ InternalQName[] mts;
boolean owneable = false;
boolean privilegeable = false;
- List<byte[]> mixinTypes =
buf.properties.get(Constants.JCR_MIXINTYPES.getAsString());
- if (mixinTypes != null)
+ List<byte[]> mixTypes =
properties.get(Constants.JCR_MIXINTYPES.getAsString());
+ if (mixTypes != null)
{
- mts = new ArrayList<InternalQName>();
- for (byte[] mxnb : mixinTypes)
+ List<InternalQName> mNames = new ArrayList<InternalQName>();
+ for (byte[] mxnb : mixTypes)
{
InternalQName mxn = InternalQName.parse(new String(mxnb));
- mts.add(mxn);
+ mNames.add(mxn);
if (!privilegeable && Constants.EXO_PRIVILEGEABLE.equals(mxn))
privilegeable = true;
else if (!owneable && Constants.EXO_OWNEABLE.equals(mxn))
owneable = true;
}
+ mts= new InternalQName[mNames.size()];
+ mNames.toArray(mts);
+ }else{
+ mts = new InternalQName[0];
}
-
- mixins = new MixinInfo(mts, owneable, privilegeable);
-
+
try
{
// ACL
AccessControlList acl; // NO DEFAULT values!
- if (mixins.hasOwneable())
+ if (owneable)
{
// has own owner
- if (mixins.hasPrivilegeable())
+ if (privilegeable)
{
// and permissions
- acl = new AccessControlList(readACLOwner(cid),
readACLPermisions(cid));
+ acl = new AccessControlList(readACLOwner(cid, properties),
readACLPermisions(cid,properties));
}
else if (parentACL != null)
{
// use permissions from existed parent
acl =
- new AccessControlList(readACLOwner(cid), parentACL.hasPermissions()
? parentACL
+ new AccessControlList(readACLOwner(cid, properties),
parentACL.hasPermissions() ? parentACL
.getPermissionEntries() : null);
}
else
{
// have to search nearest ancestor permissions in ACL manager
- // acl = new AccessControlList(readACLOwner(cid),
traverseACLPermissions(cpid));
- acl = new AccessControlList(readACLOwner(cid), null);
+ acl = new AccessControlList(readACLOwner(cid, properties), null);
}
}
- else if (mixins.hasPrivilegeable())
+ else if (privilegeable)
{
// has own permissions
- if (mixins.hasOwneable())
+ if (owneable)
{
// and owner
- acl = new AccessControlList(readACLOwner(cid),
readACLPermisions(cid));
+ acl = new AccessControlList(readACLOwner(cid,properties),
readACLPermisions(cid, properties));
}
else if (parentACL != null)
{
// use owner from existed parent
- acl = new AccessControlList(parentACL.getOwner(),
readACLPermisions(cid));
+ acl = new AccessControlList(parentACL.getOwner(),
readACLPermisions(cid, properties));
}
else
{
// have to search nearest ancestor owner in ACL manager
// acl = new AccessControlList(traverseACLOwner(cpid),
readACLPermisions(cid));
- acl = new AccessControlList(null, readACLPermisions(cid));
+ acl = new AccessControlList(null, readACLPermisions(cid, properties));
}
}
else
@@ -1111,7 +1083,7 @@
}
return new PersistedNodeData(getIdentifier(cid), qpath,
getIdentifier(parentCid), cversion, cnordernumb,
- ptName, mixins.mixinNames(), acl);
+ ptName, mts, acl);
}
catch (IllegalACLException e)
Modified:
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/MultiDbJDBCConnection.java
===================================================================
---
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/MultiDbJDBCConnection.java 2009-12-25
20:13:35 UTC (rev 1197)
+++
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/MultiDbJDBCConnection.java 2009-12-26
09:53:58 UTC (rev 1198)
@@ -177,15 +177,10 @@
FIND_ITEM_BY_ID = "select * from JCR_MITEM where ID=?";
FIND_ITEM_BY_ID_NEW =
- // "select I.*, P.DATA from JCR_MITEM I, (select I2.PARENT_ID, V.DATA
from JCR_MITEM I2, JCR_MVALUE V where I2.I_CLASS=2 and I2.PARENT_ID=?"
- // + " and
I2.NAME='[http://www.jcp.org/jcr/1.0]primaryType' and I2.ID=V.PROPERTY_ID)
P"
- // + " where I.ID=P.PARENT_ID";
-
- // "select I2.*, V.DATA from JCR_MITEM I LEFT OUTER JOIN JCR_MVALUE
V ON (V.PROPERTY_ID=I.ID), (select * from JCR_MITEM where ID=? AND I_CLASS=1) I2"
- // + " where I2.ID=I.ID and I2.ID=I.PARENT_ID and I.NAME IN
('[http://www.jcp.org/jcr/1.0]primaryType')";// order by I.I_CLASS,
I.N_ORDER_NUM"
-
"select I.*, V.ORDER_NUM, V.DATA, V.STORAGE_DESC from JCR_MITEM I LEFT
OUTER JOIN JCR_MVALUE V ON (V.PROPERTY_ID=I.ID)"
- + " where (I.ID=?) or (I.PARENT_ID=? and I.I_CLASS=2 and
(
I.NAME='[http://www.jcp.org/jcr/1.0]primaryType' or
I.NAME='[http://www.jcp.org/jcr/1.0]mixinTypes')) order by I.I_CLASS, I.NAME
DESC";// order by I.I_CLASS, I.N_ORDER_NUM"
+ + " where (I.ID=?) or (I.PARENT_ID=? and I.I_CLASS=2 and
(
I.NAME='[http://www.jcp.org/jcr/1.0]primaryType'"
+ + " or
I.NAME='[http://www.jcp.org/jcr/1.0]mixinTypes' or
I.NAME='[http://www.exoplatform.com/jcr/exo/1.0]owner'"
+ + " or
I.NAME='[http://www.exoplatform.com/jcr/exo/1.0]permissions')) order by I.I_CLASS,
I.N_ORDER_NUM, V.ORDER_NUM";
FIND_ITEM_BY_NAME =
"select * from JCR_MITEM" + " where PARENT_ID=? and NAME=? and
I_INDEX=? order by I_CLASS, VERSION DESC";
@@ -193,8 +188,9 @@
FIND_ITEM_BY_NAME_NEW =
"select I.*, V.ORDER_NUM, V.DATA, V.STORAGE_DESC from JCR_MITEM I LEFT
OUTER JOIN JCR_MVALUE V ON (V.PROPERTY_ID=I.ID)"
+ ", (select ID from JCR_MITEM where PARENT_ID=? and NAME=? and
I_INDEX=?) I2"
- + " where (I.ID=I2.ID) or (I.PARENT_ID=I2.ID and I.I_CLASS=2 and
(
I.NAME='[http://www.jcp.org/jcr/1.0]primaryType' or
I.NAME='[http://www.jcp.org/jcr/1.0]mixinTypes' or
I.NAME='[http://www.exoplatform.com/jcr/exo/1.0]owner' or
I.NAME='[http://www.exoplatform.com/jcr/exo/1.0]permissions'))"
- + " order by I.I_CLASS, I.N_ORDER_NUM";
+ + " where (I.ID=I2.ID) or (I.PARENT_ID=I2.ID and I.I_CLASS=2 and
(
I.NAME='[http://www.jcp.org/jcr/1.0]primaryType'"
+ + " or
I.NAME='[http://www.jcp.org/jcr/1.0]mixinTypes' or
I.NAME='[http://www.exoplatform.com/jcr/exo/1.0]owner'"
+ + " or
I.NAME='[http://www.exoplatform.com/jcr/exo/1.0]permissions')) order by I.I_CLASS,
I.N_ORDER_NUM, V.ORDER_NUM";
FIND_PROPERTY_BY_NAME =
"select V.DATA" + " from JCR_MITEM I, JCR_MVALUE V"
@@ -204,6 +200,7 @@
"select P.ID, P.PARENT_ID, P.VERSION, P.P_TYPE, P.P_MULTIVALUED,
P.NAME" + " from JCR_MREF R, JCR_MITEM P"
+ " where R.NODE_ID=? and P.ID=R.PROPERTY_ID and P.I_CLASS=2";
+ //TODO useless - remove
FIND_REFERENCE_PROPERTIES =
"select P.ID, P.PARENT_ID, P.VERSION, P.P_TYPE, P.P_MULTIVALUED, P.NAME,
V.ORDER_NUM, V.DATA, V.STORAGE_DESC"
+ " from JCR_MREF R, JCR_MITEM P, JCR_MVALUE V"
@@ -219,21 +216,17 @@
FIND_NODES_BY_PARENTID = "select * from JCR_MITEM" + " where
I_CLASS=1 and PARENT_ID=?" + " order by N_ORDER_NUM";
FIND_NODES_BY_PARENTID_NEW =
- "select I.*, V.DATA"
- + " from JCR_MITEM I LEFT OUTER JOIN JCR_MVALUE V ON
(V.PROPERTY_ID=I.ID), (select ID from JCR_MITEM where PARENT_ID=? AND I_CLASS=1) I2"
- + " where (I.I_CLASS=1 AND I.ID=I2.ID) OR (I.I_CLASS=2 and
I.PARENT_ID=I2.ID and"
- + " (
I.NAME='[http://www.jcp.org/jcr/1.0]primaryType' OR
I.NAME='[http://www.jcp.org/jcr/1.0]mixinTypes')) order by I.I_CLASS,
I.N_ORDER_NUM";
- //,
+ "select I.*, V.DATA, V.ORDER_NUM"
+ + " from JCR_MITEM I LEFT OUTER JOIN JCR_MVALUE V ON
(V.PROPERTY_ID=I.ID), (select ID from JCR_MITEM where PARENT_ID=? and I_CLASS=1) I2"
+ + " where (I.I_CLASS=1 AND I.ID=I2.ID) or (I.I_CLASS=2 and
I.PARENT_ID=I2.ID and"
+ + " (
I.NAME='[http://www.jcp.org/jcr/1.0]primaryType' or
I.NAME='[http://www.jcp.org/jcr/1.0]mixinTypes'"
+ + " or
I.NAME='[http://www.exoplatform.com/jcr/exo/1.0]owner' or
I.NAME='[http://www.exoplatform.com/jcr/exo/1.0]permissions')) order by I.I_CLASS,
I.N_ORDER_NUM, V.ORDER_NUM";
FIND_NODES_COUNT_BY_PARENTID = "select count(ID) from JCR_MITEM" + "
where I_CLASS=1 and PARENT_ID=?";
FIND_PROPERTIES_BY_PARENTID = "select * from JCR_MITEM" + " where
I_CLASS=2 and PARENT_ID=?" + " order by ID";
- //TODO this query is incorrect because property may have not value
- // GET_PROPERTIES_BY_PARENTID =
- // "select I.*, V.ORDER_NUM, V.DATA, V.STORAGE_DESC from JCR_MITEM I,
JCR_MVALUE V"
- // + " where I.I_CLASS=2 and I.PARENT_ID=? and V.PROPERTY_ID=I.ID
order by I.ID";
-
+ // property may contain no values
GET_PROPERTIES_BY_PARENTID =
"select I.*, V.ORDER_NUM, V.DATA, V.STORAGE_DESC from JCR_MITEM I LEFT
OUTER JOIN JCR_MVALUE V ON (V.PROPERTY_ID=I.ID)"
+ " where I.I_CLASS=2 and I.PARENT_ID=? order by ID, ORDER_NUM";
Modified:
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/test/resources/conf/standalone/test-jcr-config.xml
===================================================================
---
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/test/resources/conf/standalone/test-jcr-config.xml 2009-12-25
20:13:35 UTC (rev 1197)
+++
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/test/resources/conf/standalone/test-jcr-config.xml 2009-12-26
09:53:58 UTC (rev 1198)
@@ -30,7 +30,7 @@
<workspaces>
<workspace name="ws">
<!-- for system storage -->
- <container
class="org.exoplatform.services.jcr.impl.storage.jdbc.JDBCWorkspaceDataContainer">
+ <container
class="org.exoplatform.services.jcr.impl.storage.jdbc.optimisation.CQJDBCWorkspaceDataContainer">
<properties>
<property name="source-name" value="jdbcjcr"
/>
<property name="dialect" value="hsqldb"
/>
@@ -90,7 +90,7 @@
</workspace>
<workspace name="ws1">
- <container
class="org.exoplatform.services.jcr.impl.storage.jdbc.JDBCWorkspaceDataContainer">
+ <container
class="org.exoplatform.services.jcr.impl.storage.jdbc.optimisation.CQJDBCWorkspaceDataContainer">
<properties>
<property name="source-name" value="jdbcjcr1"
/>
<property name="dialect" value="hsqldb"
/>
@@ -130,7 +130,7 @@
</workspace>
<workspace name="ws2">
- <container
class="org.exoplatform.services.jcr.impl.storage.jdbc.JDBCWorkspaceDataContainer">
+ <container
class="org.exoplatform.services.jcr.impl.storage.jdbc.optimisation.CQJDBCWorkspaceDataContainer">
<properties>
<property name="source-name" value="jdbcjcr2"
/>
<property name="dialect" value="hsqldb"
/>
@@ -172,7 +172,7 @@
<workspace name="ws3">
<!-- for system storage -->
<container
- class="org.exoplatform.services.jcr.impl.storage.jdbc.JDBCWorkspaceDataContainer">
+ class="org.exoplatform.services.jcr.impl.storage.jdbc.optimisation.CQJDBCWorkspaceDataContainer">
<properties>
<property name="source-name" value="jdbcjcr3" />
<property name="dialect" value="hsqldb" />
@@ -253,7 +253,7 @@
<workspaces>
<workspace name="ws">
<!-- for system storage -->
- <container
class="org.exoplatform.services.jcr.impl.storage.jdbc.JDBCWorkspaceDataContainer">
+ <container
class="org.exoplatform.services.jcr.impl.storage.jdbc.optimisation.CQJDBCWorkspaceDataContainer">
<properties>
<property name="source-name"
value="jdbcjcrtck" />
<property name="dialect" value="hsqldb"
/>
@@ -308,7 +308,7 @@
</workspace>
<workspace name="ws1">
- <container
class="org.exoplatform.services.jcr.impl.storage.jdbc.JDBCWorkspaceDataContainer">
+ <container
class="org.exoplatform.services.jcr.impl.storage.jdbc.optimisation.CQJDBCWorkspaceDataContainer">
<properties>
<property name="source-name"
value="jdbcjcr1tck" />
<property name="dialect" value="hsqldb"
/>
@@ -354,7 +354,7 @@
</workspace>
<workspace name="ws2">
- <container
class="org.exoplatform.services.jcr.impl.storage.jdbc.JDBCWorkspaceDataContainer">
+ <container
class="org.exoplatform.services.jcr.impl.storage.jdbc.optimisation.CQJDBCWorkspaceDataContainer">
<properties>
<property name="source-name"
value="jdbcjcr2tck" />
<property name="dialect" value="hsqldb"
/>