[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