helper.setExpressionType( exprType, 0 );
	public void compileComputedColumn( IComputedColumnsState computedColumns )	{		assert ( computedColumns != null );		this.computedColumnState = computedColumns;				IScriptExpression cmptdColumn = null;		String name = "",expression="";		Context context = Context.enter();		try		{			for ( int i = 0; i < computedColumnState.getCount( ); i++ )			{					//if the computed column is not available, parse it to get the pass				// level. If pass level<=1, this expression				//can be evaluate. This expression will be added into a temp list				// for the later expression.				if ( !computedColumnState.isValueAvailable( i ) )				{					try					{						cmptdColumn = computedColumnState.getExpression( i );						expression = cmptdColumn.getText( );						if ( expression == null								|| expression.trim( ).length( ) == 0 )						{							throw new DataException( ResourceConstants.EXPRESSION_CANNOT_BE_NULL_OR_BLANK );						}						name = computedColumnState.getName( i );						if ( name.matches( "\\Q_{$TEMP_GROUP_\\E\\d*\\Q$}_\\E" ) )						{							exprType = GROUP_COLUMN_EXPR;							// group level is 1-based							currentGroupLevel = getCurrentGroupLevel( name , currentGroupLevel );							helper.setExpressionType( exprType, currentGroupLevel );							if ( tempRefactorCmpList == null )								tempRefactorCmpList = new ArrayList( );							tempRefactorCmpList.add( new Integer( i ) );						}						CompiledExpression expr = helper.compileExpression( expression,								context );						cmptdColumn.setHandle( expr );						// if the expression is group column , compile it then						// return, do not compile the next expression						if ( exprType == GROUP_COLUMN_EXPR )						{							exprType = 0;							helper.setExpressionType( 0, 0 );							helper.resetPassLevel( );							return;						}					}					catch ( DataException e )					{						DataException dataException = new DataException( ResourceConstants.INVALID_JS_EXPR,								e,								expression );						cmptdColumn.setHandle( new InvalidExpression( dataException ) );					}					// if this computed column can be caculated, set value					// available.					if ( helper.getExpressionPassLevel( ) <= 1 )					{						if ( tempRefactorCmpList == null )							tempRefactorCmpList = new ArrayList( );						tempRefactorCmpList.add( new Integer( i ) );					}					else					{						helper.resetPassLevel( );						helper.setExpressionType( exprType, 0 );						return;					}										helper.setExpressionType( exprType, 0 );					helper.resetPassLevel( );				}			}		}		finally		{			Context.exit();		}	}