[cvs] expresso/expresso-web/WEB-INF/src/com/jcorporate/expresso/core/dataobjects/jdbc JDBCDataObject.java JDBCExecutor.java JDBCUtil.java JdbcPersistenceManager.java JoinedDataObject.java JoinedDataObjectMetaData.java LobField.java

JCorporate Ltd jcorp at jcorp2.servlets.net
Fri Sep 17 17:05:44 PDT 2004


Update of /home/javacorp/.cvs/expresso/expresso/expresso-web/WEB-INF/src/com/jcorporate/expresso/core/dataobjects/jdbc
In directory jcorp2.servlets.net:/tmp/cvs-serv12322

Modified Files:
	JDBCDataObject.java JDBCExecutor.java JDBCUtil.java 
	JdbcPersistenceManager.java JoinedDataObject.java 
	JoinedDataObjectMetaData.java LobField.java 
Log Message:
Yves Henri AMAIZO's contributions.
Commited by Raul Davidovich on 20040918


Index: LobField.java
===================================================================
RCS file: /home/javacorp/.cvs/expresso/expresso/expresso-web/WEB-INF/src/com/jcorporate/expresso/core/dataobjects/jdbc/LobField.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -C2 -d -r1.8 -r1.9
*** LobField.java	27 Oct 2003 19:10:32 -0000	1.8
--- LobField.java	18 Sep 2004 00:05:41 -0000	1.9
***************
*** 109,112 ****
--- 109,115 ----
   * @version $Revision$ on  $Date$
   * @since Expresso 5.1
+  * 
+  * Modify by Yves Henri AMAIZO <amy_amaizo at compuserve.com>
+  * @since $DatabaseSchema  $Date$
   */
  
***************
*** 123,127 ****
      private Logger log = Logger.getLogger(LobField.class);
  
! 
      protected DBConnection myConnection = null;
  
--- 126,131 ----
      private Logger log = Logger.getLogger(LobField.class);
  
! 	boolean alreadyInTransaction = false;
! 	
      protected DBConnection myConnection = null;
  
***************
*** 148,151 ****
--- 152,158 ----
  
          criteria = newCriteria;
+         if (newCriteria.getLocalConnection() != null) {
+         	myConnection = newCriteria.getLocalConnection();
+         }
      }
  
***************
*** 356,359 ****
--- 363,373 ----
          }
  
+ 		try {
+ 			alreadyInTransaction = !(myConnection.getAutoCommit());
+ 		} catch (DBException ex) {
+ 			throw new DataException("Error getting Database" +
+ 					" Connection transaction parameter for BLOB Retrieval", ex);
+ 		}
+ 
  		// if running Oracle, use Oracle specific methods because of Oracle's
  		// incompatibility with standard jdbc LOB mothods
***************
*** 405,408 ****
--- 419,428 ----
          }
  
+ 		try {
+ 			alreadyInTransaction = !(myConnection.getAutoCommit());
+ 		} catch (DBException ex) {
+ 			throw new DataException("Error getting Database" +
+ 					" Connection transaction parameter for BLOB Retrieval", ex);
+ 		}
          PreparedStatement preparedStatement = prepUpdate(getCriteria(), fieldName, myConnection);
  
***************
*** 448,451 ****
--- 468,478 ----
          }
  
+ 		try {
+ 			alreadyInTransaction = !(myConnection.getAutoCommit());
+ 		} catch (DBException ex) {
+ 			throw new DataException("Error getting Database" +
+ 					" Connection transaction parameter for BLOB Retrieval", ex);
+ 		}
+ 
  		// if running Oracle, use Oracle specific methods because of Oracle's incompatibility
  		// with standard jdbc LOB methods
***************
*** 498,501 ****
--- 525,535 ----
          }
  
+ 		try {
+ 			alreadyInTransaction = !(myConnection.getAutoCommit());
+ 		} catch (DBException ex) {
+ 			throw new DataException("Error getting Database" +
+ 					" Connection transaction parameter for BLOB Retrieval", ex);
+ 		}
+ 
          if ("interbase.interclient.Driver".equals(myConnection.getDBDriver())) {
              throw new DataException("InterBase Interclient 2 cannot support unicode data. " +
***************
*** 553,556 ****
--- 587,597 ----
          }
  
+ 		try {
+ 			alreadyInTransaction = !(myConnection.getAutoCommit());
+ 		} catch (DBException ex) {
+ 			throw new DataException("Error getting Database" +
+ 					" Connection transaction parameter for BLOB Retrieval", ex);
+ 		}
+ 
  		// if running Oracle, use Oracle specific methods because of Oracle's
  		// incompatibility with standard jdbc LOB mothods
***************
*** 617,620 ****
--- 658,667 ----
          }
  
+ 		try {
+ 			alreadyInTransaction = !(myConnection.getAutoCommit());
+ 		} catch (DBException ex) {
+ 			throw new DataException("Error getting Database" +
+ 					" Connection transaction parameter for BLOB Retrieval", ex);
+ 		}
  
          PreparedStatement preparedStatement = prepUpdate(getCriteria(), fieldName, myConnection);
***************
*** 649,654 ****
                  log.debug("Closing and releasing LOB connection");
              }
!             myConnection.release();
!             myConnection = null;
          }
      }
--- 696,708 ----
                  log.debug("Closing and releasing LOB connection");
              }
! 			try {
! 				if (!alreadyInTransaction && myConnection.supportsTransactions()) {
! 					myConnection.release();
! 				}
! 			} catch (DBException ex) {
! //				throw new DataException("Error getting Database" +
! //						" Connection transaction parameter for BLOB Retrieval", ex);
! 			}
! 			myConnection = null;
          }
      }
***************
*** 764,767 ****
--- 818,824 ----
       * statement</b>
       * @throws DataException upon error
