[exo-jcr-commits] exo-jcr SVN: r5654 - in jcr/trunk/exo.jcr.component.core/src: test/java/org/exoplatform/services/jcr/impl and 1 other directory.
do-not-reply at jboss.org
do-not-reply at jboss.org
Thu Feb 16 09:40:17 EST 2012
Author: andrew.plotnikov
Date: 2012-02-16 09:40:16 -0500 (Thu, 16 Feb 2012)
New Revision: 5654
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCWorkspaceDataContainerChecker.java
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/TestRepositoryCheckController.java
Log:
EXOJCR-1755: Improved queries for repository checking consistency
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCWorkspaceDataContainerChecker.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCWorkspaceDataContainerChecker.java 2012-02-16 14:31:09 UTC (rev 5653)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCWorkspaceDataContainerChecker.java 2012-02-16 14:40:16 UTC (rev 5654)
@@ -76,12 +76,14 @@
queries.add(new InspectionQuery(jdbcDataContainer.multiDb
? "select * from JCR_MITEM N where N.I_CLASS=1 and NOT EXISTS "
- + "(select * from JCR_MITEM P where P.I_CLASS=2 and P.PARENT_ID=N.ID)"
+ + "(select * from JCR_MITEM P where P.I_CLASS=2 and P.PARENT_ID=N.ID "
+ + "and P.NAME='[http://www.jcp.org/jcr/1.0]primaryType')"
: "select * from JCR_SITEM N where N.CONTAINER_NAME='" + jdbcDataContainer.containerName
+ "' and N.I_CLASS=1 and NOT EXISTS (select * from JCR_SITEM P "
- + "where P.I_CLASS=2 and P.PARENT_ID=N.ID and P.CONTAINER_NAME='" + jdbcDataContainer.containerName + "')",
- new String[]{DBConstants.COLUMN_ID, DBConstants.COLUMN_PARENTID, DBConstants.COLUMN_NAME},
- "Nodes that do not have at least one property", InspectionStatus.ERR));
+ + "where P.I_CLASS=2 and P.PARENT_ID=N.ID and P.NAME='[http://www.jcp.org/jcr/1.0]primaryType' "
+ + "and P.CONTAINER_NAME='" + jdbcDataContainer.containerName + "')", new String[]{DBConstants.COLUMN_ID,
+ DBConstants.COLUMN_PARENTID, DBConstants.COLUMN_NAME},
+ "Nodes that do not have at least one jcr:primaryType property", InspectionStatus.ERR));
queries
.add(new InspectionQuery(jdbcDataContainer.multiDb
Modified: jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/TestRepositoryCheckController.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/TestRepositoryCheckController.java 2012-02-16 14:31:09 UTC (rev 5653)
+++ jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/TestRepositoryCheckController.java 2012-02-16 14:40:16 UTC (rev 5654)
@@ -745,6 +745,7 @@
public void testDBUsecasesNodeHasNoPropertiesSingleDB() throws Exception
{
checkDBUsecasesNodeHasNoProperties(helper.createRepository(container, false, false));
+ checkDBUsecasesNodeHasPrimaryTypeProperties(helper.createRepository(container, false, false));
}
/**
@@ -753,6 +754,7 @@
public void testDBUsecasesNodeHasNoPropertiesMultiDB() throws Exception
{
checkDBUsecasesNodeHasNoProperties(helper.createRepository(container, true, false));
+ checkDBUsecasesNodeHasPrimaryTypeProperties(helper.createRepository(container, false, false));
}
private void checkDBUsecasesNodeHasNoProperties(ManageableRepository repository) throws Exception
@@ -802,6 +804,56 @@
checkController.getLastLogFile().delete();
}
+ private void checkDBUsecasesNodeHasPrimaryTypeProperties(ManageableRepository repository) throws Exception
+ {
+ // create repository and add node
+ SessionImpl session =
+ (SessionImpl)repository.login(credentials, repository.getConfiguration().getSystemWorkspaceName());
+ NodeImpl node = (NodeImpl)session.getRootNode().addNode("testNode");
+ session.save();
+
+ PropertyIterator iter = node.getProperties();
+
+ // repository is consistent
+ checkController = new RepositoryCheckController(repository);
+ assertTrue(checkController.checkRepositoryDataBaseConsistency().startsWith("Repository data is consistent"));
+ checkController.getLastLogFile().delete();
+
+ WorkspaceEntry wsEntry = repository.getConfiguration().getWorkspaceEntries().get(0);
+ boolean isMultiDb = wsEntry.getContainer().getParameterBoolean(JDBCWorkspaceDataContainer.MULTIDB);
+
+ // remove all properties
+ String sourceName = wsEntry.getContainer().getParameterValue(JDBCWorkspaceDataContainer.SOURCE_NAME);
+
+ Connection conn = ((DataSource)new InitialContext().lookup(sourceName)).getConnection();
+ while (iter.hasNext())
+ {
+ PropertyImpl prop = (PropertyImpl)iter.nextProperty();
+
+ if (!prop.getName().equals("jcr:primaryType"))
+ {
+ conn.prepareStatement(
+ "DELETE FROM JCR_" + (isMultiDb ? "M" : "S") + "VALUE WHERE PROPERTY_ID = '"
+ + (isMultiDb ? "" : wsEntry.getName()) + prop.getInternalIdentifier() + "'").execute();
+
+ conn.prepareStatement(
+ "DELETE FROM JCR_" + (isMultiDb ? "M" : "S") + "ITEM WHERE ID = '"
+ + (isMultiDb ? "" : wsEntry.getName()) + prop.getInternalIdentifier() + "'").execute();
+ }
+ }
+
+ conn.commit();
+ conn.close();
+
+ assertTrue(node.getProperties().hasNext());
+
+ session.logout();
+
+ // repository is inconsistent
+ assertTrue(checkController.checkRepositoryDataBaseConsistency().startsWith("Repository data is consistent"));
+ checkController.getLastLogFile().delete();
+ }
+
/**
* Usescase when STORAGE_DESC field in JCR_SVALUE table is not empty but there is no file in the value storage.
*/
More information about the exo-jcr-commits
mailing list