[cvs] expresso commit by rauld: Yves Henri Amaizo's contribution from

JCorporate Ltd jcorp at jcorporate.com
Mon Dec 27 12:58:22 UTC 2004


Log Message:
-----------
Yves Henri Amaizo's contribution from 20041204

Modified Files:
--------------
    expresso/expresso-web/WEB-INF/src/com/jcorporate/expresso/core/dbobj:
        MultiDBObject.java

Revision Data
-------------
Index: MultiDBObject.java
===================================================================
RCS file: /home/javacorp/.cvs/expresso/expresso/expresso-web/WEB-INF/src/com/jcorporate/expresso/core/dbobj/MultiDBObject.java,v
retrieving revision 1.60
retrieving revision 1.61
diff -Lexpresso-web/WEB-INF/src/com/jcorporate/expresso/core/dbobj/MultiDBObject.java -Lexpresso-web/WEB-INF/src/com/jcorporate/expresso/core/dbobj/MultiDBObject.java -u -r1.60 -r1.61
--- expresso-web/WEB-INF/src/com/jcorporate/expresso/core/dbobj/MultiDBObject.java
+++ expresso-web/WEB-INF/src/com/jcorporate/expresso/core/dbobj/MultiDBObject.java
@@ -77,6 +77,7 @@
 import com.jcorporate.expresso.core.misc.StringUtil;
 import com.jcorporate.expresso.core.registry.RequestRegistry;
 import com.jcorporate.expresso.core.security.filters.Filter;
+import com.jcorporate.expresso.core.registry.RequestRegistry;
 import com.jcorporate.expresso.kernel.util.ClassLocator;
 import com.jcorporate.expresso.kernel.util.FastStringBuffer;
 import org.apache.log4j.Logger;
@@ -316,7 +317,12 @@
     public boolean buildFromClause() throws DBException {
         boolean success = false;
         FastStringBuffer fsb = new FastStringBuffer(256);
-        int dboCount = myDBObjects.size();
+		DBConnection myConnection = null;
+	   DBConnection myCx = null;
+	   if (this.getConnection() != null) {
+		   myConnection = this.getConnection();
+	   }
+       int dboCount = myDBObjects.size();
 
         try {
             // ----------------------------------------------------
@@ -406,9 +412,35 @@
                     String targetTable = oneObj.getJDBCMetaData().getTargetSQLTable(oneObj.getDataContext());
                     String tableName = getTableName(oneObj);
                     fsb.append(targetTable);
-                    if (!targetTable.equals(tableName)) {
-                        fsb.append(" AS " + tableName);
-                    }
+//                    if (!targetTable.equals(tableName)) {
+//                        fsb.append(" AS " + tableName);
+//                    }
+/**
+ * @TODO Compatibilite with JDBC driver
+ *
+ */
+					  // AS keyword to set table short name is not standard and not supported by all
+					  // SQL manipulation languages. This need to be set properly with each driver
+					  // Keyword to be set in expresso config file for table alias name syntax
+
+					  if (!targetTable.equals(tableName)) {
+						  if (oneObj.getLocalConnection() != null) {
+							  myCx = oneObj.getLocalConnection();
+						  } else {
+							  myCx = myConnection;
+						  }
+					  if (ConfigManager.getJdbcRequired(getDataContext()).getTableAliasKeyword() != null) {
+						fsb.append(" " + ConfigManager.getJdbcRequired(getDataContext()).getTableAliasKeyword() + " " + tableName);
+					  } else {
+						fsb.append(" " + tableName);
+					  }
+//						  if (("oracle.jdbc.driver.OracleDriver".equals(myCx.getDBDriver()))) {
+//							  fsb.append(" " + tableName);
+//						  } else {
+//							  fsb.append(" AS " + tableName);
+//						  }
+					  }
+
                     needComma = true;
                 }
 
@@ -431,9 +463,27 @@
                     String targetTable = oneObj.getJDBCMetaData().getTargetSQLTable(oneObj.getDataContext());
                     String tableName = getTableName(oneObj);
                     fsb.append(targetTable);
-                    if (!targetTable.equals(tableName)) {
-                        fsb.append(" AS " + tableName);
-                    }
+//                    if (!targetTable.equals(tableName)) {
+//                        fsb.append(" AS " + tableName);
+//                    }
+					  if (!targetTable.equals(tableName)) {
+						  if (oneObj.getLocalConnection() != null) {
+							  myCx = oneObj.getLocalConnection();
+						  } else {
+							  myCx = myConnection;
+						  }
+//						  if (("oracle.jdbc.driver.OracleDriver".equals(myCx.getDBDriver()))) {
+//							  fsb.append(" " + tableName);
+//						  } else {
+//							  fsb.append(" AS " + tableName);
+//						  }
+						if (ConfigManager.getJdbcRequired(getDataContext()).getTableAliasKeyword() != null) {
+						  fsb.append(" " + ConfigManager.getJdbcRequired(getDataContext()).getTableAliasKeyword() + " " + tableName);
+						} else {
+						  fsb.append(" " + tableName);
+						}
+					  }
+
                     needComma = true;
                 }
 
@@ -1718,6 +1768,180 @@
 
         return recordSet;
     }