+      * 
+      * Modify by Yves Henri AMAIZO <amy_amaizo at compuserve.com>
+      * @since $DatabaseSchema  $Date$
       */
      protected void prepSelectResultSet(JDBCDataObject baseObject,
***************
*** 773,777 ****
              prepStatement.append(fieldName);
              prepStatement.append(" from ");
!             prepStatement.append(baseObject.getJDBCMetaData().getTargetTable());
              String whereClause = JDBCUtil.getInstance().buildWhereClause(baseObject, false);
              prepStatement.append(whereClause);
--- 830,834 ----
              prepStatement.append(fieldName);
              prepStatement.append(" from ");
!             prepStatement.append(baseObject.getJDBCMetaData().getTargetSQLTable(baseObject.getDataContext()));
              String whereClause = JDBCUtil.getInstance().buildWhereClause(baseObject, false);
              prepStatement.append(whereClause);
***************
*** 805,808 ****
--- 862,868 ----
       * @return a created PreparedStatement object
       * @throws DataException
+      * 
+      * Modify by Yves Henri AMAIZO <amy_amaizo at compuserve.com>
+      * @since $DatabaseSchema  $Date$
       */
      protected PreparedStatement prepUpdate(JDBCDataObject baseObject,
***************
*** 816,820 ****
              try {
                  prepStatement.append("UPDATE ");
!                 prepStatement.append(baseObject.getJDBCMetaData().getTargetTable());
                  prepStatement.append(" SET ");
                  prepStatement.append(fieldName);
--- 876,880 ----
              try {
                  prepStatement.append("UPDATE ");
!                 prepStatement.append(baseObject.getJDBCMetaData().getTargetSQLTable(baseObject.getDataContext()));
                  prepStatement.append(" SET ");
                  prepStatement.append(fieldName);
***************
*** 836,840 ****
  
          try {
-             boolean alreadyInTransaction = !(theConnection.getAutoCommit());
              boolean success = false;
  
--- 896,899 ----
***************
*** 1004,1008 ****
  					data.close();
  					// release the row lock that the select for update created
! 					myConnection.commit();
  				}
  				else {
--- 1063,1069 ----
  					data.close();
  					// release the row lock that the select for update created
! 					if (!alreadyInTransaction && myConnection.supportsTransactions()) {
! 						myConnection.commit();
! 					}
  				}
  				else {
***************
*** 1096,1100 ****
  				data.close();
  				// release the row lock that the select for update created
! 				myConnection.commit();
  			}
  			else {
--- 1157,1163 ----
  				data.close();
  				// release the row lock that the select for update created
! 				if (!alreadyInTransaction && myConnection.supportsTransactions()) {
! 					myConnection.commit();
! 				}
  			}
  			else {
***************
*** 1186,1190 ****
  				data.close();
  				// release the row lock that the select for update created
! 				myConnection.commit();
  			}
  			else {
--- 1249,1255 ----
  				data.close();
  				// release the row lock that the select for update created
! 				if (!alreadyInTransaction && myConnection.supportsTransactions()) {
! 					myConnection.commit();
! 				}
  			}
  			else {
***************
*** 1222,1225 ****
--- 1287,1293 ----
  	 * @param theConnection an already allocated DBConnection object
  	 * @throws DataException
+      * 
+      * Modify by Yves Henri AMAIZO <amy_amaizo at compuserve.com>
+      * @since $DatabaseSchema  $Date$
  	 */
  	private void oraclePrepUpdateEmptyLob (JDBCDataObject baseObject,
***************
*** 1233,1237 ****
  			try {
  				prepStatement.append("UPDATE ");
! 				prepStatement.append(baseObject.getJDBCMetaData().getTargetTable());
  				prepStatement.append(" SET ");
  				prepStatement.append(fieldName);
--- 1301,1305 ----
  			try {
  				prepStatement.append("UPDATE ");
! 				prepStatement.append(baseObject.getJDBCMetaData().getTargetSQLTable(baseObject.getDataContext()));
  				prepStatement.append(" SET ");
  				prepStatement.append(fieldName);
***************
*** 1266,1269 ****
--- 1334,1340 ----
  	 * @param theConnection an already allocated DBConnection object
  	 * @throws DataException
+      * 
+      * Modify by Yves Henri AMAIZO <amy_amaizo at compuserve.com>
+      * @since $DatabaseSchema  $Date$
  	 */
  	private void oraclePrepUpdateNullClob (JDBCDataObject baseObject,
***************
*** 1277,1281 ****
  			try {
  				prepStatement.append("UPDATE ");
! 				prepStatement.append(baseObject.getJDBCMetaData().getTargetTable());
  				prepStatement.append(" SET ");
  				prepStatement.append(fieldName);
--- 1348,1352 ----
  			try {
  				prepStatement.append("UPDATE ");
! 				prepStatement.append(baseObject.getJDBCMetaData().getTargetSQLTable(baseObject.getDataContext()));
  				prepStatement.append(" SET ");
  				prepStatement.append(fieldName);
***************
*** 1305,1308 ****
--- 1376,1382 ----
  	 * @param theConnection an already allocated DBConnection object
  	 * @throws DataException
+      * 
+      * Modify by Yves Henri AMAIZO <amy_amaizo at compuserve.com>
+      * @since $DatabaseSchema  $Date$
  	 */
  	protected void oraclePrepSelectForUpdate (JDBCDataObject baseObject,
***************
*** 1314,1318 ****
  			prepStatement.append(fieldName);
  			prepStatement.append(" from ");
! 			prepStatement.append(baseObject.getJDBCMetaData().getTargetTable());
  			String whereClause = JDBCUtil.getInstance().buildWhereClause(baseObject, false);
  			prepStatement.append(whereClause);
--- 1388,1392 ----
  			prepStatement.append(fieldName);
  			prepStatement.append(" from ");
! 			prepStatement.append(baseObject.getJDBCMetaData().getTargetSQLTable(baseObject.getDataContext()));
  			String whereClause = JDBCUtil.getInstance().buildWhereClause(baseObject, false);
  			prepStatement.append(whereClause);
***************
*** 1330,1335 ****
  						"  Check DBConnection log for details");
  			}
! 
! 			theConnection.setAutoCommit(false);
  			theConnection.execute();
  
--- 1404,1410 ----
  						"  Check DBConnection log for details");
  			}
! 			if (!alreadyInTransaction && theConnection.supportsTransactions()) {
! 				theConnection.setAutoCommit(false);
! 			}
  			theConnection.execute();
  
***************
*** 1342,1344 ****
  	}
  
! }
\ No newline at end of file
--- 1417,1419 ----
  	}
  
! }

Index: JdbcPersistenceManager.java
===================================================================
RCS file: /home/javacorp/.cvs/expresso/expresso/expresso-web/WEB-INF/src/com/jcorporate/expresso/core/dataobjects/jdbc/JdbcPersistenceManager.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** JdbcPersistenceManager.java	11 Feb 2004 06:14:06 -0000	1.2
--- JdbcPersistenceManager.java	18 Sep 2004 00:05:41 -0000	1.3
***************
*** 101,104 ****
--- 101,105 ----
          password = null;
          configName = null;
+         configure(newConfig);
      }
  
***************
*** 141,143 ****
          return configName;
      }
! }
\ No newline at end of file
--- 142,144 ----
          return configName;
      }
! }

Index: JoinedDataObject.java
===================================================================
RCS file: /home/javacorp/.cvs/expresso/expresso/expresso-web/WEB-INF/src/com/jcorporate/expresso/core/dataobjects/jdbc/JoinedDataObject.java,v
retrieving revision 1.30
retrieving revision 1.31
diff -C2 -d -r1.30 -r1.31
*** JoinedDataObject.java	16 Sep 2004 19:48:38 -0000	1.30
--- JoinedDataObject.java	18 Sep 2004 00:05:41 -0000	1.31
***************
*** 88,91 ****
--- 88,92 ----
  import com.jcorporate.expresso.services.dbobj.Setup;
  import org.apache.log4j.Logger;
+ import org.apache.oro.text.regex.Pattern;
  
  import java.util.ArrayList;
***************
*** 117,120 ****
--- 118,124 ----
   * @author Michael Rimov
   * @version $Revision$ on  $Date$
+  *
+  * Modify by Yves Henri AMAIZO <amy_amaizo at compuserve.com>
+  * @since $DatabaseSchema  $Date$
   */
  public class JoinedDataObject implements DataObject, Defineable, Securable, NestableDataObject {
***************
*** 1156,1161 ****
                  myStatement.append("SELECT ");
                  myStatement.append(getDistinct(myPool));
!                 myStatement.append("COUNT( " + primaryObject.getJDBCMetaData().getTargetTable() + "."
!                                    + keymetadata.getName() +") FROM ");
              }
  
--- 1160,1165 ----
                  myStatement.append("SELECT ");
                  myStatement.append(getDistinct(myPool));
! 				myStatement.append("COUNT( " + primaryObject.getJDBCMetaData().getTargetSQLTable(primaryObject.getDataContext()) + "."
! 								   + keymetadata.getName() +") FROM ");
              }
  
***************
*** 1351,1354 ****
--- 1355,1361 ----
       * @return ArrayList of JoinedDataObjects
       * @throws DBException upon database access error
+      *
+      * Modify by Yves Henri AMAIZO <amy_amaizo at compuserve.com>
+      * @since $DatabaseSchema  $Date$
       */
      public ArrayList searchAndRetrieveList(String sortOrder)
***************
*** 1398,1405 ****
                  JDBCObjectMetaData metadata = oneObj.getJDBCMetaData();
  
!                 ArrayList retrievedFieldList = (ArrayList) rtrvListByTable.get(metadata.getTargetTable());
                  if (retrievedFieldList == null) {
                      retrievedFieldList = new ArrayList();
!                     rtrvListByTable.put(metadata.getTargetTable(), retrievedFieldList);
                  }
  
--- 1405,1412 ----
                  JDBCObjectMetaData metadata = oneObj.getJDBCMetaData();
  
