Open Source Repository

Home /hibernate/hibernate-3.2.4.ga | Repository Home


org/hibernate/criterion/LikeExpression.java
package org.hibernate.criterion;

import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.dialect.Dialect;
import org.hibernate.engine.TypedValue;

/**
 * A criterion representing a "like" expression
 *
 @author Scott Marlow
 @author Steve Ebersole
 */
public class LikeExpression implements Criterion {
  private final String propertyName;
  private final Object value;
  private final Character escapeChar;
  private final boolean ignoreCase;

  protected LikeExpression(
      String propertyName,
      String value,
      Character escapeChar,
      boolean ignoreCase) {
    this.propertyName = propertyName;
    this.value = value;
    this.escapeChar = escapeChar;
    this.ignoreCase = ignoreCase;
  }

  protected LikeExpression(
      String propertyName,
      String value) {
    thispropertyName, value, null, false );
  }

  protected LikeExpression(
      String propertyName,
      String value,
      MatchMode matchMode) {
    thispropertyName, matchMode.toMatchStringvalue ) );
  }

  protected LikeExpression(
      String propertyName,
      String value,
      MatchMode matchMode,
      Character escapeChar,
      boolean ignoreCase) {
    thispropertyName, matchMode.toMatchStringvalue ), escapeChar, ignoreCase );
  }

  public String toSqlString(
      Criteria criteria,
      CriteriaQuery criteriaQuerythrows HibernateException {
    Dialect dialect = criteriaQuery.getFactory().getDialect();
    String[] columns = criteriaQuery.getColumnsUsingProjectioncriteria, propertyName );
    if columns.length != ) {
      throw new HibernateException"Like may only be used with single-column properties" );
    }
    String lhs = ignoreCase
        ? dialect.getLowercaseFunction() '(' + columns[0')'
              : columns[0];
    return lhs + " like ?" escapeChar == null "" " escape \'" + escapeChar + "\'" );

  }

  public TypedValue[] getTypedValues(
      Criteria criteria,
      CriteriaQuery criteriaQuerythrows HibernateException {
    return new TypedValue[] {
        criteriaQuery.getTypedValuecriteria, propertyName, value.toString().toLowerCase() )
    };
  }
}