[exo-jcr-commits] exo-jcr SVN: r1129 - in jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation: db and 1 other directory.

do-not-reply at jboss.org do-not-reply at jboss.org
Fri Dec 18 10:38:47 EST 2009


Author: sergiykarpenko
Date: 2009-12-18 10:38:47 -0500 (Fri, 18 Dec 2009)
New Revision: 1129

Modified:
   jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/NewJDBCStorageConnection.java
   jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/MultiDbJDBCConnection.java
Log:
EXOJCR-302: getItemByIdentifier query return mixins too

Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/NewJDBCStorageConnection.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/NewJDBCStorageConnection.java	2009-12-18 13:08:00 UTC (rev 1128)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/NewJDBCStorageConnection.java	2009-12-18 15:38:47 UTC (rev 1129)
@@ -1177,21 +1177,42 @@
          byte[] data = item.getBytes(COLUMN_VDATA);
          InternalQName ptName = InternalQName.parse(new String((data != null ? data : new byte[]{})));
 
-         try
+         //            // 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;
+         boolean owneable = false;
+         boolean privilegeable = false;
+         while (item.next() && item.getString(COLUMN_NAME).equals(Constants.JCR_MIXINTYPES.getAsString()))
          {
-            //            // 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[]{})));
+            mts = new ArrayList<InternalQName>();
+            byte[] mxnb = item.getBytes(COLUMN_VDATA);
+            if (mxnb != null)
+            {
+               InternalQName mxn = InternalQName.parse(new String(mxnb));
+               mts.add(mxn);
 
-            // MIXIN
-            MixinInfo mixins = readMixins(cid);
+               if (!privilegeable && Constants.EXO_PRIVILEGEABLE.equals(mxn))
+                  privilegeable = true;
+               else if (!owneable && Constants.EXO_OWNEABLE.equals(mxn))
+                  owneable = true;
+            } // else, if SQL NULL - skip it
 
+         }
+
+         mixins = new MixinInfo(mts, owneable, privilegeable);
+
+         try
+         {
             // ACL
             AccessControlList acl; // NO DEFAULT values!
 
@@ -1252,6 +1273,7 @@
 
             return new PersistedNodeData(getIdentifier(cid), qpath, getIdentifier(parentCid), cversion, cnordernumb,
                ptName, mixins.mixinNames(), acl);
+
          }
          catch (IllegalACLException e)
          {

Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/MultiDbJDBCConnection.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/MultiDbJDBCConnection.java	2009-12-18 13:08:00 UTC (rev 1128)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/jdbc/optimisation/db/MultiDbJDBCConnection.java	2009-12-18 15:38:47 UTC (rev 1129)
@@ -179,7 +179,7 @@
          //            + " 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 IN ('[http://www.jcp.org/jcr/1.0]primaryType')) order by I.I_CLASS, I.N_ORDER_NUM";// order by I.I_CLASS, I.N_ORDER_NUM"
+            + " where (I.ID=?) or (I.PARENT_ID=? and I.I_CLASS=2 and I.NAME IN ('[http://www.jcp.org/jcr/1.0]primaryType','[http://www.jcp.org/jcr/1.0]mixinTypes')) order by I.I_CLASS, I.N_ORDER_NUM";// order by I.I_CLASS, I.N_ORDER_NUM"
 
       FIND_ITEM_BY_NAME =
          "select * from JCR_MITEM" + " where PARENT_ID=? and NAME=? and I_INDEX=? order by I_CLASS, VERSION DESC";



More information about the exo-jcr-commits mailing list