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

Reply via email to