def get_report_by_name(report_name, conn, execution_id=None):
    cursor = conn.cursor()

    sql_report_by_name = "select id, name, report_query, mode, file_name, separator from Report where name = '%s';"
    sql_report_columns_by_id = "select sql_name, business_name, is_used_for_compare, is_business_key " \
                               "from Report_Columns where report_id = '%s';"

    # Fetch report information from persistence
    print "Info : Retrieving report from the database " + now()

    query_result = cursor.execute(sql_report_by_name % report_name).fetchone()

    if not query_result:
        print("Error : report with name '%s' not found" % report_name)
        exit(1)

    report_id = query_result["id"]
    report_name = query_result["name"]
    report_query = query_result["report_query"]
    report_mode = query_result["mode"]
    report_file_name = query_result["file_name"]
    report_separator = query_result["separator"]

    # Fetch column definitions
    query_result = cursor.execute(sql_report_columns_by_id %
                                  report_id).fetchall()

    columns_mapping = {}
    columns = []

    for row in query_result:
        columns.append(row["sql_name"])
        columns_mapping[row["sql_name"]] = {
            "business_name": row["business_name"]
        }
        columns_mapping[row["sql_name"]]["is_used_for_compare"] = str(
            row["is_used_for_compare"])
        columns_mapping[row["sql_name"]]["is_business_key"] = str(
            row["is_business_key"])

    report = Report(report_name, report_query, report_mode, columns,
                    columns_mapping, report_separator, report_file_name,
                    report_id)

    # Retrieve last Execution or the one requested bw user
    if not execution_id:
        execution = get_execution_by_report_id(report_id, conn)
    else:
        execution = get_execution_by_report_id(report_id, conn, execution_id)

    if execution:
        report.execution = execution
    else:
        print "Warning : empty exectution"
        report.execution = []

    print "Info : Retrieval done " + now()
    return report