Update of /cvsroot/hibernate/Hibernate/cirrus/hibernate/loader In directory sc8-pr-cvs1:/tmp/cvs-serv5218/hibernate/loader Modified Files: AnsiOuterJoinGenerator.java EntityLoader.java OneToManyLoader.java OracleOuterJoinGenerator.java OuterJoinGenerator.java Log Message: improved SQL for <joined-subclass> mappings Index: AnsiOuterJoinGenerator.java =================================================================== RCS file: /cvsroot/hibernate/Hibernate/cirrus/hibernate/loader/AnsiOuterJoinGenerator.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** AnsiOuterJoinGenerator.java 25 Nov 2002 02:21:09 -0000 1.5 --- AnsiOuterJoinGenerator.java 25 Nov 2002 07:25:20 -0000 1.6 *************** *** 15,21 **** } ! public final String appendOuterJoinStringAfterFrom(StringBuffer buf, String tableName, String alias, String[] fkColumns, String[] pkColumns) { ! buf.append(" LEFT OUTER JOIN ") .append(tableName) .append(' ') --- 15,21 ---- } ! public final String appendOuterJoinStringAfterFrom(StringBuffer buf, String tableName, String alias, String[] fkColumns, String[] pkColumns, boolean innerJoin) { ! buf.append( innerJoin ? " INNER JOIN " : " LEFT OUTER JOIN ") .append(tableName) .append(' ') *************** *** 34,38 **** } ! public final String appendOuterJoinStringAfterWhere(StringBuffer buf, String alias, String[] fkColumns, String[] pkColumns) { return EMPTY_STRING; } --- 34,38 ---- } ! public final String appendOuterJoinStringAfterWhere(StringBuffer buf, String alias, String[] fkColumns, String[] pkColumns, boolean innerJoin) { return EMPTY_STRING; } Index: EntityLoader.java =================================================================== RCS file: /cvsroot/hibernate/Hibernate/cirrus/hibernate/loader/EntityLoader.java,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** EntityLoader.java 5 Nov 2002 06:46:06 -0000 1.10 --- EntityLoader.java 25 Nov 2002 07:25:20 -0000 1.11 *************** *** 43,47 **** selectString( persister, alias, suffixes[joins] ), // FROM CLAUSE ! persister.fromClauseFragment(alias), // OUTER JOINS (Insertion Point 1) outerJoinGenerator.outerJoinStringAfterFrom(associations), --- 43,47 ---- selectString( persister, alias, suffixes[joins] ), // FROM CLAUSE ! persister.fromClauseFragment(alias, true), // OUTER JOINS (Insertion Point 1) outerJoinGenerator.outerJoinStringAfterFrom(associations), *************** *** 49,53 **** whereString( persister.getIdentifierColumnNames(), alias ), // OUTER JOINS (Insertion Point 2) ! outerJoinGenerator.outerJoinStringAfterWhere(associations) ); --- 49,54 ---- whereString( persister.getIdentifierColumnNames(), alias ), // OUTER JOINS (Insertion Point 2) ! outerJoinGenerator.outerJoinStringAfterWhere(associations) + ! persister.outerJoinsAfterWhere(alias, true) ); Index: OneToManyLoader.java =================================================================== RCS file: /cvsroot/hibernate/Hibernate/cirrus/hibernate/loader/OneToManyLoader.java,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** OneToManyLoader.java 5 Nov 2002 06:46:06 -0000 1.11 --- OneToManyLoader.java 25 Nov 2002 07:25:20 -0000 1.12 *************** *** 55,59 **** selectString( persister, alias, suffixes[joins] ), // FROM CLAUSE ! persister.fromClauseFragment(alias), // OUTER JOINS (Insertion Point 1) outerJoinGenerator.outerJoinStringAfterFrom(associations), --- 55,59 ---- selectString( persister, alias, suffixes[joins] ), // FROM CLAUSE ! persister.fromClauseFragment(alias, true), // OUTER JOINS (Insertion Point 1) outerJoinGenerator.outerJoinStringAfterFrom(associations), *************** *** 61,65 **** whereString( collPersister.getKeyColumnNames(), alias ), // OUTER JOINS (Insertion Point 2) ! outerJoinGenerator.outerJoinStringAfterWhere(associations), // ORDER BY CLAUSE collPersister.hasOrdering() ? --- 61,66 ---- whereString( collPersister.getKeyColumnNames(), alias ), // OUTER JOINS (Insertion Point 2) ! outerJoinGenerator.outerJoinStringAfterWhere(associations) + ! persister.outerJoinsAfterWhere(alias, true), // ORDER BY CLAUSE collPersister.hasOrdering() ? Index: OracleOuterJoinGenerator.java =================================================================== RCS file: /cvsroot/hibernate/Hibernate/cirrus/hibernate/loader/OracleOuterJoinGenerator.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** OracleOuterJoinGenerator.java 25 Nov 2002 02:21:09 -0000 1.5 --- OracleOuterJoinGenerator.java 25 Nov 2002 07:25:20 -0000 1.6 *************** *** 13,17 **** } ! public final String appendOuterJoinStringAfterFrom(StringBuffer buf, String tableName, String alias, String[] fkColumns, String[] pkColumns) { buf.append(", ") --- 13,17 ---- } ! public final String appendOuterJoinStringAfterFrom(StringBuffer buf, String tableName, String alias, String[] fkColumns, String[] pkColumns, boolean innerJoin) { buf.append(", ") *************** *** 22,26 **** } ! public final String appendOuterJoinStringAfterWhere(StringBuffer buf, String alias, String[] fkColumns, String[] pkColumns) { for ( int j=0; j<fkColumns.length; j++) { --- 22,26 ---- } ! public final String appendOuterJoinStringAfterWhere(StringBuffer buf, String alias, String[] fkColumns, String[] pkColumns, boolean innerJoin) { for ( int j=0; j<fkColumns.length; j++) { *************** *** 30,35 **** .append(alias) .append('.') ! .append( pkColumns[j] ) ! .append("(+)"); } return buf.toString(); --- 30,35 ---- .append(alias) .append('.') ! .append( pkColumns[j] ); ! if (!innerJoin) buf.append("(+)"); } return buf.toString(); Index: OuterJoinGenerator.java =================================================================== RCS file: /cvsroot/hibernate/Hibernate/cirrus/hibernate/loader/OuterJoinGenerator.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** OuterJoinGenerator.java 25 Nov 2002 02:21:09 -0000 1.4 --- OuterJoinGenerator.java 25 Nov 2002 07:25:20 -0000 1.5 *************** *** 26,32 **** oj.subalias, oj.foreignKeyColumns, ! oj.subpersister.getIdentifierColumnNames() ); ! buf.append( oj.subpersister.outerJoinsAfterFrom(oj.subalias) ); } return buf.toString(); --- 26,33 ---- oj.subalias, oj.foreignKeyColumns, ! oj.subpersister.getIdentifierColumnNames(), ! false ); ! buf.append( oj.subpersister.outerJoinsAfterFrom(oj.subalias, false) ); } return buf.toString(); *************** *** 46,52 **** oj.subalias, oj.foreignKeyColumns, ! oj.subpersister.getIdentifierColumnNames() ); ! buf.append( oj.subpersister.outerJoinsAfterWhere(oj.subalias) ); } return buf.toString(); --- 47,54 ---- oj.subalias, oj.foreignKeyColumns, ! oj.subpersister.getIdentifierColumnNames(), ! false ); ! buf.append( oj.subpersister.outerJoinsAfterWhere(oj.subalias, false) ); } return buf.toString(); *************** *** 57,67 **** * To be inserted after the FROM clause. */ ! public abstract String appendOuterJoinStringAfterFrom(StringBuffer buf, String tableName, String alias, String[] fkColumns, String[] pkColumns); /** ! * Generate a <tt>LEFT OUTER JOIN</tt> clause to the table of the entity class * To be inserted after the FROM clause. */ ! public abstract String appendOuterJoinStringAfterWhere(StringBuffer buf, String alias, String[] fkColumns, String[] pkColumns); } --- 59,69 ---- * To be inserted after the FROM clause. */ ! public abstract String appendOuterJoinStringAfterFrom(StringBuffer buf, String tableName, String alias, String[] fkColumns, String[] pkColumns, boolean innerJoin); /** ! * Generate a <tt>ON</tt> clause to the table of the entity class * To be inserted after the FROM clause. */ ! public abstract String appendOuterJoinStringAfterWhere(StringBuffer buf, String alias, String[] fkColumns, String[] pkColumns, boolean innerJoin); } |