!                 ArrayList retrievedFieldList = (ArrayList) rtrvListByTable.get(metadata.getTargetSQLTable(oneObj.getDataContext()));
                  if (retrievedFieldList == null) {
                      retrievedFieldList = new ArrayList();
! 					rtrvListByTable.put(metadata.getTargetSQLTable(oneObj.getDataContext()), retrievedFieldList);
                  }
  
***************
*** 1538,1542 ****
                      JDBCObjectMetaData objectMetadata = oneObj.getJDBCMetaData();
  
!                     ArrayList retrievedFieldList = (ArrayList) rtrvListByTable.get(objectMetadata.getTargetTable());
  
  
--- 1545,1549 ----
                      JDBCObjectMetaData objectMetadata = oneObj.getJDBCMetaData();
  
! 					ArrayList retrievedFieldList = (ArrayList) rtrvListByTable.get(objectMetadata.getTargetSQLTable(oneObj.getDataContext()));
  
  
***************
*** 1551,1559 ****
                              } catch (DBException de) {
                                  String myName = (thisClass + "searchAndRetrieve()");
!                                 throw new DBException(myName +
!                                         ":Error retrieving field '" +
!                                         objectMetadata.getTargetTable() +
!                                         "." + fieldName + "'",
!                                         de);
                              }
  
--- 1558,1566 ----
                              } catch (DBException de) {
                                  String myName = (thisClass + "searchAndRetrieve()");
! 								throw new DBException(myName +
! 										":Error retrieving field '" +
! 										objectMetadata.getTargetSQLTable(oneObj.getDataContext()) +
! 										"." + fieldName + "'",
! 										de);
                              }
  
***************
*** 1621,1624 ****
--- 1628,1634 ----
       *
       * @throws DBException upon data access error
+      *
+      * Modify by Yves Henri AMAIZO <amy_amaizo at compuserve.com>
+      * @since $DatabaseSchema  $Date$
       */
      protected String selectFieldString(JDBCDataObject oneObj, String fieldName)
***************
*** 1626,1630 ****
          checkInitialized();
          return StringUtil.replaceStringOnce(oneObj.selectFieldString(fieldName),
!                 fieldName, oneObj.getJDBCMetaData().getTargetTable() + "." + fieldName);
      }
      /* selectFieldString(String) */
--- 1636,1640 ----
          checkInitialized();
          return StringUtil.replaceStringOnce(oneObj.selectFieldString(fieldName),
!                 fieldName, oneObj.getJDBCMetaData().getTargetSQLTable(oneObj.getDataContext()) + "." + fieldName);
      }
      /* selectFieldString(String) */
***************
*** 1766,1769 ****
--- 1776,1782 ----
       *
       * @throws DBException
+      *
+      * Modify by Yves Henri AMAIZO <amy_amaizo at compuserve.com>
+      * @since $DatabaseSchema  $Date$
       */
      private String buildJoin(String leftShortName, String leftColumn,
***************
*** 1806,1812 ****
              }
  
!            buffer.append(rightDBObj.getJDBCMetaData().getTargetTable());
!            buffer.append(" ON (");
!            boolean addAnd = false;
  
             for (int i=0; i<leftCols.size(); i++) {
--- 1819,1832 ----
              }
  
