modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/event/EventManagerBean.java
| 4 +-
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/CriteriaQueryGenerator.java
| 4 +-
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/QueryUtility.java
| 19 +++++++---
3 files changed, 19 insertions(+), 8 deletions(-)
New commits:
commit 80f9d42684f71b09d289561558549f0e2abc790f
Merge: d0f9723... 30c0e2b...
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Fri Jan 29 12:22:37 2010 -0500
Merge branch 'linux-config' into linux-config-dev
commit d0f97231f3dd37de1e4e8b65685507a08d6655ea
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Fri Jan 29 12:20:43 2010 -0500
Add support for the LIKE clause in QueryUtility and utilize as needed in
EventManagerBean. Working on Ora. Once qualified on Postgres more SLSB
updates will be made to add support.
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/event/EventManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/event/EventManagerBean.java
index df90bfb..77506b5 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/event/EventManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/event/EventManagerBean.java
@@ -571,9 +571,9 @@ public class EventManagerBean implements EventManagerLocal,
EventManagerRemote {
query += " ) ";
}
if (isFilled(searchString))
- query += " AND upper(ev.detail) LIKE ? ";
+ query += " AND upper(ev.detail) LIKE ? " +
QueryUtility.getEscapeClause();
if (isFilled(source))
- query += " AND upper(evs.location) LIKE ? ";
+ query += " AND upper(evs.location) LIKE ? " +
QueryUtility.getEscapeClause();
if (!isCountQuery) {
pc.initDefaultOrderingField("ev.timestamp", PageOrdering.DESC);
if (this.dbType instanceof PostgresqlDatabaseType) {
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/CriteriaQueryGenerator.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/CriteriaQueryGenerator.java
index 67ab54b..41a5a8c 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/CriteriaQueryGenerator.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/CriteriaQueryGenerator.java
@@ -116,7 +116,7 @@ public final class CriteriaQueryGenerator {
}
if (fuzzyMatch) {
- expression += " ESCAPE '" + QueryUtility.getEscapeCharacter() +
"'";
+ expression += QueryUtility.getEscapeClause();
}
return expression;
@@ -228,7 +228,7 @@ public final class CriteriaQueryGenerator {
} else {
fragment = alias + "." + fieldName + " " +
operator + " :" + fieldName;
}
- fragment += " ESCAPE '" +
QueryUtility.getEscapeCharacter() + "'";
+ fragment += QueryUtility.getEscapeClause();
} else {
fragment = alias + "." + fieldName + " " +
operator + " :" + fieldName;
}
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/QueryUtility.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/QueryUtility.java
index 7f8ab50..b0fa0d3 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/QueryUtility.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/QueryUtility.java
@@ -46,8 +46,10 @@ public class QueryUtility {
ESCAPED_PERCENT = getEscapeCharacter() + "%";
}
- value = value.replaceAll("_", ESCAPED_UNDERSCORE);
- value = value.replaceAll("%", ESCAPED_PERCENT);
+ // Now, escape LIKE's wildcard characters with escaped characters so that the
user's input
+ // will be matched literally
+ value = value.replace("_", ESCAPED_UNDERSCORE);
+ value = value.replace("%", ESCAPED_PERCENT);
return value;
}
@@ -69,6 +71,15 @@ public class QueryUtility {
}
/**
+ * Get the proper LIKE operator escape clause for the current DatabaseType.
+ *
+ * @return The escape clause buffered with single spaces. For example: " ESCAPE
'\' "
+ */
+ public static String getEscapeClause() {
+ return " ESCAPE '" + getEscapeCharacter() + "' ";
+ }
+
+ /**
* Get the proper escape character for the current DatabaseType.
*
* @return The escape character(s)
@@ -94,8 +105,8 @@ public class QueryUtility {
}
if ("\\\\".equals(ESCAPE_CHARACTER)) {
- value = value.replaceAll("\\\\_", ESCAPED_UNDERSCORE);
- value = value.replaceAll("\\\\%", ESCAPED_PERCENT);
+ value = value.replace("\\_", ESCAPED_UNDERSCORE);
+ value = value.replace("\\%", ESCAPED_PERCENT);
}
return value;
Show replies by date