|
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;
}
|