package com.revolsys.record.query; import com.revolsys.datatype.DataType; import com.revolsys.record.Record; import com.revolsys.record.schema.RecordStore; import com.revolsys.util.Property; public class ILike extends BinaryCondition { public ILike(final QueryValue left, final QueryValue right) { super(left, "LIKE", right); } @Override public void appendDefaultSql(final Query query, final RecordStore recordStore, final StringBuilder buffer) { final QueryValue left = getLeft(); final QueryValue right = getRight(); buffer.append("UPPER(CAST("); if (left == null) { buffer.append("NULL"); } else { left.appendSql(query, recordStore, buffer); } buffer.append(" AS VARCHAR(4000))) LIKE UPPER("); if (right == null) { buffer.append("NULL"); } else { right.appendSql(query, recordStore, buffer); } buffer.append(")"); } @Override public ILike clone() { return (ILike)super.clone(); } @Override public boolean test(final Record record) { final QueryValue left = getLeft(); String value1 = left.getStringValue(record); final QueryValue right = getRight(); String value2 = right.getStringValue(record); if (Property.hasValue(value1)) { if (Property.hasValue(value2)) { value1 = value1.toUpperCase(); value2 = value2.toUpperCase(); if (value2.contains("%")) { value2 = Like.toPattern(value2); if (value1.matches(value2)) { return true; } else { return false; } } else { return DataType.equal(value1, value2); } } else { return false; } } else { return !Property.hasValue(value2); } } }