io.ebeaninternal.server.expression.LikeExpression Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of ebean Show documentation
Show all versions of ebean Show documentation
composite of common runtime dependencies for all platforms
package io.ebeaninternal.server.expression;
import io.ebean.LikeType;
import io.ebeaninternal.api.SpiExpression;
import io.ebeaninternal.api.SpiExpressionRequest;
import io.ebeaninternal.server.el.ElPropertyValue;
import java.io.IOException;
class LikeExpression extends AbstractValueExpression {
private final boolean caseInsensitive;
private final LikeType type;
LikeExpression(String propertyName, Object value, boolean caseInsensitive, LikeType type) {
super(propertyName, value);
this.caseInsensitive = caseInsensitive;
this.type = type;
}
@Override
public void writeDocQuery(DocQueryContext context) throws IOException {
context.writeLike(propName, strValue(), type, caseInsensitive);
}
@Override
public void addBindValues(SpiExpressionRequest request) {
ElPropertyValue prop = getElProp(request);
if (prop != null && prop.isDbEncrypted()) {
// bind the key as well as the value
String encryptKey = prop.getBeanProperty().getEncryptKey().getStringValue();
request.addBindEncryptKey(encryptKey);
}
String bindValue = getValue(strValue(), caseInsensitive, type, request);
request.addBindValue(bindValue);
}
@Override
public void addSql(SpiExpressionRequest request) {
String pname = propName;
ElPropertyValue prop = getElProp(request);
if (prop != null && prop.isDbEncrypted()) {
pname = prop.getBeanProperty().getDecryptProperty(propName);
}
if (caseInsensitive) {
request.append("lower(").append(pname).append(")");
} else {
request.append(pname);
}
if (type == LikeType.EQUAL_TO) {
request.append(" = ? ");
} else {
// append db platform like clause
request.appendLike(type == LikeType.RAW);
}
}
/**
* Based on caseInsensitive and the property name.
*/
@Override
public void queryPlanHash(StringBuilder builder) {
if (caseInsensitive){
builder.append("I");
}
builder.append("Like[").append(type).append(" ").append(propName).append("]");
}
@Override
public int queryBindHash() {
return strValue().hashCode();
}
@Override
public boolean isSameByBind(SpiExpression other) {
LikeExpression that = (LikeExpression) other;
return strValue().equals(that.strValue());
}
private static String getValue(String value, boolean caseInsensitive, LikeType type, SpiExpressionRequest request) {
if (caseInsensitive) {
value = value.toLowerCase();
}
if (type == LikeType.RAW) {
return value;
}
value = request.escapeLikeString(value);
switch (type) {
case STARTS_WITH:
return value + "%";
case ENDS_WITH:
return "%" + value;
case CONTAINS:
return "%" + value + "%";
case EQUAL_TO:
return value;
default:
throw new RuntimeException("LikeType " + type + " missed?");
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy