Author: bpapez
Date: Fri Sep 28 10:26:30 2007
New Revision: 18704

URL: https://svndev.jahia.net/websvn/listing.php?sc=3D1&rev=3D18704&repname=
=3Djahia
Log:
JAHIA-2146, MAN-15: fix and optimization for container ranking
- up-port of Khues fix from Jahia4.2

Modified:
    branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/hibernate/dao/Jahi=
aContainerDAO.java
    branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/hibernate/manager/=
JahiaContainerManager.java
    branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/services/container=
s/ContainerFactory.java
    branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/services/container=
s/JahiaContainersBaseService.java
    branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/services/container=
s/JahiaContainersService.java
    branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/settings/SettingsB=
ean.java
    branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/utils/JahiaTools.j=
ava
    branches/JAHIA-5-0-SP-BRANCH/core/src/webapp/WEB-INF/etc/config/jahia.s=
keleton
    branches/JAHIA-5-0-SP-BRANCH/core/src/webapp/WEB-INF/var/db/mysql.script

Modified: branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/hibernate/da=
o/JahiaContainerDAO.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/branches/JAHIA-5-0-SP=
-BRANCH/core/src/java/org/jahia/hibernate/dao/JahiaContainerDAO.java&rev=3D=
18704&repname=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/hibernate/dao/Jahi=
aContainerDAO.java (original)
+++ branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/hibernate/dao/Jahi=
aContainerDAO.java Fri Sep 28 10:26:30 2007
@@ -29,12 +29,14 @@
 import org.hibernate.criterion.Expression;
 import org.hibernate.criterion.Projections;
 import org.hibernate.criterion.Property;
+import org.jahia.bin.Jahia;
 import org.jahia.content.ContentContainerKey;
 import org.jahia.hibernate.model.JahiaContainer;
 import org.jahia.hibernate.model.JahiaContainerProperty;
 import org.jahia.hibernate.model.JahiaContainerPropertyPK;
 import org.jahia.hibernate.model.JahiaCtnEntryPK;
 import org.jahia.services.version.EntryLoadRequest;
+import org.jahia.utils.JahiaTools;
 import org.springframework.orm.ObjectRetrievalFailureException;
 import org.springframework.orm.hibernate3.HibernateCallback;
 import org.springframework.orm.hibernate3.HibernateTemplate;
@@ -56,29 +58,48 @@
 // --------------------- GETTER / SETTER METHODS ---------------------
 =

     public List getAllContainerIds() {
-        List retVal;
         String hql =3D "select distinct c.comp_id.id from JahiaContainer c=
";
         final HibernateTemplate hibernateTemplate =3D getHibernateTemplate=
();
         hibernateTemplate.setCacheQueries(true);
         hibernateTemplate.setFlushMode(HibernateTemplate.FLUSH_NEVER);
-        retVal =3D hibernateTemplate.find(hql);
+        List retVal =3D hibernateTemplate.find(hql);
         return retVal;
     }
 =

+    public List getAllContainerIds(BitSet ids) {
+        String inClause =3D JahiaTools.getConditionalInClauseFromBitSet(id=
s, "c.comp_id", "=3D", "");
+        String hql =3D "select distinct c.comp_id.id,c.rank from JahiaCont=
ainer c where " + inClause + " order by c.rank";
+        final HibernateTemplate hibernateTemplate =3D getHibernateTemplate=
();
+        hibernateTemplate.setCacheQueries(true);
+        hibernateTemplate.setFlushMode(HibernateTemplate.FLUSH_NEVER);
+        List retVal =3D hibernateTemplate.find(hql);
+        return retVal;
+    }    =

+    =

     public List getAllNonDeletedStagingContainerIds() {
-        List retVal;
         String hql =3D "select distinct c.comp_id.id,c.comp_id.versionId,c=
.rank,c.comp_id.workflowState from JahiaContainer c "+
                      "where c.comp_id.workflowState>=3D1 "+
                      "order by c.comp_id.id,c.comp_id.workflowState desc";
         final HibernateTemplate template =3D getHibernateTemplate();
         template.setCacheQueries(true);
         template.setFlushMode(HibernateTemplate.FLUSH_NEVER);
-        retVal =3D template.find(hql);
+        List retVal =3D template.find(hql);
         return retVal;
     }
 =

