Changeset View
Changeset View
Standalone View
Standalone View
swh/storage/db.py
Show First 20 Lines • Show All 568 Lines • ▼ Show 20 Lines | ) -> Optional[Dict[str, Any]]: | ||||
query_parts.append("ORDER BY ovs.date DESC LIMIT 1") | query_parts.append("ORDER BY ovs.date DESC LIMIT 1") | ||||
query = "\n".join(query_parts) | query = "\n".join(query_parts) | ||||
cur.execute(query, tuple(query_params)) | cur.execute(query, tuple(query_params)) | ||||
row = cur.fetchone() | row = cur.fetchone() | ||||
return self._make_origin_visit_status(row) | return self._make_origin_visit_status(row) | ||||
def origin_visit_get_all( | def origin_visit_status_get_range( | ||||
ardumont: salvaging that no longer used endpoint. | |||||
self, origin_id, last_visit=None, order="asc", limit=None, cur=None | self, | ||||
origin: str, | |||||
visit: int, | |||||
date_from: Optional[datetime.datetime], | |||||
order: ListOrder, | |||||
limit: int, | |||||
cur=None, | |||||
): | ): | ||||
"""Retrieve all visits for origin with id origin_id. | """Retrieve the visit_status rows for visit (origin, visit) in a paginated way. | ||||
Args: | |||||
origin_id: The occurrence's origin | |||||
Yields: | |||||
The visits for that origin | |||||
""" | """ | ||||
cur = self._cursor(cur) | cur = self._cursor(cur) | ||||
assert order.lower() in ["asc", "desc"] | |||||
query_parts = [ | query_parts = [ | ||||
"SELECT DISTINCT ON (ov.visit) %s " | f"SELECT {', '.join(self.origin_visit_status_select_cols)} " | ||||
% ", ".join(self.origin_visit_select_cols), | "FROM origin_visit_status ovs ", | ||||
"FROM origin_visit ov", | "INNER JOIN origin o ON o.id = ovs.origin ", | ||||
"INNER JOIN origin o ON o.id = ov.origin", | |||||
"INNER JOIN origin_visit_status ovs", | |||||
"ON ov.origin = ovs.origin AND ov.visit = ovs.visit", | |||||
] | ] | ||||
query_parts.append("WHERE o.url = %s") | query_parts.append("WHERE o.url = %s AND ovs.visit = %s ") | ||||
query_params: List[Any] = [origin_id] | query_params: List[Any] = [origin, visit] | ||||
if last_visit is not None: | if date_from is not None: | ||||
op_comparison = ">" if order == "asc" else "<" | op_comparison = ">" if order == ListOrder.ASC else "<" | ||||
query_parts.append(f"and ov.visit {op_comparison} %s") | query_parts.append(f"and ovs.date {op_comparison} %s ") | ||||
query_params.append(last_visit) | query_params.append(date_from) | ||||
if order == "asc": | if order == ListOrder.ASC: | ||||
query_parts.append("ORDER BY ov.visit ASC, ovs.date DESC") | query_parts.append("ORDER BY ovs.date ASC ") | ||||
elif order == "desc": | elif order == ListOrder.DESC: | ||||
query_parts.append("ORDER BY ov.visit DESC, ovs.date DESC") | query_parts.append("ORDER BY ovs.date DESC ") | ||||
else: | else: | ||||
assert False | assert False | ||||
if limit is not None: | |||||
query_parts.append("LIMIT %s") | query_parts.append("LIMIT %s") | ||||
query_params.append(limit) | query_params.append(limit) | ||||
query = "\n".join(query_parts) | query = "\n".join(query_parts) | ||||
cur.execute(query, tuple(query_params)) | cur.execute(query, tuple(query_params)) | ||||
yield from cur | yield from cur | ||||
def origin_visit_get_range( | def origin_visit_get_range( | ||||
self, origin: str, visit_from: int, order: ListOrder, limit: int, cur=None, | self, origin: str, visit_from: int, order: ListOrder, limit: int, cur=None, | ||||
): | ): | ||||
▲ Show 20 Lines • Show All 709 Lines • Show Last 20 Lines |
salvaging that no longer used endpoint.