* statement
*/
protected SuperString buildWhereClauseBuffer(boolean useAllFields) throws PersistenceException
{
Iterator fieldsToUse = null;
SuperString myStatement = new SuperString(32);
if (useAllFields)
{
fieldsToUse = myMetaData.getFieldNames().iterator();
}
else
{
fieldsToUse = myMetaData.getKeyFieldNames().iterator();
}
/* Now go thru each field - if it is non-empty, add it's criteria */
/* to the where clause. If it is empty, just skip to the next one */
boolean addWhere = true;
boolean addAnd = false;
String oneFieldName = null;
String oneFieldValue = null;
boolean skipText = myMetaData.getDatabaseType().allowTextQueries();
boolean skipField = false;
while (fieldsToUse.hasNext())
{
oneFieldName = (String) fieldsToUse.next();
skipField = false;
oneFieldValue = SuperString.notNull(getFieldString(oneFieldName));
String rangeString = myMetaData.getDatabaseType().denotesRange(oneFieldValue);
if (! oneFieldValue.equals(""))
{
//Changed by Adam. Do formatting here for date/time types, or
// quote
//if needed.
//oneFieldValue = quoteIfNeeded(oneFieldName, rangeString);
oneFieldValue = getValueForUpdate(oneFieldName, rangeString);
}
if (oneFieldValue == null)
{
skipField = true;
}
if (oneFieldValue.trim().equals("\'\'"))
{
skipField = true;
}
if (myMetaData.getType(oneFieldName).equalsIgnoreCase("text"))
{
if (skipText)
{
skipField = true;
if (log.isDebugEnabled())
{
log.debug("Skipping criteria in text field '" + oneFieldName + "'");
}
}
else
{
if (oneFieldValue.indexOf("\n") > 0)
{
oneFieldValue = SuperString.replace(oneFieldValue, "\n", "");
}
if (oneFieldValue.indexOf("\r") > 0)
{
oneFieldValue = SuperString.replace(oneFieldValue, "\r", "");
}
if (oneFieldValue.equals("\'\'"))
{
skipField = true;
}
}
} /* if text field */
if (oneFieldValue.trim().equals(""))
{
skipField = true;
}
if (! skipField)
{
if (addWhere)
{
myStatement.append(" WHERE ");
addWhere = false;
}
if (addAnd)
{
myStatement.append(" AND ");
}
if (containsWildCards(oneFieldValue))
{
myStatement.append(myMetaData.getDBFieldName(oneFieldName));
myStatement.append(" LIKE ");
myStatement.append(oneFieldValue);
}
else if (rangeString != null)
{
myStatement.append(myMetaData.getDBFieldName(oneFieldName));
myStatement.append(" " + rangeString + " ");
myStatement.append(oneFieldValue);
}
else if ((oneFieldValue.trim().equalsIgnoreCase("is null"))
|| (oneFieldValue.trim().equalsIgnoreCase("is not null")))
{
myStatement.append(myMetaData.getDBFieldName(oneFieldName));
myStatement.append(" ");
myStatement.append(oneFieldValue.trim());
}
else
{
myStatement.append(myMetaData.getDBFieldName(oneFieldName));
myStatement.append(" = ");
myStatement.append(oneFieldValue);
}
addAnd = true;
}
/* if field is not skipped for some reason */
}
/* for each field */
if (log.isDebugEnabled())
{
log.debug("Built where clause '" + myStatement.toString() + "'");
}
return myStatement;
}