+    public List getAllNonDeletedStagingContainerIds(BitSet ids) {
+        String inClause =3D JahiaTools.getConditionalInClauseFromBitSet(id=
s, "c.comp_id", "=3D", "and");        =

+        String hql =3D "select distinct c.comp_id.id,c.comp_id.versionId,c=
.rank,c.comp_id.workflowState from JahiaContainer c "+
+                     "where " + inClause + " c.comp_id.workflowState>=3D1 =
"+
+                     "order by c.comp_id.id,c.comp_id.workflowState desc";
+        final HibernateTemplate template =3D getHibernateTemplate();
+        template.setCacheQueries(true);
+        template.setFlushMode(HibernateTemplate.FLUSH_NEVER);
+        List retVal =3D template.find(hql);
+        return retVal;
+    }    =

+    =

     public List getAllPublishedContainerIds() {
-        List retVal;
         String hql =3D "select distinct c.comp_id.id,c.rank from JahiaCont=
ainer c "+
                      "where c.comp_id.workflowState=3D1 "+
                      "order by c.rank,c.comp_id.id";
@@ -86,21 +107,45 @@
         template.setCacheQueries(true);
         template.setFlushMode(HibernateTemplate.FLUSH_NEVER);
         List list =3D template.find(hql);
-        retVal =3D fillContainerIdList(list);
+        List retVal =3D fillContainerIdList(list);
         return retVal;
     }
+    =

+    public List getAllPublishedContainerIds(BitSet ids) {
+        String inClause =3D JahiaTools.getConditionalInClauseFromBitSet(id=
s, "c.comp_id", "=3D", "and");        =

+        String hql =3D "select distinct c.comp_id.id,c.rank from JahiaCont=
ainer c where "+
+                     inClause + " c.comp_id.workflowState=3D1 "+
+                     "order by c.rank,c.comp_id.id";
+        final HibernateTemplate template =3D getHibernateTemplate();
+        template.setCacheQueries(true);
+        template.setFlushMode(HibernateTemplate.FLUSH_NEVER);
+        List list =3D template.find(hql);
+        List retVal =3D fillContainerIdList(list);
+        return retVal;
+    }    =

 =

     public List getAllStagingContainerIds() {
-        List retVal;
         String hql =3D "select distinct c.comp_id.id,c.comp_id.versionId,c=
.rank,c.comp_id.workflowState from JahiaContainer c "+
                      "where c.comp_id.workflowState>=3D1 "+
                      "order by c.comp_id.id,c.comp_id.workflowState desc";
         final HibernateTemplate template =3D getHibernateTemplate();
         template.setCacheQueries(true);
         template.setFlushMode(HibernateTemplate.FLUSH_NEVER);
-        retVal =3D template.find(hql);
+        List retVal =3D template.find(hql);
         return retVal;
     }
+    =

+    public List getAllStagingContainerIds(BitSet ids) {
+        String inClause =3D JahiaTools.getConditionalInClauseFromBitSet(id=
s, "c.comp_id", "=3D", "and");        =

+        String hql =3D "select distinct c.comp_id.id,c.comp_id.versionId,c=
.rank,c.comp_id.workflowState from JahiaContainer c "+
+                     "where " + inClause + " c.comp_id.workflowState>=3D1 =
"+
+                     "order by c.comp_id.id,c.comp_id.workflowState desc";
+        final HibernateTemplate template =3D getHibernateTemplate();
+        template.setCacheQueries(true);
+        template.setFlushMode(HibernateTemplate.FLUSH_NEVER);
+        List retVal =3D template.find(hql);
+        return retVal;
+    }    =

 =

 // -------------------------- OTHER METHODS --------------------------
 =

@@ -431,10 +476,10 @@
 =

     public List getAllVersionedContainerIds(Long version) {
         List retVal =3D null;
-        String hql =3D "select distinct c.comp_id.id,c.comp_id.versionId,c=
.rank from JahiaContainer c "+
-                     "where c.comp_id.workflowState<=3D1 and c.comp_id.ver=
sionId>-1 and c.comp_id.versionId<=3D? "+
-                     "order by c.comp_id.id,c.comp_id.versionId desc";
         if (version !=3D null) {
+            String hql =3D "select distinct c.comp_id.id,c.comp_id.version=
Id,c.rank from JahiaContainer c "
+                    + "where c.comp_id.workflowState<=3D1 and c.comp_id.ve=
rsionId>-1 and c.comp_id.versionId<=3D? "
+                    + "order by c.comp_id.id,c.comp_id.versionId desc";
             final HibernateTemplate template =3D getHibernateTemplate();
             template.setCacheQueries(true);
             template.setFlushMode(HibernateTemplate.FLUSH_NEVER);
@@ -442,6 +487,21 @@
         }
         return retVal;
     }
