details: /erp/devel/pi/rev/3c1493c46cf4
changeset: 10910:3c1493c46cf4
user: Martin Taal <martin.taal <at> openbravo.com>
date: Mon Feb 28 15:50:23 2011 +0100
summary: Fixes issue 15736: Backslash character (\) does not work for column
filtering
diffstat:
modules/org.openbravo.service.json/src/org/openbravo/service/json/QueryBuilder.java
| 35 +++++++--
1 files changed, 26 insertions(+), 9 deletions(-)
diffs (73 lines):
diff -r d42fcc3691bd -r 3c1493c46cf4
modules/org.openbravo.service.json/src/org/openbravo/service/json/QueryBuilder.java
---
a/modules/org.openbravo.service.json/src/org/openbravo/service/json/QueryBuilder.java
Mon Feb 28 15:48:39 2011 +0100
+++
b/modules/org.openbravo.service.json/src/org/openbravo/service/json/QueryBuilder.java
Mon Feb 28 15:50:23 2011 +0100
@@ -50,6 +50,7 @@
private static final String PARAM_DELIMITER = "@";
private static final String ALIAS_PREFIX = "alias_";
+ private static final char ESCAPE_CHAR = '!';
public static enum TextMatching {
startsWith, exact, substring
@@ -231,11 +232,13 @@
sb.append(leftWherePart + " = " + getTypedParameterAlias());
typedParameters.add(value);
} else if (textMatching == TextMatching.startsWith) {
- sb.append("upper(" + leftWherePart + ") like " +
getTypedParameterAlias());
- typedParameters.add(value.toUpperCase() + "%");
+ sb.append("upper(" + leftWherePart + ") like " +
getTypedParameterAlias() + " escape '"
+ + ESCAPE_CHAR + "' ");
+ typedParameters.add(escapeLike(value.toUpperCase()) + "%");
} else {
- sb.append("upper(" + leftWherePart + ") like " +
getTypedParameterAlias());
- typedParameters.add("%" + value.toUpperCase().replaceAll(" ", "%") +
"%");
+ sb.append("upper(" + leftWherePart + ") like " +
getTypedParameterAlias() + " escape '"
+ + ESCAPE_CHAR + "' ");
+ typedParameters.add("%" +
escapeLike(value.toUpperCase()).replaceAll(" ", "%") + "%");
}
} else if (!property.isPrimitive()) {
// an in parameter use it...
@@ -256,11 +259,13 @@
sb.append(leftWherePart + " = " + getTypedParameterAlias());
typedParameters.add(value);
} else if (textMatching == TextMatching.startsWith) {
- sb.append("upper(" + leftWherePart + ") like " +
getTypedParameterAlias());
- typedParameters.add(value.toUpperCase() + "%");
+ sb.append("upper(" + leftWherePart + ") like " +
getTypedParameterAlias() + " escape '"
+ + ESCAPE_CHAR + "' ");
+ typedParameters.add(escapeLike(value.toUpperCase()) + "%");
} else {
- sb.append("upper(" + leftWherePart + ") like " +
getTypedParameterAlias());
- typedParameters.add("%" + value.toUpperCase().replaceAll(" ", "%") +
"%");
+ sb.append("upper(" + leftWherePart + ") like " +
getTypedParameterAlias() + " escape '"
+ + ESCAPE_CHAR + "' ");
+ typedParameters.add("%" +
escapeLike(value.toUpperCase()).replaceAll(" ", "%") + "%");
}
} else if (Boolean.class == property.getPrimitiveObjectType()) {
final String alias = getTypedParameterAlias();
@@ -551,7 +556,9 @@
} else {
final List<Property> newIdentifierProperties =
prop.getReferencedProperty().getEntity()
.getIdentifierProperties();
- sb.append(createIdentifierLeftClause(newIdentifierProperties, prefix +
prop.getName() + "."));
+ sb
+ .append(createIdentifierLeftClause(newIdentifierProperties, prefix
+ prop.getName()
+ + "."));
}
}
@@ -722,4 +729,14 @@
}
}
+ private String escapeLike(String value) {
+ if (value == null || value.trim().length() == 0) {
+ return value;
+ }
+ String localValue = value.replace(ESCAPE_CHAR + "", ESCAPE_CHAR +
ESCAPE_CHAR + "");
+ localValue = localValue.replace("\\", ESCAPE_CHAR + "\\");
+ localValue = localValue.replace("_", ESCAPE_CHAR + "_");
+ localValue = localValue.replace("%", ESCAPE_CHAR + "%");
+ return localValue;
+ }
}
------------------------------------------------------------------------------
Free Software Download: Index, Search & Analyze Logs and other IT data in
Real-Time with Splunk. Collect, index and harness all the fast moving IT data
generated by your applications, servers and devices whether physical, virtual
or in the cloud. Deliver compliance at lower cost and gain new business
insights. http://p.sf.net/sfu/splunk-dev2dev
_______________________________________________
Openbravo-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openbravo-commits