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) );
}
|