! 			buffer.append(rightDBObj.getJDBCMetaData().getTargetSQLTable(rightDBObj.getDataContext()));
!            buffer.append(" ON ");
! 			buffer.append(leftDBObj.getJDBCMetaData().getTargetSQLTable(leftDBObj.getDataContext()));
!            buffer.append(".");
!            buffer.append(leftColumn);
!            buffer.append(" = ");
! 			buffer.append(rightDBObj.getJDBCMetaData().getTargetSQLTable(rightDBObj.getDataContext()));
!            buffer.append(".");
!            buffer.append(rightColumn);
!            buffer.append(" ");
  
             for (int i=0; i<leftCols.size(); i++) {
***************
*** 1941,1944 ****
--- 1961,1967 ----
       * @return java.lang.String
       * @throws DataException upon construction error
+      *
+      * Modify by Yves Henri AMAIZO <amy_amaizo at compuserve.com>
+      * @since $DatabaseSchema  $Date$
       */
      protected String buildFromClause() throws DataException {
***************
*** 2033,2037 ****
                      definedSet.add(leftAlias);
                      JDBCDataObject oneObj = (JDBCDataObject)this.myDataObjects.get(leftAlias);
!                     fsb.append(oneObj.getJDBCMetaData().getTargetTable());
                      needComma = true;
  
--- 2056,2060 ----
                      definedSet.add(leftAlias);
                      JDBCDataObject oneObj = (JDBCDataObject)this.myDataObjects.get(leftAlias);
! 					fsb.append(oneObj.getJDBCMetaData().getTargetSQLTable(oneObj.getDataContext()));
                      needComma = true;
  
***************
*** 2064,2068 ****
                  if (firstJoin) {
                      JDBCDataObject oneObj = (JDBCDataObject)this.myDataObjects.get(relation.getLocalAlias());
!                     fsb.append(oneObj.getJDBCMetaData().getTargetTable());
                      firstJoin = false;
                  }
--- 2087,2091 ----
                  if (firstJoin) {
                      JDBCDataObject oneObj = (JDBCDataObject)this.myDataObjects.get(relation.getLocalAlias());
! 					fsb.append(oneObj.getJDBCMetaData().getTargetSQLTable(oneObj.getDataContext()));
                      firstJoin = false;
                  }
***************
*** 2089,2092 ****
--- 2112,2118 ----
       * @return java.lang.String
       * @throws DBException if there's an error creating the string.
+      *
+      * Modify by Yves Henri AMAIZO <amy_amaizo at compuserve.com>
+      * @since $DatabaseSchema  $Date$
       */
      protected String buildSelectFieldsString() throws DBException {
***************
*** 2109,2113 ****
  
  
!                 fsb.append(obj.getJDBCMetaData().getTargetTable());
                  fsb.append(".");
                  fsb.append(location[1]);
--- 2135,2139 ----
  
  
! 				fsb.append(obj.getJDBCMetaData().getTargetSQLTable(obj.getDataContext()));
                  fsb.append(".");
                  fsb.append(location[1]);
***************
*** 2129,2132 ****
--- 2155,2161 ----
       * @return java.lang.String
       * @throws DataException upon error
+      *
+      * Modify by Yves Henri AMAIZO <amy_amaizo at compuserve.com>
+      * @since $DatabaseSchema  $Date$
       */
      protected String buildUpdateFieldString() throws DataException {
***************
*** 2158,2162 ****
                      }
                      String location[] = metadata.getObjectAndField(oneFieldName);
!                     sqlCommand.append( ((JDBCDataObject)this.myDataObjects.get(location[0])).getJDBCMetaData().getTargetTable());
                      sqlCommand.append(".");
                      sqlCommand.append(oneField.getName());
--- 2187,2191 ----
                      }
                      String location[] = metadata.getObjectAndField(oneFieldName);
! 					sqlCommand.append( ((JDBCDataObject)this.myDataObjects.get(location[0])).getJDBCMetaData().getTargetSQLTable(((JDBCDataObject)this.myDataObjects.get(location[0])).getDataContext()));
                      sqlCommand.append(".");
                      sqlCommand.append(oneField.getName());
***************
*** 2179,2182 ****
--- 2208,2214 ----
       * @return the order by string to append to the select statement.
       * @throws DBException
+      *
+      * Modify by Yves Henri AMAIZO <amy_amaizo at compuserve.com>
+      * @since $DatabaseSchema  $Date$
       */
      protected String buildOrderByString(String sortKeys) throws DBException {
***************
*** 2205,2209 ****
                  }
  
!                 fsb.append(obj.getJDBCMetaData().getTargetTable());
                  fsb.append(".");
                  fsb.append(location[1]);
--- 2237,2241 ----
                  }
  
!                 fsb.append(obj.getJDBCMetaData().getTargetSQLTable(obj.getDataContext()));
                  fsb.append(".");
                  fsb.append(location[1]);
***************
*** 2227,2230 ****
--- 2259,2265 ----
       * @throws DBException upon error
       * @return java.lang.String.
+      *
+      * Modify by Yves Henri AMAIZO <amy_amaizo at compuserve.com>
+      * @since $DatabaseSchema  $Date$
       */
      protected String buildWhereClauseBuffer(boolean useAllFields, FastStringBuffer myStatement)
***************
*** 2245,2249 ****
                  oneObj = (JDBCDataObject)this.myDataObjects.get(oneAlias);
  
!                 byTableName.put(oneObj.getJDBCMetaData().getTargetTable(), oneObj);
  
                  for (Iterator i = oneObj.getMetaData().getFieldListArray().iterator(); i.hasNext();) {
--- 2280,2284 ----
                  oneObj = (JDBCDataObject)this.myDataObjects.get(oneAlias);
  
! 				byTableName.put(oneObj.getJDBCMetaData().getTargetSQLTable(oneObj.getDataContext()), oneObj);
  
                  for (Iterator i = oneObj.getMetaData().getFieldListArray().iterator(); i.hasNext();) {
***************
*** 2252,2257 ****
                      DataFieldMetaData fieldMetaData = oneObj.getFieldMetaData(fieldName);
                      if (!fieldMetaData.isVirtual() && !fieldMetaData.isLongObjectType()) {
!                         fields.add(oneObj.getJDBCMetaData().getTargetTable() + "." +
!                                    fieldName);
                      }
                  } /* for each field */
--- 2287,2292 ----
                      DataFieldMetaData fieldMetaData = oneObj.getFieldMetaData(fieldName);
                      if (!fieldMetaData.isVirtual() && !fieldMetaData.isLongObjectType()) {
! 						fields.add(oneObj.getJDBCMetaData().getTargetSQLTable(oneObj.getDataContext()) + "." +
! 								   fieldName);
                      }
                  } /* for each field */
***************
*** 2262,2266 ****
                  String oneAlias = (String)eachAlias.next();
                  oneObj = (JDBCDataObject)this.myDataObjects.get(oneAlias);
!                 byTableName.put(oneObj.getJDBCMetaData().getTargetTable(), oneObj);
  
                  for (Iterator i = oneObj.getMetaData().getKeyFieldListArray().iterator();
--- 2297,2301 ----
                  String oneAlias = (String)eachAlias.next();
                  oneObj = (JDBCDataObject)this.myDataObjects.get(oneAlias);
!                 byTableName.put(oneObj.getJDBCMetaData().getTargetSQLTable(oneObj.getDataContext()), oneObj);
  
                  for (Iterator i = oneObj.getMetaData().getKeyFieldListArray().iterator();
***************
*** 2270,2275 ****
                      DataFieldMetaData fieldMetaData = oneObj.getFieldMetaData(fieldName);
                      if (!fieldMetaData.isVirtual() && !fieldMetaData.isBinaryObjectType()) {
!                         fields.add(oneObj.getJDBCMetaData().getTargetTable() + "." +
!                                 fieldName);
                      }
                  } /* for each field */
--- 2305,2310 ----
                      DataFieldMetaData fieldMetaData = oneObj.getFieldMetaData(fieldName);
                      if (!fieldMetaData.isVirtual() && !fieldMetaData.isBinaryObjectType()) {
! 						fields.add(oneObj.getJDBCMetaData().getTargetSQLTable(oneObj.getDataContext()) + "." +
! 								fieldName);
                      }
                  } /* for each field */
***************
*** 2378,2423 ****
                  if (sJdbcUtil.containsWildCards(oneObj,oneFieldValue)) {
                      if (caseSensitiveQuery) {
!                         myStatement.append(objMetadata.getTargetTable() + "." +
!                                 oneFieldName);
                          myStatement.append(" LIKE ");
                          myStatement.append(oneFieldValue);
                      } else {
                          myStatement.append("UPPER(");
!                         myStatement.append(objMetadata.getTargetTable() + "." +
!                                 oneFieldName);
                          myStatement.append(") LIKE ");
                          myStatement.append(oneFieldValue.toUpperCase());
                      }
                  } else if (rangeString != null) {
!                         myStatement.append(objMetadata.getTargetTable() + "." +
!                                            oneFieldName);
!                         myStatement.append(" " + rangeString + " ");
!                         myStatement.append(oneFieldValue);
!                 } else if ((oneFieldValue.trim().equalsIgnoreCase("is null")) ||
!                         (oneFieldValue.trim().equalsIgnoreCase(
!                                 "is not null"))) {
!                     myStatement.append(objMetadata.getTargetTable() + "." +
!                             oneFieldName);
!                     myStatement.append(" ");
!                     myStatement.append(oneFieldValue.trim());
                  } else {
!                     if (caseSensitiveQuery) {
!                         myStatement.append(objMetadata.getTargetTable() + "." +
                                  oneFieldName);
                          myStatement.append(" = ");
                          myStatement.append(oneFieldValue);
                      } else {
!                         DataFieldMetaData dfmd = oneDataField.getFieldMetaData();
!                         if (dfmd.isQuotedTextType()) {
!                             myStatement.append("UPPER(");
!                             myStatement.append(objMetadata.getTargetTable() + "." +
!                                 oneFieldName);
!                             myStatement.append(") = ");
!                             myStatement.append(oneFieldValue.toUpperCase());
!                         } else {
!                             myStatement.append(objMetadata.getTargetTable() + "." +
!                                 oneFieldName);
                              myStatement.append(" = ");
                              myStatement.append(oneFieldValue);
                          }
                      }
--- 2413,2459 ----
                  if (sJdbcUtil.containsWildCards(oneObj,oneFieldValue)) {
                      if (caseSensitiveQuery) {
! 						myStatement.append(objMetadata.getTargetSQLTable(oneObj.getDataContext()) + "." +
! 								oneFieldName);
                          myStatement.append(" LIKE ");
                          myStatement.append(oneFieldValue);
                      } else {
                          myStatement.append("UPPER(");
! 						myStatement.append(objMetadata.getTargetSQLTable(oneObj.getDataContext()) + "." +
! 								oneFieldName);
                          myStatement.append(") LIKE ");
                          myStatement.append(oneFieldValue.toUpperCase());
                      }
                  } else if (rangeString != null) {
! 					myStatement.append(objMetadata.getTargetSQLTable(oneObj.getDataContext()) + "." +
! 							oneFieldName);
!                     myStatement.append(" " + rangeString + " ");
!                     myStatement.append(oneFieldValue);
                  } else {
!                     if ((oneFieldValue.trim().equalsIgnoreCase("is null")) ||
!                         (oneFieldValue.trim().equalsIgnoreCase("is not null"))) {
!                         myStatement.append(objMetadata.getTargetSQLTable(oneObj.getDataContext()) + "." +
                                  oneFieldName);
                          myStatement.append(" = ");
                          myStatement.append(oneFieldValue);
                      } else {
!                         if (caseSensitiveQuery) {
!                             myStatement.append(objMetadata.getTargetSQLTable(oneObj.getDataContext()) + "." +
!                                     oneFieldName);
                              myStatement.append(" = ");
                              myStatement.append(oneFieldValue);
+                         } else {
+                             DataFieldMetaData dfmd = oneDataField.getFieldMetaData();
+                             if (dfmd.isQuotedTextType()) {
+                                 myStatement.append("UPPER(");
+                                 myStatement.append(objMetadata.getTargetSQLTable(oneObj.getDataContext()) + "." +
+                                         oneFieldName);
+                                 myStatement.append(") = ");
+                                 myStatement.append(oneFieldValue.toUpperCase());
+                             } else {
+                                 myStatement.append(objMetadata.getTargetSQLTable(oneObj.getDataContext()) + "." +
+                                         oneFieldName);
+                                 myStatement.append(" = ");
+                                 myStatement.append(oneFieldValue);
+                             }
                          }
                      }
***************
*** 2610,2613 ****
--- 2646,2679 ----
          this.setDataContext(setupTablesContext);
      }
+ 
+ 	/**
+ 	 * Set a regular expression "mask" for this base data object that specifies it's
+ 	 * valid values.  The mask should already be compiled by the regular
+ 	 * expression compiler
+ 	 * @param newMask The compiled regular expression mask
+ 	 *
+ 	 */
+ 	public void setGlobalMask(Pattern newMask) {
+ 		this.setGlobalMask(newMask);
+ 	}
+ 
+ 	/**
+ 	 * Get the compiled regular expression for this base data object.
+ 	 * @return the precompiled regular expression mask
+ 	 */
+ 	public Pattern getGlobalMask() {
+ 		return this.getGlobalMask();
+ 	}
+ 
+ 
+ 	/**
+ 	 * Return boolean if the data object has a mask set
+ 	 *
+ 	 * @return True if the data object mask is set, else false if it is not
+ 	 */
+ 	public boolean isGlobalMasked() {
+ 		return this.isGlobalMasked();
+ 	} /* isMasked() */
+ 
  
  }

Index: JoinedDataObjectMetaData.java
===================================================================
RCS file: /home/javacorp/.cvs/expresso/expresso/expresso-web/WEB-INF/src/com/jcorporate/expresso/core/dataobjects/jdbc/JoinedDataObjectMetaData.java,v
retrieving revision 1.17
retrieving revision 1.18
diff -C2 -d -r1.17 -r1.18
*** JoinedDataObjectMetaData.java	17 Jul 2004 19:42:57 -0000	1.17
--- JoinedDataObjectMetaData.java	18 Sep 2004 00:05:41 -0000	1.18
***************
*** 90,93 ****
--- 90,96 ----
   * @author Michael Rimov
   * @version $Revision$ on  $Date$
+  *
+  * Modify by Yves Henri AMAIZO <amy_amaizo at compuserve.com>
+  * @since $DatabaseSchema  $Date$
   */
  public class JoinedDataObjectMetaData implements DataObjectMetaData {
***************
*** 949,952 ****
--- 952,993 ----
      }
  
+ 	/**
+ 	 * Return the Schema Name of the current database object.
+ 	 *
+ 	 * @return String: Schema name of the target table of this database object
+ 	 * @throws DataException upon error
+ 	 *
+ 	 * author Yves Henri AMAIZO <amy_amaizo at compuserve.com>
+ 	 */
+ 	public String getTargetDbSchema() {
+ 		return this.getPrimaryDataObject().getMetaData().getTargetDbSchema();
+ 	} /* getTargetDbSchema() */
+ 
+ 	/**
+ 	 * Return the Schema Name of the current database object.
+ 	 *
+ 	 * @return String: Schema name of the target table of this database object
+ 	 * @throws DataException upon error
+ 	 *
+ 	 * author Yves Henri AMAIZO <amy_amaizo at compuserve.com>
+ 	 */
+ 	public String getTargetDbCatalog() {
+ 		return this.getPrimaryDataObject().getMetaData().getTargetDbCatalog();
+ 	} /* getTargetDbSchema() */
+ 
+ 	/**
+ 	 * Set the target table for this DBObject. Note that an object
+ 	 * can span tables by the use of virtual fields, but that this table
+ 	 * is the default table for the object.
+ 	 *
+ 	 * @param    theTable Table for this object
+ 	 * @throws DBException
+ 	 *
+ 	 * author Yves Henri AMAIZO <amy_amaizo at compuserve.com>
+ 	 */
+ 	public String getTargetSQLTable(String dataContext) throws DataException {
+ 		return this.getPrimaryDataObject().getMetaData().getTargetSQLTable(this.getPrimaryDataObject().getDataContext());
+ 	}
+ 
      /**
       * <p>This convenience method iterates through all the
***************
*** 1039,1042 ****
--- 1080,1086 ----
       * @param joinType the type of Join
       * @throws DBException upon error
+      *
+      * Modify by Yves Henri AMAIZO <amy_amaizo at compuserve.com>
+      * @since $DatabaseSchema  $Date$
       */
      public void setForeignKey(String shortName, String foreignKey,
***************
*** 1069,1075 ****
  
          if (joinType == JoinedDataObject.UNSPECIFIED_JOIN) {
!             sqlRelationList.add(foreignDBObj.getJDBCMetaData().getTargetTable() + "." + foreignKey +
!                                 " = " + primaryDBObj.getJDBCMetaData().getTargetTable() + "." +
!                                 primaryKey);
          }
  
--- 1113,1119 ----
  
          if (joinType == JoinedDataObject.UNSPECIFIED_JOIN) {
! 			sqlRelationList.add(foreignDBObj.getJDBCMetaData().getTargetSQLTable(foreignDBObj.getDataContext()) + "." + foreignKey +
! 								" = " + primaryDBObj.getJDBCMetaData().getTargetSQLTable(foreignDBObj.getDataContext()) + "." +
! 								primaryKey);
          }
  

Index: JDBCUtil.java
===================================================================
RCS file: /home/javacorp/.cvs/expresso/expresso/expresso-web/WEB-INF/src/com/jcorporate/expresso/core/dataobjects/jdbc/JDBCUtil.java,v
retrieving revision 1.27
retrieving revision 1.28
diff -C2 -d -r1.27 -r1.28
*** JDBCUtil.java	21 Mar 2004 03:27:13 -0000	1.27
--- JDBCUtil.java	18 Sep 2004 00:05:41 -0000	1.28
***************
*** 75,85 ****
--- 75,90 ----
  import com.jcorporate.expresso.core.misc.ConfigurationException;
  import com.jcorporate.expresso.core.misc.StringUtil;
+ import com.jcorporate.expresso.core.db.TypeMapper;
  import com.jcorporate.expresso.core.security.filters.Filter;
+ import com.jcorporate.expresso.core.security.filters.FilterManager;
  import com.jcorporate.expresso.kernel.util.FastStringBuffer;
  import org.apache.commons.collections.LRUMap;
  import org.apache.log4j.Logger;
  
+ import java.sql.CallableStatement;
+ import java.sql.SQLException;
  import java.text.ParseException;
  import java.text.SimpleDateFormat;
+ import java.util.ArrayList;
  import java.util.Collections;
  import java.util.Iterator;
***************
*** 775,778 ****
--- 780,791 ----
                      ") No such field as " + fieldName);
          }
