[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