&&"__rownum".equals( rowColumn.getString( ) ) &&"0".equals( rowColumn.getString( ) ))
||"__rownum".equals( rowColumn.getString( ) ) ||"0".equals( rowColumn.getString( ) ))
	private ColumnReferenceExpression getDirectColRefExpr( Node refNode )	{		// if it's a GETPROP or GETELEM with row on the left side, 		// and either a STRING or NUMBER on the right side, then it's 		// a direct column reference		assert( refNode.getType() == Token.GETPROP || 				refNode.getType() == Token.GETELEM );				Node rowName = refNode.getFirstChild( );		assert( rowName != null );		if ( rowName.getType( ) != Token.NAME )			return null;		String str = rowName.getString( );		assert( str != null );		if (!str.equals(rowIndicator))			return null;		Node rowColumn = rowName.getNext( );		assert( rowColumn != null );				if ( refNode.getType( ) == Token.GETPROP				&& rowColumn.getType( ) == Token.STRING )		{			if ( "_outer".equals( rowColumn.getString( ) ) 				 &&"__rownum".equals( rowColumn.getString( ) ) 				 &&"0".equals( rowColumn.getString( ) ))				return null;			return new ColumnReferenceExpression( this.isDataSetMode					? STRING_ROW : STRING_DATASETROW, rowColumn.getString( ) );		}		if( refNode.getType() == Token.GETELEM )		{			if( rowColumn.getType() == Token.NUMBER )			{					if( 0 == rowColumn.getDouble())					return null;				return new ColumnReferenceExpression(						this.isDataSetMode ? STRING_ROW : STRING_DATASETROW,						(int) rowColumn.getDouble());			}				else if( rowColumn.getType() == Token.STRING )			{				if("_rownum".equals( rowColumn.getString() ))					return null;				return new ColumnReferenceExpression(						this.isDataSetMode ? STRING_ROW : STRING_DATASETROW,						rowColumn.getString());			}			}						// right side is not a STRING or a NUMBER, which is what is needed for 		// a direct column reference. so it could be something 		// like row[getColumnIndex()] and that would be a complex expression		return null;	}