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) {} + } } |