Update of /cvsroot/hibernate/Hibernate2/src/net/sf/hibernate/sql In directory sc8-pr-cvs1:/tmp/cvs-serv11798/sf/hibernate/sql Modified Files: ANSIOuterJoinFragment.java OracleOuterJoinFragment.java OuterJoinFragment.java Added Files: QueryOuterJoinFragment.java Log Message: refactored hql package (incomplete) --- NEW FILE: QueryOuterJoinFragment.java --- //$Id: QueryOuterJoinFragment.java,v 1.1 2003/02/23 01:32:21 oneovthafew Exp $ package net.sf.hibernate.sql; import net.sf.hibernate.util.StringHelper; public class QueryOuterJoinFragment extends OuterJoinFragment { private StringBuffer afterFrom = new StringBuffer(); private StringBuffer afterWhere = new StringBuffer(); public void addJoin(String tableName, String alias, String[] fkColumns, String[] pkColumns, int joinType) { addCrossJoin(tableName, alias); addCondition(alias, fkColumns, pkColumns); } public String toFromFragmentString() { return afterFrom.toString(); } public String toWhereFragmentString() { return afterWhere.toString(); } public void addJoins(String fromFragment, String whereFragment) { afterFrom.append(fromFragment); afterWhere.append(whereFragment); } public OuterJoinFragment copy() { QueryOuterJoinFragment copy = new QueryOuterJoinFragment(); copy.afterFrom = new StringBuffer( afterFrom.toString() ); copy.afterWhere = new StringBuffer( afterWhere.toString() ); return copy; } public void addCondition(String alias, String[] columns, String condition) { for ( int i=0; i<columns.length; i++ ) { afterWhere.append(" and ") .append(alias) .append(StringHelper.DOT) .append( columns[i] ) .append(condition); } } public void addCrossJoin(String tableName, String alias) { afterFrom.append(StringHelper.COMMA_SPACE) .append(tableName) .append(' ') .append(alias); } public void addCondition(String alias, String[] fkColumns, String[] pkColumns) { for ( int j=0; j<fkColumns.length; j++) { afterWhere.append(" and ") .append( fkColumns[j] ) .append('=') .append(alias) .append(StringHelper.DOT) .append( pkColumns[j] ); } } } Index: ANSIOuterJoinFragment.java =================================================================== RCS file: /cvsroot/hibernate/Hibernate2/src/net/sf/hibernate/sql/ANSIOuterJoinFragment.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** ANSIOuterJoinFragment.java 24 Jan 2003 10:21:37 -0000 1.2 --- ANSIOuterJoinFragment.java 23 Feb 2003 01:32:21 -0000 1.3 *************** *** 8,15 **** private StringBuffer buffer = new StringBuffer(); ! public void addJoin(String tableName, String alias, String[] fkColumns, String[] pkColumns, boolean innerJoin) { ! ! buffer.append( innerJoin ? " inner join " : " left outer join ") .append(tableName) .append(' ') --- 8,34 ---- private StringBuffer buffer = new StringBuffer(); + private StringBuffer conditions = new StringBuffer(); ! public void addJoin(String tableName, String alias, String[] fkColumns, String[] pkColumns, int joinType) { ! ! String joinString; ! switch (joinType) { ! case INNER_JOIN: ! joinString = " inner join "; ! break; ! case LEFT_OUTER_JOIN: ! joinString = " left outer join "; ! break; ! case RIGHT_OUTER_JOIN: ! joinString = " right outer join "; ! break; ! case FULL_JOIN: ! joinString = " full outer join "; ! break; ! default: ! throw new AssertionFailure("undefined join type"); ! } ! ! buffer.append(joinString) .append(tableName) .append(' ') *************** *** 34,38 **** public String toWhereFragmentString() { ! return StringHelper.EMPTY_STRING; } --- 53,57 ---- public String toWhereFragmentString() { ! return conditions.toString(); } *************** *** 40,43 **** --- 59,94 ---- buffer.append(fromFragment); //where fragment must be empty! + } + + public OuterJoinFragment copy() { + ANSIOuterJoinFragment copy = new ANSIOuterJoinFragment(); + copy.buffer = new StringBuffer( buffer.toString() ); + return copy; + } + + public void addCondition(String alias, String[] columns, String condition) { + for ( int i=0; i<columns.length; i++ ) { + conditions.append(" and ") + .append(alias) + .append(StringHelper.DOT) + .append( columns[i] ) + .append(condition); + } + } + + public void addCrossJoin(String tableName, String alias) { + buffer.append(StringHelper.COMMA_SPACE) + .append(tableName) + .append(' ') + .append(alias); + } + + public void addCondition( + String alias, + String[] fkColumns, + String[] pkColumns) { + + throw new UnsupportedOperationException(); + } Index: OracleOuterJoinFragment.java =================================================================== RCS file: /cvsroot/hibernate/Hibernate2/src/net/sf/hibernate/sql/OracleOuterJoinFragment.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** OracleOuterJoinFragment.java 20 Jan 2003 18:45:18 -0000 1.1 --- OracleOuterJoinFragment.java 23 Feb 2003 01:32:21 -0000 1.2 *************** *** 9,27 **** private StringBuffer afterWhere = new StringBuffer(); ! public void addJoin(String tableName, String alias, String[] fkColumns, String[] pkColumns, boolean innerJoin) { ! afterFrom.append(StringHelper.COMMA_SPACE) ! .append(tableName) ! .append(' ') ! .append(alias); for ( int j=0; j<fkColumns.length; j++) { afterWhere.append(" and ") ! .append( fkColumns[j] ) ! .append('=') .append(alias) .append(StringHelper.DOT) .append( pkColumns[j] ); ! if (!innerJoin) afterWhere.append("(+)"); } --- 9,25 ---- private StringBuffer afterWhere = new StringBuffer(); ! public void addJoin(String tableName, String alias, String[] fkColumns, String[] pkColumns, int joinType) { ! addCrossJoin(tableName, alias); for ( int j=0; j<fkColumns.length; j++) { afterWhere.append(" and ") ! .append( fkColumns[j] ); ! if (joinType==RIGHT_OUTER_JOIN || joinType==FULL_JOIN) afterWhere.append("(+)"); ! afterWhere.append('=') .append(alias) .append(StringHelper.DOT) .append( pkColumns[j] ); ! if (joinType==LEFT_OUTER_JOIN || joinType==FULL_JOIN) afterWhere.append("(+)"); } *************** *** 39,42 **** --- 37,73 ---- afterFrom.append(fromFragment); afterWhere.append(whereFragment); + } + + public OuterJoinFragment copy() { + OracleOuterJoinFragment copy = new OracleOuterJoinFragment(); + copy.afterFrom = new StringBuffer( afterFrom.toString() ); + copy.afterWhere = new StringBuffer( afterWhere.toString() ); + return copy; + } + + public void addCondition(String alias, String[] columns, String condition) { + for ( int i=0; i<columns.length; i++ ) { + afterWhere.append(" and ") + .append(alias) + .append(StringHelper.DOT) + .append( columns[i] ) + .append(condition); + } + } + + public void addCrossJoin(String tableName, String alias) { + afterFrom.append(StringHelper.COMMA_SPACE) + .append(tableName) + .append(' ') + .append(alias); + } + + public void addCondition( + String alias, + String[] fkColumns, + String[] pkColumns) { + + throw new UnsupportedOperationException(); + } Index: OuterJoinFragment.java =================================================================== RCS file: /cvsroot/hibernate/Hibernate2/src/net/sf/hibernate/sql/OuterJoinFragment.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** OuterJoinFragment.java 20 Jan 2003 18:45:18 -0000 1.1 --- OuterJoinFragment.java 23 Feb 2003 01:32:21 -0000 1.2 *************** *** 4,12 **** public abstract class OuterJoinFragment { ! public abstract void addJoin(String tableName, String alias, String[] fkColumns, String[] pkColumns, boolean innerJoin); public abstract void addJoins(String fromFragment, String whereFragment); public abstract String toFromFragmentString(); public abstract String toWhereFragmentString(); ! ! } --- 4,24 ---- public abstract class OuterJoinFragment { ! public abstract void addJoin(String tableName, String alias, String[] fkColumns, String[] pkColumns, int joinType); ! public abstract void addCrossJoin(String tableName, String alias); public abstract void addJoins(String fromFragment, String whereFragment); public abstract String toFromFragmentString(); public abstract String toWhereFragmentString(); ! public abstract void addCondition(String alias, String[] columns, String condition); ! public abstract void addCondition(String alias, String[] fkColumns, String[] pkColumns); ! ! public abstract OuterJoinFragment copy(); ! ! public static final int INNER_JOIN = 0; ! public static final int FULL_JOIN = -1; ! public static final int LEFT_OUTER_JOIN = 1; ! public static final int RIGHT_OUTER_JOIN = 2; ! ! public void addFragment(OuterJoinFragment ojf) { ! addJoins( ojf.toFromFragmentString(), ojf.toWhereFragmentString() ); ! } } |