From: <hib...@li...> - 2006-06-02 19:17:03
|
Author: ste...@jb... Date: 2006-06-02 15:16:45 -0400 (Fri, 02 Jun 2006) New Revision: 9981 Modified: trunk/Hibernate3/src/org/hibernate/loader/hql/QueryLoader.java Log: TCK : query param type mismatch Modified: trunk/Hibernate3/src/org/hibernate/loader/hql/QueryLoader.java =================================================================== --- trunk/Hibernate3/src/org/hibernate/loader/hql/QueryLoader.java 2006-06-02 19:14:50 UTC (rev 9980) +++ trunk/Hibernate3/src/org/hibernate/loader/hql/QueryLoader.java 2006-06-02 19:16:45 UTC (rev 9981) @@ -13,6 +13,7 @@ import org.hibernate.LockMode; import org.hibernate.QueryException; import org.hibernate.ScrollableResults; +import org.hibernate.TypeMismatchException; import org.hibernate.dialect.Dialect; import org.hibernate.engine.QueryParameters; import org.hibernate.engine.SessionFactoryImplementor; @@ -75,15 +76,15 @@ private QueryableCollection[] collectionPersisters; private int selectLength; - + private ResultTransformer selectNewTransformer; private String[] queryReturnAliases; private LockMode[] defaultLockModes; - + /** * Creates a new Loader implementation. * @@ -110,10 +111,10 @@ queryReturnTypes = selectClause.getQueryReturnTypes(); selectNewTransformer = HolderInstantiator.createSelectNewTransformer( - selectClause.getConstructor(), - selectClause.isMap(), + selectClause.getConstructor(), + selectClause.isMap(), selectClause.isList()); - queryReturnAliases = selectClause.getQueryReturnAliases(); + queryReturnAliases = selectClause.getQueryReturnAliases(); List collectionFromElements = selectClause.getCollectionFromElements(); if ( collectionFromElements != null && collectionFromElements.size()!=0 ) { @@ -327,7 +328,7 @@ private boolean hasSelectNew() { return selectNewTransformer!=null; } - + protected Object getResultColumnOrRow(Object[] row, ResultTransformer transformer, ResultSet rs, SessionImplementor session) throws SQLException, HibernateException { @@ -365,7 +366,7 @@ Object result = holderInstantiator.instantiate(row); results.set( i, result ); } - + if(!hasSelectNew() && resultTransformer!=null) { return resultTransformer.transformList(results); } else { @@ -387,7 +388,7 @@ * @throws HibernateException */ public List list(SessionImplementor session, QueryParameters queryParameters) - throws HibernateException { + throws HibernateException { checkQuery( queryParameters ); return list( session, queryParameters, queryTranslator.getQuerySpaces(), queryReturnTypes ); } @@ -397,7 +398,7 @@ throw new QueryException("ResultTransformer is not allowed for 'select new' queries."); } } - + /** * Return the query results as an iterator */ @@ -512,7 +513,16 @@ " [" + location + "]" ); } - typedval.getType().nullSafeSet( ps, typedval.getValue(), location, session ); + try { + typedval.getType().nullSafeSet( ps, typedval.getValue(), location, session ); + } + catch( ClassCastException cce ) { + throw new TypeMismatchException( + "named parameter [" + name + "] not of expected type; expected = " + + typedval.getValue().getClass().getName() + "; but was =" + + typedval.getType().getReturnedClass() + ); + } } result += locs.length; } |