1 23 package org.apache.slide.store.impl.rdbms.expression; 24 25 import org.apache.slide.content.NodeProperty.NamespaceCache; 26 import org.apache.slide.search.basic.Literals; 27 import org.jdom.Element; 28 29 31 public class RDBMSPropContainsExpression extends RDBMSCompareExpression { 32 33 public RDBMSPropContainsExpression(Element element, RDBMSQueryContext context) { 34 super(element, context); 35 } 36 37 protected String compile() { 38 Element property = (Element) _element.getChild(Literals.PROP, NamespaceCache.DEFAULT_NAMESPACE).getChildren().get(0); 39 Element literal = _element.getChild(Literals.LITERAL, NamespaceCache.DEFAULT_NAMESPACE); 40 return "(p" + _tableIndex + ".PROPERTY_NAME = '" + property.getName() + "' AND " + 41 "p" + _tableIndex + ".PROPERTY_NAMESPACE = '" + property.getNamespaceURI() + "' AND " + 42 "p" + _tableIndex + ".PROPERTY_VALUE LIKE '%" + getPropertyValue(literal) + "%')"; 43 } 44 45 private String getPropertyValue(Element literal) { 46 String value = literal.getTextNormalize(); 47 StringBuffer sb = new StringBuffer (value.length() + 10); 48 for (int i = 0, l = value.length(); i < l; i++) { 49 char c = value.charAt(i); 50 if (c == '_' || c == '%') { 51 sb.append("\\\\"); 52 } 53 sb.append(c); 54 } 55 return sb.toString(); 56 } 57 58 } 59 | Popular Tags |