Oracle ADF Case Insensitive Search
public String
getViewCriteriaClause(boolean forQuery) {
if (forQuery ==
false){
// clause is for
cache (in-memory)
// WARNING - It is possible to set the
criteria mode to cache and the query mode
// to database. That will query for a larger result set, then
immediately filter it down in-memory
//
queryModeDoesNotUseCache will be true in that case even though it performs a
// in-memory filter
after the fact. Doing so is not
recommended as it wastes memory unless you
boolean queryModeDoesNotUseCache =
((getQueryMode() & ~QUERY_MODE_SCAN_DATABASE_TABLES) == 0);
ViewCriteria[]
vcs =
getApplyViewCriterias(ViewCriteria.CRITERIA_MODE_CACHE);
if (vcs != null
&& vcs.length > 0) {
boolean
criteriaForCacheModeOnlyFound = false; //
for
(ViewCriteria vc : vcs) {
criteriaForCacheModeOnlyFound |=
(vc.getCriteriaMode() == ViewCriteria.CRITERIA_MODE_CACHE);
if
(vc.isUpperColumns() == false) {
vc.setUpperColumns(true);
// puts UPPER(..) around the values for
filtering in-memory
}
}
if (queryModeDoesNotUseCache
&&
!criteriaForCacheModeOnlyFound) {
// if
query mode does not apply to cache and criteria mode
// is
not "cache only" mode (i.e not for both cache & database)
// don't apply any in-memory filter.
//
This is needed in PS2 to prevent in-memory filtering of dates which causes
// no
results because the time component is compared as well.
// see
CustomSQLBuilderImpl which has a PS2 workaround to trunc the date
// so
the date filters work (without comparing time component)
//
trunc will fail if applied to a in-memory filter on PS2
return
null;
}
}
} else{
ViewCriteria[] vcs =
getApplyViewCriterias(ViewCriteria.CRITERIA_MODE_QUERY);
if (vcs != null
&& vcs.length > 0) {
for
(ViewCriteria vc : vcs) {
if (vc.isUpperColumns())
{
vc.setUpperColumns(false); // remove UPPER(..) around the values for
database queryies
}
}
}
}
String clause =
super.getViewCriteriaClause(forQuery);
return clause;
}
Posted by Don Kleppinger at 11:45 AM