Update of /cvsroot/hibernate/Hibernate/cirrus/hibernate/loader In directory usw-pr-cvs1:/tmp/cvs-serv5635/hibernate/loader Modified Files: AnsiOuterJoinGenerator.java EntityLoader.java Loader.java OneToManyLoader.java OracleOuterJoinGenerator.java OuterJoinLoader.java Log Message: support for collections/associations with MultiTableEntityPersister Index: AnsiOuterJoinGenerator.java =================================================================== RCS file: /cvsroot/hibernate/Hibernate/cirrus/hibernate/loader/AnsiOuterJoinGenerator.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** AnsiOuterJoinGenerator.java 28 Sep 2002 00:57:24 -0000 1.2 --- AnsiOuterJoinGenerator.java 4 Nov 2002 08:10:48 -0000 1.3 *************** *** 27,33 **** String[] keyNames = assoc.subpersister.getIdentifierColumnNames(); for ( int j=0; j<assoc.foreignKeyColumns.length; j++) { ! buf.append( assoc.alias ) ! .append('.') ! .append( assoc.foreignKeyColumns[j] ) .append('=') .append(assoc.subalias) --- 27,31 ---- String[] keyNames = assoc.subpersister.getIdentifierColumnNames(); for ( int j=0; j<assoc.foreignKeyColumns.length; j++) { ! buf.append( assoc.foreignKeyColumns[j] ) .append('=') .append(assoc.subalias) Index: EntityLoader.java =================================================================== RCS file: /cvsroot/hibernate/Hibernate/cirrus/hibernate/loader/EntityLoader.java,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** EntityLoader.java 9 Oct 2002 09:14:23 -0000 1.7 --- EntityLoader.java 4 Nov 2002 08:10:49 -0000 1.8 *************** *** 40,44 **** selectString( persister, alias, suffixes[joins] ), // FROM CLAUSE ! persister.getTableName() + ' ' + alias, // OUTER JOINS (Insertion Point 1) outerJoinGenerator.outerJoinStringAfterFrom(associations), --- 40,44 ---- selectString( persister, alias, suffixes[joins] ), // FROM CLAUSE ! persister.fromClauseFragment(alias), // OUTER JOINS (Insertion Point 1) outerJoinGenerator.outerJoinStringAfterFrom(associations), Index: Loader.java =================================================================== RCS file: /cvsroot/hibernate/Hibernate/cirrus/hibernate/loader/Loader.java,v retrieving revision 1.23 retrieving revision 1.24 diff -C2 -d -r1.23 -r1.24 *** Loader.java 31 Oct 2002 14:00:26 -0000 1.23 --- Loader.java 4 Nov 2002 08:10:49 -0000 1.24 *************** *** 486,494 **** selectClause.length() + fromClause.length() + outerJoinsAfterFrom.length() + whereClause.length() + outerJoinsAfterWhere.length() + 20 ); ! buf.append("SELECT ").append(selectClause). ! append(" FROM ").append(fromClause). ! append(outerJoinsAfterFrom). ! append(" WHERE ").append(whereClause). ! append(outerJoinsAfterWhere) ; if (orderByClause!=null) buf.append(" ORDER BY ").append(orderByClause); return buf.toString(); --- 486,494 ---- selectClause.length() + fromClause.length() + outerJoinsAfterFrom.length() + whereClause.length() + outerJoinsAfterWhere.length() + 20 ); ! buf.append("SELECT ").append(selectClause) ! .append(" FROM ").append(fromClause) ! .append(outerJoinsAfterFrom) ! .append(" WHERE ").append(whereClause) ! .append(outerJoinsAfterWhere); if (orderByClause!=null) buf.append(" ORDER BY ").append(orderByClause); return buf.toString(); Index: OneToManyLoader.java =================================================================== RCS file: /cvsroot/hibernate/Hibernate/cirrus/hibernate/loader/OneToManyLoader.java,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** OneToManyLoader.java 21 Oct 2002 18:21:10 -0000 1.9 --- OneToManyLoader.java 4 Nov 2002 08:10:49 -0000 1.10 *************** *** 52,56 **** selectString( persister, alias, suffixes[joins] ), // FROM CLAUSE ! persister.getTableName() + ' ' + alias, // OUTER JOINS (Insertion Point 1) outerJoinGenerator.outerJoinStringAfterFrom(associations), --- 52,56 ---- selectString( persister, alias, suffixes[joins] ), // FROM CLAUSE ! persister.fromClauseFragment(alias), // OUTER JOINS (Insertion Point 1) outerJoinGenerator.outerJoinStringAfterFrom(associations), Index: OracleOuterJoinGenerator.java =================================================================== RCS file: /cvsroot/hibernate/Hibernate/cirrus/hibernate/loader/OracleOuterJoinGenerator.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** OracleOuterJoinGenerator.java 29 Sep 2002 02:42:05 -0000 1.3 --- OracleOuterJoinGenerator.java 4 Nov 2002 08:10:50 -0000 1.4 *************** *** 30,35 **** for ( int j=0; j<assoc.foreignKeyColumns.length; j++) { buf.append(" AND ") - .append( assoc.alias ) - .append('.') .append( assoc.foreignKeyColumns[j] ) .append('=') --- 30,33 ---- Index: OuterJoinLoader.java =================================================================== RCS file: /cvsroot/hibernate/Hibernate/cirrus/hibernate/loader/OuterJoinLoader.java,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** OuterJoinLoader.java 31 Oct 2002 14:00:26 -0000 1.10 --- OuterJoinLoader.java 4 Nov 2002 08:10:50 -0000 1.11 *************** *** 46,50 **** Loadable subpersister; String[] foreignKeyColumns; // belong to persister - String alias; String subalias; } --- 46,49 ---- *************** *** 145,150 **** Loadable subpersister = (Loadable) session.getPersister( type.getPersistentClass() ); if ( !classPersisters.contains(subpersister) ) { // to avoid navigating back up bidirectional associations (and circularities) ! OuterJoinableAssociation assoc = new OuterJoinableAssociation(); associations.add(assoc); --- 144,152 ---- Loadable subpersister = (Loadable) session.getPersister( type.getPersistentClass() ); + //TODO: remove this: + if ( subpersister instanceof MultiTableEntityPersister ) return; + if ( !classPersisters.contains(subpersister) ) { // to avoid navigating back up bidirectional associations (and circularities) ! OuterJoinableAssociation assoc = new OuterJoinableAssociation(); associations.add(assoc); *************** *** 153,163 **** assoc.subpersister = subpersister; if ( type.isOneToOne() ) { ! assoc.foreignKeyColumns = ( (Loadable) persister ).getIdentifierColumnNames(); ! //The cast is safe because collections can't contain a 1-to-1 } else { ! assoc.foreignKeyColumns = columns; } - assoc.alias = alias; String subalias = alias( subpersister.getTableName(), associations.size() ); assoc.subalias = subalias; --- 155,170 ---- assoc.subpersister = subpersister; if ( type.isOneToOne() ) { ! assoc.foreignKeyColumns = StringHelper.prefix( ! ( (Loadable) persister ).getIdentifierColumnNames(), //The cast is safe because collections can't contain a 1-to-1 ! alias + '.' ! ); } + /*else if ( persister instanceof Loadable ) { + //TODO: deal with MultiTableEntityPersister HERE + }*/ else { ! // for a collection ! assoc.foreignKeyColumns = StringHelper.prefix(columns, alias + '.'); } String subalias = alias( subpersister.getTableName(), associations.size() ); assoc.subalias = subalias; *************** *** 202,205 **** --- 209,213 ---- private static final void appendSelectString(StringBuffer buf, Loadable persister, String alias, String suffix) { + //TODO: refactor this bit onto AbstractEntityPersister (its repeated in Query stuff) String[] keyCols = persister.getIdentifierColumnNames(); for ( int j=0; j<keyCols.length; j++) { *************** *** 208,230 **** .append( keyCols[j] ) .append(" AS ") ! .append( aliasColumn(keyCols[j], suffix )); if ( j != keyCols.length-1 ) buf.append(", "); } ! if ( persister.hasSubclasses() ) ! buf.append(", ") ! .append(alias) ! .append('.') ! .append( persister.getDiscriminatorColumnName() ) ! .append(" AS ") ! .append( aliasColumn(persister.getDiscriminatorColumnName(), suffix )); ! String[] cols = persister.getSubclassColumnClosure(); ! for ( int j=0; j<cols.length; j++ ) { ! buf.append(", ") ! .append( alias ) ! .append('.') ! .append( cols[j] ) ! .append(" AS ") ! .append( aliasColumn(cols[j], suffix )); ! } } --- 216,223 ---- .append( keyCols[j] ) .append(" AS ") ! .append( aliasColumn( keyCols[j], suffix ) ); if ( j != keyCols.length-1 ) buf.append(", "); } ! buf.append( persister.propertySelectClauseFragment(alias, suffix) ); } |