Changeset View
Changeset View
Standalone View
Standalone View
swh/storage/cassandra/cql.py
Show First 20 Lines • Show All 651 Lines • ▼ Show 20 Lines | class CqlRunner: | ||||
_origin_visit_keys = [ | _origin_visit_keys = [ | ||||
"origin", | "origin", | ||||
"visit", | "visit", | ||||
"type", | "type", | ||||
"date", | "date", | ||||
] | ] | ||||
@_prepared_statement("SELECT * FROM origin_visit WHERE origin = ? AND visit > ?") | def origin_visit_get( | ||||
def _origin_visit_get_no_limit( | self, | ||||
self, origin_url: str, last_visit: int, *, statement | origin_url: str, | ||||
last_visit: Optional[int], | |||||
limit: Optional[int], | |||||
order: str = "asc", | |||||
) -> ResultSet: | ) -> ResultSet: | ||||
return self._execute_with_retries(statement, [origin_url, last_visit]) | order = order.lower() | ||||
assert order in ["asc", "desc"] | |||||
@_prepared_statement( | query_parts = [ | ||||
"SELECT * FROM origin_visit WHERE origin = ? AND visit > ? LIMIT ?" | "SELECT * from origin_visit", | ||||
) | ] | ||||
def _origin_visit_get_limit( | |||||
self, origin_url: str, last_visit: int, limit: int, *, statement | |||||
) -> ResultSet: | |||||
return self._execute_with_retries(statement, [origin_url, last_visit, limit]) | |||||
ardumont: Those methods were private and used only once so no need for them. | |||||
def origin_visit_get( | query_parts.append("WHERE origin = %s") | ||||
self, origin_url: str, last_visit: Optional[int], limit: Optional[int] | query_params: List[Any] = [origin_url] | ||||
) -> ResultSet: | |||||
if last_visit is None: | |||||
last_visit = -1 | |||||
if limit is None: | if last_visit is not None: | ||||
return self._origin_visit_get_no_limit(origin_url, last_visit) | query_parts.append("AND visit > %s") | ||||
else: | query_params.append(last_visit) | ||||
return self._origin_visit_get_limit(origin_url, last_visit, limit) | |||||
if order == "desc": | |||||
query_parts.append("ORDER BY visit DESC") | |||||
if limit is not None and limit > 0: | |||||
query_parts.append("LIMIT %s") | |||||
query_params.append(limit) | |||||
query = " ".join(query_parts) | |||||
Done Inline ActionsInstead i used the same pattern used in storage (which i found clearer). ardumont: Instead i used the same pattern used in storage (which i found clearer). | |||||
Done Inline Actions(in reply to: "Those methods were private and used only once so no need for them." comment above to the left). ardumont: (in reply to: "Those methods were private and used only once so no need for them." comment… | |||||
Done Inline ActionsAlthough, prepared statement for cassandra are faster. ardumont: Although, prepared statement for cassandra are faster.
So that might need a bit of rework. | |||||
return self._execute_with_retries(query, tuple(query_params)) | |||||
@_prepared_insert_statement("origin_visit", _origin_visit_keys) | @_prepared_insert_statement("origin_visit", _origin_visit_keys) | ||||
def origin_visit_add_one(self, visit: OriginVisit, *, statement) -> None: | def origin_visit_add_one(self, visit: OriginVisit, *, statement) -> None: | ||||
self._add_one(statement, "origin_visit", visit, self._origin_visit_keys) | self._add_one(statement, "origin_visit", visit, self._origin_visit_keys) | ||||
_origin_visit_status_keys = [ | _origin_visit_status_keys = [ | ||||
"origin", | "origin", | ||||
"visit", | "visit", | ||||
▲ Show 20 Lines • Show All 210 Lines • Show Last 20 Lines |
Those methods were private and used only once so no need for them.