+ 		boolean noTrim  = false;
+ 		if (!oneField.isMasked() && !targetObject.isGlobalMasked()) {
+ 			try {
+ 				noTrim = ConfigManager.getJdbcRequired(targetObject.getMappedDataContext()).isStringNotTrim();
+ 			} catch (ConfigurationException ce) {
+ 				throw new DataException(ce);
+ 	   	  	}
+ 		}
  
          String fieldValue = targetObject.getSerialForm(oneField);
***************
*** 787,790 ****
--- 800,812 ----
          }
  
+         if (oneField.isNumericType()) {
+             if (fieldValue.length() == 0) {
+                 return "0";
+             }
+ 
+             return fieldValue.trim();
+         } /* if a numeric type */
+ 
+ 
          if (oneField.isQuotedTextType()) {
              if (rangeString != null) {
***************
*** 794,802 ****
              String returnString = null;
              try {
                  returnValue.append("\'");
!                 returnValue.append(targetObject.getConnectionPool().getEscapeHandler()
!                         .escapeString(fieldValue.trim()));
                  returnValue.append("\'");
                  returnString = returnValue.toString();
              } finally {
                  returnValue.release();
--- 816,832 ----
              String returnString = null;
              try {
+ 				String value = "";
+ 				if (noTrim) {
+ 					value = fieldValue;
+ 				} else {
+ 					value = fieldValue.trim();
+ 				}
                  returnValue.append("\'");
! //                returnValue.append(targetObject.getConnectionPool().getEscapeHandler().escapeString(fieldValue.trim()));
! 				returnValue.append(targetObject.getConnectionPool().getEscapeHandler().escapeString(value));
                  returnValue.append("\'");
                  returnString = returnValue.toString();
+             } catch (DBException e) {
+           		throw new DataException (e);
              } finally {
                  returnValue.release();
***************
*** 870,880 ****
          }
  
!         if (oneField.isNumericType()) {
!             if (fieldValue.length() == 0) {
!                 return "0";
!             }
!         }
  
!         return fieldValue.trim();
      } /* quoteIfNeeded(String) */
  
--- 900,915 ----
          }
  
! 		if (oneField.isNumericType()) {
! 			if (fieldValue.length() == 0) {
! 				return "0";
! 			}
! 		}
  
! 		if (noTrim) {
! 			return fieldValue;
! 		} else {
! 
! 			return fieldValue.trim();
! 		}
      } /* quoteIfNeeded(String) */
  
