Skip to content

Queryrecent

queryrecent

RECENT_LIMIT

QUERYRECENT

Handles the set of recent queries.

It can select the most recently saved shared queries.

It can export them as an RSS feed.

Source code in modules/queryrecent.py
class QUERYRECENT:
    """Handles the set of recent queries.

    It can select the most recently saved shared queries.

    It can export them as an RSS feed.
    """

    def __init__(self):
        pass

    def recent(self):
        """Select the most recently saved shared queries.

        The next query contains a clever idea from
        [stackoverflow](https://stackoverflow.com/questions/5657446/mysql-query-max-group-by).

        We want to find the most recent mql queries.
        Queries may have multiple executions.
        We want to have the queries with the most recent executions.

        From such queries, we only want to have the single most recent execution.

        This idea can be obtained by left outer joining the `query_exe` table
        with itself (qe1 with qe2) on the condition that
        those rows are combined
        where qe1 and qe2 belong to the same query, and qe2 is more recent.
        Rows in the combined table where qe2 is null,
        are such that qe1 is most recent.

        This is the basic idea.

        We then have to refine it: we only want shared queries.
        That is an easy where condition on the final result.
        We only want to have up-to-date queries.
        So the join condition is not that qe2 is more recent,
        but that qe2 is up-to-date and more recent.
        And we need to add a where to express that qe1 is up to date.
        """

        db = current.db

        projectQueryXSql = dedent(
            f"""
            select
                query.id as query_id,
                auth_user.first_name,
                auth_user.last_name,
                query.name as query_name,
                qe.executed_on as qexe,
                qe.version as qver
            from query inner join
                (
                    select qe1.query_id, qe1.executed_on, qe1.version
                    from query_exe qe1
                      left outer join query_exe qe2
                        on (
                            qe1.query_id = qe2.query_id and
                            qe1.executed_on < qe2.executed_on and
                            qe2.executed_on >= qe2.modified_on
                        )
                    where
                        (
                            qe1.executed_on is not null and
                            qe1.executed_on >= qe1.modified_on
                        ) and
                        qe2.query_id is null
                ) as qe
            on qe.query_id = query.id
            inner join auth_user on query.created_by = auth_user.id
            where query.is_shared = 'T'
            order by qe.executed_on desc, auth_user.last_name
            limit {RECENT_LIMIT};
            """
        )

        pqueryx = db.executesql(projectQueryXSql)
        pqueries = []
        for (query_id, first_name, last_name, query_name, qexe, qver) in pqueryx:
            text = hEsc(f"{first_name[0]} {last_name[0:9]}: {query_name[0:20]}")
            title = hEsc(f"{first_name} {last_name}: {query_name}")
            pqueries.append(dict(id=query_id, text=text, title=title, version=qver))

        return dict(data=json.dumps(dict(queries=pqueries, msgs=[], good=True)))

    def feed(self):
        db = current.db

        sql = dedent(
            """
            select
                query.id as query_id,
                auth_user.first_name,
                auth_user.last_name,
                query.name as query_name,
                query.description,
                qe.id as qvid,
                qe.executed_on as qexe,
                qe.version as qver
            from query inner join
                (
                    select t1.id, t1.query_id, t1.executed_on, t1.version
                    from query_exe t1
                      left outer join query_exe t2
                        on (
                            t1.query_id = t2.query_id and
                            t1.executed_on < t2.executed_on and
                            t2.executed_on >= t2.modified_on
                        )
                    where
                        (
                            t1.executed_on is not null and
                            t1.executed_on >= t1.modified_on
                        ) and
                        t2.query_id is null
                ) as qe
            on qe.query_id = query.id
            inner join auth_user on query.created_by = auth_user.id
            where query.is_shared = 'T'
            order by qe.executed_on desc, auth_user.last_name
            """
        )

        return db.executesql(sql)

__init__(self) special

Source code in modules/queryrecent.py
def __init__(self):
    pass

recent(self)

Select the most recently saved shared queries.

The next query contains a clever idea from stackoverflow.

We want to find the most recent mql queries. Queries may have multiple executions. We want to have the queries with the most recent executions.

