FileDocCategorySizeDatePackage
OracleJoinFragment.javaAPI DocHibernate 3.2.53700Wed May 11 10:26:04 BST 2005org.hibernate.sql

OracleJoinFragment

public class OracleJoinFragment extends JoinFragment
An Oracle-style (theta) join
author
Jon Lipsky, Gavin King

Fields Summary
private StringBuffer
afterFrom
private StringBuffer
afterWhere
private static final Set
OPERATORS
Constructors Summary
Methods Summary
public voidaddCondition(java.lang.String alias, java.lang.String[] columns, java.lang.String condition)

		for ( int i = 0; i < columns.length; i++ ) {
			afterWhere.append( " and " )
					.append( alias )
					.append( '." )
					.append( columns[i] )
					.append( condition );
		}
	
public voidaddCondition(java.lang.String alias, java.lang.String[] fkColumns, java.lang.String[] pkColumns)

		throw new UnsupportedOperationException();
	
public booleanaddCondition(java.lang.String condition)

		return addCondition( afterWhere, condition );
	
public voidaddCrossJoin(java.lang.String tableName, java.lang.String alias)

		afterFrom.append( ", " )
				.append( tableName )
				.append( ' " )
				.append( alias );
	
public voidaddFromFragmentString(java.lang.String fromFragmentString)

		afterFrom.append( fromFragmentString );
	
public voidaddJoin(java.lang.String tableName, java.lang.String alias, java.lang.String[] fkColumns, java.lang.String[] pkColumns, int joinType)


	            

		addCrossJoin( tableName, alias );

		for ( int j = 0; j < fkColumns.length; j++ ) {
			setHasThetaJoins( true );
			afterWhere.append( " and " )
					.append( fkColumns[j] );
			if ( joinType == RIGHT_OUTER_JOIN || joinType == FULL_JOIN ) afterWhere.append( "(+)" );
			afterWhere.append( '=" )
					.append( alias )
					.append( '." )
					.append( pkColumns[j] );
			if ( joinType == LEFT_OUTER_JOIN || joinType == FULL_JOIN ) afterWhere.append( "(+)" );
		}

	
public voidaddJoin(java.lang.String tableName, java.lang.String alias, java.lang.String[] fkColumns, java.lang.String[] pkColumns, int joinType, java.lang.String on)

		//arbitrary on clause ignored!!
		addJoin( tableName, alias, fkColumns, pkColumns, joinType );
		if ( joinType == JoinFragment.INNER_JOIN ) {
			addCondition( on );
		}
		else if ( joinType == JoinFragment.LEFT_OUTER_JOIN ) {
			addLeftOuterJoinCondition( on );
		}
		else {
			throw new UnsupportedOperationException( "join type not supported by OracleJoinFragment (use Oracle9Dialect)" );
		}
	
public voidaddJoins(java.lang.String fromFragment, java.lang.String whereFragment)

		afterFrom.append( fromFragment );
		afterWhere.append( whereFragment );
	
private voidaddLeftOuterJoinCondition(java.lang.String on)
This method is a bit of a hack, and assumes that the column on the "right" side of the join appears on the "left" side of the operator, which is extremely wierd if this was a normal join condition, but is natural for a filter.

		StringBuffer buf = new StringBuffer( on );
		for ( int i = 0; i < buf.length(); i++ ) {
			char character = buf.charAt( i );
			boolean isInsertPoint = OPERATORS.contains( new Character( character ) ) ||
					( character == ' " && buf.length() > i + 3 && "is ".equals( buf.substring( i + 1, i + 4 ) ) );
			if ( isInsertPoint ) {
				buf.insert( i, "(+)" );
				i += 3;
			}
		}
		addCondition( buf.toString() );
	
public JoinFragmentcopy()

		OracleJoinFragment copy = new OracleJoinFragment();
		copy.afterFrom = new StringBuffer( afterFrom.toString() );
		copy.afterWhere = new StringBuffer( afterWhere.toString() );
		return copy;
	
public java.lang.StringtoFromFragmentString()

		return afterFrom.toString();
	
public java.lang.StringtoWhereFragmentString()

		return afterWhere.toString();