Open Source Repository

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


org/hibernate/criterion/CountProjection.java
//$Id: CountProjection.java 9913 2006-05-09 07:40:11Z [email protected] $
package org.hibernate.criterion;

import org.hibernate.Criteria;
import org.hibernate.Hibernate;
import org.hibernate.HibernateException;
import org.hibernate.type.Type;

/**
 * A count
 @author Gavin King
 */
public class CountProjection extends AggregateProjection {

  private boolean distinct;

  protected CountProjection(String prop) {
    super("count", prop);
  }

  public String toString() {
    if(distinct) {
      return "distinct " super.toString();
    else {
      return super.toString();
    }
  }

  public Type[] getTypes(Criteria criteria, CriteriaQuery criteriaQuery
  throws HibernateException {
    return new Type[] { Hibernate.INTEGER };
  }

  public String toSqlString(Criteria criteria, int position, CriteriaQuery criteriaQuery
  throws HibernateException {
    StringBuffer buf = new StringBuffer();
    buf.append("count(");
    if (distinctbuf.append("distinct ");
    return buf.appendcriteriaQuery.getColumn(criteria, propertyName) )
      .append(") as y")
      .append(position)
      .append('_')
      .toString();
  }
  
  public CountProjection setDistinct() {
    distinct = true;
    return this;
  }
  
}