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