if( dataSet.getDesign( ) != null ) {   odiQuery.setRowFetchLimit( dataSet.getDesign( ).getRowFetchLimit( ) ); }
	void prepareExecution( IQueryResults outerRts, Scriptable targetScope )			throws DataException	{		if ( isPrepared )			return;		this.parentScope = targetScope;		dataSource = findDataSource( );		if ( outerRts != null )		{			outerResults = ( (IQueryService) outerRts );			if ( outerResults.isClosed( ) )			{				// Outer result is closed; invalid				throw new DataException( ResourceConstants.RESULT_CLOSED );			}			this.nestedLevel = outerResults.getNestedLevel( );			// TODO: check helper is null			IExecutorHelper helper = outerResults.getExecutorHelper( );			this.setParentExecutorHelper( helper );		}		// 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( );		// Let subclass create a new and empty intance of the appropriate		// odi IQuery		odiQuery = createOdiQuery( );		odiQuery.setDistinctValueFlag( dataSet.needDistinctValue( ) );		odiQuery.setExprProcessor( new ExpressionProcessor( dataSet ) );		populateOdiQuery( );		prepareOdiQuery( );		isPrepared = true;	}