def run_query()

in redash/handlers/query_results.py [0:0]


def run_query(query, parameters, data_source, query_id, max_age=0):
    if data_source.paused:
        if data_source.pause_reason:
            message = "{} is paused ({}). Please try later.".format(
                data_source.name, data_source.pause_reason
            )
        else:
            message = "{} is paused. Please try later.".format(data_source.name)

        return error_response(message)

    try:
        query.apply(parameters)
    except (InvalidParameterError, QueryDetachedFromDataSourceError) as e:
        abort(400, message=str(e))

    if query.missing_params:
        return error_response(
            "Missing parameter value for: {}".format(", ".join(query.missing_params))
        )

    if max_age == 0:
        query_result = None
    else:
        query_result = models.QueryResult.get_latest(data_source, query.text, max_age)

    record_event(
        current_user.org,
        current_user,
        {
            "action": "execute_query",
            "cache": "hit" if query_result else "miss",
            "object_id": data_source.id,
            "object_type": "data_source",
            "query": query.text,
            "query_id": query_id,
            "parameters": parameters,
        },
    )

    if query_result:
        return {
            "query_result": serialize_query_result(
                query_result, current_user.is_api_user()
            )
        }
    else:
        job = enqueue_query(
            query.text,
            data_source,
            current_user.id,
            current_user.is_api_user(),
            metadata={
                "Username": repr(current_user)
                if current_user.is_api_user()
                else current_user.email,
                "Query ID": query_id,
            },
        )
        return serialize_job(job)