[exo-jcr-commits] exo-jcr SVN: r5170 - 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
Tue Nov 8 03:45:45 EST 2011


Author: zavizionov
Date: 2011-11-08 03:45:44 -0500 (Tue, 08 Nov 2011)
New Revision: 5170

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-1613 TestRepositoryCheckController failed on Oracle DB

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	2011-11-08 07:47:11 UTC (rev 5169)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/JDBCWorkspaceDataContainerChecker.java	2011-11-08 08:45:44 UTC (rev 5170)
@@ -122,68 +122,79 @@
 
       // preload queries
       queries.add(new InspectionQuery(jdbcDataContainer.multiDb
-         ? "select * from JCR_MITEM as I where NOT EXISTS(select * from JCR_MITEM AS P where P.ID = I.PARENT_ID)"
-         : "select * from JCR_SITEM as I where I.CONTAINER_NAME='" + jdbcDataContainer.containerName
-            + "' and NOT EXISTS(select * from JCR_SITEM AS P where P.ID = I.PARENT_ID)", new String[]{
+         ? "select * from JCR_MITEM I where NOT EXISTS(select * from JCR_MITEM P where P.ID = I.PARENT_ID)"
+         : "select * from JCR_SITEM I where I.CONTAINER_NAME='" + jdbcDataContainer.containerName
+            + "' and NOT EXISTS(select * from JCR_SITEM P where P.ID = I.PARENT_ID)", new String[]{
          DBConstants.COLUMN_ID, DBConstants.COLUMN_PARENTID, DBConstants.COLUMN_NAME, DBConstants.COLUMN_CLASS},
          "Items that do not have parent nodes", InspectionStatus.ERR));
       queries
          .add(new InspectionQuery(
             jdbcDataContainer.multiDb
-               ? "select * from JCR_MITEM as N where N.I_CLASS=1 and NOT EXISTS (select * from JCR_MITEM AS P where P.I_CLASS=2 and P.PARENT_ID=N.ID)"
-               : "select * from JCR_SITEM as N where N.CONTAINER_NAME='"
+               ? "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_SITEM N where N.CONTAINER_NAME='"
                   + jdbcDataContainer.containerName
-                  + "' and N.I_CLASS=1 and NOT EXISTS (select * from JCR_SITEM AS P where P.I_CLASS=2 and P.PARENT_ID=N.ID and P.CONTAINER_NAME='"
+                  + "' 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));
       queries
          .add(new InspectionQuery(
             jdbcDataContainer.multiDb
-               ? "select * from JCR_MVALUE as V where NOT EXISTS(select * from JCR_MITEM as P where V.PROPERTY_ID = P.ID and P.I_CLASS=2)"
-               : "select V.* from JCR_SVALUE as V, JCR_SITEM as I where V.PROPERTY_ID = I.ID and I.CONTAINER_NAME='"
+               ? "select * from JCR_MVALUE V where NOT EXISTS(select * from JCR_MITEM P where V.PROPERTY_ID = P.ID and P.I_CLASS=2)"
+               : "select V.* from JCR_SVALUE V, JCR_SITEM I where V.PROPERTY_ID = I.ID and I.CONTAINER_NAME='"
                   + jdbcDataContainer.containerName
-                  + "' and NOT EXISTS(select * from JCR_SITEM as P where P.CONTAINER_NAME='"
+                  + "' and NOT EXISTS(select * from JCR_SITEM P where P.CONTAINER_NAME='"
                   + jdbcDataContainer.containerName + "' and V.PROPERTY_ID = P.ID and P.I_CLASS=2)", new String[]{
                DBConstants.COLUMN_ID, DBConstants.COLUMN_VPROPERTY_ID},
             "All value records that has not owner-property record", InspectionStatus.ERR));
       queries
          .add(new InspectionQuery(
             jdbcDataContainer.multiDb
-               ? "select * from JCR_MITEM as P where P.I_CLASS=2 and NOT EXISTS( select * from JCR_MVALUE as V where V.PROPERTY_ID=P.ID)"
-               : "select * from JCR_SITEM as P where P.CONTAINER_NAME='" + jdbcDataContainer.containerName
-                  + "' and P.I_CLASS=2 and NOT EXISTS( select * from JCR_SVALUE as V where V.PROPERTY_ID=P.ID)",
+               ? "select * from JCR_MITEM P where P.I_CLASS=2 and NOT EXISTS( select * from JCR_MVALUE V where V.PROPERTY_ID=P.ID)"
+               : "select * from JCR_SITEM P where P.CONTAINER_NAME='" + jdbcDataContainer.containerName
+                  + "' and P.I_CLASS=2 and NOT EXISTS( select * from JCR_SVALUE V where V.PROPERTY_ID=P.ID)",
             new String[]{DBConstants.COLUMN_ID, DBConstants.COLUMN_PARENTID, DBConstants.COLUMN_NAME},
             "All properties that have not value record.", InspectionStatus.WARN));
+      
+      // The differences in the queries by DB dialect.
+      // Oracle doesn't work correct with default query because empty value stored as null value.
+      String statement;
+      if (jdbcDataContainer.dbDialect.equals(DBConstants.DB_DIALECT_SYBASE)) {
+         statement = jdbcDataContainer.multiDb
+            ? "select * from JCR_MVALUE where (STORAGE_DESC is null and DATA like null) or (STORAGE_DESC is not null and not DATA like null)"
+            : "select V.* from JCR_SVALUE V, JCR_SITEM I where V.PROPERTY_ID = I.ID and I.CONTAINER_NAME='"
+               + jdbcDataContainer.containerName
+               + "'  AND ((STORAGE_DESC is null and DATA like null) or (STORAGE_DESC is not null and not DATA like null))";
+      } else if (jdbcDataContainer.dbDialect.equals(DBConstants.DB_DIALECT_ORACLE) || jdbcDataContainer.dbDialect.equals(DBConstants.DB_DIALECT_ORACLEOCI)) {
+         statement =  jdbcDataContainer.multiDb
+         ? "select * from JCR_MVALUE where (STORAGE_DESC is not null and DATA is not null)"
+         : "select V.* from JCR_SVALUE V, JCR_SITEM I where V.PROPERTY_ID = I.ID and I.CONTAINER_NAME='"
+            + jdbcDataContainer.containerName
+            + "'  AND (STORAGE_DESC is not null and DATA is not null)";
+      } else {
+         statement =  jdbcDataContainer.multiDb
+            ? "select * from JCR_MVALUE where (STORAGE_DESC is null and DATA is null) or (STORAGE_DESC is not null and DATA is not null)"
+            : "select V.* from JCR_SVALUE V, JCR_SITEM I where V.PROPERTY_ID = I.ID and I.CONTAINER_NAME='"
+               + jdbcDataContainer.containerName
+               + "'  AND ((STORAGE_DESC is null and DATA is null) or (STORAGE_DESC is not null and DATA is not null))";
+      }
       queries
-         .add(new InspectionQuery(
-            jdbcDataContainer.dbDialect.equals(DBConstants.DB_DIALECT_SYBASE)
-               ? jdbcDataContainer.multiDb
-                  ? "select * from JCR_MVALUE where (STORAGE_DESC is null and DATA like null) or (STORAGE_DESC is not null and not DATA like null)"
-                  : "select V.* from JCR_SVALUE as V, JCR_SITEM as I where V.PROPERTY_ID = I.ID and I.CONTAINER_NAME='"
-                     + jdbcDataContainer.containerName
-                     + "'  AND ((STORAGE_DESC is null and DATA like null) or (STORAGE_DESC is not null and not DATA like null))"
-               : jdbcDataContainer.multiDb
-                  ? "select * from JCR_MVALUE where (STORAGE_DESC is null and DATA is null) or (STORAGE_DESC is not null and DATA is not null)"
-                  : "select V.* from JCR_SVALUE as V, JCR_SITEM as I where V.PROPERTY_ID = I.ID and I.CONTAINER_NAME='"
-                     + jdbcDataContainer.containerName
-                     + "'  AND ((STORAGE_DESC is null and DATA is null) or (STORAGE_DESC is not null and DATA is not null))",
-            new String[]{DBConstants.COLUMN_ID}, "Incorrect JCR_VALUE records", InspectionStatus.ERR));
+         .add(new InspectionQuery(statement, new String[]{DBConstants.COLUMN_ID}, "Incorrect JCR_VALUE records", InspectionStatus.ERR));
       queries
          .add(new InspectionQuery(
             jdbcDataContainer.multiDb
-               ? "select * from JCR_MITEM AS P where P.P_TYPE=9 and NOT EXISTS( select * from JCR_MREF AS R where P.ID=R.PROPERTY_ID)"
-               : "select * from JCR_SITEM AS P where P.CONTAINER_NAME='" + jdbcDataContainer.containerName
-                  + "' and P.P_TYPE=9 and NOT EXISTS( select * from JCR_SREF AS R where P.ID=R.PROPERTY_ID)",
+               ? "select * from JCR_MITEM P where P.P_TYPE=9 and NOT EXISTS( select * from JCR_MREF R where P.ID=R.PROPERTY_ID)"
+               : "select * from JCR_SITEM P where P.CONTAINER_NAME='" + jdbcDataContainer.containerName
+                  + "' and P.P_TYPE=9 and NOT EXISTS( select * from JCR_SREF R where P.ID=R.PROPERTY_ID)",
             new String[]{DBConstants.COLUMN_ID, DBConstants.COLUMN_PARENTID, DBConstants.COLUMN_NAME},
             "Reference properties without reference records", InspectionStatus.ERR));
 
       // properties can refer to missing node. It is possible to perform this usecase via JCR API with no exceptions 
       queries.add(new InspectionQuery(jdbcDataContainer.multiDb
-         ? "select * from JCR_MREF AS R where NOT EXISTS(select * from JCR_MITEM AS N where R.NODE_ID=N.ID)"
-         : "select * from JCR_SREF AS R, JCR_SITEM as I where R.PROPERTY_ID = I.ID and I.CONTAINER_NAME='"
+         ? "select * from JCR_MREF R where NOT EXISTS(select * from JCR_MITEM N where R.NODE_ID=N.ID)"
+         : "select * from JCR_SREF R, JCR_SITEM I where R.PROPERTY_ID = I.ID and I.CONTAINER_NAME='"
             + jdbcDataContainer.containerName
-            + "'  and NOT EXISTS(select * from JCR_SITEM AS N where N.CONTAINER_NAME='"
+            + "'  and NOT EXISTS(select * from JCR_SITEM N where N.CONTAINER_NAME='"
             + jdbcDataContainer.containerName + "' and R.NODE_ID=N.ID)", new String[]{"NODE_ID", "PROPERTY_ID",
          DBConstants.COLUMN_VORDERNUM},
          "Reference records that linked to unexisted nodes. Can be normal for some usecases.", InspectionStatus.WARN));
@@ -311,7 +322,7 @@
             connection
                .prepareStatement(jdbcDataContainer.multiDb
                   ? "SELECT PROPERTY_ID, ORDER_NUM, STORAGE_DESC from JCR_MVALUE where STORAGE_DESC is not null"
-                  : "SELECT V.PROPERTY_ID, V.ORDER_NUM, V.STORAGE_DESC from JCR_SVALUE as V, JCR_SITEM as I where I.CONTAINER_NAME='"
+                  : "SELECT V.PROPERTY_ID, V.ORDER_NUM, V.STORAGE_DESC from JCR_SVALUE V, JCR_SITEM I where I.CONTAINER_NAME='"
                      + jdbcDataContainer.containerName + "' and V.PROPERTY_ID = I.ID and STORAGE_DESC is not null");
 
          resultSet = st.executeQuery();

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	2011-11-08 07:47:11 UTC (rev 5169)
+++ jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/TestRepositoryCheckController.java	2011-11-08 08:45:44 UTC (rev 5170)
@@ -73,10 +73,9 @@
    public void testDB()
    {
       String result = checkController.checkRepositoryDataConsistency(new DataStorage[]{DataStorage.DB});
-      assertTrue(result.equals("Repository data is consistent. See full report by path "
-         + checkController.getLastLogFile().getAbsolutePath())
-         || result.equals("Repository data is consistent, except some warnings. See full report by path "
-            + checkController.getLastLogFile().getAbsolutePath()));
+      assertNotNull(result);
+      assertTrue("Repository data is not consistent, result: " + result, result
+         .startsWith("Repository data is consistent"));
    }
 
    public void testValueStorage() throws Exception
@@ -91,8 +90,9 @@
          root.save();
 
          String result = checkController.checkRepositoryDataConsistency(new DataStorage[]{DataStorage.VALUE_STORAGE});
-         assertEquals("Repository data is consistent. See full report by path "
-            + checkController.getLastLogFile().getAbsolutePath(), result);
+         assertNotNull(result);
+         assertTrue("Repository data is not consistent, result: " + result, result
+            .startsWith("Repository data is consistent"));
       }
       finally
       {
@@ -104,8 +104,9 @@
    public void testSearchIndex()
    {
       String result = checkController.checkRepositoryDataConsistency(new DataStorage[]{DataStorage.LUCENE_INDEX});
-      assertEquals("Repository data is consistent. See full report by path "
-         + checkController.getLastLogFile().getAbsolutePath(), result);
+      assertNotNull(result);
+      assertTrue("Repository data is not consistent, result: " + result, result
+         .startsWith("Repository data is consistent"));
    }
 
    public void testAll()
@@ -113,9 +114,8 @@
       String result =
          checkController.checkRepositoryDataConsistency(new DataStorage[]{DataStorage.DB, DataStorage.VALUE_STORAGE,
             DataStorage.LUCENE_INDEX});
-      assertTrue(result.equals("Repository data is consistent. See full report by path "
-         + checkController.getLastLogFile().getAbsolutePath())
-         || result.equals("Repository data is consistent, except some warnings. See full report by path "
-            + checkController.getLastLogFile().getAbsolutePath()));
+      assertNotNull(result);
+      assertTrue("Repository data is not consistent, result: " + result, result
+         .startsWith("Repository data is consistent"));
    }
 }



More information about the exo-jcr-commits mailing list