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