Update of /cvsroot/hibernate/Hibernate2/src/net/sf/hibernate/hql In directory sc8-pr-cvs1:/tmp/cvs-serv21958/sf/hibernate/hql Modified Files: FromParser.java GroupByParser.java OrderByParser.java PathExpressionParser.java QueryTranslator.java SelectParser.java WhereParser.java Log Message: fixed minor problems with new HQL stuff: * return ALL joined objects mentioned in FROM clause (iff no select clause) * throw a meaningful exception when property is not found made name attribute optional in hibernate.cfg.xml Index: FromParser.java =================================================================== RCS file: /cvsroot/hibernate/Hibernate2/src/net/sf/hibernate/hql/FromParser.java,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** FromParser.java 2 Mar 2003 12:58:52 -0000 1.10 --- FromParser.java 3 Mar 2003 09:30:57 -0000 1.11 *************** *** 103,107 **** if (classPersister!=null) { ! q.addCrossJoinedFromType(token, classPersister); } else if (entityName!=null) { --- 103,107 ---- if (classPersister!=null) { ! q.addFromClass(token, classPersister); } else if (entityName!=null) { *************** *** 131,135 **** Loadable p = q.getPersisterUsingImports(token); if (p==null) throw new QueryException("persister not found: " + token); ! q.addCrossJoinedFromType(alias, p); } else { --- 131,135 ---- Loadable p = q.getPersisterUsingImports(token); if (p==null) throw new QueryException("persister not found: " + token); ! q.addFromClass(alias, p); } else { Index: GroupByParser.java =================================================================== RCS file: /cvsroot/hibernate/Hibernate2/src/net/sf/hibernate/hql/GroupByParser.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** GroupByParser.java 28 Feb 2003 07:01:28 -0000 1.5 --- GroupByParser.java 3 Mar 2003 09:30:58 -0000 1.6 *************** *** 27,31 **** ParserHelper.parse(pathExpressionParser, q.unalias(token), ParserHelper.PATH_SEPARATORS, q); q.appendGroupByToken( pathExpressionParser.getWhereColumn() ); ! pathExpressionParser.addFromAssociation(q); } else { --- 27,31 ---- ParserHelper.parse(pathExpressionParser, q.unalias(token), ParserHelper.PATH_SEPARATORS, q); q.appendGroupByToken( pathExpressionParser.getWhereColumn() ); ! pathExpressionParser.addAssociation(q); } else { Index: OrderByParser.java =================================================================== RCS file: /cvsroot/hibernate/Hibernate2/src/net/sf/hibernate/hql/OrderByParser.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** OrderByParser.java 28 Feb 2003 07:01:28 -0000 1.5 --- OrderByParser.java 3 Mar 2003 09:31:00 -0000 1.6 *************** *** 26,30 **** ParserHelper.parse(pathExpressionParser, q.unalias(token), ParserHelper.PATH_SEPARATORS, q); q.appendOrderByToken( pathExpressionParser.getWhereColumn() ); ! pathExpressionParser.addFromAssociation(q); } else { --- 26,30 ---- ParserHelper.parse(pathExpressionParser, q.unalias(token), ParserHelper.PATH_SEPARATORS, q); q.appendOrderByToken( pathExpressionParser.getWhereColumn() ); ! pathExpressionParser.addAssociation(q); } else { Index: PathExpressionParser.java =================================================================== RCS file: /cvsroot/hibernate/Hibernate2/src/net/sf/hibernate/hql/PathExpressionParser.java,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** PathExpressionParser.java 2 Mar 2003 06:58:48 -0000 1.12 --- PathExpressionParser.java 3 Mar 2003 09:31:02 -0000 1.13 *************** *** 200,208 **** protected Type getPropertyType(QueryTranslator q) throws QueryException { ! return q.getPersisterForName(currentName).getPropertyType( getPropertyPath() ); } protected String[] currentColumns(QueryTranslator q) throws QueryException { ! return q.getPersisterForName(currentName).toColumns( currentName, getPropertyPath() ); } --- 200,214 ---- protected Type getPropertyType(QueryTranslator q) throws QueryException { ! String path = getPropertyPath(); ! Type type = q.getPersisterForName(currentName).getPropertyType(path); ! if (type==null) throw new QueryException("could not resolve property type: " + path); ! return type; } protected String[] currentColumns(QueryTranslator q) throws QueryException { ! String path = getPropertyPath(); ! String[] columns = q.getPersisterForName(currentName).toColumns(currentName, path); ! if (columns==null) throw new QueryException("could not resolve property columns: " + path); ! return columns; } *************** *** 356,361 **** } ! public String addFromAssociation(QueryTranslator q) { q.addJoin( getName(), join ); return currentName; } --- 362,371 ---- } ! public void addAssociation(QueryTranslator q) { q.addJoin( getName(), join ); + } + + public String addFromAssociation(QueryTranslator q) { + q.addFrom(currentName, join); return currentName; } *************** *** 385,389 **** join.addJoin( p.getTableName(), elementName, collectionElementColumns, keyColumnNames, joinType); } ! q.addFromType(elementName, clazz, join, false); return elementName; --- 395,399 ---- join.addJoin( p.getTableName(), elementName, collectionElementColumns, keyColumnNames, joinType); } ! q.addFrom(elementName, clazz, join); return elementName; Index: QueryTranslator.java =================================================================== RCS file: /cvsroot/hibernate/Hibernate2/src/net/sf/hibernate/hql/QueryTranslator.java,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** QueryTranslator.java 2 Mar 2003 06:58:48 -0000 1.17 --- QueryTranslator.java 3 Mar 2003 09:31:03 -0000 1.18 *************** *** 17,21 **** import java.util.StringTokenizer; - import net.sf.hibernate.AssertionFailure; import net.sf.hibernate.Hibernate; import net.sf.hibernate.HibernateException; --- 17,20 ---- *************** *** 204,223 **** } - /** - * Return the SQL for a <tt>find()</tt> style query. - * @return the SQL as a string - */ protected String getSQLString() { - if ( shallowQuery ) throw new AssertionFailure(""); - logQuery(queryString, sqlString); - return sqlString; - } - - /** - * Return the SQL for an <tt>iterate()</tt> style query. - * @return the SQL as a string - */ - protected String getScalarSelectSQL() { - if ( !shallowQuery ) throw new AssertionFailure(""); logQuery(queryString, sqlString); return sqlString; --- 203,207 ---- *************** *** 322,344 **** } ! void addFromType(String name, Class type, JoinFragment join, boolean crossJoin) { ! //TODO: join type!! addType(name, type); fromTypes.add(name); addJoin(name, join); - if (crossJoin) crossJoins.add(name); } ! void addCrossJoinedFromType(String name, Loadable classPersister) { JoinFragment ojf = createJoinFragment(); ojf.addCrossJoin( classPersister.getTableName(), name ); ! addFromType(name, classPersister.getMappedClass(), ojf, true); } ! void addReturnType(String name) { returnTypes.add(name); } ! void addScalarType(Type type) { scalarTypes.add(type); } --- 306,331 ---- } ! void addFrom(String name, Class type, JoinFragment join) { addType(name, type); + addFrom(name, join); + } + + void addFrom(String name, JoinFragment join) { fromTypes.add(name); addJoin(name, join); } ! void addFromClass(String name, Loadable classPersister) { JoinFragment ojf = createJoinFragment(); ojf.addCrossJoin( classPersister.getTableName(), name ); ! crossJoins.add(name); ! addFrom(name, classPersister.getMappedClass(), ojf); } ! void addSelectClass(String name) { returnTypes.add(name); } ! void addSelectScalar(Type type) { scalarTypes.add(type); } *************** *** 700,704 **** ); } ! addFromType(elementName, elemType.getPersistentClass(), join, false); } --- 687,691 ---- ); } ! addFrom(elementName, elemType.getPersistentClass(), join); } *************** *** 738,742 **** public Iterator iterate(Object[] values, Type[] types, RowSelection selection, Map namedParams, SessionImplementor session) throws HibernateException, SQLException { ! PreparedStatement st = prepareQueryStatement( getScalarSelectSQL(), values, types, selection, false, session ); try { bindNamedParameters(st, namedParams, session); --- 725,729 ---- public Iterator iterate(Object[] values, Type[] types, RowSelection selection, Map namedParams, SessionImplementor session) throws HibernateException, SQLException { ! PreparedStatement st = prepareQueryStatement( getSQLString(), values, types, selection, false, session ); try { bindNamedParameters(st, namedParams, session); *************** *** 755,759 **** public ScrollableResults scroll(Object[] values, Type[] types, RowSelection selection, Map namedParams, SessionImplementor session) throws HibernateException, SQLException { ! PreparedStatement st = prepareQueryStatement( getScalarSelectSQL(), values, types, selection, true, session ); try { bindNamedParameters(st, namedParams, session); --- 742,746 ---- public ScrollableResults scroll(Object[] values, Type[] types, RowSelection selection, Map namedParams, SessionImplementor session) throws HibernateException, SQLException { ! PreparedStatement st = prepareQueryStatement( getSQLString(), values, types, selection, true, session ); try { bindNamedParameters(st, namedParams, session); Index: SelectParser.java =================================================================== RCS file: /cvsroot/hibernate/Hibernate2/src/net/sf/hibernate/hql/SelectParser.java,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** SelectParser.java 1 Mar 2003 12:15:27 -0000 1.7 --- SelectParser.java 3 Mar 2003 09:31:05 -0000 1.8 *************** *** 104,108 **** if (!ready) throw new QueryException(", expected before aggregate function in SELECT: " + token); if ( lctoken.equals("count") ) { ! q.addScalarType(Hibernate.INTEGER); count = true; } --- 104,108 ---- if (!ready) throw new QueryException(", expected before aggregate function in SELECT: " + token); if ( lctoken.equals("count") ) { ! q.addSelectScalar(Hibernate.INTEGER); count = true; } *************** *** 122,127 **** } q.appendScalarSelectToken( aggregatePathExpressionParser.getWhereColumn() ); ! if (!count) q.addScalarType( aggregatePathExpressionParser.getWhereColumnType() ); ! aggregatePathExpressionParser.addFromAssociation(q); } else { --- 122,127 ---- } q.appendScalarSelectToken( aggregatePathExpressionParser.getWhereColumn() ); ! if (!count) q.addSelectScalar( aggregatePathExpressionParser.getWhereColumnType() ); ! aggregatePathExpressionParser.addAssociation(q); } else { *************** *** 136,144 **** } else if ( pathExpressionParser.getWhereColumnType().isEntityType() ) { ! q.addReturnType( pathExpressionParser.getSelectName() ); } q.appendScalarSelectTokens( pathExpressionParser.getWhereColumns() ); ! q.addScalarType( pathExpressionParser.getWhereColumnType() ); ! pathExpressionParser.addFromAssociation(q); ready = false; --- 136,144 ---- } else if ( pathExpressionParser.getWhereColumnType().isEntityType() ) { ! q.addSelectClass( pathExpressionParser.getSelectName() ); } q.appendScalarSelectTokens( pathExpressionParser.getWhereColumns() ); ! q.addSelectScalar( pathExpressionParser.getWhereColumnType() ); ! pathExpressionParser.addAssociation(q); ready = false; Index: WhereParser.java =================================================================== RCS file: /cvsroot/hibernate/Hibernate2/src/net/sf/hibernate/hql/WhereParser.java,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** WhereParser.java 2 Mar 2003 06:58:49 -0000 1.10 --- WhereParser.java 3 Mar 2003 09:31:06 -0000 1.11 *************** *** 237,241 **** throw new QueryException("MappingException occurred compiling subquery", me ); } ! appendToken( q, subq.getScalarSelectSQL() ); inSubselect = false; bracketsSinceSelect=0; --- 237,241 ---- throw new QueryException("MappingException occurred compiling subquery", me ); } ! appendToken( q, subq.getSQLString() ); inSubselect = false; bracketsSinceSelect=0; |