|
From: <one...@us...> - 2002-12-28 02:25:52
|
Update of /cvsroot/hibernate/Hibernate/cirrus/hibernate/impl
In directory sc8-pr-cvs1:/tmp/cvs-serv21213/cirrus/hibernate/impl
Modified Files:
SessionImpl.java SessionFactoryImpl.java QueryImpl.java
Log Message:
added support for <joined-subclass> to CodeGenerator
added Query.getNamedParameters(), Query.setProperties()
fixed a bug in Query.getReturnTypes()
Index: SessionImpl.java
===================================================================
RCS file: /cvsroot/hibernate/Hibernate/cirrus/hibernate/impl/SessionImpl.java,v
retrieving revision 1.159
retrieving revision 1.160
diff -C2 -d -r1.159 -r1.160
*** SessionImpl.java 17 Dec 2002 09:43:18 -0000 1.159
--- SessionImpl.java 28 Dec 2002 02:25:49 -0000 1.160
***************
*** 1106,1110 ****
String[] concreteQueries = QueryTranslator.concreteQueries(query, factory);
if ( concreteQueries.length>1 ) throw new HibernateException("This query cannot be scrolled: " + query);
! if ( concreteQueries.length==0 ) return null; //TODO: fix this and return an empty ScrollableResults
QueryTranslator q = factory.getScalarQuery( concreteQueries[0] );
autoFlushIfRequired( q.getQuerySpaces() );
--- 1106,1110 ----
String[] concreteQueries = QueryTranslator.concreteQueries(query, factory);
if ( concreteQueries.length>1 ) throw new HibernateException("This query cannot be scrolled: " + query);
! if ( concreteQueries.length==0 ) throw new HibernateException("Query does not refer to any persistent classes: " + query);
QueryTranslator q = factory.getScalarQuery( concreteQueries[0] );
autoFlushIfRequired( q.getQuerySpaces() );
Index: SessionFactoryImpl.java
===================================================================
RCS file: /cvsroot/hibernate/Hibernate/cirrus/hibernate/impl/SessionFactoryImpl.java,v
retrieving revision 1.60
retrieving revision 1.61
diff -C2 -d -r1.60 -r1.61
*** SessionFactoryImpl.java 28 Nov 2002 23:29:23 -0000 1.60
--- SessionFactoryImpl.java 28 Dec 2002 02:25:49 -0000 1.61
***************
*** 436,440 ****
);
}
!
Object readResolve() throws ObjectStreamException {
log.trace("Resolving serialized SessionFactory");
// look for the instance by uuid
--- 436,441 ----
);
}
!
! Object readResolve() throws ObjectStreamException {
log.trace("Resolving serialized SessionFactory");
// look for the instance by uuid
***************
*** 543,549 ****
}
! public Type[] getReturnTypes(String queryString)
! throws HibernateException {
! return getScalarQuery(queryString).getReturnTypes();
}
--- 544,557 ----
}
! public Type[] getReturnTypes(String queryString) throws HibernateException {
! String[] queries = QueryTranslator.concreteQueries(queryString, this);
! if ( queries.length==0 ) throw new HibernateException("Query does not refer to any persistent classes: " + queryString);
! return getScalarQuery( queries[0] ).getReturnTypes();
! }
!
! public java.util.Collection getNamedParameters(String queryString) throws HibernateException {
! String[] queries = QueryTranslator.concreteQueries(queryString, this);
! if ( queries.length==0 ) throw new HibernateException("Query does not refer to any persistent classes: " + queryString);
! return getScalarQuery( queries[0] ).getNamedParameters();
}
Index: QueryImpl.java
===================================================================
RCS file: /cvsroot/hibernate/Hibernate/cirrus/hibernate/impl/QueryImpl.java,v
retrieving revision 1.21
retrieving revision 1.22
diff -C2 -d -r1.21 -r1.22
*** QueryImpl.java 27 Dec 2002 11:54:48 -0000 1.21
--- QueryImpl.java 28 Dec 2002 02:25:49 -0000 1.22
***************
*** 18,24 ****
--- 18,27 ----
import cirrus.hibernate.HibernateException;
import cirrus.hibernate.MappingException;
+ import cirrus.hibernate.PropertyNotFoundException;
import cirrus.hibernate.Query;
import cirrus.hibernate.ScrollableResults;
import cirrus.hibernate.engine.*;
+ import cirrus.hibernate.helpers.ArrayHelper;
+ import cirrus.hibernate.helpers.ReflectHelper;
import cirrus.hibernate.helpers.StringHelper;
import cirrus.hibernate.type.Type;
***************
*** 57,84 ****
}
- /*
- * @see QueryTranslator#iterate()
- */
public Iterator iterate() throws SQLException, HibernateException {
return session.iterate(queryString, values.toArray(), (Type[]) types.toArray(NO_TYPES), selection, namedParams);
}
- /*
- * @see cirrus.hibernate.Query#scroll()
- */
public ScrollableResults scroll() throws SQLException, HibernateException {
return session.scroll(queryString, values.toArray(), (Type[]) types.toArray(NO_TYPES), selection, namedParams);
}
- /*
- * @see QueryTranslator#list()
- */
public List list() throws SQLException, HibernateException {
return session.find(queryString, values.toArray(), (Type[]) types.toArray(NO_TYPES), selection, namedParams);
}
- /*
- * @see QueryTranslator#setMaxResults(int)
- */
public void setMaxResults(int maxResults) {
selection.maxRows = new Integer(maxResults);
--- 60,75 ----
***************
*** 89,102 ****
}
- /*
- * @see QueryTranslator#setFirstResult(int)
- */
public void setFirstResult(int firstResult) {
selection.firstRow = new Integer(firstResult);
}
- /*
- * @see QueryTranslator#setParameter(int, Object, Type)
- */
public void setParameter(int position, Object val, Type type) {
int size = values.size();
--- 80,87 ----
***************
*** 115,233 ****
}
- /*
- * @see QueryTranslator#setString(int, String)
- */
public void setString(int position, String val) {
setParameter(position, val, Hibernate.STRING);
}
- /*
- * @see QueryTranslator#setChar(int, char)
- */
public void setCharacter(int position, char val) {
setParameter(position, new Character(val), Hibernate.CHARACTER);
}
- /*
- * @see QueryTranslator#setBoolean(int, boolean)
- */
public void setBoolean(int position, boolean val) {
setParameter(position, new Boolean(val), Hibernate.BOOLEAN);
}
- /*
- * @see QueryTranslator#setByte(int, byte)
- */
public void setByte(int position, byte val) {
setParameter(position, new Byte(val), Hibernate.BYTE);
}
- /*
- * @see QueryTranslator#setShort(int, short)
- */
public void setShort(int position, short val) {
setParameter(position, new Short(val), Hibernate.SHORT);
}
- /*
- * @see QueryTranslator#setInt(int, int)
- */
public void setInteger(int position, int val) {
setParameter(position, new Integer(val), Hibernate.INTEGER);
}
- /*
- * @see QueryTranslator#setLong(int, long)
- */
public void setLong(int position, long val) {
setParameter(position, new Long(val), Hibernate.LONG);
}
- /*
- * @see QueryTranslator#setFloat(int, long)
- */
public void setFloat(int position, float val) {
setParameter(position, new Float(val), Hibernate.FLOAT);
}
- /*
- * @see QueryTranslator#setDouble(int, double)
- */
public void setDouble(int position, double val) {
setParameter(position, new Double(val), Hibernate.DOUBLE);
}
- /*
- * @see QueryTranslator#setBinary(int, byte[])
- */
public void setBinary(int position, byte[] val) {
setParameter(position, val, Hibernate.BINARY);
}
- /*
- * @see QueryTranslator#setSerializable(int, Serializable)
- */
public void setSerializable(int position, Serializable val) {
setParameter(position, val, Hibernate.SERIALIZABLE);
}
- /*
- * @see QueryTranslator#setDate(int, Date)
- */
public void setDate(int position, Date date) {
setParameter(position, date, Hibernate.DATE);
}
- /*
- * @see QueryTranslator#setTime(int, Date)
- */
public void setTime(int position, Date date) {
setParameter(position, date, Hibernate.TIME);
}
- /*
- * @see QueryTranslator#setTimestamp(int, Date)
- */
public void setTimestamp(int position, Date date) {
setParameter(position, date, Hibernate.TIMESTAMP);
}
- /*
- * @see QueryTranslator#setEntity(int, Object)
- */
public void setEntity(int position, Object val) {
setParameter( position, val, Hibernate.association( val.getClass() ) );
}
- /*
- * @see QueryTranslator#setEnum(int, Object)
- */
public void setEnum(int position, Object val) throws MappingException {
setParameter( position, val, Hibernate.enum( val.getClass() ) );
}
- /*
- * @see QueryTranslator#setLocale(int, Locale)
- */
public void setLocale(int position, Locale locale) {
setParameter(position, locale, Hibernate.LOCALE);
--- 100,167 ----
***************
*** 241,317 ****
setParameter(position, calendar, Hibernate.CALENDAR_DATE);
}
! /*
! * @see Query#setBinary(String, byte[])
! */
public void setBinary(String name, byte[] val) {
setParameter(name, val, Hibernate.BINARY);
}
- /*
- * @see Query#setBoolean(String, boolean)
- */
public void setBoolean(String name, boolean val) {
setParameter(name, new Boolean(val), Hibernate.BOOLEAN);
}
- /*
- * @see Query#setByte(String, byte)
- */
public void setByte(String name, byte val) {
setParameter(name, new Byte(val), Hibernate.BYTE);
}
- /*
- * @see Query#setCharacter(String, char)
- */
public void setCharacter(String name, char val) {
setParameter(name, new Character(val), Hibernate.CHARACTER);
}
- /*
- * @see Query#setDate(String, Date)
- */
public void setDate(String name, Date date) {
setParameter(name, date, Hibernate.DATE);
}
- /*
- * @see Query#setDouble(String, double)
- */
public void setDouble(String name, double val) {
setParameter(name, new Double(val), Hibernate.DOUBLE);
}
- /*
- * @see Query#setEntity(String, Object)
- */
public void setEntity(String name, Object val) {
setParameter( name, val, Hibernate.association( val.getClass() ) );
}
- /*
- * @see Query#setEnum(String, Object)
- */
public void setEnum(String name, Object val) throws MappingException {
setParameter( name, val, Hibernate.enum( val.getClass() ) );
}
- /*
- * @see Query#setFloat(String, long)
- */
public void setFloat(String name, float val) {
setParameter(name, new Float(val), Hibernate.FLOAT);
}
- /*
- * @see Query#setInteger(String, int)
- */
public void setInteger(String name, int val) {
setParameter(name, new Integer(val), Hibernate.INTEGER);
}
- /*
- * @see Query#setLocale(String, Locale)
- */
public void setLocale(String name, Locale locale) {
setParameter(name, locale, Hibernate.LOCALE);
--- 175,219 ----
setParameter(position, calendar, Hibernate.CALENDAR_DATE);
}
!
public void setBinary(String name, byte[] val) {
setParameter(name, val, Hibernate.BINARY);
}
public void setBoolean(String name, boolean val) {
setParameter(name, new Boolean(val), Hibernate.BOOLEAN);
}
public void setByte(String name, byte val) {
setParameter(name, new Byte(val), Hibernate.BYTE);
}
public void setCharacter(String name, char val) {
setParameter(name, new Character(val), Hibernate.CHARACTER);
}
public void setDate(String name, Date date) {
setParameter(name, date, Hibernate.DATE);
}
public void setDouble(String name, double val) {
setParameter(name, new Double(val), Hibernate.DOUBLE);
}
public void setEntity(String name, Object val) {
setParameter( name, val, Hibernate.association( val.getClass() ) );
}
public void setEnum(String name, Object val) throws MappingException {
setParameter( name, val, Hibernate.enum( val.getClass() ) );
}
public void setFloat(String name, float val) {
setParameter(name, new Float(val), Hibernate.FLOAT);
}
public void setInteger(String name, int val) {
setParameter(name, new Integer(val), Hibernate.INTEGER);
}
public void setLocale(String name, Locale locale) {
setParameter(name, locale, Hibernate.LOCALE);
***************
*** 326,402 ****
}
- /*
- * @see Query#setLong(String, long)
- */
public void setLong(String name, long val) {
setParameter(name, new Long(val), Hibernate.LONG);
}
- /*
- * @see Query#setParameter(String, Object, Type)
- */
public void setParameter(String name, Object val, Type type) {
namedParams.put(name, new TypedValue(type, val) );
}
- /*
- * @see Query#setSerializable(String, Serializable)
- */
public void setSerializable(String name, Serializable val) {
setParameter(name, val, Hibernate.SERIALIZABLE);
}
- /*
- * @see Query#setShort(String, short)
- */
public void setShort(String name, short val) {
setParameter(name, new Short(val), Hibernate.SHORT);
}
- /*
- * @see Query#setString(String, String)
- */
public void setString(String name, String val) {
setParameter(name, val, Hibernate.STRING);
}
- /*
- * @see Query#setTime(String, Date)
- */
public void setTime(String name, Date date) {
setParameter(name, date, Hibernate.TIME);
}
- /*
- * @see Query#setTimestamp(String, Date)
- */
public void setTimestamp(String name, Date date) {
setParameter(name, date, Hibernate.TIMESTAMP);
}
- /*
- * @see cirrus.hibernate.Query#setBigDecimal(int, BigDecimal)
- */
public void setBigDecimal(int position, BigDecimal number) {
setParameter(position, number, Hibernate.BIG_DECIMAL);
}
- /*
- * @see cirrus.hibernate.Query#setBigDecimal(String, BigDecimal)
- */
public void setBigDecimal(String name, BigDecimal number) {
setParameter(name, number, Hibernate.BIG_DECIMAL);
}
- /*
- * @see Query#setParameter(int, Object)
- */
public void setParameter(int position, Object val) throws HibernateException {
setParameter( position, val, guessType(val) );
}
- /*
- * @see Query#setParameter(String, Object)
- */
public void setParameter(String name, Object val) throws HibernateException {
setParameter( name, val, guessType(val) );
--- 228,271 ----
***************
*** 405,408 ****
--- 274,281 ----
private Type guessType(Object param) throws HibernateException {
Class clazz = param.getClass();
+ return guessType(clazz);
+ }
+
+ private Type guessType(Class clazz) throws HibernateException {
String typename = clazz.getName();
Type type = TypeFactory.hueristicType(typename);
***************
*** 424,432 ****
}
! /*
! * @see cirrus.hibernate.Query#setParameterList(String, Collection, Type)
! */
! public void setParameterList(String name, Collection vals, Type type)
! throws HibernateException {
StringBuffer list = new StringBuffer(16);
--- 297,301 ----
}
! public void setParameterList(String name, Collection vals, Type type) throws HibernateException {
StringBuffer list = new StringBuffer(16);
***************
*** 442,450 ****
}
- /*
- * @see cirrus.hibernate.Query#setParameterList(String, Collection, Type)
- */
public void setParameterList(String name, Collection vals) throws HibernateException {
setParameterList(name, vals, guessType( vals.iterator().next() ) );
}
--- 311,333 ----
}
public void setParameterList(String name, Collection vals) throws HibernateException {
setParameterList(name, vals, guessType( vals.iterator().next() ) );
+ }
+
+ public String[] getNamedParameters() throws HibernateException {
+ return ArrayHelper.toStringArray( session.getFactory().getNamedParameters(queryString) );
+ }
+
+ public void setProperties(Object bean) throws HibernateException {
+ Class clazz = bean.getClass();
+ Iterator iter = session.getFactory().getNamedParameters(queryString).iterator();
+ while ( iter.hasNext() ) {
+ String namedParam = (String) iter.next();
+ try {
+ ReflectHelper.Getter getter = ReflectHelper.getGetter(clazz, namedParam);
+ setParameter( namedParam, getter.get(bean), guessType( getter.getReturnType() ) );
+ }
+ catch (PropertyNotFoundException pnfe) {}
+ }
}
|