47 lines
1.2 KiB
Python
47 lines
1.2 KiB
Python
"""Issue queries. No Flask imports; take an explicit sqlite3 connection.
|
|
|
|
Queries filter on `issues.project_id`, which is backed by the
|
|
`idx_issues_project_id` index (Stage 4.2; docs/analysis/optional-indexes.sql).
|
|
"""
|
|
|
|
ISSUE_COLUMNS = "id, project_id, title, state, created_at, html_url, user"
|
|
|
|
|
|
def _rows(cur):
|
|
return [dict(row) for row in cur.fetchall()]
|
|
|
|
|
|
def list_recent_issues(db, limit=10):
|
|
return _rows(
|
|
db.execute(
|
|
f"SELECT {ISSUE_COLUMNS} FROM issues "
|
|
"ORDER BY created_at DESC LIMIT ?",
|
|
(limit,),
|
|
)
|
|
)
|
|
|
|
|
|
def list_issues_for_project(db, project_id, limit=None):
|
|
sql = (
|
|
f"SELECT {ISSUE_COLUMNS} FROM issues "
|
|
"WHERE project_id = ? ORDER BY created_at DESC"
|
|
)
|
|
params = (project_id,)
|
|
if limit is not None:
|
|
sql += " LIMIT ?"
|
|
params = (project_id, limit)
|
|
return _rows(db.execute(sql, params))
|
|
|
|
|
|
def search_issues(db, keyword, limit=None):
|
|
like = f"%{keyword}%"
|
|
sql = (
|
|
f"SELECT {ISSUE_COLUMNS} FROM issues "
|
|
"WHERE title LIKE ? ORDER BY created_at DESC"
|
|
)
|
|
params = (like,)
|
|
if limit is not None:
|
|
sql += " LIMIT ?"
|
|
params = (like, limit)
|
|
return _rows(db.execute(sql, params))
|