if (odiQuery instanceof BaseQuery) { IExpressionProcessor ep = ((BaseQuery) odiQuery).getExprProcessor();  Map results = baseQueryDefn.getResultSetExpressions(); Object[] o = results.values().toArray(); Object[] names = results.keySet().toArray(); DummyICCState iccState = new DummyICCState(o, names);  ep.setResultIterator(odiResult); while (!iccState.isFinish()) { ep.compileExpression(iccState); ep.calculate(); }  }
	public void execute( IEventHandler eventHandler ) throws DataException	{		logger.logp( Level.FINER,				QueryExecutor.class.getName( ),				"execute",				"Start to execute" );		if ( this.isExecuted )			return;		ExecutorHelper helper = new ExecutorHelper( this.getQueryScope() );		helper.setParent( this.parentHelper );		eventHandler.setExecutorHelper( helper );		// Execute the query		odiResult = executeOdiQuery( eventHandler );		//helper.setResultIterator( odiResult );		helper.setJSRowObject( this.dataSet.getJSResultRowObject( ) );		resetComputedColumns( );		// Bind the row object to the odi result set		this.dataSet.setResultSet( odiResult, false );		// Calculate aggregate values		aggregates = new AggregateCalculator( this.aggrTable, odiResult );		// Calculate aggregate values		aggregates.calculate( getQueryScope( ) );		this.isExecuted = true;		logger.logp( Level.FINER,				QueryExecutor.class.getName( ),				"execute",				"Finish executing" );	}