Author: knguyen
Date: Wed Aug 22 15:39:37 2007
New Revision: 18237
URL: https://svndev.jahia.net/websvn/listing.php?sc=3D1&rev=3D18237&repname=
=3Djahia
Log:
JAHIA-2146, MAN-15: fix and optimization for container ranking. =
Container sorting sql queries can be optimized using the sqlWhereMaxClauses=
property in jahia.properties (default =3D 10).
Modified:
branches/JAHIA-4-1-BRANCH/etc/config/jahia.skeleton
branches/JAHIA-4-1-BRANCH/src/java/org/jahia/services/containers/Contai=
nerFactory.java
branches/JAHIA-4-1-BRANCH/src/java/org/jahia/services/containers/JahiaC=
ontainerUtilsDB.java
branches/JAHIA-4-1-BRANCH/src/java/org/jahia/services/containers/JahiaC=
ontainersBaseService.java
branches/JAHIA-4-1-BRANCH/src/java/org/jahia/services/containers/JahiaC=
ontainersService.java
branches/JAHIA-4-1-BRANCH/src/java/org/jahia/settings/SettingsBean.java
branches/JAHIA-4-1-BRANCH/src/java/org/jahia/utils/JahiaTools.java
Modified: branches/JAHIA-4-1-BRANCH/etc/config/jahia.skeleton
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/branches/JAHIA-4-1-BR=
ANCH/etc/config/jahia.skeleton&rev=3D18237&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-4-1-BRANCH/etc/config/jahia.skeleton (original)
+++ branches/JAHIA-4-1-BRANCH/etc/config/jahia.skeleton Wed Aug 22 15:39:37=
2007
@@ -462,5 +462,10 @@
CasService =3D org.jahia.ser=
vices.sso.CasService
ImportExportService =3D org.jahia.ser=
vices.importexport.ImportExportBaseService
=
+######################################################################
+### Used for writing in an optimized way some sql queries ( like container=
sorting )
+######################################################################
+sqlWhereMaxClauses =3D 10
+
### Added settings ##################
=
Modified: branches/JAHIA-4-1-BRANCH/src/java/org/jahia/services/containers/=
ContainerFactory.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/branches/JAHIA-4-1-BR=
ANCH/src/java/org/jahia/services/containers/ContainerFactory.java&rev=3D182=
37&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-4-1-BRANCH/src/java/org/jahia/services/containers/Contai=
nerFactory.java (original)
+++ branches/JAHIA-4-1-BRANCH/src/java/org/jahia/services/containers/Contai=
nerFactory.java Wed Aug 22 15:39:37 2007
@@ -395,6 +395,8 @@
resultBitSet =3D (BitSet) searchResult.bits ().clone (=
);
}
}
+ boolean searchLimitedToOneCtnList =3D ( cSearcher =3D=3D null =
|| ( (cSearcher instanceof ContainerSearcher)
+ && !((ContainerSearcher)cSearcher).isSiteModeSearching=
()) );
=
// Apply container list filtering if needed.
if ((searchResult =3D=3D null) ||
@@ -407,6 +409,8 @@
}
}
=
+ boolean filteringLimitedToOneCtnList =3D ( cFilters =3D=3D nul=
l || !cFilters.isSiteModeFiltering() );
+
// Retrieve previous search and filtering bitset from cache
HttpSession session =3D params.getSession ();
BitSet cachedResultBitSet =3D null;
@@ -416,10 +420,6 @@
"_searchfiltering_result_bitset" + "_" + params.ge=
tEntryLoadRequest().toString());
=
}
- /*
- resultHasChanged =3D ((cSearcher !=3D null &&
- cSearcher.getUpdateStatus ()) ||
- (cFilters !=3D null && cFilters.getUpdateStatus ())); =
*/
resultHasChanged =3D ((cSearcher !=3D null) ||
(cFilters !=3D null && cFilters.getUpdateStatus ()));
=
@@ -459,26 +459,23 @@
=
try {
Vector ctnIds =3D null;
-
- // get all container ids
- /*
- ctnIds =3D ServicesRegistry.getInstance ()
- .getJahiaContainersService ().getctnidsInList =
(clistID, loadVersion);
- */
-
- if (resultBitSet =3D=3D null) {
+ if (resultBitSet =3D=3D null ||
+ (searchLimitedToOneCtnList && filteringLimited=
ToOneCtnList && false)) {
ctnIds =3D
ServicesRegistry.getInstance ()
.getJahiaContainersService ()
.getctnidsInList (clist.getID(), loadVersi=
on);
=
return ctnIds;
- } else {
- // EP : OPE & EKA : patch for sort by ranking
- ctnIds =3D ServicesRegistry.getInstance ()
- .getJahiaContainersService ().getCtnIds (t=
rue, resultBitSet);
-
+ } else if (resultBitSet.length()=3D=3D0){
+ return new Vector();
+ } else if (resultBitSet.cardinality()=3D=3D1){
+ ctnIds =3D new Vector();
+ ctnIds.add(new Integer(resultBitSet.nextSetBit(0))=
);
return ctnIds;
+ } else {
+ return ServicesRegistry.getInstance ()
+ .getJahiaContainersService ().getCtnIds (t=
rue, resultBitSet, loadVersion);
}
}
catch (Throwable t) {
@@ -488,7 +485,6 @@
=
} catch (Throwable t) {
logger.warn (t);
-
t.printStackTrace ();
}
return null; // on any error return null vector, so Jahia will ret=
urn all
Modified: branches/JAHIA-4-1-BRANCH/src/java/org/jahia/services/containers/=
JahiaContainerUtilsDB.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/branches/JAHIA-4-1-BR=
ANCH/src/java/org/jahia/services/containers/JahiaContainerUtilsDB.java&rev=
=3D18237&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-4-1-BRANCH/src/java/org/jahia/services/containers/JahiaC=
ontainerUtilsDB.java (original)
+++ branches/JAHIA-4-1-BRANCH/src/java/org/jahia/services/containers/JahiaC=
ontainerUtilsDB.java Wed Aug 22 15:39:37 2007
@@ -40,6 +40,7 @@
import org.jahia.services.database.ConnectionDispenser;
import org.jahia.services.pages.ContentPage;
import org.jahia.services.version.EntryLoadRequest;
+import org.jahia.utils.JahiaTools;
=
/**
* JahiaContainerUtilsDB
@@ -1690,9 +1691,9 @@
try {
String sqlQuery =3D "";
if ( orderByRanking ){
- sqlQuery =3D "SELECT id_jahia_ctn_entries, rank_jahia_ctn_=
entries FROM jahia_ctn_entries GROUP BY id_jahia_ctn_entries ORDER BY min(r=
ank_jahia_ctn_entries)";
+ sqlQuery =3D "SELECT id_jahia_ctn_entries FROM jahia_ctn_e=
ntries GROUP BY id_jahia_ctn_entries ORDER BY min(rank_jahia_ctn_entries)";
} else {
- sqlQuery =3D "SELECT id_jahia_ctn_entries FROM jahia_ctn_e=
ntries GROUP BY id_jahia_ctn_entries"; =
+ sqlQuery =3D "SELECT id_jahia_ctn_entries FROM jahia_ctn_e=
ntries GROUP BY id_jahia_ctn_entries";
}
=
dbConn =3D ConnectionDispenser.getConnection ();
@@ -1723,58 +1724,170 @@
}
=
/**
- * EP : OPE & EKA : patch for sort by ranking
- * Correct version to sort a containerList without any sort defined
- * =
+ *
* @param orderByRanking
* @param ids
+ * @param loadVersion
* @return
* @throws JahiaException
*/
- public Vector db_get_all_containers_id (boolean orderByRanking, BitSet=
ids)
+ public Vector db_get_all_containers_id (boolean orderByRanking, BitSet=
ids, EntryLoadRequest loadVersion)
throws JahiaException {
- Vector result =3D new Vector ();
+
+ Vector result;
Connection dbConn =3D null;
PreparedStatement stmt =3D null;
ResultSet rs =3D null;
- int nb_to_insert;
+
+ boolean compareMode =3D (Jahia.getThreadParamBean() !=3D null && P=
aramBean.COMPARE.equals(Jahia
+ .getThreadParamBean().getOperationMode()));
+
+ int maxSqlWhereClauses =3D Jahia.getSettings().getSqlWhereMaxClaus=
es();
+ boolean applyBitsetCheck =3D ids.cardinality() > maxSqlWhereClause=
s;
try {
- String sqlQuery =3D "";
- if ( orderByRanking ){
- sqlQuery =3D "SELECT id_jahia_ctn_entries, rank_jahia_ctn_=
entries FROM jahia_ctn_entries GROUP BY id_jahia_ctn_entries ORDER BY min(r=
ank_jahia_ctn_entries)";
+
+ dbConn =3D ConnectionDispenser.getConnection();
+ result =3D new Vector();
+ StringBuffer queryBuffer =3D null;
+ if ( !orderByRanking ){
+ // Get all containers IDs.
+ if (loadVersion =3D=3D null || loadVersion.isVersioned() &=
& compareMode) {
+ queryBuffer =3D new StringBuffer("SELECT DISTINCT id_j=
ahia_ctn_entries FROM jahia_ctn_entries ");
+ queryBuffer.append(JahiaTools.getWhereClausesFromBitSe=
t(maxSqlWhereClauses,ids,
+ "id_jahia_ctn_entries","=3D","OR",true,false,"=
"));
+ stmt =3D dbConn.prepareStatement(queryBuffer.toString(=
));
+ } else if (loadVersion.isStaging()) {
+ queryBuffer =3D new StringBuffer("SELECT DISTINCT id_j=
ahia_ctn_entries FROM jahia_ctn_entries ");
+ queryBuffer.append(JahiaTools.getWhereClausesFromBitSe=
t(maxSqlWhereClauses,ids,
+ "id_jahia_ctn_entries","=3D","OR",true,true," =
AND "));
+ queryBuffer.append(" workflow_state>=3D1 ");
+ if ( !loadVersion.isWithMarkedForDeletion() ){
+ queryBuffer.append(" AND version_id !=3D -1 ");
+ }
+ stmt =3D dbConn.prepareStatement(queryBuffer.toString(=
));
+ } else if (loadVersion.isVersioned() && !compareMode) {
+ queryBuffer =3D new StringBuffer("SELECT DISTINCT id_j=
ahia_ctn_entries FROM jahia_ctn_entries ");
+ queryBuffer.append(JahiaTools.getWhereClausesFromBitSe=
t(maxSqlWhereClauses,ids,
+ "id_jahia_ctn_entries","=3D","OR",true,true," =
AND "));
+ queryBuffer.append(" workflow_state<=3D1 AND version_i=
d<=3D?");
+ stmt =3D dbConn.prepareStatement(queryBuffer.toString(=
));
+ stmt.setInt(1, loadVersion.getVersionID());
+ } else {
+ queryBuffer =3D new StringBuffer("SELECT DISTINCT id_j=
ahia_ctn_entries FROM jahia_ctn_entries ");
+ queryBuffer.append(JahiaTools.getWhereClausesFromBitSe=
t(maxSqlWhereClauses,ids,
+ "id_jahia_ctn_entries","=3D","OR",true,true," =
AND "));
+ queryBuffer.append(" workflow_state=3D1");
+ stmt =3D dbConn.prepareStatement(queryBuffer.toString(=
));
+ }
+ rs =3D stmt.executeQuery();
+ if ( applyBitsetCheck ){
+ int nb_to_insert;
+ while (rs.next()) {
+ nb_to_insert =3D rs.getInt (1);
+ if (ids.get(nb_to_insert)) {
+ result.add (new Integer (nb_to_insert));
+ }
+ }
+ } else {
+ while (rs.next()) {
+ result.add (new Integer (rs.getInt (1)));
+ }
+ }
} else {
- sqlQuery =3D "SELECT id_jahia_ctn_entries FROM jahia_ctn_e=
ntries GROUP BY id_jahia_ctn_entries"; =
- }
- =
- dbConn =3D ConnectionDispenser.getConnection ();
- stmt =3D dbConn.prepareStatement (sqlQuery);
- rs =3D stmt.executeQuery ();
- =
- System.out.println("ids " + ids);
- while (rs.next ()) {
- nb_to_insert =3D rs.getInt (1);
- if (ids.get(nb_to_insert)) {
- result.add (new Integer (nb_to_insert));
+
+ // Get all containers IDs.
+ if (loadVersion =3D=3D null || loadVersion.isVersioned() &=
& compareMode) {
+ queryBuffer =3D new StringBuffer("SELECT id_jahia_ctn_=
entries, rank_jahia_ctn_entries FROM jahia_ctn_entries ");
+ queryBuffer.append(JahiaTools.getWhereClausesFromBitSe=
t(maxSqlWhereClauses,ids,
+ "id_jahia_ctn_entries","=3D","OR",true,false,"=
"));
+ queryBuffer.append(" ORDER BY rank_jahia_ctn_entries");
+ stmt =3D dbConn.prepareStatement(queryBuffer.toString(=
));
+ } else if (loadVersion.isStaging()) {
+ queryBuffer =3D new StringBuffer("SELECT id_jahia_ctn_=
entries, version_id, rank_jahia_ctn_entries, workflow_state FROM jahia_ctn_=
entries ");
+ queryBuffer.append(JahiaTools.getWhereClausesFromBitSe=
t(maxSqlWhereClauses,ids,
+ "id_jahia_ctn_entries","=3D","OR",true,true," =
AND "));
+ queryBuffer.append(" workflow_state>=3D1 ORDER BY id_j=
ahia_ctn_entries, workflow_state DESC");
+ stmt =3D dbConn.prepareStatement(queryBuffer.toString(=
));
+ } else if (loadVersion.isVersioned() && !compareMode) {
+ queryBuffer =3D new StringBuffer("SELECT id_jahia_ctn_=
entries, version_id, rank_jahia_ctn_entries FROM jahia_ctn_entries ");
+ queryBuffer.append(JahiaTools.getWhereClausesFromBitSe=
t(maxSqlWhereClauses,ids,
+ "id_jahia_ctn_entries","=3D","OR",true,true," =
AND "));
+ queryBuffer.append(" workflow_state<=3D1 AND version_i=
d<=3D? ORDER BY id_jahia_ctn_entries, version_id DESC");
+ stmt.setInt(1, loadVersion.getVersionID());
+ stmt =3D dbConn.prepareStatement(queryBuffer.toString(=
));
+ } else {
+ queryBuffer =3D new StringBuffer("SELECT id_jahia_ctn_=
entries, rank_jahia_ctn_entries FROM jahia_ctn_entries ");
+ queryBuffer.append(JahiaTools.getWhereClausesFromBitSe=
t(maxSqlWhereClauses,ids,
+ "id_jahia_ctn_entries","=3D","OR",true,true," =
AND "));
+ queryBuffer.append(" workflow_state=3D1 ORDER BY rank_=
jahia_ctn_entries, id_jahia_ctn_entries");
+ stmt =3D dbConn.prepareStatement(queryBuffer.toString(=
));
+ }
+ rs =3D stmt.executeQuery();
+ 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);
+ Integer ctnID =3D null;
+ int id =3D 0;
+ while (rs.next()) {
+ id =3D rs.getInt(1);
+ if ( applyBitsetCheck && !ids.get(id) ){
+ continue;
+ }
+ ctnID =3D new Integer(id);
+ if (!addedCtnIds.contains(ctnID) && !previousCtnID=
.equals(ctnID)
+ && (loadVersion.isWithMarkedForDeletion() =
|| rs.getLong(2) !=3D -1)) {
+ int rank =3D rs.getInt(3);
+ if (rank !=3D 0) {
+ int index =3D 0;
+ int size =3D sortedRanks.size();
+ while (index < size && ((Integer) sortedRa=
nks.get(index)).intValue() < rank) {
+ index++;
+ }
+
+ sortedRanks.add(index, new Integer(rank));
+ result.add(index, ctnID);
+ } else {
+ result.add(ctnID);
+ }
+ addedCtnIds.add(ctnID);
+ }
+ previousCtnID =3D ctnID;
+ }
+ } else {
+ if ( applyBitsetCheck ){
+ int nb_to_insert;
+ while (rs.next()) {
+ nb_to_insert =3D rs.getInt (1);
+ if (ids.get(nb_to_insert)) {
+ result.add (new Integer (nb_to_insert));
+ }
+ }
+ } else {
+ while (rs.next()) {
+ result.add (new Integer (rs.getInt (1)));
+ }
+ }
}
}
- =
+ rs.close();
+
} catch (SQLException se) {
- String errorMsg =3D "Error in db_get_all_containers_id : " + s=
e.getMessage ();
- logger.debug (errorMsg + " -> BAILING OUT", se);
- throw new JahiaException ("Cannot load containers from the dat=
abase",
- errorMsg, JahiaException.DATABASE_ERROR,
- JahiaException.ERROR_SEVERITY, se);
+ String errorMsg =3D "Error in db_get_container_ids_in_containe=
r_list : " + se.getMessage();
+ logger.debug(errorMsg + " -> BAILING OUT", se);
+ throw new JahiaException("Cannot load containers from the data=
base", errorMsg,
+ JahiaException.DATABASE_ERROR, JahiaException.CRITICAL=
_SEVERITY, se);
} finally {
try {
- =
- if (stmt !=3D null) stmt.close ();
+ if (stmt !=3D null)
+ stmt.close();
} catch (SQLException ex) {
- logger.debug ("Cannot free resources", ex);
+ logger.debug("Cannot free resources", ex);
}
}
- =
return result;
}
+ =
=
/**
* loads all the container list ids in a container.
Modified: branches/JAHIA-4-1-BRANCH/src/java/org/jahia/services/containers/=
JahiaContainersBaseService.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/branches/JAHIA-4-1-BR=
ANCH/src/java/org/jahia/services/containers/JahiaContainersBaseService.java=
&rev=3D18237&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-4-1-BRANCH/src/java/org/jahia/services/containers/JahiaC=
ontainersBaseService.java (original)
+++ branches/JAHIA-4-1-BRANCH/src/java/org/jahia/services/containers/JahiaC=
ontainersBaseService.java Wed Aug 22 15:39:37 2007
@@ -646,14 +646,13 @@
return c_utils.db_get_all_containers_id(orderByRanking);
} =
=
- /**
- * EP : OPE & EKA : patch for sort by ranking
+ /**
* Correct version to sort a containerList without any sort defined
* =
* @see org.jahia.services.containers.JahiaContainersService#getCtnIds(=
boolean, java.util.BitSet)
*/
- public Vector getCtnIds(boolean orderByRanking, BitSet ids) throws Jahi=
aException {
- return c_utils.db_get_all_containers_id(orderByRanking, ids);
+ public Vector getCtnIds(boolean orderByRanking, BitSet ids, EntryLoadRe=
quest loadRequest) throws JahiaException {
+ return c_utils.db_get_all_containers_id(orderByRanking, ids, loadRe=
quest);
}
=
/**
Modified: branches/JAHIA-4-1-BRANCH/src/java/org/jahia/services/containers/=
JahiaContainersService.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/branches/JAHIA-4-1-BR=
ANCH/src/java/org/jahia/services/containers/JahiaContainersService.java&rev=
=3D18237&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-4-1-BRANCH/src/java/org/jahia/services/containers/JahiaC=
ontainersService.java (original)
+++ branches/JAHIA-4-1-BRANCH/src/java/org/jahia/services/containers/JahiaC=
ontainersService.java Wed Aug 22 15:39:37 2007
@@ -223,16 +223,17 @@
throws JahiaException;
=
/**
- * EP : OPE & EKA : patch for sort by ranking
* Correct version to sort a containerList without any sort defined
- * =
+ *
* @param orderByRanking if true, order by container ranking
+ * @param ids
+ * @param loadRequest
* @return
* @throws JahiaException
*/
- public abstract Vector getCtnIds(boolean orderByRanking, BitSet ids)
+ public abstract Vector getCtnIds(boolean orderByRanking, BitSet ids, En=
tryLoadRequest loadRequest)
throws JahiaException;
- =
+ =
/**
* gets all container list ids in a container.
*
Modified: branches/JAHIA-4-1-BRANCH/src/java/org/jahia/settings/SettingsBea=
n.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/branches/JAHIA-4-1-BR=
ANCH/src/java/org/jahia/settings/SettingsBean.java&rev=3D18237&repname=3Dja=
hia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=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-4-1-BRANCH/src/java/org/jahia/settings/SettingsBean.java=
(original)
+++ branches/JAHIA-4-1-BRANCH/src/java/org/jahia/settings/SettingsBean.java=
Wed Aug 22 15:39:37 2007
@@ -228,6 +228,9 @@
private int maxParallelProcessings =3D 10;
private long pageGenerationWaitTime =3D 120000; // in milliseconds
=
+ // used by some sql queries to limit the scope of returned row
+ private int sqlWhereMaxClauses =3D 10;
+
/**
* Default constructor.
=
@@ -491,6 +494,8 @@
=
pageCounterIncrementActivated =3D getBoolean("pageCounterIncre=
mentActivated", true);
=
+ sqlWhereMaxClauses =3D getInt("sqlWhereMaxClauses",sqlWhereMax=
Clauses);
+
settings.put("userManagementUserNamePattern", getString(
"userManagementUserNamePattern",
"[\\w\\{\\}\\-]+"));
settings.put("userManagementUserPasswordPattern", getString(
@@ -1336,5 +1341,15 @@
public int getMaxParallelProcessings() {
return maxParallelProcessings;
}
- =
+
+ /**
+ * Returns the allowed max clause used by some sql queries to limit th=
e scope of returned row
+ * or for sql query rewritting optimization purpose
+ *
+ * @return
+ */
+ public int getSqlWhereMaxClauses() {
+ return sqlWhereMaxClauses;
+ }
+
}
Modified: branches/JAHIA-4-1-BRANCH/src/java/org/jahia/utils/JahiaTools.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/branches/JAHIA-4-1-BR=
ANCH/src/java/org/jahia/utils/JahiaTools.java&rev=3D18237&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-4-1-BRANCH/src/java/org/jahia/utils/JahiaTools.java (ori=
ginal)
+++ branches/JAHIA-4-1-BRANCH/src/java/org/jahia/utils/JahiaTools.java Wed =
Aug 22 15:39:37 2007
@@ -34,12 +34,6 @@
import java.io.StringReader;
import java.net.URL;
import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.Enumeration;
-import java.util.Locale;
-import java.util.StringTokenizer;
-import java.util.Vector;
=
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
@@ -49,7 +43,8 @@
import org.apache.commons.jexl.ExpressionFactory;
import org.apache.commons.jexl.JexlContext;
import org.apache.commons.jexl.JexlHelper;
-import java.util.Map;
+
+import java.util.*;
=
/**
* @author Jerome Tamiotti
@@ -1234,5 +1229,44 @@
return result.toString();
}
=
+ /**
+ * Generate WHERE columnName=3Did1
+ * @param maxSqlWhereClauses
+ * @param ids
+ * @param columnName
+ * @param valueOperator
+ * @param logicOperator
+ * @param prefixWithWhereKeyword
+ * @param alwaysPrefixWithWhereKeyword
+ * @param postFixWithAndKeyword
+ * @return
+ */
+ public static String getWhereClausesFromBitSet(int maxSqlWhereClauses,
+ BitSet ids,
+ String columnName,
+ String valueOperator,
+ String logicOperator,
+ boolean prefixWithWhere=
Keyword,
+ boolean alwaysPrefixWit=
hWhereKeyword,
+ String postFixString){
+ StringBuffer buff =3D new StringBuffer(1000);
+ if (alwaysPrefixWithWhereKeyword){
+ buff.append(" WHERE ");
+ }
+ if (ids.cardinality() <=3D maxSqlWhereClauses){
+ if (!alwaysPrefixWithWhereKeyword && prefixWithWhereKeyword){
+ buff.append(" WHERE ");
+ }
+ buff.append(" ( ");
+ for(int i=3Dids.nextSetBit(0); i>=3D0; i=3Dids.nextSetBit(i+1)=
) {
+ buff.append(" ").append(columnName).append(valueOperator).=
append(String.valueOf(i)).append(" ");
+ if ( ids.nextSetBit(i+1)>=3D0 ){
+ buff.append(logicOperator);
+ }
+ }
+ buff.append(" ) ").append(postFixString);
+ }
+ return buff.toString();
+ }
=
} // end JahiaTools
_______________________________________________
cvs_list mailing list
[email protected]
http://lists.jahia.org/cgi-bin/mailman/listinfo/cvs_list