+
+	/**
+	 * get the SQL select statment to be executed, if searchAnd RetrieveList happenned
+	 * on this MULTIDBOBJETC
+	 *
+	 * @return String of select statement to be executed
+	 * @throws DBException If the search could not be completed
+	 */
+	public synchronized String getSQLSelectStatement() throws DBException {
+	    boolean needComma = false;
+	    DBObject oneObj = null;
+
+	    HashMap rtrvListByTable = new HashMap();
+		FastStringBuffer myStatement = new FastStringBuffer(256);
+
+	    DBConnectionPool myPool = null;
+	    DBConnection myConnection = null;
+
+	    try {
+	        if (localConnection != null) {
+	            myConnection = localConnection;
+	        } else {
+	            myPool = DBConnectionPool.getInstance(getDBName());
+	            myConnection = myPool.getConnection("com.jcorporate.expresso.core.dbobj.DBObject");
+	        }
+
+	        String fieldName = null;
+//	        FastStringBuffer myStatement = new FastStringBuffer(256);
+	        myStatement.append("SELECT ");
+
+
+	        if (selectDistinct) {
+	            myStatement.append(" ");
+	            myStatement.append("DISTINCT");
+	            myStatement.append(" ");
+	        }
+
+	        for (Enumeration eachObj = myDBObjects.elements();
+	             eachObj.hasMoreElements();) {
+	            oneObj = (DBObject) eachObj.nextElement();
+
+	            ArrayList retrievedFieldList = (ArrayList) rtrvListByTable.get(getTableName(oneObj));
+	            if (retrievedFieldList == null) {
+	                retrievedFieldList = new ArrayList();
+	                rtrvListByTable.put(getTableName(oneObj), retrievedFieldList);
+	            }
+
+	            if (oneObj.anyFieldsDistinct) {
+	                String oneFieldName = null;
+	                for (Iterator i = oneObj.getDistinctFieldArrayList().iterator();
+	                     i.hasNext();
+	                        ) {
+	                    oneFieldName = (String) i.next();
+	                    if (needComma) {
+	                        myStatement.append(", ");
+	                    }
+	                    myStatement.append(" ");
+	                    myStatement.append(myPool.getDistinctRowsetKeyword());
+	                    myStatement.append(" ");
+	                    myStatement.append(selectFieldString(oneObj, oneFieldName));
+	                    retrievedFieldList.add(oneFieldName);
+	                    needComma = true;
+	                }
+	            } else if (oneObj.anyFieldsToRetrieveMulti) {
+	                String oneFieldName = null;
+	                for (Iterator i = oneObj.getFieldsToRetrieveIterator();
+	                     i.hasNext();
+	                        ) {
+	                    oneFieldName = (String) i.next();
+	                    if (needComma) {
+	                        myStatement.append(", ");
+	                    }
+	                    myStatement.append(selectFieldString(oneObj, oneFieldName));
+	                    retrievedFieldList.add(oneFieldName);
+	                    needComma = true;
+	                } /* for each field */
+	            } else {
+	                for (Iterator i = oneObj.getMetaData().getFieldListArray().iterator();
+	                     i.hasNext();
+	                        ) {
+	                    fieldName = (String) i.next();
+	                    DataFieldMetaData metaData =
+	                            oneObj.getFieldMetaData(fieldName);
+
+	                    if (!metaData.isVirtual()
+	                            && !metaData.isBinaryObjectType()) {
+	                        if (needComma) {
+	                            myStatement.append(", ");
+	                        }
+
+	                        myStatement.append(selectFieldString(oneObj, fieldName));
+	                        retrievedFieldList.add(fieldName);
+	                        needComma = true;
+	                    }
+
+	                    /* if field is not virtual & not binary*/
+	                }
+
+	                /* for each field */
+	            }
+	        }
+
+	        myStatement.append(" FROM ");
+	        if (buildFromClause() &&
+	                fromClause != null &&
+	                fromClause.trim().length() > 0) {
+	            myStatement.append(fromClause);
+	        } else {
+	            throw new DBException(thisClass + "count()" +
+	                    " :Building of FROM clause failed.");
+	        }
+
+	        String whereClause;
+	        if (customWhereClause != null) {
+	            if (appendCustomWhereClause) {
+	                whereClause = buildWhereClause(true) + " AND " + customWhereClause;
+	            } else {
+	                whereClause = " WHERE " + customWhereClause;
+	            }
+	        } else {
+	            whereClause = buildWhereClause(true);
+	        }
+
+	        myStatement.append(whereClause);
+
+	        appendCustomWhereClause = false;
+
+
+	        /* Add the ORDER BY clause if any sortKeys are specified */
+	        if (sortKeys.size() > 0) {
+	            myStatement.append(" ORDER BY ");
+
+	            boolean needComma2 = false;
+
+	            for (Enumeration e = sortKeys.elements(); e.hasMoreElements();) {
+	                if (needComma2) {
+	                    myStatement.append(", ");
+	                }
+
+	                myStatement.append((String) e.nextElement());
+	                needComma2 = true;
+	            }
+	        }
+
+	        if (log.isDebugEnabled()) {
+	            log.debug("Executing " + myStatement.toString());
+	        }
+
+			return myStatement.toString();
+	    } finally {
+	        if (localConnection == null) {
+	            myPool.release(myConnection);
+	        }
+			myStatement.release();
+	    }
+
+	}
+
+
+    /**
+     * Search and retrieve in a particular order
+     *
+     * @param sortKeyString A pipe-delimited list of key fields to sort
+     *                      the returned set by
+     * @return Vector A vector of new database objects retrieved by the search
+     * @throws DBException If the search could not be completed
+     * @deprecated Use searchAndRetrieveList(String) instead
+     */
+    public synchronized Vector searchAndRetrieve(String sortKeyString)
+            throws DBException {
+
+        return new Vector(searchAndRetrieveList(sortKeyString));
+    } /* searchAndRetrieve(String) */
+
 
     /**
      * This tells the buildWhereClause to either respect case (true) or


More information about the cvs mailing list