modules/core/domain/src/main/java/org/rhq/core/domain/alert/Alert.java | 8 ++--- modules/core/domain/src/main/java/org/rhq/core/domain/alert/AlertDefinition.java | 8 ++--- modules/core/domain/src/main/java/org/rhq/core/domain/cloud/PartitionEvent.java | 2 - modules/core/domain/src/main/java/org/rhq/core/domain/configuration/ResourceConfigurationUpdate.java | 8 ++--- modules/core/domain/src/main/java/org/rhq/core/domain/content/PackageVersion.java | 2 - modules/core/domain/src/main/java/org/rhq/core/domain/measurement/MeasurementOOB.java | 12 +++---- modules/core/domain/src/main/java/org/rhq/core/domain/operation/ResourceOperationHistory.java | 8 ++--- modules/core/domain/src/main/java/org/rhq/core/domain/resource/Resource.java | 16 +++++----- modules/core/domain/src/main/java/org/rhq/core/domain/resource/ResourceType.java | 4 +- modules/core/domain/src/main/java/org/rhq/core/domain/resource/group/ResourceGroup.java | 4 +- modules/enterprise/remoting/cli/src/main/java/org/rhq/enterprise/client/utility/ScriptUtil.java | 2 - modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerBean.java | 2 + modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/RepoManagerBean.java | 1 modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementOOBManagerBean.java | 4 +- modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java | 8 ++++- modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceTypeManagerBean.java | 1 modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerBean.java | 4 ++ modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/definition/framework/ExpressionEvaluator.java | 4 +- modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/subsystem/AlertSubsystemManagerBean.java | 4 ++ modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/subsystem/ConfigurationSubsystemManagerBean.java | 2 + modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/subsystem/OperationHistorySubsystemManagerBean.java | 2 + modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/CriteriaQueryGenerator.java | 10 +++--- modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/QueryUtility.java | 14 +++++--- 23 files changed, 80 insertions(+), 50 deletions(-)
New commits: commit 6661bddb3be7a12a409582bc1fcd94317b5afc4a Merge: 08cadf1... 19b4a77... Author: Jay Shaughnessy jshaughn@redhat.com Date: Tue Feb 2 12:15:30 2010 -0500
Merge branch 'linux-config' into linux-config-dev
commit 08cadf15d742bb9aaf030ac33e314e44f5ca5e2a Author: Jay Shaughnessy jshaughn@redhat.com Date: Tue Feb 2 12:13:56 2010 -0500
Change "LIKE :filter" logic in NamedQuery to "LIKE :filter ESCAPE :escapeChar" logic.
This brings oracle and postgres (and any others) into consistent behavior while allowing flexibility with the escape char setting. Note that we now consistently treat SQL wildcard chars, % and _, as literals in the specified :filter value. In addition, occurrences of the escape character will also be treated as a literal.
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/alert/Alert.java b/modules/core/domain/src/main/java/org/rhq/core/domain/alert/Alert.java index 9f0f76a..2a30d9f 100644 --- a/modules/core/domain/src/main/java/org/rhq/core/domain/alert/Alert.java +++ b/modules/core/domain/src/main/java/org/rhq/core/domain/alert/Alert.java @@ -151,8 +151,8 @@ import org.rhq.core.domain.auth.Subject; * fetched association was not present in the select list"...even though it clearly is ;/ */ //+ " JOIN FETCH a.conditionLogs acl " // - + " WHERE (UPPER(res.name) LIKE :resourceFilter OR :resourceFilter IS NULL) " // - + " AND (UPPER(parent.name) LIKE :parentFilter OR :parentFilter IS NULL) " // + + " WHERE (UPPER(res.name) LIKE :resourceFilter ESCAPE :escapeChar OR :resourceFilter IS NULL) " // + + " AND (UPPER(parent.name) LIKE :parentFilter ESCAPE :escapeChar OR :parentFilter IS NULL) " // + " AND (a.ctime > :startTime OR :startTime IS NULL) " // + " AND (a.ctime < :endTime OR :endTime IS NULL) " // + " AND (a.id IN ( SELECT aa.id FROM Alert aa " // @@ -176,8 +176,8 @@ import org.rhq.core.domain.auth.Subject; + " WHERE res.id IN ( SELECT rr.id FROM Resource rr " // + " JOIN rr.implicitGroups g JOIN g.roles r JOIN r.subjects s " // + " WHERE s.id = :subjectId ) " // - + " AND (UPPER(res.name) LIKE :resourceFilter OR :resourceFilter IS NULL) " // - + " AND (UPPER(parent.name) LIKE :parentFilter OR :parentFilter IS NULL) " // + + " AND (UPPER(res.name) LIKE :resourceFilter ESCAPE :escapeChar OR :resourceFilter IS NULL) " // + + " AND (UPPER(parent.name) LIKE :parentFilter ESCAPE :escapeChar OR :parentFilter IS NULL) " // + " AND (a.ctime > :startTime OR :startTime IS NULL) " // + " AND (a.ctime < :endTime OR :endTime IS NULL) " // + " AND (a.id IN ( SELECT aa.id FROM Alert aa " // diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/alert/AlertDefinition.java b/modules/core/domain/src/main/java/org/rhq/core/domain/alert/AlertDefinition.java index a7a5361..f607af3 100644 --- a/modules/core/domain/src/main/java/org/rhq/core/domain/alert/AlertDefinition.java +++ b/modules/core/domain/src/main/java/org/rhq/core/domain/alert/AlertDefinition.java @@ -145,8 +145,8 @@ import org.rhq.core.domain.resource.group.ResourceGroup; */ //+ " JOIN FETCH ad.conditions ac " // + " WHERE ad.deleted = false " // - + " AND (UPPER(res.name) LIKE :resourceFilter OR :resourceFilter IS NULL) " // - + " AND (UPPER(parent.name) LIKE :parentFilter OR :parentFilter IS NULL) " // + + " AND (UPPER(res.name) LIKE :resourceFilter ESCAPE :escapeChar OR :resourceFilter IS NULL) " // + + " AND (UPPER(parent.name) LIKE :parentFilter ESCAPE :escapeChar OR :parentFilter IS NULL) " // + " AND (ad.ctime > :startTime OR :startTime IS NULL) " // + " AND (ad.ctime < :endTime OR :endTime IS NULL) " // + " AND (ad.id IN ( SELECT aad.id FROM AlertDefinition aad " // @@ -169,8 +169,8 @@ import org.rhq.core.domain.resource.group.ResourceGroup; + " AND res.id IN ( SELECT rr.id FROM Resource rr " // + " JOIN rr.implicitGroups g JOIN g.roles r JOIN r.subjects s " // + " WHERE s.id = :subjectId ) " // - + " AND (UPPER(res.name) LIKE :resourceFilter OR :resourceFilter IS NULL) " // - + " AND (UPPER(parent.name) LIKE :parentFilter OR :parentFilter IS NULL) " // + + " AND (UPPER(res.name) LIKE :resourceFilter ESCAPE :escapeChar OR :resourceFilter IS NULL) " // + + " AND (UPPER(parent.name) LIKE :parentFilter ESCAPE :escapeChar OR :parentFilter IS NULL) " // + " AND (ad.ctime > :startTime OR :startTime IS NULL) " // + " AND (ad.ctime < :endTime OR :endTime IS NULL) " // + " AND (ad.id IN ( SELECT aad.id FROM AlertDefinition aad " // diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/cloud/PartitionEvent.java b/modules/core/domain/src/main/java/org/rhq/core/domain/cloud/PartitionEvent.java index 1ee704e..820194c 100644 --- a/modules/core/domain/src/main/java/org/rhq/core/domain/cloud/PartitionEvent.java +++ b/modules/core/domain/src/main/java/org/rhq/core/domain/cloud/PartitionEvent.java @@ -58,7 +58,7 @@ import javax.persistence.Table; + " FROM PartitionEvent pe" // + " WHERE (:type = pe.eventType OR :type is null) " // + " AND (:status = pe.executionStatus OR :status is null)" // - + " AND (UPPER(pe.eventDetail) LIKE :details OR :details is null) "), + + " AND (UPPER(pe.eventDetail) LIKE :details ESCAPE :escapeChar OR :details is null) "), @NamedQuery(name = PartitionEvent.QUERY_FIND_BY_EXECUTION_STATUS, query = "SELECT pe FROM PartitionEvent pe WHERE pe.executionStatus = :executionStatus") // }) @SequenceGenerator(name = "id", sequenceName = "RHQ_PARTITION_EVENT_ID_SEQ") diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/ResourceConfigurationUpdate.java b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/ResourceConfigurationUpdate.java index 7d3ce29..06e5965 100644 --- a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/ResourceConfigurationUpdate.java +++ b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/ResourceConfigurationUpdate.java @@ -104,8 +104,8 @@ import org.rhq.core.domain.resource.Resource; + " WHERE (cu.modifiedTime <> (SELECT MIN(icu.modifiedTime) " // + " FROM ResourceConfigurationUpdate icu " // + " WHERE icu.resource.id = res.id))" // - + " AND (UPPER(res.name) LIKE :resourceFilter OR :resourceFilter IS NULL) " // - + " AND (UPPER(parent.name) LIKE :parentFilter OR :parentFilter IS NULL) " // + + " AND (UPPER(res.name) LIKE :resourceFilter ESCAPE :escapeChar OR :resourceFilter IS NULL) " // + + " AND (UPPER(parent.name) LIKE :parentFilter ESCAPE :escapeChar OR :parentFilter IS NULL) " // + " AND (cu.createdTime > :startTime OR :startTime IS NULL) " // + " AND (cu.modifiedTime < :endTime OR :endTime IS NULL) " // + " AND (cu.status LIKE :status OR :status IS NULL) "), @@ -122,8 +122,8 @@ import org.rhq.core.domain.resource.Resource; + " AND (cu.modifiedTime <> (SELECT MIN(icu.modifiedTime) " // + " FROM ResourceConfigurationUpdate icu " // + " WHERE icu.resource.id = res.id))" // - + " AND (UPPER(res.name) LIKE :resourceFilter OR :resourceFilter IS NULL) " // - + " AND (UPPER(parent.name) LIKE :parentFilter OR :parentFilter IS NULL) " // + + " AND (UPPER(res.name) LIKE :resourceFilter ESCAPE :escapeChar OR :resourceFilter IS NULL) " // + + " AND (UPPER(parent.name) LIKE :parentFilter ESCAPE :escapeChar OR :parentFilter IS NULL) " // + " AND (cu.createdTime > :startTime OR :startTime IS NULL) " // + " AND (cu.modifiedTime < :endTime OR :endTime IS NULL) " // + " AND (cu.status LIKE :status OR :status IS NULL) "), diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/content/PackageVersion.java b/modules/core/domain/src/main/java/org/rhq/core/domain/content/PackageVersion.java index 69ad4eb..42e7605 100644 --- a/modules/core/domain/src/main/java/org/rhq/core/domain/content/PackageVersion.java +++ b/modules/core/domain/src/main/java/org/rhq/core/domain/content/PackageVersion.java @@ -95,7 +95,7 @@ import org.rhq.core.domain.resource.ProductVersion; + " WHERE pv.id IN (SELECT DISTINCT pv1.id " + " FROM PackageVersion pv1 " + " LEFT JOIN pv1.repoPackageVersions cpv " + " WHERE cpv.repo.id = :repoId" - + " AND (UPPER(pv1.displayName) LIKE :filter " + + " AND (UPPER(pv1.displayName) LIKE :filter ESCAPE :escapeChar " + " OR :filter IS NULL)) "), @NamedQuery(name = PackageVersion.QUERY_FIND_METADATA_BY_RESOURCE_ID, query = "SELECT new org.rhq.core.domain.content.composite.PackageVersionMetadataComposite " + " ( " diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/measurement/MeasurementOOB.java b/modules/core/domain/src/main/java/org/rhq/core/domain/measurement/MeasurementOOB.java index cee123a..0ec1ce0 100644 --- a/modules/core/domain/src/main/java/org/rhq/core/domain/measurement/MeasurementOOB.java +++ b/modules/core/domain/src/main/java/org/rhq/core/domain/measurement/MeasurementOOB.java @@ -46,9 +46,9 @@ import javax.persistence.Table; + " AND res.id IN ( SELECT rr.id FROM Resource rr " // + " JOIN rr.implicitGroups g JOIN g.roles r JOIN r.subjects s " // + " WHERE s.id = :subjectId ) " // - + " AND (UPPER(def.displayName ) LIKE :metricName OR :metricName is null ) " // - + " AND (UPPER(res.name) LIKE :resourceName OR :resourceName is null ) " // - + " AND (UPPER(parent.name) LIKE :parentName OR :parentName is null ) "), // + + " AND (UPPER(def.displayName ) LIKE :metricName ESCAPE :escapeChar OR :metricName is null ) " // + + " AND (UPPER(res.name) LIKE :resourceName ESCAPE :escapeChar OR :resourceName is null ) " // + + " AND (UPPER(parent.name) LIKE :parentName ESCAPE :escapeChar OR :parentName is null ) "), // @NamedQuery(name = MeasurementOOB.GET_SCHEDULES_WITH_OOB_AGGREGATE_ADMIN, query = "" // + " SELECT new org.rhq.core.domain.measurement.composite.MeasurementOOBComposite" // + " ( res.name, res.id, def.displayName, sched.id, o.timestamp, def.id, o.oobFactor, " // @@ -62,9 +62,9 @@ import javax.persistence.Table; + " AND sched.definition = def " // + " AND sched.resource = res " // + " AND bal.schedule = sched " // - + " AND (UPPER(def.displayName ) LIKE :metricName OR :metricName is null ) " // - + " AND (UPPER(res.name) LIKE :resourceName OR :resourceName is null ) " // - + " AND (UPPER(parent.name) LIKE :parentName OR :parentName is null ) "), // + + " AND (UPPER(def.displayName ) LIKE :metricName ESCAPE :escapeChar OR :metricName is null ) " // + + " AND (UPPER(res.name) LIKE :resourceName ESCAPE :escapeChar OR :resourceName is null ) " // + + " AND (UPPER(parent.name) LIKE :parentName ESCAPE :escapeChar OR :parentName is null ) "), // @NamedQuery(name = MeasurementOOB.GET_SCHEDULES_WITH_OOB_AGGREGATE_COUNT, query = "" // + " SELECT COUNT(sched.id) " // + " FROM MeasurementOOB o, MeasurementSchedule sched " // diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/operation/ResourceOperationHistory.java b/modules/core/domain/src/main/java/org/rhq/core/domain/operation/ResourceOperationHistory.java index b375bb7..372a375 100644 --- a/modules/core/domain/src/main/java/org/rhq/core/domain/operation/ResourceOperationHistory.java +++ b/modules/core/domain/src/main/java/org/rhq/core/domain/operation/ResourceOperationHistory.java @@ -75,8 +75,8 @@ import org.rhq.core.domain.resource.Resource; + " FROM ResourceOperationHistory roh " // + " JOIN roh.resource res " // + "LEFT JOIN res.parentResource parent " // - + " WHERE (UPPER(res.name) LIKE :resourceFilter OR :resourceFilter IS NULL) " // - + " AND (UPPER(parent.name) LIKE :parentFilter OR :parentFilter IS NULL) " // + + " WHERE (UPPER(res.name) LIKE :resourceFilter ESCAPE :escapeChar OR :resourceFilter IS NULL) " // + + " AND (UPPER(parent.name) LIKE :parentFilter ESCAPE :escapeChar OR :parentFilter IS NULL) " // + " AND (roh.startedTime > :startTime OR :startTime IS NULL) " // + " AND (roh.modifiedTime < :endTime OR :endTime IS NULL) " // + " AND (roh.status LIKE :status OR :status IS NULL) "), // @@ -89,8 +89,8 @@ import org.rhq.core.domain.resource.Resource; + " WHERE res.id IN ( SELECT rr.id FROM Resource rr " // + " JOIN rr.implicitGroups g JOIN g.roles r JOIN r.subjects s " // + " WHERE s.id = :subjectId ) " // - + " AND (UPPER(res.name) LIKE :resourceFilter OR :resourceFilter IS NULL) " // - + " AND (UPPER(parent.name) LIKE :parentFilter OR :parentFilter IS NULL) " // + + " AND (UPPER(res.name) LIKE :resourceFilter ESCAPE :escapeChar OR :resourceFilter IS NULL) " // + + " AND (UPPER(parent.name) LIKE :parentFilter ESCAPE :escapeChar OR :parentFilter IS NULL) " // + " AND (roh.startedTime > :startTime OR :startTime IS NULL) " // + " AND (roh.modifiedTime < :endTime OR :endTime IS NULL) " // + " AND (roh.status LIKE :status OR :status IS NULL) ") }) diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Resource.java b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Resource.java index 9541d1e..3f6a96d 100644 --- a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Resource.java +++ b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Resource.java @@ -465,7 +465,7 @@ import org.rhq.core.domain.util.serial.ExternalizableStrategy; + " WHERE rc.repo.id = :repoId ) " // + " AND (:category = res.resourceType.category OR :category IS NULL) " // + " AND (res.inventoryStatus = :inventoryStatus) " // - + " AND (UPPER(res.name) LIKE :search OR :search is null) "), + + " AND (:search is null OR UPPER(res.name) LIKE :search ESCAPE :escapeChar) "), @NamedQuery(name = Resource.QUERY_GET_AVAILABLE_RESOURCES_FOR_RESOURCE_GROUP, query = "" // + "SELECT res " // + " FROM Resource AS res " // @@ -476,7 +476,7 @@ import org.rhq.core.domain.util.serial.ExternalizableStrategy; + " AND (:type = res.resourceType OR :type IS NULL) " // + " AND (:category = res.resourceType.category OR :category IS NULL) " // + " AND (res.inventoryStatus = :inventoryStatus) " // - + " AND (UPPER(res.name) LIKE :search OR :search is null) "), + + " AND (UPPER(res.name) LIKE :search ESCAPE :escapeChar OR :search is null) "), @NamedQuery(name = Resource.QUERY_GET_AVAILABLE_RESOURCES_FOR_RESOURCE_GROUP_WITH_EXCLUDES, query = "" // + "SELECT res " // + " FROM Resource AS res " // @@ -487,7 +487,7 @@ import org.rhq.core.domain.util.serial.ExternalizableStrategy; + " AND (:type = res.resourceType OR :type IS NULL) " // + " AND (:category = res.resourceType.category OR :category IS NULL) " // + " AND (res.inventoryStatus = :inventoryStatus) " // - + " AND (UPPER(res.name) LIKE :search OR :search is null) " // + + " AND (UPPER(res.name) LIKE :search ESCAPE :escapeChar OR :search is null) " // + " AND res.id NOT IN ( :excludeIds ) "), @NamedQuery(name = Resource.QUERY_GET_AVAILABLE_RESOURCES_WITH_PARENT_FOR_RESOURCE_GROUP, query = "" // + "SELECT res " // @@ -500,7 +500,7 @@ import org.rhq.core.domain.util.serial.ExternalizableStrategy; + " AND (:type = res.resourceType OR :type IS NULL) " // + " AND (:category = res.resourceType.category OR :category IS NULL) " // + " AND (res.inventoryStatus = :inventoryStatus) " // - + " AND (UPPER(res.name) LIKE :search OR :search is null) "), + + " AND (UPPER(res.name) LIKE :search ESCAPE :escapeChar OR :search is null) "), @NamedQuery(name = Resource.QUERY_GET_AVAILABLE_RESOURCES_WITH_PARENT_FOR_RESOURCE_GROUP_WITH_EXCLUDES, query = "" // + "SELECT res " // + " FROM Resource AS res " // @@ -512,7 +512,7 @@ import org.rhq.core.domain.util.serial.ExternalizableStrategy; + " AND (:type = res.resourceType OR :type IS NULL) " // + " AND (:category = res.resourceType.category OR :category IS NULL) " // + " AND (res.inventoryStatus = :inventoryStatus) " // - + " AND (UPPER(res.name) LIKE :search OR :search is null) " // + + " AND (UPPER(res.name) LIKE :search ESCAPE :escapeChar OR :search is null) " // + " AND res.id NOT IN ( :excludeIds ) "), @NamedQuery(name = Resource.QUERY_GET_AVAILABLE_RESOURCES_FOR_DASHBOARD_PORTLET, query = "" // + "SELECT res " // @@ -587,7 +587,7 @@ import org.rhq.core.domain.util.serial.ExternalizableStrategy; + " AND (:resourceTypeName = res.resourceType.name OR :resourceTypeName is null) " // + " AND (:pluginName = res.resourceType.plugin OR :pluginName is null) " // + " AND (res.inventoryStatus = :inventoryStatus OR :inventoryStatus is null) " // - + " AND (UPPER(res.name) LIKE :search OR UPPER(res.description) LIKE :search OR :search is null) "), + + " AND (UPPER(res.name) LIKE :search ESCAPE :escapeChar OR UPPER(res.description) LIKE :search ESCAPE :escapeChar OR :search is null) "), @NamedQuery(name = Resource.QUERY_FIND_COMPOSITE_WITH_PARENT, query = "" // + "SELECT new org.rhq.core.domain.resource.composite.ResourceComposite(res, " // + " (SELECT ires FROM Resource ires WHERE ires = res.parentResource), " // @@ -609,7 +609,7 @@ import org.rhq.core.domain.util.serial.ExternalizableStrategy; + " AND (:resourceTypeName = res.resourceType.name OR :resourceTypeName is null) " // + " AND (:pluginName = res.resourceType.plugin OR :pluginName is null) " // + " AND (res.inventoryStatus = :inventoryStatus OR :inventoryStatus is null) " // - + " AND (UPPER(res.name) LIKE :search OR UPPER(res.description) LIKE :search OR :search is null) "), + + " AND (UPPER(res.name) LIKE :search ESCAPE :escapeChar OR UPPER(res.description) LIKE :search ESCAPE :escapeChar OR :search is null) "), @NamedQuery(name = Resource.QUERY_FIND_COMPOSITE_COUNT, query = "SELECT count(res) " // + " FROM Resource res " // + " WHERE res.id IN (SELECT rr.id FROM Resource rr JOIN rr.implicitGroups g JOIN g.roles r JOIN r.subjects s WHERE s = :subject)" @@ -618,7 +618,7 @@ import org.rhq.core.domain.util.serial.ExternalizableStrategy; + " AND (:resourceTypeName = res.resourceType.name OR :resourceTypeName is null) " // + " AND (:pluginName = res.resourceType.plugin OR :pluginName is null) " // + " AND (res.inventoryStatus = :inventoryStatus OR :inventoryStatus is null) " // - + " AND (UPPER(res.name) LIKE :search OR UPPER(res.description) LIKE :search OR :search is null) "), + + " AND (UPPER(res.name) LIKE :search ESCAPE :escapeChar OR UPPER(res.description) LIKE :search ESCAPE :escapeChar OR :search is null) "), @NamedQuery(name = Resource.QUERY_FIND_COMPOSITE_ADMIN, query = "" // + "SELECT new org.rhq.core.domain.resource.composite.ResourceComposite(res, a.availabilityType) " // + " FROM Resource res " // diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/ResourceType.java b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/ResourceType.java index de6fcd1..6107dca 100644 --- a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/ResourceType.java +++ b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/ResourceType.java @@ -117,14 +117,14 @@ import org.rhq.core.domain.util.serial.ExternalizableStrategy; + "FROM Resource res, IN (res.implicitGroups) g, IN (g.roles) r, IN (r.subjects) s " // + "WHERE s = :subject " // + "AND res.resourceType.category = :category " - + "AND (UPPER(res.name) LIKE :nameFilter OR :nameFilter is null) " + + "AND (UPPER(res.name) LIKE :nameFilter ESCAPE :escapeChar OR :nameFilter is null) " + "AND (res.resourceType.plugin = :pluginName OR :pluginName is null) " + "AND (:inventoryStatus = res.inventoryStatus OR :inventoryStatus is null) " + "ORDER BY res.resourceType.name "), @NamedQuery(name = ResourceType.QUERY_FIND_UTILIZED_BY_CATEGORY_admin, query = "SELECT DISTINCT res.resourceType " + "FROM Resource res " // + "WHERE res.resourceType.category = :category " - + "AND (UPPER(res.name) LIKE :nameFilter OR :nameFilter is null) " + + "AND (UPPER(res.name) LIKE :nameFilter ESCAPE :escapeChar OR :nameFilter is null) " + "AND (res.resourceType.plugin = :pluginName OR :pluginName is null) " + "AND (:inventoryStatus = res.inventoryStatus OR :inventoryStatus is null) " + "ORDER BY res.resourceType.name "), diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/group/ResourceGroup.java b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/group/ResourceGroup.java index b2d432c..d099736 100644 --- a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/group/ResourceGroup.java +++ b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/group/ResourceGroup.java @@ -273,8 +273,8 @@ public class ResourceGroup extends Group { + " WHERE %GROUP_AND_VISIBILITY_FRAGMENT_WHERE% " // postgres uses true/false, oracle uses 1/0 + " %RESOURCE_FRAGMENT_WHERE% " // + " AND ( ? IS NULL " // :search - + " OR UPPER(rg.name) LIKE ? " // :search - + " OR UPPER(rg.description) LIKE ? ) " // :search + + " OR UPPER(rg.name) LIKE ? ESCAPE ?" // :search :escapeChar + + " OR UPPER(rg.description) LIKE ? ESCAPE ?) " // :search escapeChar + " AND ( rg.resource_type_id IS NULL " // + " OR ( ( resType.name = ? OR ? IS NULL ) " // :resourceTypeName x2 + " AND ( resType.plugin = ? OR ? IS NULL ) " // :pluginName x2 diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerBean.java index 119c8fa..6f1975c 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerBean.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerBean.java @@ -219,6 +219,8 @@ public class PartitionEventManagerBean implements PartitionEventManagerLocal { countQuery.setParameter("status", status); query.setParameter("details", details); countQuery.setParameter("details", details); + query.setParameter("escapeChar", QueryUtility.getEscapeCharacter()); + countQuery.setParameter("escapeChar", QueryUtility.getEscapeCharacter());
List<PartitionEvent> results = query.getResultList(); long count = (Long) countQuery.getSingleResult(); diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/RepoManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/RepoManagerBean.java index fadf719..ab2fad2 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/RepoManagerBean.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/RepoManagerBean.java @@ -311,6 +311,7 @@ public class RepoManagerBean implements RepoManagerLocal, RepoManagerRemote {
query.setParameter("repoId", repoId); query.setParameter("filter", QueryUtility.formatSearchParameter(filter)); + query.setParameter("escapeChar", QueryUtility.getEscapeCharacter());
List<PackageVersion> results = query.getResultList(); long count = getPackageVersionCountFromRepo(subject, filter, repoId); diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementOOBManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementOOBManagerBean.java index d2503bc..db28697 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementOOBManagerBean.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementOOBManagerBean.java @@ -277,7 +277,7 @@ public class MeasurementOOBManagerBean implements MeasurementOOBManagerLocal {
metricNameFilter = QueryUtility.formatSearchParameter(metricNameFilter); resourceNameFilter = QueryUtility.formatSearchParameter(resourceNameFilter); - parentNameFilter = QueryUtility.formatSearchParameter(parentNameFilter); + parentNameFilter = QueryUtility.formatSearchParameter(parentNameFilter);
query.setParameter("metricName", metricNameFilter); queryCount.setParameter("metricName", metricNameFilter); @@ -285,6 +285,8 @@ public class MeasurementOOBManagerBean implements MeasurementOOBManagerLocal { queryCount.setParameter("resourceName", resourceNameFilter); query.setParameter("parentName", parentNameFilter); queryCount.setParameter("parentName", parentNameFilter); + query.setParameter("escapeChar", QueryUtility.getEscapeCharacter()); + queryCount.setParameter("escapeChar", QueryUtility.getEscapeCharacter());
if (!isAdmin) { query.setParameter("subjectId", subject.getId()); diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java index eb2a4fa..ea51a6b 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java @@ -1463,6 +1463,9 @@ public class ResourceManagerBean implements ResourceManagerLocal, ResourceManage
query.setParameter("search", nameFilter); queryCount.setParameter("search", nameFilter); + + query.setParameter("escapeChar", QueryUtility.getEscapeCharacter()); + queryCount.setParameter("escapeChar", QueryUtility.getEscapeCharacter());
query.setParameter("inventoryStatus", InventoryStatus.COMMITTED); queryCount.setParameter("inventoryStatus", InventoryStatus.COMMITTED); @@ -1491,12 +1494,15 @@ public class ResourceManagerBean implements ResourceManagerLocal, ResourceManage queryCount.setParameter("search", search); query.setParameter("search", search);
+ query.setParameter("escapeChar", QueryUtility.getEscapeCharacter()); + queryCount.setParameter("escapeChar", QueryUtility.getEscapeCharacter()); + queryCount.setParameter("category", category); query.setParameter("category", category);
query.setParameter("inventoryStatus", InventoryStatus.COMMITTED); queryCount.setParameter("inventoryStatus", InventoryStatus.COMMITTED); - + long count = (Long) queryCount.getSingleResult();
List<Resource> resources = query.getResultList(); diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceTypeManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceTypeManagerBean.java index d8e0c33..95bae42 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceTypeManagerBean.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceTypeManagerBean.java @@ -223,6 +223,7 @@ public class ResourceTypeManagerBean implements ResourceTypeManagerLocal, Resour
query.setParameter("category", category); query.setParameter("nameFilter", QueryUtility.formatSearchParameter(nameFilter)); + query.setParameter("escapeChar", QueryUtility.getEscapeCharacter()); query.setParameter("pluginName", pluginName); query.setParameter("inventoryStatus", InventoryStatus.COMMITTED);
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerBean.java index 394a309..bc64087 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerBean.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerBean.java @@ -1028,11 +1028,15 @@ public class ResourceGroupManagerBean implements ResourceGroupManagerLocal, Reso if (search == null) { stmt.setNull(++i, Types.VARCHAR); stmt.setNull(++i, Types.VARCHAR); + stmt.setString(++i, QueryUtility.getEscapeCharacter()); stmt.setNull(++i, Types.VARCHAR); + stmt.setString(++i, QueryUtility.getEscapeCharacter()); } else { stmt.setString(++i, search); stmt.setString(++i, search); + stmt.setString(++i, QueryUtility.getEscapeCharacter()); stmt.setString(++i, search); + stmt.setString(++i, QueryUtility.getEscapeCharacter()); }
if (resourceTypeName == null) { diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/definition/framework/ExpressionEvaluator.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/definition/framework/ExpressionEvaluator.java index 761442a..8540c63 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/definition/framework/ExpressionEvaluator.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/definition/framework/ExpressionEvaluator.java @@ -1022,6 +1022,7 @@ public class ExpressionEvaluator implements Iterable<ExpressionEvaluator.Result> whereReplacements.remove(whereCondition.getValue()); // no longer needed, literal rendered here } else { String whereConditionOperator = " = "; + String ending = " "; if (bindValue != null) { /* * there will *not* necessarily be a replacement value ready at this point in the processing; these @@ -1032,9 +1033,10 @@ public class ExpressionEvaluator implements Iterable<ExpressionEvaluator.Result> if ((bindValueAsString != null) // whereConditionValue is null when whereCondition isn't a groupBy expression && (bindValueAsString.startsWith("%") || bindValueAsString.endsWith("%"))) { whereConditionOperator = " LIKE "; + ending = QueryUtility.getEscapeClause(); } } - result += whereCondition.getKey() + whereConditionOperator + ":" + whereCondition.getValue() + " "; + result += whereCondition.getKey() + whereConditionOperator + ":" + whereCondition.getValue() + ending; }
first = false; diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/subsystem/AlertSubsystemManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/subsystem/AlertSubsystemManagerBean.java index abd8978..fd4cebc 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/subsystem/AlertSubsystemManagerBean.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/subsystem/AlertSubsystemManagerBean.java @@ -91,6 +91,8 @@ public class AlertSubsystemManagerBean implements AlertSubsystemManagerLocal { query.setParameter("resourceFilter", resourceFilter); queryCount.setParameter("parentFilter", parentFilter); query.setParameter("parentFilter", parentFilter); + queryCount.setParameter("escapeChar", QueryUtility.getEscapeCharacter()); + query.setParameter("escapeChar", QueryUtility.getEscapeCharacter()); queryCount.setParameter("startTime", startTime); query.setParameter("startTime", startTime); queryCount.setParameter("endTime", endTime); @@ -135,6 +137,8 @@ public class AlertSubsystemManagerBean implements AlertSubsystemManagerLocal { query.setParameter("resourceFilter", resourceFilter); queryCount.setParameter("parentFilter", parentFilter); query.setParameter("parentFilter", parentFilter); + queryCount.setParameter("escapeChar", QueryUtility.getEscapeCharacter()); + query.setParameter("escapeChar", QueryUtility.getEscapeCharacter()); queryCount.setParameter("startTime", startTime); query.setParameter("startTime", startTime); queryCount.setParameter("endTime", endTime); diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/subsystem/ConfigurationSubsystemManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/subsystem/ConfigurationSubsystemManagerBean.java index 0d73a88..32d4085 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/subsystem/ConfigurationSubsystemManagerBean.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/subsystem/ConfigurationSubsystemManagerBean.java @@ -80,6 +80,8 @@ public class ConfigurationSubsystemManagerBean implements ConfigurationSubsystem query.setParameter("resourceFilter", resourceFilter); queryCount.setParameter("parentFilter", parentFilter); query.setParameter("parentFilter", parentFilter); + queryCount.setParameter("escapeChar", QueryUtility.getEscapeCharacter()); + query.setParameter("escapeChar", QueryUtility.getEscapeCharacter()); queryCount.setParameter("startTime", startTime); query.setParameter("startTime", startTime); queryCount.setParameter("endTime", endTime); diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/subsystem/OperationHistorySubsystemManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/subsystem/OperationHistorySubsystemManagerBean.java index b811d1f..8a49af8 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/subsystem/OperationHistorySubsystemManagerBean.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/subsystem/OperationHistorySubsystemManagerBean.java @@ -80,6 +80,8 @@ public class OperationHistorySubsystemManagerBean implements OperationHistorySub query.setParameter("resourceFilter", resourceFilter); queryCount.setParameter("parentFilter", parentFilter); query.setParameter("parentFilter", parentFilter); + queryCount.setParameter("escapeChar", QueryUtility.getEscapeCharacter()); + query.setParameter("escapeChar", QueryUtility.getEscapeCharacter()); queryCount.setParameter("startTime", startTime); query.setParameter("startTime", startTime); queryCount.setParameter("endTime", endTime);
commit 87f18266d92c09ac0aa7b4c9d868b5fe1f310153 Author: Jay Shaughnessy jshaughn@redhat.com Date: Tue Feb 2 12:09:58 2010 -0500
remove explicit wildcarding. the filter names treat sql wildards as literals. Criteria.setStrict() should determine whether this is a substring match.
diff --git a/modules/enterprise/remoting/cli/src/main/java/org/rhq/enterprise/client/utility/ScriptUtil.java b/modules/enterprise/remoting/cli/src/main/java/org/rhq/enterprise/client/utility/ScriptUtil.java index 327ba5e..0665ebc 100644 --- a/modules/enterprise/remoting/cli/src/main/java/org/rhq/enterprise/client/utility/ScriptUtil.java +++ b/modules/enterprise/remoting/cli/src/main/java/org/rhq/enterprise/client/utility/ScriptUtil.java @@ -57,7 +57,7 @@ public class ScriptUtil { ResourceManagerRemote resourceManager = client.getRemoteClient().getResourceManagerRemote();
ResourceCriteria criteria = new ResourceCriteria(); - criteria.addFilterName('%' + string + '%'); + criteria.addFilterName(string); return resourceManager.findResourcesByCriteria(client.getSubject(), criteria); }
commit 3bd48d7704b5674db81ac00251d600a76920bce2 Author: Jay Shaughnessy jshaughn@redhat.com Date: Tue Feb 2 12:08:25 2010 -0500
make sure fuzzy (strict vs non-strict) and case sensitivity criteria settings play nicely.
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 56602a5..605d366 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 @@ -362,15 +362,15 @@ public final class CriteriaQueryGenerator { Object value = critField.getValue(); if (value instanceof String) { String formattedValue = (String) value; + + if (wantsFuzzyMatching) { + formattedValue = "%" + QueryUtility.escapeSearchParameter(formattedValue) + "%"; + } + if (wantCaseInsensitiveMatch) { formattedValue = formattedValue.toLowerCase(); }
- if (wantsFuzzyMatching) { - // append '%' onto edges that don't already have '%' explicitly set from the caller - formattedValue = (formattedValue.startsWith("%") ? "" : "%") + formattedValue - + (formattedValue.endsWith("%") ? "" : "%"); - } value = formattedValue; } if (LOG.isDebugEnabled()) {
commit f4cd260fb635666794029f742eb2a6d1d3033667 Author: Jay Shaughnessy jshaughn@redhat.com Date: Tue Feb 2 12:01:55 2010 -0500
minor refactor to avoid redundant guards
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 91f042c..bd9cc8a 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 @@ -43,8 +43,12 @@ public class QueryUtility { return null; }
- init(); + return doEscapeSearchParameter(value); + }
+ private static String doEscapeSearchParameter(String value) { + init(); + // Escape LIKE's wildcard characters with escaped characters so that the user's input // will be matched literally value = value.replace(ESCAPE_CHARACTER, ESCAPED_ESCAPE); @@ -52,11 +56,11 @@ public class QueryUtility { value = value.replace("%", ESCAPED_PERCENT);
return value; - } - + } + /** * Given the settings for the current DatabaseType, properly handle escaping special SQL characters as - * well as upcasing the value (standard for rhq filter searches) and wrapping with SQL wildcard for + * well as UPCASING the value (standard for rhq filter searches) and wrapping with SQL wildcard for * implicit "contains" (i.e. '%' characters) * * @param value @@ -67,7 +71,7 @@ public class QueryUtility { return null; }
- return "%" + escapeSearchParameter(value).toUpperCase() + "%"; + return "%" + doEscapeSearchParameter(value).toUpperCase() + "%"; }
/**
rhq-commits@lists.fedorahosted.org