Changeset View
Changeset View
Standalone View
Standalone View
swh/storage/postgresql/db.py
# Copyright (C) 2015-2020 The Software Heritage developers | # Copyright (C) 2015-2021 The Software Heritage developers | ||||
# See the AUTHORS file at the top-level directory of this distribution | # See the AUTHORS file at the top-level directory of this distribution | ||||
# License: GNU General Public License version 3, or any later version | # License: GNU General Public License version 3, or any later version | ||||
# See top-level LICENSE file for more information | # See top-level LICENSE file for more information | ||||
import datetime | import datetime | ||||
import logging | import logging | ||||
import random | import random | ||||
import select | import select | ||||
▲ Show 20 Lines • Show All 830 Lines • ▼ Show 20 Lines | def revision_get_from_list(self, revisions, cur=None): | ||||
ORDER BY sortkey | ORDER BY sortkey | ||||
""" | """ | ||||
% query_keys, | % query_keys, | ||||
((sortkey, id) for sortkey, id in enumerate(revisions)), | ((sortkey, id) for sortkey, id in enumerate(revisions)), | ||||
) | ) | ||||
extid_cols = ["extid", "extid_version", "extid_type", "target", "target_type"] | extid_cols = ["extid", "extid_version", "extid_type", "target", "target_type"] | ||||
def extid_get_from_extid_list(self, extid_type, ids, cur=None): | def extid_get_from_extid_list( | ||||
self, extid_type: str, ids: List[bytes], version: Optional[int] = None, cur=None | |||||
): | |||||
cur = self._cursor(cur) | cur = self._cursor(cur) | ||||
query_keys = ", ".join( | query_keys = ", ".join( | ||||
self.mangle_query_key(k, "extid") for k in self.extid_cols | self.mangle_query_key(k, "extid") for k in self.extid_cols | ||||
) | ) | ||||
sql = """ | filter_query = "" | ||||
SELECT %s | if version is not None: | ||||
FROM (VALUES %%s) as t(sortkey, extid, extid_type) | filter_query = cur.mogrify( | ||||
f"WHERE extid_version={version}", (version,) | |||||
).decode() | |||||
sql = f""" | |||||
SELECT {query_keys} | |||||
FROM (VALUES %s) as t(sortkey, extid, extid_type) | |||||
LEFT JOIN extid USING (extid, extid_type) | LEFT JOIN extid USING (extid, extid_type) | ||||
{filter_query} | |||||
ORDER BY sortkey | ORDER BY sortkey | ||||
""" % ( | """ | ||||
query_keys, | |||||
) | |||||
yield from execute_values_generator( | yield from execute_values_generator( | ||||
cur, | cur, | ||||
sql, | sql, | ||||
(((sortkey, extid, extid_type) for sortkey, extid in enumerate(ids))), | (((sortkey, extid, extid_type) for sortkey, extid in enumerate(ids))), | ||||
) | ) | ||||
def extid_get_from_swhid_list(self, target_type, ids, cur=None): | def extid_get_from_swhid_list( | ||||
self, | |||||
target_type: str, | |||||
ids: List[bytes], | |||||
extid_version: Optional[int] = None, | |||||
extid_type: Optional[str] = None, | |||||
cur=None, | |||||
): | |||||
cur = self._cursor(cur) | cur = self._cursor(cur) | ||||
target_type = ObjectType( | target_type = ObjectType( | ||||
target_type | target_type | ||||
).name.lower() # aka "rev" -> "revision", ... | ).name.lower() # aka "rev" -> "revision", ... | ||||
query_keys = ", ".join( | query_keys = ", ".join( | ||||
self.mangle_query_key(k, "extid") for k in self.extid_cols | self.mangle_query_key(k, "extid") for k in self.extid_cols | ||||
) | ) | ||||
sql = """ | filter_query = "" | ||||
SELECT %s | if extid_version is not None and extid_type is not None: | ||||
FROM (VALUES %%s) as t(sortkey, target, target_type) | filter_query = cur.mogrify( | ||||
"WHERE extid_version=%s AND extid_type=%s", (extid_version, extid_type,) | |||||
).decode() | |||||
sql = f""" | |||||
SELECT {query_keys} | |||||
FROM (VALUES %s) as t(sortkey, target, target_type) | |||||
LEFT JOIN extid USING (target, target_type) | LEFT JOIN extid USING (target, target_type) | ||||
{filter_query} | |||||
ORDER BY sortkey | ORDER BY sortkey | ||||
""" % ( | """ | ||||
olasd: Please don't mix f-strings and %-formatting | |||||
Done Inline Actionsack ardumont: ack | |||||
query_keys, | |||||
) | |||||
yield from execute_values_generator( | yield from execute_values_generator( | ||||
cur, | cur, | ||||
sql, | sql, | ||||
(((sortkey, target, target_type) for sortkey, target in enumerate(ids))), | (((sortkey, target, target_type) for sortkey, target in enumerate(ids))), | ||||
template=b"(%s,%s,%s::object_type)", | template=b"(%s,%s,%s::object_type)", | ||||
) | ) | ||||
def revision_log(self, root_revisions, limit=None, cur=None): | def revision_log(self, root_revisions, limit=None, cur=None): | ||||
▲ Show 20 Lines • Show All 582 Lines • Show Last 20 Lines |
Please don't mix f-strings and %-formatting