|
From: <one...@us...> - 2003-01-20 12:48:42
|
Update of /cvsroot/hibernate/Hibernate2/src/net/sf/hibernate/collection
In directory sc8-pr-cvs1:/tmp/cvs-serv2323/sf/hibernate/collection
Modified Files:
CollectionPersister.java
Log Message:
major refactoring to create SQL Generation layer
more efficient queries against normalized mappings
Index: CollectionPersister.java
===================================================================
RCS file: /cvsroot/hibernate/Hibernate2/src/net/sf/hibernate/collection/CollectionPersister.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** CollectionPersister.java 14 Jan 2003 13:42:07 -0000 1.4
--- CollectionPersister.java 20 Jan 2003 12:48:09 -0000 1.5
***************
*** 28,34 ****
--- 28,40 ----
import net.sf.hibernate.mapping.Table;
import net.sf.hibernate.metadata.CollectionMetadata;
+ import net.sf.hibernate.sql.Delete;
+ import net.sf.hibernate.sql.Insert;
+ import net.sf.hibernate.sql.SelectFragment;
+ import net.sf.hibernate.sql.SimpleSelect;
+ import net.sf.hibernate.sql.Update;
import net.sf.hibernate.type.EntityType;
import net.sf.hibernate.type.PersistentCollectionType;
import net.sf.hibernate.type.Type;
+ import net.sf.hibernate.util.ArrayHelper;
import net.sf.hibernate.util.JDBCExceptionReporter;
import net.sf.hibernate.util.StringHelper;
***************
*** 242,247 ****
StringBuffer result = new StringBuffer();
while ( tokens.hasMoreTokens() ) {
! result.append(alias).append('.').append( tokens.nextToken().trim() );
! if ( tokens.hasMoreTokens() ) result.append(", ");
}
return result.toString();
--- 248,253 ----
StringBuffer result = new StringBuffer();
while ( tokens.hasMoreTokens() ) {
! result.append(alias).append(StringHelper.DOT).append( tokens.nextToken().trim() );
! if ( tokens.hasMoreTokens() ) result.append(StringHelper.COMMA_SPACE);
}
return result.toString();
***************
*** 264,271 ****
}
- /*public String getSQLSelectRowString() {
- return sqlSelectRowString;
- }*/
-
private String getSQLInsertRowString() {
return sqlInsertRowString;
--- 270,273 ----
***************
*** 333,387 ****
}
private String sqlSelectString() {
! boolean appendIndex = true;
! StringBuffer buf = new StringBuffer("select ");
! for ( int i=0; i<elementColumnNames.length; i++ ) {
! buf.append( elementColumnNames[i] );
! if ( i<elementColumnNames.length-1 ) {
! buf.append(", ");
! }
! //Jon Lipsky's patch to allow a Map from id's to objects
! if ( hasIndex && indexColumnNames.length==1 && ( elementColumnNames[i].equals( indexColumnNames[0] ) ) ) {
! appendIndex = false;
! }
! }
! if ( hasIndex && appendIndex ) {
! for (int i=0; i<indexColumnNames.length; i++) {
! buf.append(", ").append( indexColumnNames[i] );
! }
! }
! buf.append( " from " )
! .append(qualifiedTableName)
! .append( " where " )
! .append( StringHelper.join( " = ? and ", keyColumnNames ) )
! .append( " = ?");
! if (hasOrder) buf.append(" order by ").append(sqlOrderByString);
! return buf.toString();
}
private String sqlDeleteString() {
if (isOneToMany) {
! StringBuffer buf = new StringBuffer("update ")
! .append(qualifiedTableName)
! .append( " set " )
! .append( StringHelper.join( " = null, ", keyColumnNames ) )
! .append( " = null" );
! if ( hasIndex ) {
! buf.append(", ")
! .append( StringHelper.join( " = null, ", indexColumnNames ) )
! .append( " = null" );
! }
! buf.append( " where " )
! .append( StringHelper.join( " = ? and ", keyColumnNames ) )
! .append( " = ?" );
! return buf.toString();
}
else {
! return new StringBuffer("delete from ")
! .append(qualifiedTableName)
! .append(" where ")
! .append( StringHelper.join( " = ? and ", keyColumnNames ) )
! .append(" = ?")
! .toString();
}
}
--- 335,375 ----
}
+ /**
+ * Generate a list of collection index and element columns
+ */
+ public String selectClauseFragment(String alias) {
+ SelectFragment frag = new SelectFragment()
+ .setSuffix(StringHelper.EMPTY_STRING)
+ .addColumns(alias, elementColumnNames);
+ if (hasIndex) frag.addColumns(alias, indexColumnNames);
+ return frag.toFragmentString()
+ .substring(2); //strip leading ','
+ }
+
private String sqlSelectString() {
! //TODO: Jon Lipsky's patch to allow a Map from id's to objects
! SimpleSelect select = new SimpleSelect()
! .setTableName(qualifiedTableName)
! .addColumns(elementColumnNames);
! if (hasIndex) select.addColumns(indexColumnNames);
! select.addCondition( keyColumnNames, "=?" );
! if (hasOrder) select.setOrderBy(sqlOrderByString);
! return select.toStatementString();
}
private String sqlDeleteString() {
if (isOneToMany) {
! Update update = new Update()
! .setTableName(qualifiedTableName)
! .addColumns(keyColumnNames, "null");
! if (hasIndex) update.addColumns(indexColumnNames, "null");
! return update.setPrimaryKeyColumnNames(keyColumnNames)
! .toStatementString();
}
else {
! return new Delete()
! .setTableName(qualifiedTableName)
! .setPrimaryKeyColumnNames(keyColumnNames)
! .toStatementString();
}
}
***************
*** 389,431 ****
private String sqlInsertRowString() {
if (isOneToMany) {
! StringBuffer buf = new StringBuffer("update ")
! .append(qualifiedTableName)
! .append( " set " )
! .append( StringHelper.join( " = ?, ", keyColumnNames ) )
! .append( " = ?");
! if (hasIndex) {
! buf.append( ", " )
! .append( StringHelper.join( " = ?, ", indexColumnNames ) )
! .append( " = ?");
! }
! buf.append( " where " )
! .append( StringHelper.join( " = ? and ", elementColumnNames ) )
! .append( " = ?" );
! return buf.toString();
}
else {
! StringBuffer buf = new StringBuffer("insert into ")
! .append(qualifiedTableName)
! .append(" ( ")
! .append( StringHelper.join( ", ", keyColumnNames ) );
! if (hasIndex) {
! buf.append(", ").append( StringHelper.join(", ", indexColumnNames) );
! }
! for ( int i=0; i<elementColumnNames.length; i++) {
! buf.append( ", " ).append( elementColumnNames[i] );
! }
! buf.append(" ) values ( ?");
! buf.append( StringHelper.repeat(
! ", ?",
! elementColumnNames.length + keyColumnNames.length - 1 + ( hasIndex ? indexColumnNames.length:0 ) )
! );
! return buf.append(" )").toString();
}
}
!
! /*private String sqlSelectRowString() {
! return ""; //TODO
! }*/
!
private String sqlUpdateRowString() {
if (isOneToMany) {
--- 377,397 ----
private String sqlInsertRowString() {
if (isOneToMany) {
! Update update = new Update()
! .setTableName(qualifiedTableName)
! .addColumns(keyColumnNames);
! if (hasIndex) update.addColumns(indexColumnNames);
! return update.setPrimaryKeyColumnNames(elementColumnNames)
! .toStatementString();
}
else {
! Insert insert = new Insert(null)
! .setTableName(qualifiedTableName)
! .addColumns(keyColumnNames);
! if (hasIndex) insert.addColumns(indexColumnNames);
! return insert.addColumns(elementColumnNames)
! .toStatementString();
}
}
!
private String sqlUpdateRowString() {
if (isOneToMany) {
***************
*** 433,455 ****
}
else {
! return new StringBuffer("update ")
! .append(qualifiedTableName)
! .append(" set ")
! .append( StringHelper.join( " = ?, ", elementColumnNames ) )
! .append(" = ? where ")
! .append( StringHelper.join( " = ? and ", keyColumnNames ) )
! .append( " = ? and " )
! .append( StringHelper.join( " = ? and ", rowSelectColumnNames ) )
! .append(" = ?")
! .toString();
}
}
private String sqlDeleteRowString() {
! return new StringBuffer( sqlDeleteString() )
! .append(" and ")
! .append( StringHelper.join( " = ? and ", rowSelectColumnNames ) )
! .append(" = ?")
! .toString();
}
--- 399,426 ----
}
else {
! return new Update()
! .setTableName(qualifiedTableName)
! .addColumns(elementColumnNames)
! .setPrimaryKeyColumnNames( ArrayHelper.join(keyColumnNames, rowSelectColumnNames) )
! .toStatementString();
}
}
private String sqlDeleteRowString() {
! String[] pkColumns = ArrayHelper.join(keyColumnNames, rowSelectColumnNames);
! if (isOneToMany) {
! Update update = new Update()
! .setTableName(qualifiedTableName)
! .addColumns(keyColumnNames, "null");
! if (hasIndex) update.addColumns(indexColumnNames, "null");
! return update.setPrimaryKeyColumnNames(pkColumns)
! .toStatementString();
! }
! else {
! return new Delete()
! .setTableName(qualifiedTableName)
! .setPrimaryKeyColumnNames(pkColumns)
! .toStatementString();
! }
}
|