if ( dataSet != null ) { dataSet.afterOpen(); }
		public void execute() throws DataException		{			logger.logp( Level.FINER,					PreparedQuery.Executor.class.getName( ),					"execute",					"Start to execute" );			if(this.isExecuted)				return;			// Set the Javascript "rows" object and bind it to our result			rowsObject = new JSRows( this.outerResults, rowObject );			scope.put( "rows", scope, rowsObject );						// Execute the query			odiResult = executeOdiQuery( );			// Bind the row object to the odi result set			rowObject.setResultSet( odiResult, false );							// Data set is open in executeOdiQuery; now run aferOpen script			if ( dataSet != null )			{				dataSet.afterOpen();			}					    // Calculate aggregate values		    aggregates = new AggregateCalculator( aggrTable, odiResult );			    		    // Set up the internal JS _aggr_value object and bind it to the aggregate calc engine		    Scriptable aggrObj = aggregates.getJSAggrValueObject();		    scope.put( ExpressionCompiler.AGGR_VALUE, scope, aggrObj );			    			Context cx = Context.enter();			try			{			    // Calculate aggregate values			    aggregates.calculate(cx, scope);			    			}			finally			{				Context.exit();			}						this.isExecuted = true;						logger.logp( Level.FINER,					PreparedQuery.Executor.class.getName( ),					"execute",					"Finish executing" );		}