Open Source Repository

Home /hibernate/hibernate-3.2.7.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 (distinct) buf.append("distinct ");
    return buf.append( criteriaQuery.getColumn(criteria, propertyName) )
      .append(") as y")
      .append(position)
      .append('_')
      .toString();
  }
  
  public CountProjection setDistinct() {
    distinct = true;
    return this;
  }
  
}