joinType, dataEngine.getSession( ) );
joinType, dataEngine.getSession( ), dataSetDesign.getRowFetchLimit( ));
		protected org.eclipse.birt.data.engine.odi.IResultIterator executeOdiQuery(				IEventHandler eventHandler ) throws DataException		{			if ( doesLoadFromCache( ) == true )			{				DataSourceQuery dsQuery = new DataSourceQuery( dataEngine.getSession( ) );				JointDataSetQuery jointQuery = (JointDataSetQuery) odiQuery;				dsQuery.setExprProcessor( jointQuery.getExprProcessor( ) );				List fetchEvents = jointQuery.getFetchEvents( );				if ( fetchEvents != null )					for ( int i = 0; i < fetchEvents.size( ); i++ )						dsQuery.addOnFetchEvent( (IResultObjectEvent) fetchEvents.get( i ) );				dsQuery.setMaxRows( jointQuery.getMaxRows( ) );				dsQuery.setOrdering( toList( jointQuery.getOrdering( ) ) );				dsQuery.setGrouping( toList( jointQuery.getGrouping( ) ) );				return dsQuery.execute( eventHandler );			}			initialize( dataEngine, appContext );			JointResultMetadata jrm = getJointResultMetadata( left.getResultMetaData( ),					right.getResultMetaData( ) );			resultClass = jrm.getResultClass( );			populator = JointDataSetPopulatorFactory.getBinaryTreeDataSetPopulator( left.getOdiResult( ),					right.getOdiResult( ),					jrm,					matcher,					joinType, dataEngine.getSession( ) );			if ( doesSaveToCache( ) == false )				return new CachedResultSet( (BaseQuery) this.odiQuery,						resultClass,						populator,						eventHandler, dataEngine.getSession( ) );			else				return new CachedResultSet( (BaseQuery) this.odiQuery,						resultClass,						new DataSetResultCache( populator, resultClass, dataEngine.getSession( ) ),						eventHandler, dataEngine.getSession( ) );		}