Open Source Repository

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



org/hibernate/hql/CollectionSubqueryFactory.java
// $Id: CollectionSubqueryFactory.java 9046 2006-01-13 03:10:57Z steveebersole $
package org.hibernate.hql;

import org.hibernate.engine.JoinSequence;
import org.hibernate.sql.JoinFragment;
import org.hibernate.MappingException;
import org.hibernate.QueryException;
import org.hibernate.util.StringHelper;

import java.util.Map;

/**
 * Provides the SQL for collection subqueries.
 <br>
 * Moved here from PathExpressionParser to make it re-useable.
 
 @author josh
 */
public final class CollectionSubqueryFactory {

  //TODO: refactor to .sql package

  private CollectionSubqueryFactory() {
  }

  public static String createCollectionSubquery(
      JoinSequence joinSequence,
          Map enabledFilters,
          String[] columns) {
    try {
      JoinFragment join = joinSequence.toJoinFragmentenabledFilters, true );
      return new StringBuffer"select " )
          .appendStringHelper.join", ", columns ) )
          .append" from " )
          .appendjoin.toFromFragmentString().substring) )// remove initial ", "
          .append" where " )
          .appendjoin.toWhereFragmentString().substring) )// remove initial " and "
          .toString();
    }
    catch MappingException me ) {
      throw new QueryExceptionme );
    }
  }
}