From such queries, we only want to have the single most recent execution.

This idea can be obtained by left outer joining the query_exe table with itself (qe1 with qe2) on the condition that those rows are combined where qe1 and qe2 belong to the same query, and qe2 is more recent. Rows in the combined table where qe2 is null, are such that qe1 is most recent.

This is the basic idea.

We then have to refine it: we only want shared queries. That is an easy where condition on the final result. We only want to have up-to-date queries. So the join condition is not that qe2 is more recent, but that qe2 is up-to-date and more recent. And we need to add a where to express that qe1 is up to date.

Source code in modules/queryrecent.py
def recent(self):
    """Select the most recently saved shared queries.

    The next query contains a clever idea from
    [stackoverflow](https://stackoverflow.com/questions/5657446/mysql-query-max-group-by).

    We want to find the most recent mql queries.
    Queries may have multiple executions.
    We want to have the queries with the most recent executions.

    From such queries, we only want to have the single most recent execution.

    This idea can be obtained by left outer joining the `query_exe` table
    with itself (qe1 with qe2) on the condition that
    those rows are combined
    where qe1 and qe2 belong to the same query, and qe2 is more recent.
    Rows in the combined table where qe2 is null,
    are such that qe1 is most recent.

    This is the basic idea.

    We then have to refine it: we only want shared queries.
    That is an easy where condition on the final result.
    We only want to have up-to-date queries.
    So the join condition is not that qe2 is more recent,
    but that qe2 is up-to-date and more recent.
    And we need to add a where to express that qe1 is up to date.
    """

    db = current.db

    projectQueryXSql = dedent(
        f"""
        select
            query.id as query_id,
            auth_user.first_name,
            auth_user.last_name,
            query.name as query_name,
            qe.executed_on as qexe,
            qe.version as qver
        from query inner join
            (
                select qe1.query_id, qe1.executed_on, qe1.version
                from query_exe qe1
                  left outer join query_exe qe2
                    on (
                        qe1.query_id = qe2.query_id and
                        qe1.executed_on < qe2.executed_on and
                        qe2.executed_on >= qe2.modified_on
                    )
                where
                    (
                        qe1.executed_on is not null and
                        qe1.executed_on >= qe1.modified_on
                    ) and
                    qe2.query_id is null
            ) as qe
        on qe.query_id = query.id
        inner join auth_user on query.created_by = auth_user.id
        where query.is_shared = 'T'
        order by qe.executed_on desc, auth_user.last_name
        limit {RECENT_LIMIT};
        """
    )

    pqueryx = db.executesql(projectQueryXSql)
    pqueries = []
    for (query_id, first_name, last_name, query_name, qexe, qver) in pqueryx:
        text = hEsc(f"{first_name[0]} {last_name[0:9]}: {query_name[0:20]}")
        title = hEsc(f"{first_name} {last_name}: {query_name}")
        pqueries.append(dict(id=query_id, text=text, title=title, version=qver))

    return dict(data=json.dumps(dict(queries=pqueries, msgs=[], good=True)))

feed(self)

Source code in modules/queryrecent.py
def feed(self):
    db = current.db

    sql = dedent(
        """
        select
            query.id as query_id,
            auth_user.first_name,
            auth_user.last_name,
            query.name as query_name,
            query.description,
            qe.id as qvid,
            qe.executed_on as qexe,
            qe.version as qver
        from query inner join
            (
                select t1.id, t1.query_id, t1.executed_on, t1.version
                from query_exe t1
                  left outer join query_exe t2
                    on (
                        t1.query_id = t2.query_id and
                        t1.executed_on < t2.executed_on and
                        t2.executed_on >= t2.modified_on
                    )
                where
                    (
                        t1.executed_on is not null and
                        t1.executed_on >= t1.modified_on
                    ) and
                    t2.query_id is null
            ) as qe
        on qe.query_id = query.id
        inner join auth_user on query.created_by = auth_user.id
        where query.is_shared = 'T'
        order by qe.executed_on desc, auth_user.last_name
        """
    )

    return db.executesql(sql)