From: <one...@us...> - 2003-03-08 06:39:24
|
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 --- |