***************
*** 906,909 ****
      } /* containsWildCards(String) */
  
  
- }
\ No newline at end of file
--- 941,1186 ----
      } /* containsWildCards(String) */
  
+ 	/**
+ 	 * Build and return a FastStringBuffer ring consisting of an SQL 'where' clause
+ 	 * using the current field values as criteria for the search. See
+ 	 * setCustomWhereClause for information on specifying a more complex where clause.
+ 	 *
+ 	 * @param criteria the JDBCDataObject to build from
+ 	 * @param useAllFields True if all fields are to be used,
+ 	 *             false for only key fields
+ 	 * @param allocatedBuffer - An already allocated FastStringBuffer to fill out.
+ 	 * This allows for compatability with, for example, object pools.
+ 	 * @throws  DataException upon error
+ 	 * @return A FastStringBuffer containing the "where" clause for the SQL statement
+ 	 */
+ 	public void buildStoreProcedureCallableStatement(JDBCDataObject criteria, CallableStatement myCallableStatement)
+ 	        throws DataException {
+ 	    Iterator fieldsToUse = null;
+ 	    FastStringBuffer myStatement = FastStringBuffer.getInstance();
+ 
+         fieldsToUse = criteria.getMetaData().getFieldListArray().iterator();
+ 
+ 	    /* Now go thru each field - if it is non-empty, add it's criteria */
+ 
+ 	    boolean inField = false;
+ 		boolean outField = false;
+ 	    DataFieldMetaData oneField = null;
+ 	    String oneFieldName = null;
+ 	    String oneFieldValue = null;
+ 	    boolean skipText = false;
+ 	    boolean postgresql = false;
+ 		TypeMapper typeMapper = null;
+ 
+ 	    try {
+ 	        ConfigJdbc myConfig = ConfigManager.getJdbcRequired(criteria.getMappedDataContext());
+ 	        skipText = myConfig.skipText();
+ 	        //We have to do this because postgres won't be smart enough to
+ 	        //cast floating point literals to truly a floating point value. :(
+ 	        if ("org.postgresql.Driver".equals(myConfig.getDriver())) {
+ 	            postgresql = true;
+ 	        }
+ 			typeMapper = TypeMapper.getInstance(criteria.getDataContext());
+ 		} catch (ConfigurationException ce) {
+ 			throw new DataException(ce);
+ 		} catch (DBException de) {
+ 			throw new DataException(de);
+ 		}
+ 
+ 	    boolean skipField = false;
+ 		try {
+ 
+ 	    while (fieldsToUse.hasNext()) {
+ 	        oneFieldName = (String) fieldsToUse.next();
+ 	        oneField = criteria.getFieldMetaData(oneFieldName);
+ 	        skipField = false;
+ 
+ 	        if (oneField.isVirtual()) {
+ 	            skipField = true;
+ 	        }
+ 
+ 			if (criteria.getDef().isInField(oneField.getName())) {
+ 				inField = true;
+ 			}
+ 
+ 			if (criteria.getDef().isOutField(oneField.getName())) {
+ 				outField = true;
+ 			}
+ 
+ 	        try {
+ 	            oneFieldValue = StringUtil.notNull(criteria.getDataField(oneField.getName()).asString());
+ 	        } catch (DBException ex) {
+ 	            if (ex instanceof DataException) {
+ 	                throw ((DataException) ex);
+ 	            } else {
+ 	                throw new DataException("Error getting field value", ex);
+ 	            }
+ 	        }
+ 
+ 	        String rangeString = rangeParser.denotesRange(oneFieldValue);
+ 	        if (!oneFieldValue.equals("")) {
+ 	            if (oneFieldValue.trim().equalsIgnoreCase("is null") ||
+ 	                oneFieldValue.trim().equalsIgnoreCase("is not null")) {
+ 	                ;
+ 	            } else {
+ 	                oneFieldValue = quoteIfNeeded(criteria, oneFieldName, rangeString);
+ 	            }
+ 	        }
+ 	        if (oneFieldValue == null) {
+ 	            skipField = true;
+ 	        }
+ 	        if (oneFieldValue.trim().equals("\'\'")) {
+ 	            skipField = true;
+ 	        }
+ 
+ 	        //
+ 	        //There was a TODO item asking about why \r and \n's aren't allowed
+ 	        //in text fiels here. and the reason is that the JDBC parsers expect
+ 	        //all quoted fields to be without crlf in them.  in all honesty,
+ 	        //you shouldn't be searching for a text field anyway since it's arbitrary
+ 	        //length and you SERIOUSLY dog performance by doing it that way.
+ 	        //If you must search for a text field, you can deal with cr/lf's by
+ 	        //using a prepared statement such as the LOBSupport class.
+ 	        //
+ 	        if (oneField.getTypeString().equalsIgnoreCase("text")) {
+ 	            if (skipText) {
+ 	                skipField = true;
+ 
+ 	                if (log.isDebugEnabled()) {
+ 	                    log.debug("Skipping criteria in text field '" +
+ 	                            oneFieldName + "'");
+ 	                }
+ 	            } else {
+ 	                if (oneFieldValue.indexOf("\n") > 0) {
+ 	                    oneFieldValue = StringUtil.replace(oneFieldValue, "\n",
+ 	                            "");
+ 	                }
+ 	                if (oneFieldValue.indexOf("\r") > 0) {
+ 	                    oneFieldValue = StringUtil.replace(oneFieldValue, "\r",
+ 	                            "");
+ 	                }
+ 	                if (oneFieldValue.equals("\'\'")) {
+ 	                    skipField = true;
+ 	                }
+ 	            }
+ 	        } /* if text field */
+ 
+ 	        if (oneFieldValue.trim().equals("")) {
+ 	            skipField = true;
+ 	        }
+ 	        if (!skipField) {
+ 	            if (rangeString != null) {
+ 	                String theValue = rangeString + " " + oneFieldValue;
+ 	                boolean valid = rangeParser.isValidRange(criteria.getFieldMetaData(oneField.getName()), theValue);
+ 	                if (!valid) {
+ 	                    throw new DataException("Invalid field range value: " + theValue);
+ 	                }
+ 
+ 					if (inField) {
+ 						myCallableStatement.setString(Integer.parseInt(oneFieldName), theValue);
+ 					}
+ 					if (outField) {
+ 						myCallableStatement.registerOutParameter(Integer.parseInt(oneFieldName), typeMapper.getJavaSQLType(oneField.getTypeString()));
+ 					}
+ 	            } else if ((oneFieldValue.trim().equalsIgnoreCase("is null")) ||(oneFieldValue.trim().equalsIgnoreCase("is not null"))) {
+ 							if (inField) {
+ 								myCallableStatement.setString(Integer.parseInt(oneFieldName), oneFieldValue.trim());
+ 							}
+ 							if (outField) {
+ 								myCallableStatement.registerOutParameter(Integer.parseInt(oneFieldName), typeMapper.getJavaSQLType(oneField.getTypeString()));
+ 							}
+ 	            } else if (oneField.isDateType()) {
+ 	                Object tmpData = null;
+ 	                try {
+ 	                    tmpData = criteria.getDataField(oneFieldName).getValue();
+ 	                } catch (DBException ex) {
+ 	                    if (ex instanceof DataException) {
+ 	                        throw ((DataException) ex);
+ 	                    } else {
+ 	                        throw new DataException("Error getting field value", ex);
+ 	                    }
+ 	                }
+ 	                String data;
+ 	                //
+ 	                //FIXME allow for appropriate support of other data types.
+ 	                //
+ 	                if (tmpData == null) {
+ 	                    data = null;
+ 	                } else if (tmpData instanceof String) {
+ 	                    data = (String) tmpData;
+ 	                } else {
+ 	                    data = tmpData.toString();
+ 	                }
+ 
+ 	                if (data == null || (data.length() == 0)) {
+ 						if (inField) {
+ 							myCallableStatement.setString(Integer.parseInt(oneFieldName), "null");
+ 						}
+ 	                } else {
+ 						myCallableStatement.setString(Integer.parseInt(oneFieldName), JDBCUtil.getInstance().formatDateTime(criteria, oneField.getName()));
+ 	                  }
+ 					if (outField) {
+ 						myCallableStatement.registerOutParameter(Integer.parseInt(oneFieldName), typeMapper.getJavaSQLType(oneField.getTypeString()));
+ 					}
+ 	            } else if (oneField.isFloatingPointType()) {
+ 	                //Floating point types have to be searched within a certain
+ 	                //precision.  Thus we compare the ABS to the less than
+ 	                //the field precision.
+ 	                myStatement.append("ABS(");
+ 	                myStatement.append(oneFieldName);
+ 	                myStatement.append(" - ");
+ 	                if (postgresql) {
+ 	                    myStatement.append(" CAST (");
+ 	                }
+ 
+ 	                myStatement.append(oneFieldValue);
+ 	                if (postgresql) {
+ 	                    myStatement.append(" as FLOAT)");
+ 	                }
+ 	                myStatement.append(") <");
+ 	                if (postgresql) {
+ 	                    myStatement.append(" CAST (");
+ 	                }
+ 	                myStatement.append(".");
+ 	                int precision = oneField.getPrecision();
+ 	                if (precision == 0) precision = 1;
+ 	                for (int i = 0; i < oneField.getPrecision() - 1; i++) {
+ 	                    myStatement.append("0");
+ 	                }
+ 	                myStatement.append("1");
+ 	                if (postgresql) {
+ 	                    myStatement.append(" as FLOAT)");
+ 	                }
+ 					if (inField) {
+ 						myCallableStatement.setString(Integer.parseInt(oneFieldName), myStatement.toString());
+ 					}
+ 					myStatement.clear();
+ 					if (outField) {
+ 						myCallableStatement.registerOutParameter(Integer.parseInt(oneFieldName), typeMapper.getJavaSQLType(oneField.getTypeString()), oneField.getPrecision());
+ 	            	}
+ 	         	 }  else {
+ 							if (inField) {
+ 								myCallableStatement.setString(Integer.parseInt(oneFieldName), oneFieldValue);
+ 							}
+ 							if (outField) {
+ 								myCallableStatement.registerOutParameter(Integer.parseInt(oneFieldName), typeMapper.getJavaSQLType(oneField.getTypeString()));
+ 							}
+ 					}/* if (oneField.isFloatingPointType()) */
+ 
+ 	        /* if field is not skipped for some reason */
+ 				myStatement.release();
+ 				myStatement = null;
+ 	    	} /* if (!skipField) */
+ 
+ 			} /* While (for each field) */
+ 		} catch (SQLException ce) {
+ 			throw new DataException(ce);
+ 		} catch (DBException de) {
+ 		throw new DataException(de);
+ 	}
+ 	    if (log.isDebugEnabled()) {
+ 	        log.debug("Built callable statement for store procedure " );
+ 	    }
+ 	 } /* buildStoreProcedureCallableStatement(JDBCDataObject, boolean, CallableStatement) */
+ 
+ }
  

