You are viewing a plain text version of this content. The canonical link for it is here.
Posted to slide-dev@jakarta.apache.org by un...@apache.org on 2004/11/22 14:41:32 UTC
cvs commit: jakarta-slide/src/stores/org/apache/slide/store/impl/rdbms/expression RDBMSNotPropContainsExpression.java RDBMSPropContainsExpression.java
unico 2004/11/22 05:41:32
Modified: src/stores/org/apache/slide/store/impl/rdbms/expression Tag:
SLIDE_2_1_RELEASE_BRANCH
RDBMSNotPropContainsExpression.java
RDBMSPropContainsExpression.java
Log:
escape SQL wildcard characters in LIKE expressions
Revision Changes Path
No revision
No revision
1.2.2.2 +18 -6 jakarta-slide/src/stores/org/apache/slide/store/impl/rdbms/expression/RDBMSNotPropContainsExpression.java
Index: RDBMSNotPropContainsExpression.java
===================================================================
RCS file: /home/cvs/jakarta-slide/src/stores/org/apache/slide/store/impl/rdbms/expression/RDBMSNotPropContainsExpression.java,v
retrieving revision 1.2.2.1
retrieving revision 1.2.2.2
diff -u -r1.2.2.1 -r1.2.2.2
--- RDBMSNotPropContainsExpression.java 1 Nov 2004 11:01:44 -0000 1.2.2.1
+++ RDBMSNotPropContainsExpression.java 22 Nov 2004 13:41:32 -0000 1.2.2.2
@@ -26,8 +26,6 @@
import org.apache.slide.search.basic.Literals;
import org.jdom.Element;
-/**
- */
public class RDBMSNotPropContainsExpression extends RDBMSCompareExpression {
public RDBMSNotPropContainsExpression(Element element, RDBMSQueryContext context) {
@@ -39,6 +37,20 @@
Element literal = _element.getChild(Literals.LITERAL, NamespaceCache.DEFAULT_NAMESPACE);
return "NOT (p" + _tableIndex + ".PROPERTY_NAME = '" + property.getName() + "' AND " +
"p" + _tableIndex + ".PROPERTY_NAMESPACE = '" + property.getNamespaceURI() + "' AND " +
- "p" + _tableIndex + ".PROPERTY_VALUE LIKE '%" + literal.getTextNormalize() + "%')";
+ "p" + _tableIndex + ".PROPERTY_VALUE LIKE '%" + getPropertyValue(literal) + "%')";
}
+
+ private String getPropertyValue(Element literal) {
+ String value = literal.getTextNormalize();
+ StringBuffer sb = new StringBuffer(value.length() + 10);
+ for (int i = 0, l = value.length(); i < l; i++) {
+ char c = value.charAt(i);
+ if (c == '_' || c == '%') {
+ sb.append("\\\\");
+ }
+ sb.append(c);
+ }
+ return sb.toString();
+ }
+
}
1.2.2.2 +18 -4 jakarta-slide/src/stores/org/apache/slide/store/impl/rdbms/expression/RDBMSPropContainsExpression.java
Index: RDBMSPropContainsExpression.java
===================================================================
RCS file: /home/cvs/jakarta-slide/src/stores/org/apache/slide/store/impl/rdbms/expression/RDBMSPropContainsExpression.java,v
retrieving revision 1.2.2.1
retrieving revision 1.2.2.2
diff -u -r1.2.2.1 -r1.2.2.2
--- RDBMSPropContainsExpression.java 1 Nov 2004 11:01:44 -0000 1.2.2.1
+++ RDBMSPropContainsExpression.java 22 Nov 2004 13:41:32 -0000 1.2.2.2
@@ -39,6 +39,20 @@
Element literal = _element.getChild(Literals.LITERAL, NamespaceCache.DEFAULT_NAMESPACE);
return "(p" + _tableIndex + ".PROPERTY_NAME = '" + property.getName() + "' AND " +
"p" + _tableIndex + ".PROPERTY_NAMESPACE = '" + property.getNamespaceURI() + "' AND " +
- "p" + _tableIndex + ".PROPERTY_VALUE LIKE '%" + literal.getTextNormalize() + "%')";
+ "p" + _tableIndex + ".PROPERTY_VALUE LIKE '%" + getPropertyValue(literal) + "%')";
}
+
+ private String getPropertyValue(Element literal) {
+ String value = literal.getTextNormalize();
+ StringBuffer sb = new StringBuffer(value.length() + 10);
+ for (int i = 0, l = value.length(); i < l; i++) {
+ char c = value.charAt(i);
+ if (c == '_' || c == '%') {
+ sb.append("\\\\");
+ }
+ sb.append(c);
+ }
+ return sb.toString();
+ }
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: slide-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: slide-dev-help@jakarta.apache.org