+    =

+    public List getAllVersionedContainerIds(Long version, BitSet ids) {
+        List retVal =3D null;
+        if (version !=3D null) {
+            String inClause =3D JahiaTools.getConditionalInClauseFromBitSe=
t(ids, "c.comp_id", "=3D", "and");            =

+            String hql =3D "select distinct c.comp_id.id,c.comp_id.version=
Id,c.rank from JahiaContainer c "
+                    + "where " + inClause + " c.comp_id.workflowState<=3D1=
 and c.comp_id.versionId>-1 and c.comp_id.versionId<=3D? "
+                    + "order by c.comp_id.id,c.comp_id.versionId desc";
+            final HibernateTemplate template =3D getHibernateTemplate();
+            template.setCacheQueries(true);
+            template.setFlushMode(HibernateTemplate.FLUSH_NEVER);
+            retVal =3D template.find(hql, new Object[]{version});
+        }
+        return retVal;
+    }    =

 =

     /**
      * Get the entry state for this container.

Modified: branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/hibernate/ma=
nager/JahiaContainerManager.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/branches/JAHIA-5-0-SP=
-BRANCH/core/src/java/org/jahia/hibernate/manager/JahiaContainerManager.jav=
a&rev=3D18704&repname=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/hibernate/manager/=
JahiaContainerManager.java (original)
+++ branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/hibernate/manager/=
JahiaContainerManager.java Fri Sep 28 10:26:30 2007
@@ -73,6 +73,100 @@
     public List getAllContainersIds() {
         return dao.getAllContainerIds();
     }
+    =

+    public List getAllContainersIds(BitSet ids, EntryLoadRequest loadVersi=
on) {
+        if (ids =3D=3D null || ids.length()=3D=3D0){
+            return Collections.EMPTY_LIST;
+        } else if (ids.cardinality()=3D=3D1){
+            List retval =3D new ArrayList();
+            retval.add(new Integer(ids.nextSetBit(0)));
+            return retval;
+        }
+        =

+        boolean compareMode =3D (Jahia.getThreadParamBean() !=3D null
+                && ProcessingContext.COMPARE.equals(Jahia.getThreadParamBe=
an().getOpMode() ));
+
+        List retval =3D null;
+
+        if (loadVersion =3D=3D null || loadVersion.isVersioned() && compar=
eMode) {
+            retval =3D dao.getAllContainerIds(ids);
+        } else if (loadVersion.isStaging()) {
+            if (loadVersion.isWithMarkedForDeletion()) {
+                retval =3D dao.getAllStagingContainerIds(ids);
+            } else {
+                retval =3D dao.getAllNonDeletedStagingContainerIds(ids);
+            }
+        } else if (loadVersion.isVersioned() && !compareMode) {
+            retval =3D dao.getAllVersionedContainerIds(new Long(loadVersion
+                    .getVersionID()), ids);
+        } else {
+            retval =3D dao.getAllPublishedContainerIds(ids);
+        }
+        =

+        int dbMaxElementsForInClause =3D Jahia.getSettings().getDBMaxEleme=
ntsForInClause();
+        boolean applyBitsetCheck =3D ids.cardinality() > dbMaxElementsForI=
nClause;
+        =

+        if (loadVersion !=3D null
+                && (loadVersion.isStaging() || (loadVersion.isVersioned() =
&& !compareMode))) {
+            Set addedCtnIds =3D new HashSet();
+            List sortedRanks =3D new ArrayList();
+            Integer previousCtnID =3D new Integer(-2);
+
+            List list =3D retval;
+            retval =3D new ArrayList(list.size());
+
+            for (int i =3D 0, size =3D list.size(); i < size; i++) {
+                Object[] objects =3D (Object[]) list.get(i);
+
+                Integer ctnID =3D (Integer) objects[0];
+
+                if (applyBitsetCheck && !ids.get(ctnID.intValue())) {
+                    continue;
+                }
+
+                if (!addedCtnIds.contains(ctnID)
+                        && !previousCtnID.equals(ctnID)
+                        && (loadVersion.isWithMarkedForDeletion() || ((Lon=
g) objects[1])
+                                .longValue() !=3D -1)) {
+                    int rank =3D ((Integer) objects[2]).intValue();
+                    if (rank !=3D 0) {
+                        int index =3D 0;
+                        int sortedRankSize =3D sortedRanks.size();
+                        while (index < sortedRankSize
+                                && ((Integer) sortedRanks.get(index))
+                                        .intValue() < rank) {
+                            index++;
+                        }
+
+                        sortedRanks.add(index, new Integer(rank));
+                        retval.add(index, ctnID);
+                    } else {
+                        retval.add(ctnID);
+                    }
+                    addedCtnIds.add(ctnID);
+                }
+                previousCtnID =3D ctnID;
+            }
+        } else {
+            if (applyBitsetCheck) {
+                List list =3D retval;
+                retval =3D new ArrayList(list.size());
+
+                for (int i =3D 0, size =3D list.size(); i < size; i++) {
+                    Object[] objects =3D (Object[]) list.get(i);
+
+                    Integer ctnID =3D (Integer) objects[0];
+
+                    if (ids.get(ctnID.intValue())) {
+                        retval.add(ctnID);
+                    }
+                }
+            }
+        }
+
+
+        return retval;
+    }    =

 =

     public void setCacheService(CacheService cacheService) {
         this.cacheService =3D cacheService;

Modified: branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/services/con=
tainers/ContainerFactory.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/branches/JAHIA-5-0-SP=
-BRANCH/core/src/java/org/jahia/services/containers/ContainerFactory.java&r=
ev=3D18704&repname=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/services/container=
s/ContainerFactory.java (original)
+++ branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/services/container=
s/ContainerFactory.java Fri Sep 28 10:26:30 2007
@@ -380,31 +380,14 @@
                 // so return the list of matching ctn ids, without sorting
 =

                 try {
-                    final Vector ctnIds;
-
-                    // get all container ids
-                    /*
-                    ctnIds =3D ServicesRegistry.getInstance ()
-                            .getJahiaContainersService ().getctnidsInList =
(clistID, loadVersion);
-                    */
-
                     if (resultBitSet =3D=3D null) {
-                        ctnIds =3D ServicesRegistry.getInstance().getJahia=
ContainersService().
-                                getctnidsInList(clist.getID(), loadVersion=
);
-
-                        return ctnIds;
+                        return ServicesRegistry.getInstance()
+                                .getJahiaContainersService().getctnidsInLi=
st(
+                                        clist.getID(), loadVersion);
                     } else {
-                        ctnIds =3D ServicesRegistry.getInstance().getJahia=
ContainersService().getCtnIds();
-
-                        final Vector v =3D new Vector();
-                        int size =3D ctnIds.size();
-                        for (int i =3D 0; i < size; i++) {
-                            final int ctnid =3D ((Integer) ctnIds.elementA=
t(i)).intValue();
-                            if (resultBitSet.get(ctnid)) {
-                                v.add(ctnIds.elementAt(i));
-                            }
-                        }
-                        return v;
+                        return ServicesRegistry.getInstance()
+                                .getJahiaContainersService().getCtnIds(
+                                        resultBitSet, loadVersion);
                     }
                 } catch (Throwable t) {
                     logger.warn(t);

Modified: branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/services/con=
tainers/JahiaContainersBaseService.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/branches/JAHIA-5-0-SP=
-BRANCH/core/src/java/org/jahia/services/containers/JahiaContainersBaseServ=
ice.java&rev=3D18704&repname=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/services/container=
s/JahiaContainersBaseService.java (original)
+++ branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/services/container=
s/JahiaContainersBaseService.java Fri Sep 28 10:26:30 2007
@@ -607,6 +607,15 @@
     }
 =

     /**
+     * Correct version to sort a containerList without any sort defined
+     * =

+     * @see org.jahia.services.containers.JahiaContainersService#getCtnIds=
(boolean, java.util.BitSet)
+     */
+    public Vector getCtnIds(BitSet ids, EntryLoadRequest loadRequest) thro=
ws JahiaException {
+        return new Vector(containerManager.getAllContainersIds(ids, loadRe=
quest)); =

+    }    =