Index: JDBCExecutor.java
===================================================================
RCS file: /home/javacorp/.cvs/expresso/expresso/expresso-web/WEB-INF/src/com/jcorporate/expresso/core/dataobjects/jdbc/JDBCExecutor.java,v
retrieving revision 1.53
retrieving revision 1.54
diff -C2 -d -r1.53 -r1.54
*** JDBCExecutor.java	26 May 2004 16:17:31 -0000	1.53
--- JDBCExecutor.java	18 Sep 2004 00:05:41 -0000	1.54
***************
*** 80,89 ****
--- 80,101 ----
  import com.jcorporate.expresso.core.dbobj.NextNumber;
  import com.jcorporate.expresso.core.misc.ConfigManager;
+ import com.jcorporate.expresso.core.misc.ConfigJdbc;
  import com.jcorporate.expresso.core.misc.ConfigurationException;
+ import com.jcorporate.expresso.core.misc.StringUtil;
  import com.jcorporate.expresso.kernel.util.FastStringBuffer;
  import org.apache.log4j.Logger;
  
+ import java.sql.CallableStatement;
[...2418 lines suppressed...]
+ 	}
+ 
+ 	/**
+ 	 * Deletes an entire batch of <code>DataObject</code>s
+ 	 * @param valueObjectList A list of <code>DataObject</code>s to delete to the underlying
+ 	 * data source
+ 	 * @throws DataException upon error deleting the data source
+ 	 * @author 		Yves Henri AMAIZO
+ 	 * @version $Revision$ on  $Date$
+ 	 */
+ 	public void deleteBatch(List valueObjectList) throws DataException {
+ 		if (valueObjectList == null) {
+ 			throw new IllegalArgumentException(myName + "deleteBatch(List):  valueObjectArray was null");
+ 		}
+ 		deleteBatch(valueObjectList, false);
+ 
+ 	}
+ 
+ }
  

Index: JDBCDataObject.java
===================================================================
RCS file: /home/javacorp/.cvs/expresso/expresso/expresso-web/WEB-INF/src/com/jcorporate/expresso/core/dataobjects/jdbc/JDBCDataObject.java,v
retrieving revision 1.30
retrieving revision 1.31
diff -C2 -d -r1.30 -r1.31
*** JDBCDataObject.java	7 Jun 2004 17:46:00 -0000	1.30
--- JDBCDataObject.java	18 Sep 2004 00:05:41 -0000	1.31
***************
*** 88,91 ****
--- 88,93 ----
  import org.apache.log4j.Logger;
  
+ import java.sql.CallableStatement;
+ import java.io.InputStream;
  import java.util.ArrayList;
  import java.util.HashMap;
***************
*** 97,100 ****
--- 99,105 ----
   * @version $Revision$ on  $Date$
   * @since Expresso 5.1
+  *
+  * Modify by Yves Henri AMAIZO <amy_amaizo at compuserve.com>
+  * @since $DatabaseSchema  $Date$
   */
  
***************
*** 103,106 ****
--- 108,112 ----
      private static transient final Logger log = Logger.getLogger(JDBCDataObject.class);
  
