Update of /cvsroot/hibernate/Hibernate2/src/net/sf/hibernate/loader
In directory sc8-pr-cvs1:/tmp/cvs-serv18274/sf/hibernate/loader
Added Files:
CriteriaLoader.java
Removed Files:
SearchLoader.java
Log Message:
added new criteria + expression API (experimental)
--- NEW FILE: CriteriaLoader.java ---
//$Id: CriteriaLoader.java,v 1.1 2003/03/08 06:39:21 oneovthafew Exp $
package net.sf.hibernate.loader;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import net.sf.hibernate.HibernateException;
import net.sf.hibernate.engine.RowSelection;
import net.sf.hibernate.engine.SessionFactoryImplementor;
import net.sf.hibernate.engine.SessionImplementor;
import net.sf.hibernate.engine.TypedValue;
import net.sf.hibernate.expression.Expression;
import net.sf.hibernate.impl.CriteriaImpl;
import net.sf.hibernate.persister.Loadable;
import net.sf.hibernate.type.Type;
//TODO: this class depends directly upon CriteriaImpl, in the impl package ... add a CriteriaImplementor interface
public class CriteriaLoader extends AbstractEntityLoader {
private CriteriaImpl criteria;
private static final Type[] NO_TYPES = new Type[0];
public CriteriaLoader(Loadable persister, SessionFactoryImplementor factory, CriteriaImpl criteria) throws HibernateException {
super(persister, factory);
this.criteria = criteria;
StringBuffer condition = new StringBuffer(30);
Iterator iter = criteria.iterateExpressions();
if ( !iter.hasNext() ) condition.append(" 1=1"); //TODO: fix this ugliness
while ( iter.hasNext() ) {
Expression expr = (Expression) iter.next();
condition.append( expr.toSqlString(factory, criteria.getPersistentClass(), alias) );
if ( iter.hasNext() ) condition.append(" and ");
}
renderStatement( condition.toString(), factory );
}
public List list(SessionImplementor session) throws HibernateException, SQLException {
List values = new ArrayList();
List types = new ArrayList();
Iterator iter = criteria.iterateExpressions();
while ( iter.hasNext() ) {
Expression expr = (Expression) iter.next();
TypedValue[] tv = expr.getTypedValues( session.getFactory(), criteria.getPersistentClass() );
for ( int i=0; i<tv.length; i++ ) {
values.add( tv[i].getValue() );
types.add( tv[i].getType() );
}
}
Object[] valueArray = values.toArray();
Type[] typeArray = (Type[]) types.toArray(NO_TYPES);
RowSelection selection = new RowSelection();
selection.setFirstRow( criteria.getFirstResult() );
selection.setMaxRows( criteria.getMaxResults() );
selection.setTimeout( criteria.getTimeout() );
return find(session, valueArray, typeArray, true, selection, null);
}
protected Object getResultColumnOrRow(Object[] row, ResultSet rs, SessionImplementor session)
throws SQLException, HibernateException {
return row[ row.length-1 ];
};
}
--- SearchLoader.java DELETED ---
|