From: <one...@us...> - 2003-02-23 07:22:14
|
Update of /cvsroot/hibernate/Hibernate2/src/net/sf/hibernate/hql In directory sc8-pr-cvs1:/tmp/cvs-serv25986/hql Modified Files: FromParser.java PathExpressionParser.java QueryTranslator.java WhereParser.java Log Message: continued refactoring of hql package Index: FromParser.java =================================================================== RCS file: /cvsroot/hibernate/Hibernate2/src/net/sf/hibernate/hql/FromParser.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** FromParser.java 23 Feb 2003 01:32:20 -0000 1.5 --- FromParser.java 23 Feb 2003 07:22:11 -0000 1.6 *************** *** 7,12 **** import net.sf.hibernate.QueryException; import net.sf.hibernate.persister.Loadable; ! import net.sf.hibernate.sql.OuterJoinFragment; ! import net.sf.hibernate.sql.QueryOuterJoinFragment; import net.sf.hibernate.util.StringHelper; --- 7,12 ---- import net.sf.hibernate.QueryException; import net.sf.hibernate.persister.Loadable; ! import net.sf.hibernate.sql.JoinFragment; ! import net.sf.hibernate.sql.QueryJoinFragment; import net.sf.hibernate.util.StringHelper; *************** *** 75,79 **** if (fromClass) { Loadable p = q.getPersisterUsingImports(token); ! OuterJoinFragment ojf = new QueryOuterJoinFragment(); ojf.addCrossJoin( p.getTableName(), name ); q.addFromType( name, p.getMappedClass(), ojf ); --- 75,79 ---- if (fromClass) { Loadable p = q.getPersisterUsingImports(token); ! JoinFragment ojf = new QueryJoinFragment(); ojf.addCrossJoin( p.getTableName(), name ); q.addFromType( name, p.getMappedClass(), ojf ); *************** *** 82,86 **** peParser.presetCollectionName(name); ParserHelper.parse(peParser, token, ParserHelper.PATH_SEPERATORS, q); ! peParser.addFromCollection(q, name, OuterJoinFragment.INNER_JOIN); } name = null; --- 82,86 ---- peParser.presetCollectionName(name); ParserHelper.parse(peParser, token, ParserHelper.PATH_SEPERATORS, q); ! peParser.addFromCollection(q, name, JoinFragment.INNER_JOIN); } name = null; Index: PathExpressionParser.java =================================================================== RCS file: /cvsroot/hibernate/Hibernate2/src/net/sf/hibernate/hql/PathExpressionParser.java,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** PathExpressionParser.java 23 Feb 2003 01:32:20 -0000 1.7 --- PathExpressionParser.java 23 Feb 2003 07:22:11 -0000 1.8 *************** *** 10,15 **** import net.sf.hibernate.persister.Loadable; import net.sf.hibernate.persister.Queryable; ! import net.sf.hibernate.sql.OuterJoinFragment; ! import net.sf.hibernate.sql.QueryOuterJoinFragment; import net.sf.hibernate.type.EntityType; import net.sf.hibernate.type.PersistentCollectionType; --- 10,15 ---- import net.sf.hibernate.persister.Loadable; import net.sf.hibernate.persister.Queryable; ! import net.sf.hibernate.sql.JoinFragment; ! import net.sf.hibernate.sql.QueryJoinFragment; import net.sf.hibernate.type.EntityType; import net.sf.hibernate.type.PersistentCollectionType; *************** *** 36,40 **** protected String currentName; protected String currentProperty; ! protected OuterJoinFragment join; protected String[] columns; protected String[] collectionElementColumns; --- 36,40 ---- protected String currentName; protected String currentProperty; ! protected JoinFragment join; protected String[] columns; protected String[] collectionElementColumns; *************** *** 56,60 **** private void addJoin(String table, String name, String[] rhsCols, QueryTranslator q) throws QueryException { String[] lhsCols = currentColumns(q); ! join.addJoin(table, name, lhsCols, rhsCols, OuterJoinFragment.INNER_JOIN); } --- 56,60 ---- private void addJoin(String table, String name, String[] rhsCols, QueryTranslator q) throws QueryException { String[] lhsCols = currentColumns(q); ! join.addJoin(table, name, lhsCols, rhsCols, JoinFragment.INNER_JOIN); } *************** *** 65,69 **** q.addType(currentName, clazz); Loadable p = q.getPersister(clazz); ! join.addJoin( p.getTableName(), currentName, joinColumns, p.getIdentifierColumnNames(), OuterJoinFragment.INNER_JOIN ); return currentName; } --- 65,69 ---- q.addType(currentName, clazz); Loadable p = q.getPersister(clazz); ! join.addJoin( p.getTableName(), currentName, joinColumns, p.getIdentifierColumnNames(), JoinFragment.INNER_JOIN ); return currentName; } *************** *** 77,85 **** reset(); //reset the dotcount (but not the path) currentName = alias; //after reset! ! OuterJoinFragment ojf = q.getPathJoin(path); ! join.addJoins( ! StringHelper.EMPTY_STRING, //ojf.toFromFragmentString(), ! ojf.toWhereFragmentString() ! ); //after reset! } else if ( ".".equals(token) ) { --- 77,82 ---- reset(); //reset the dotcount (but not the path) currentName = alias; //after reset! ! JoinFragment ojf = q.getPathJoin(path); ! join.addCondition( ojf.toWhereFragmentString() ); //after reset! } else if ( ".".equals(token) ) { *************** *** 220,224 **** private void reset() { ! join = new QueryOuterJoinFragment(); dotcount=0; currentName=null; --- 217,221 ---- private void reset() { ! join = new QueryJoinFragment(); dotcount=0; currentName=null; *************** *** 287,291 **** q.addCollection(collectionName, collectionRole); ! OuterJoinFragment ojf = new QueryOuterJoinFragment(); ojf.addCrossJoin( memberPersister.getQualifiedTableName(), collectionName ); q.addJoin(collectionName, ojf); --- 284,288 ---- q.addCollection(collectionName, collectionRole); ! JoinFragment ojf = new QueryJoinFragment(); ojf.addCrossJoin( memberPersister.getQualifiedTableName(), collectionName ); q.addJoin(collectionName, ojf); *************** *** 308,312 **** String alias; String[] elementColumns; ! OuterJoinFragment join; StringBuffer indexValue = new StringBuffer(); } --- 305,309 ---- String alias; String[] elementColumns; ! JoinFragment join; StringBuffer indexValue = new StringBuffer(); } *************** *** 331,335 **** } ! public OuterJoinFragment getWhereJoin() { return join; } --- 328,332 ---- } ! public JoinFragment getWhereJoin() { return join; } Index: QueryTranslator.java =================================================================== RCS file: /cvsroot/hibernate/Hibernate2/src/net/sf/hibernate/hql/QueryTranslator.java,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** QueryTranslator.java 23 Feb 2003 01:32:20 -0000 1.11 --- QueryTranslator.java 23 Feb 2003 07:22:11 -0000 1.12 *************** *** 32,37 **** import net.sf.hibernate.persister.Loadable; import net.sf.hibernate.persister.Queryable; ! import net.sf.hibernate.sql.OuterJoinFragment; ! import net.sf.hibernate.sql.QueryOuterJoinFragment; import net.sf.hibernate.type.EntityType; import net.sf.hibernate.type.Type; --- 32,37 ---- import net.sf.hibernate.persister.Loadable; import net.sf.hibernate.persister.Queryable; ! import net.sf.hibernate.sql.JoinFragment; ! import net.sf.hibernate.sql.QueryJoinFragment; import net.sf.hibernate.type.EntityType; import net.sf.hibernate.type.Type; *************** *** 83,87 **** private List returnTypes = new ArrayList(); private final List fromTypes = new ArrayList(); - private final Map fromJoins = new HashMap(); private final List scalarTypes = new ArrayList(); private final Map namedParameters = new HashMap(); --- 83,86 ---- *************** *** 281,294 **** } - Queryable getEntityPersisterForName(String name) throws QueryException { - Class type = getType(name); - if (type==null) { - return null; - } - else { - return getPersister(type); - } - } - Queryable getPersisterForName(String name) throws QueryException { Class type = getType(name); --- 280,283 ---- *************** *** 347,355 **** } ! void addFromType(String name, Class type, OuterJoinFragment join) { addType(name, type); fromTypes.add(name); ! fromJoins.put(name, join); ! //addJoin(join); //TODO: remove this!! } --- 336,343 ---- } ! void addFromType(String name, Class type, JoinFragment join) { addType(name, type); fromTypes.add(name); ! addJoin(name, join); } *************** *** 386,390 **** } ! void addJoin(String name, OuterJoinFragment newjoin) { if ( !joins.containsKey(name) ) { joins.put(name, newjoin); --- 374,378 ---- } ! void addJoin(String name, JoinFragment newjoin) { if ( !joins.containsKey(name) ) { joins.put(name, newjoin); *************** *** 452,460 **** String outerJoinedProperties=null; ! OuterJoinFragment outerjoin=null; String selectProperties; String selectIdentifiers; ! if (false) { ! //if ( !isShallowQuery() && returnTypes.size()==1 && typeMap.size()==1 ) { OuterJoinLoader ojl = new OuterJoinLoader( factory.getDialect() ); String name = (String) returnTypes.get(0); --- 440,447 ---- String outerJoinedProperties=null; ! JoinFragment outerjoin=null; String selectProperties; String selectIdentifiers; ! if ( !isShallowQuery() && returnTypes.size()==1 && typeMap.size()==1 ) { OuterJoinLoader ojl = new OuterJoinLoader( factory.getDialect() ); String name = (String) returnTypes.get(0); *************** *** 499,506 **** if ( outerJoinedProperties!=null && outerJoinedProperties.length() > 0 ) selectPropertiesString += ", " + outerJoinedProperties; //TODO: for some dialiects it would be appropriate to add the renderOrderByPropertiesSelect() to other select strings ! OuterJoinFragment mergedJoins = mergeJoins(outerjoin); ! fromWhereString = " FROM" + mergedJoins.toFromFragmentString().substring(1) + renderWhereClause(mergedJoins, outerjoin); ! ! //System.out.println( ">>>> " + renderFromClause(outerjoin) ); if ( scalarTypes.size()!=size ) { --- 486,491 ---- if ( outerJoinedProperties!=null && outerJoinedProperties.length() > 0 ) selectPropertiesString += ", " + outerJoinedProperties; //TODO: for some dialiects it would be appropriate to add the renderOrderByPropertiesSelect() to other select strings ! JoinFragment mergedJoins = mergeJoins(outerjoin); ! fromWhereString = " FROM" + mergedJoins.toFromFragmentString().substring(1) + renderWhereClause(mergedJoins); if ( scalarTypes.size()!=size ) { *************** *** 645,650 **** } ! private OuterJoinFragment mergeJoins(OuterJoinFragment outerjoin) throws MappingException, QueryException { ! OuterJoinFragment ojf = new QueryOuterJoinFragment(); //classes --- 630,635 ---- } ! private JoinFragment mergeJoins(JoinFragment outerjoin) throws MappingException, QueryException { ! JoinFragment ojf = new QueryJoinFragment(); //classes *************** *** 655,659 **** boolean includeSubclasses = returnTypes.contains(name) && !isShallowQuery(); ! OuterJoinFragment join = (OuterJoinFragment) fromJoins.get(name); if (join!=null) { ojf.addFragment(join); --- 640,644 ---- boolean includeSubclasses = returnTypes.contains(name) && !isShallowQuery(); ! JoinFragment join = (JoinFragment) joins.get(name); if (join!=null) { ojf.addFragment(join); *************** *** 667,683 **** // add any outerjoins required for association fetching // TODO: (need to move inside loop, eventually) ! if (outerjoin!=null) ojf.addJoins( outerjoin.toFromFragmentString(), StringHelper.EMPTY_STRING ); ! iter = joins.entrySet().iterator(); while ( iter.hasNext() ) { ! Map.Entry e = (Map.Entry) iter.next(); ! String name = (String) e.getKey(); ! if ( !fromJoins.containsKey(name) ) { //TODO: I hate this.... ! ojf.addFragment( (OuterJoinFragment) e.getValue() ); ! Queryable p = getEntityPersisterForName(name); ! if (p!=null) { ! ojf.addJoins( p.fromJoinFragment(name, true, false), StringHelper.EMPTY_STRING ); ! } ! } } --- 652,661 ---- // add any outerjoins required for association fetching // TODO: (need to move inside loop, eventually) ! if (outerjoin!=null) ojf.addFragment(outerjoin); ! iter = collections.keySet().iterator(); while ( iter.hasNext() ) { ! JoinFragment collJoin = (JoinFragment) joins.get( (String) iter.next() ); ! if (collJoin!=null) ojf.addFragment(collJoin); } *************** *** 685,723 **** } ! /*private String renderFromClause(OuterJoinFragment outerjoin) throws QueryException, MappingException { ! //FROM ! StringBuffer buf = new StringBuffer(120) ! .append(" FROM"); ! Iterator iter = typeMap.keySet().iterator(); ! while ( iter.hasNext() ) { ! //render the " foo_table foo," bit ! String name = (String) iter.next(); ! Queryable p = getPersisterForName(name); ! boolean includeSubclasses = returnTypes.contains(name) && !isShallowQuery(); ! buf.append(' ') ! .append( p.fromTableFragment(name) ) ! .append( p.fromJoinFragment(name, true, includeSubclasses) ); ! if ( iter.hasNext() || collections.size()!=0 ) buf.append(','); ! } ! ! // add any outerjoins required for association fetching ! // TODO: (need to move inside loop, eventually) ! if (outerjoin!=null) buf.append( outerjoin.toFromFragmentString() ); ! ! iter = collections.entrySet().iterator(); ! while ( iter.hasNext() ) { ! buf.append(' '); ! Map.Entry entry = (Map.Entry) iter.next(); ! String name = (String) entry.getKey(); ! String role = (String) entry.getValue(); ! CollectionPersister p = getCollectionPersister(role); ! buf.append( p.getQualifiedTableName() ).append(' ').append(name); ! if ( iter.hasNext() ) buf.append(','); ! } ! ! return buf.toString(); ! }*/ ! ! private String renderWhereClause(OuterJoinFragment mergedJoins, OuterJoinFragment outerjoin) throws QueryException, MappingException { //SET UP IDENTIFIER SPACES. TODO: move elsewhere! --- 663,667 ---- } ! private String renderWhereClause(JoinFragment mergedJoins) throws QueryException, MappingException { //SET UP IDENTIFIER SPACES. TODO: move elsewhere! *************** *** 730,743 **** } - // add any outerjoins required for fetching associations - // TODO: (need to move inside loop, eventually) - String part1; - if (outerjoin!=null) { - part1 = outerjoin.toWhereFragmentString().substring(5); //remove the leading " and " - } - else { - part1=""; - } - StringBuffer buf = new StringBuffer(120); --- 674,677 ---- *************** *** 748,763 **** String part3 = whereTokenBuf.toString().trim(); - boolean hasPart1 = part1.length()!=0; boolean hasPart2 = part2.length()!=0; boolean hasPart3 = part3.length()!=0; ! if ( hasPart1 || hasPart2 || hasPart3 ) buf.append(" WHERE "); ! if ( hasPart1 ) buf.append(part1); ! if ( hasPart1 && hasPart2 ) buf.append(" AND "); ! if ( hasPart2 ) buf.append( part2.substring(5) ); //remove leading "and " ! if ( hasPart3 ) { ! if ( hasPart1 || hasPart2 ) buf.append(" AND ("); buf.append(part3); ! if ( hasPart1 || hasPart2 ) buf.append(')'); } --- 682,694 ---- String part3 = whereTokenBuf.toString().trim(); boolean hasPart2 = part2.length()!=0; boolean hasPart3 = part3.length()!=0; ! if (hasPart2 || hasPart3) buf.append(" WHERE "); ! if (hasPart2) buf.append( part2.substring(5) ); //remove leading "and " ! if (hasPart3) { ! if (hasPart2) buf.append(" AND ("); buf.append(part3); ! if (hasPart2) buf.append(')'); } *************** *** 835,839 **** if (keyColumnNames.length!=1) throw new QueryException("composite-key collection in filter: " + collectionRole); ! OuterJoinFragment join = new QueryOuterJoinFragment(); if ( persister.isOneToMany() ) { join.addCrossJoin( persister.getQualifiedTableName(), elementName ); --- 766,770 ---- if (keyColumnNames.length!=1) throw new QueryException("composite-key collection in filter: " + collectionRole); ! JoinFragment join = new QueryJoinFragment(); if ( persister.isOneToMany() ) { join.addCrossJoin( persister.getQualifiedTableName(), elementName ); *************** *** 854,858 **** StringHelper.prefix(eltColumnNames, collectionName + StringHelper.DOT), idColumnNames, ! OuterJoinFragment.INNER_JOIN ); } --- 785,789 ---- StringHelper.prefix(eltColumnNames, collectionName + StringHelper.DOT), idColumnNames, ! JoinFragment.INNER_JOIN ); } *************** *** 869,877 **** } ! OuterJoinFragment getPathJoin(String path) { ! return (OuterJoinFragment) pathJoins.get(path); } ! void addPathAliasAndJoin(String path, String alias, OuterJoinFragment join) { pathAliases.put(path, alias); pathJoins.put( path, join.copy() ); --- 800,808 ---- } ! JoinFragment getPathJoin(String path) { ! return (JoinFragment) pathJoins.get(path); } ! void addPathAliasAndJoin(String path, String alias, JoinFragment join) { pathAliases.put(path, alias); pathJoins.put( path, join.copy() ); Index: WhereParser.java =================================================================== RCS file: /cvsroot/hibernate/Hibernate2/src/net/sf/hibernate/hql/WhereParser.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** WhereParser.java 23 Feb 2003 01:32:20 -0000 1.5 --- WhereParser.java 23 Feb 2003 07:22:11 -0000 1.6 *************** *** 14,19 **** import net.sf.hibernate.util.StringHelper; import net.sf.hibernate.persister.Queryable; ! import net.sf.hibernate.sql.OuterJoinFragment; ! import net.sf.hibernate.sql.QueryOuterJoinFragment; import net.sf.hibernate.type.EntityType; import net.sf.hibernate.type.LiteralType; --- 14,19 ---- import net.sf.hibernate.util.StringHelper; import net.sf.hibernate.persister.Queryable; ! import net.sf.hibernate.sql.JoinFragment; ! import net.sf.hibernate.sql.QueryJoinFragment; import net.sf.hibernate.type.EntityType; import net.sf.hibernate.type.LiteralType; *************** *** 371,376 **** } else { ! OuterJoinFragment ojf = pathExpressionParser.getWhereJoin(); ! OuterJoinFragment fromClause = new QueryOuterJoinFragment(); fromClause.addJoins( ojf.toFromFragmentString(), StringHelper.EMPTY_STRING ); q.addJoin( pathExpressionParser.getName(), fromClause ); --- 371,376 ---- } else { ! JoinFragment ojf = pathExpressionParser.getWhereJoin(); ! JoinFragment fromClause = new QueryJoinFragment(); fromClause.addJoins( ojf.toFromFragmentString(), StringHelper.EMPTY_STRING ); q.addJoin( pathExpressionParser.getName(), fromClause ); |