+ 	public static int LONGBINARY_READ_DEFAULT_SIZE = 262144;
  
      /**
***************
*** 557,560 ****
--- 563,575 ----
          }
  
+ 		boolean noTrim = false;
+ 		if (!oneField.isMasked() && !isGlobalMasked()) {
+ 			try {
+ 				noTrim = ConfigManager.getJdbcRequired(this.getMappedDataContext()).isStringNotTrim();
+ 			} catch (ConfigurationException ce) {
+ 				throw new DataException(ce);
+ 		  	  }
+ 		}
+ 
          String fieldValue = getSerialForm(oneField);
  
***************
*** 568,571 ****
--- 583,591 ----
          }
  
+         /* if the field is null, we don't need to worry about quotes */
+         if (fieldValue == null) {
+             return null;
+         }
+ 
          if ((oneField.isBooleanType() || "bit".equalsIgnoreCase(oneField.getTypeString()))
                  && fieldValue.length() == 0) {
***************
*** 597,603 ****
              String returnString = null;
              try {
                  returnValue.append("\'");
!                 returnValue.append(this.getConnectionPool().getEscapeHandler()
!                         .escapeString(fieldValue.trim()));
                  returnValue.append("\'");
                  returnString = returnValue.toString();
--- 617,629 ----
              String returnString = null;
              try {
+ 				String value = "";
+ 				if (noTrim) {
+ 					value = fieldValue;
+ 				} else {
+ 					value = fieldValue.trim();
+ 				}
                  returnValue.append("\'");
! //                returnValue.append(this.getConnectionPool().getEscapeHandler().escapeString(fieldValue.trim()));
! 				returnValue.append(this.getConnectionPool().getEscapeHandler().escapeString(value));
                  returnValue.append("\'");
                  returnString = returnValue.toString();
***************
*** 655,659 ****
          }
  
!         return fieldValue.trim();
      } /* quoteIfNeeded(String) */
  
--- 681,689 ----
          }
  
! 		if (noTrim) {
! 	        return fieldValue;
! 		} else {
! 			return fieldValue.trim();
! 		}
      } /* quoteIfNeeded(String) */
  
***************
*** 709,712 ****
--- 739,745 ----
       * @throws DBException upon database communication error
       * @return connection that has already executed the search statement.
+      *
+      * Modify by Yves Henri AMAIZO <amy_amaizo at compuserve.com>
+      * @since $DatabaseSchema  $Date$
       */
      public DBConnection createAndExecuteSearch(java.util.ArrayList retrievedFieldList)
***************
*** 799,803 ****
  
              myStatement.append(" FROM ");
!             myStatement.append(myMetadata.getTargetTable());
              if (myConnection.getLimitationPosition() == DBConnection.LIMITATION_AFTER_TABLE &&
                      (offsetRecord > 0 || maxRecords > 0)) {
--- 832,836 ----
  
              myStatement.append(" FROM ");
!             myStatement.append(myMetadata.getTargetSQLTable(this.getDataContext()));
              if (myConnection.getLimitationPosition() == DBConnection.LIMITATION_AFTER_TABLE &&
                      (offsetRecord > 0 || maxRecords > 0)) {
***************
*** 889,892 ****
--- 922,926 ----
          String oneFieldValue = null;
          String oneFieldName = null;
+ 		Object tmpData = null;
  
          for (Iterator it = retrievedFieldList.iterator();
***************
*** 899,914 ****
                  //   Handle correctly date from resultSet data retrieve from Database
                  if (oneDBField.isDateType()) {
!                     oneFieldValue = getCustomStringFieldValue(myConnection,
!                             oneDBField.getName());
                  } else {
!                     oneFieldValue = myConnection.getString(i);
                  }
              } catch (DBException de) {
                  throw new DBException("Error retrieving field '" +
                          oneFieldName, de);
!             }
  
              i++;
!             myObj.set(oneFieldName, oneFieldValue);
          } /* for each retrieved field name */
  
--- 933,973 ----
                  //   Handle correctly date from resultSet data retrieve from Database
                  if (oneDBField.isDateType()) {
! 					tmpData = getCustomStringFieldValue(myConnection, oneDBField.getName());
                  } else {
! 					if (!oneDBField.isLongBinaryType() && !oneDBField.isLongCharacterType()) {
! 						if (myConnection.isStringNotTrim()) {
! 							tmpData = myConnection.getStringNoTrim(i);
! 						} else {
! 							tmpData = myConnection.getString(i);
! 						}
! 					} else {
! 						if (oneDBField.isLongBinaryType()) {
! 							tmpData = null;
! 							InputStream is = myConnection.getBinaryStream(i);
! 							if (is != null) {
! 								byte[] bstr = new byte[LONGBINARY_READ_DEFAULT_SIZE];
! 								int j = is.read(bstr);
! 								if (j > 0) {
! 									byte[] content = new byte[j];
! 									System.arraycopy(bstr, 0, content, 0, j);
! 									tmpData = content;
! 								}
! 							}
! 						} else {
! 							tmpData = myConnection.getStringNoTrim(i);
! 						  }
! 					}
! 
                  }
              } catch (DBException de) {
                  throw new DBException("Error retrieving field '" +
                          oneFieldName, de);
!             } catch (Exception de) {
! 			throw new DBException("Not DBException Error retrieving field '" +
! 					oneFieldName, de);
! 		}
  
              i++;
! 			myObj.set(oneFieldName, tmpData);
          } /* for each retrieved field name */
  
***************
*** 950,953 ****
--- 1009,1013 ----
       * author Peter Pilgrim, Thu Jun 21 10:30:59 BST 2001
       *
+      * @see #getLimitationSyntax()
       * @see #searchAndRetrieveList()
       * @see #setOffsetRecord( int )
***************
*** 1135,1137 ****
  
  
! }
\ No newline at end of file
--- 1195,1274 ----
  
  
! 	/**
! 	 * <p>Return local DBConnection value
! 	 *
! 	 * author Yves Henri AMAIZO <amy_amaizo at compuserve.com>
! 	 */
! 	public DBConnection getLocalConnection() {
! 		return localConnection;
! 	}
! 
! 
! 	/**
! 	 * Refactoring to split the execution of a query statement into the query
! 	 * part and the load part.  The DBConnection returned will have the query
! 	 * already executed, it is ready to
! 	 * @param retrievedFieldList instantiate an ArrayList and the function will
! 	 * fill out the field order that the SQL statement will have it's fields in.
! 	 * @throws DBException upon database communication error
! 	 * @return connection that has already executed the search statement.
! 	 */
! 	public DBConnection createAndRunStoreProcedure(java.util.ArrayList retrievedFieldList)
! 	        throws DBException
! 	{
! 	    boolean needComma = false;
! 
! 	    if (recordSet == null) {
! 	        recordSet = new ArrayList();
! 	    } else {
! 	        recordSet.clear();
! 	    }
! 
! 	    myUpdates = null;
! 
! 	    DBConnection myConnection = null;
! 	    JDBCObjectMetaData myMetadata = this.getJDBCMetaData();
! 	    FastStringBuffer myStatement = FastStringBuffer.getInstance();
! 	    try {
! 	        if (localConnection != null) {
! 	            myConnection = localConnection;
! 	        } else {
! 	            myConnection = this.getConnectionPool().getConnection(this.myClassName);
! 	        }
! 
! 			int nbParams = this.getDef().getFieldListArray().size();
! 			if (this.getDef().isReturningValue()) {
! 				myStatement.append("{? = call ");
! 				nbParams--;
! 			} else {
! 				myStatement.append("{call ");
! 			}
! 			myStatement.append(this.getJDBCMetaData().getTargetTable());
! 
! 			if (nbParams > 0) {
! 				myStatement.append("(?");
! 				for (int i = 1; i < nbParams; i++) {
! 					myStatement.append(", ?");
! 				}
! 				myStatement.append(")");
! 			}
! 			myStatement.append("}");
! 
! 			CallableStatement theStroreProcedureStatement = myConnection.createCallableStatement(myStatement.toString());
! 			sJdbcUtil.buildStoreProcedureCallableStatement(this, theStroreProcedureStatement);
! 			myConnection.executeProcedure();
! 
! 	        return myConnection;
! 	    } catch (DBException ex) {
! 	        if  (myConnection != null && localConnection == null) {
! 	            myConnection.release();
! 	        }
! 	        log.error("Error building and running store procedure statement", ex);
! 	        throw ex;
! 	    } finally {
! 	       myStatement.release();
! 	    }
! 	} /* createAndRunStoreProcedure(java.util.ArrayList) */
! 
! 
! }



More information about the cvs mailing list