this.setParentExecutorHelper(((ResultIterator)outerResults.getResultIterator( )).odiResult.getExecutorHelper( ));
	void prepareExecution( IQueryResults outerRts, Scriptable targetScope ) throws DataException	{		if(isPrepared)return;				this.parentScope = targetScope;		dataSource = findDataSource( );		if ( outerRts != null )		{			outerResults = ((QueryResults) outerRts );			if ( outerResults.isClosed( ) )			{				// Outer result is closed; invalid				throw new DataException( ResourceConstants.RESULT_CLOSED );			}			this.nestedLevel = outerResults.getNestedLevel( );		}				// Create the data set runtime		// Since data set runtime contains the execution result, a new data set		// runtime is needed for each execute		dataSet = newDataSetRuntime();		assert dataSet != null;				openDataSource( );				// Run beforeOpen script now so the script can modify the DataSetRuntime properties		dataSet.beforeOpen();							IExpressionProcessor exprProcessor = new ExpressionProcessor( null,				null,				dataSet,				null );		// Let subclass create a new and empty intance of the appropriate		// odi IQuery		odiQuery = createOdiQuery( );		odiQuery.setExprProcessor( exprProcessor );		populateOdiQuery( );		prepareOdiQuery( );		isPrepared = true;	}