+        =

+    /**
      * gets all container list ids in a container.
      *
      * @param ctnID the container list id

Modified: branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/services/con=
tainers/JahiaContainersService.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/branches/JAHIA-5-0-SP=
-BRANCH/core/src/java/org/jahia/services/containers/JahiaContainersService.=
java&rev=3D18704&repname=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/services/container=
s/JahiaContainersService.java (original)
+++ branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/services/container=
s/JahiaContainersService.java Fri Sep 28 10:26:30 2007
@@ -225,6 +225,17 @@
         throws JahiaException;
 =

     /**
+     * Correct version to sort a containerList without any sort defined
+     *
+     * @param ids
+     * @param loadRequest
+     * @return
+     * @throws JahiaException
+     */
+    public abstract Vector getCtnIds(BitSet ids, EntryLoadRequest loadRequ=
est)
+        throws JahiaException;    =

+    =

+    /**
      * gets all container list ids in a container.
      *
      * @param listID the container list id

Modified: branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/settings/Set=
tingsBean.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/branches/JAHIA-5-0-SP=
-BRANCH/core/src/java/org/jahia/settings/SettingsBean.java&rev=3D18704&repn=
ame=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/settings/SettingsB=
ean.java (original)
+++ branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/settings/SettingsB=
ean.java Fri Sep 28 10:26:30 2007
@@ -35,6 +35,7 @@
 package org.jahia.settings;
 =

 import org.apache.commons.collections.FastHashMap;
+import org.jahia.admin.database.DatabaseScripts;
 import org.jahia.data.constants.JahiaConstants;
 import org.jahia.exceptions.JahiaException;
 import org.jahia.tools.files.DtdEntityResolver;
@@ -372,6 +373,9 @@
     private int suggestedRetryTimeAfterTimeoutOnStartup =3D 15; // in seco=
nds
 =

     private int editModeSessionTimeout =3D 2*60*60; // 2 hours
+    =

+    // The db max elements for SQL IN clause
+    private int dBMaxElementsForInClause =3D 1000;    =

 =

     /**
      * Default constructor.
@@ -792,6 +796,36 @@
             =

             editModeSessionTimeout =3D getInt("editModeSessionTimeout", 2*=
60*60);
 =

+
+            dBMaxElementsForInClause =3D getInt("db_max_elements_for_in_cl=
ause", dBMaxElementsForInClause);
+
+            try {
+                DatabaseScripts scriptsManager =3D new DatabaseScripts();
+                Vector scriptsInfos =3D scriptsManager.getDatabaseScriptsI=
nfos (
+                        scriptsManager.getDatabaseScriptsFileObjects (), p=
athResolver);
+                Enumeration scriptInfoEnum =3D scriptsInfos.elements();
+                while (scriptInfoEnum.hasMoreElements()) {
+                    HashMap curDatabaseHash =3D (HashMap) scriptInfoEnum.n=
extElement();
+                    String database_driver =3D (String) curDatabaseHash.ge=
t("jahia.database.driver");
+                    if (database_driver.equals(db_driver)) {
+                        if (curDatabaseHash.get("jahia.database.max_elemen=
ts_for_in_clause") !=3D null){
+                            try {
+                                int val =3D dBMaxElementsForInClause =3D I=
nteger.parseInt(((String)curDatabaseHash
+                                    .get("jahia.database.max_elements_for_=
in_clause")).trim());
+                                if ( val > 0 ){
+                                    dBMaxElementsForInClause =3D val;    =

+                                }
+                            } catch ( Throwable t ){
+                            }
+                        }
+                        break;
+                    }
+                }
+            } catch ( Throwable t ){
+                logger.debug("Error loading db scripts, db_max_elements_fo=
r_in_clause will be the default value:"
+                        + dBMaxElementsForInClause,t);
+            }
+            =

             settings.put("userManagementUserNamePattern", getString(
                     "userManagementUserNamePattern", "[\\w\\{\\}\\-]+"));
             settings.put("userManagementUserPasswordPattern", getString(
@@ -2132,4 +2166,15 @@
     public void setOutputContainerCacheActivated(boolean outputContainerCa=
cheActivated) {
         this.outputContainerCacheActivated =3D outputContainerCacheActivat=
ed;
     }
+    =

+
+    /**
+     * Returns the DB max elements for SQL IN clause, to limit the scope o=
f returned row
+     * or for optimized sql query rewritting.
+     *
+     * @return
+     */
+    public int getDBMaxElementsForInClause() {
+        return dBMaxElementsForInClause;
+    }
 }

Modified: branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/utils/JahiaT=
ools.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/branches/JAHIA-5-0-SP=
-BRANCH/core/src/java/org/jahia/utils/JahiaTools.java&rev=3D18704&repname=
=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/utils/JahiaTools.j=
ava (original)
+++ branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/utils/JahiaTools.j=
ava Fri Sep 28 10:26:30 2007
@@ -1346,4 +1346,39 @@
 =

         throw new IOException("Too many redirects for request to ["+url +"=
].");
     }
+    =

+    /**
+     * Generate WHERE columnName=3Did1
+     * @param maxSqlWhereClauses
+     * @param ids
+     * @param columnName
+     * @param valueOperator
+     * @param logicOperator
+     * @param prefixWithWhereKeyword
+     * @param alwaysPrefixWithWhereKeyword
+     * @param postFixWithAndKeyword
+     * @return
+     */
+    public static String getConditionalInClauseFromBitSet(BitSet ids,
+            String columnName, String valueOperator, String suffix) {
+        StringBuffer buff =3D new StringBuffer(1000);
+        if (ids.cardinality() <=3D Jahia.getSettings()
+                .getDBMaxElementsForInClause()) {
+            if (valueOperator.indexOf("!=3D") !=3D -1
+                    || valueOperator.indexOf("<>") !=3D -1) {
+                buff.append(columnName).append(" NOT IN (");
+            } else if (valueOperator.indexOf("=3D") !=3D -1) {
+                buff.append(columnName).append(" IN (");
+            }
+
+            for (int i =3D ids.nextSetBit(0); i >=3D 0; i =3D ids.nextSetB=
it(i + 1)) {
+                buff.append(String.valueOf(i));
+                if (ids.nextSetBit(i + 1) >=3D 0) {
+                    buff.append(",");
+                }
+            }
+            buff.append(") ").append(suffix);
+        }
+        return buff.toString();
+    }    =

 }

Modified: branches/JAHIA-5-0-SP-BRANCH/core/src/webapp/WEB-INF/etc/config/j=
ahia.skeleton
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/branches/JAHIA-5-0-SP=
-BRANCH/core/src/webapp/WEB-INF/etc/config/jahia.skeleton&rev=3D18704&repna=
me=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- branches/JAHIA-5-0-SP-BRANCH/core/src/webapp/WEB-INF/etc/config/jahia.s=
keleton (original)
+++ branches/JAHIA-5-0-SP-BRANCH/core/src/webapp/WEB-INF/etc/config/jahia.s=
keleton Fri Sep 28 10:26:30 2007
@@ -128,6 +128,7 @@
 db_waitIfBusy                                          =3D   true
 db_verbose                                             =3D   false
 db_veryVerbose                                         =3D   false
+db_max_elements_for_in_clause                          =3D   1000
 =

 ######################################################################
 ### Datasource  ######################################################

Modified: branches/JAHIA-5-0-SP-BRANCH/core/src/webapp/WEB-INF/var/db/mysql=
.script
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/branches/JAHIA-5-0-SP=
-BRANCH/core/src/webapp/WEB-INF/var/db/mysql.script&rev=3D18704&repname=3Dj=
ahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- branches/JAHIA-5-0-SP-BRANCH/core/src/webapp/WEB-INF/var/db/mysql.scrip=
t (original)
+++ branches/JAHIA-5-0-SP-BRANCH/core/src/webapp/WEB-INF/var/db/mysql.scrip=
t Fri Sep 28 10:26:30 2007
@@ -9,6 +9,7 @@
 jahia.database.starthsqlserver =3D false
 jahia.database.datasource =3D java:comp/env/jdbc/jetspeed
 jahia.database.ojbplatform =3D MySQL
+jahia.database.max_elements_for_in_clause =3D 9000
 jahia.quartz.jdbcDelegate =3D org.quartz.impl.jdbcjobstore.StdJDBCDelegate
 jahia.quartz.serializable =3D true
 =


_______________________________________________
cvs_list mailing list
[email protected]
http://lists.jahia.org/cgi-bin/mailman/listinfo/cvs_list

Reply via email to