This function does not work for UUIDs or filenames.
"""
packages = self._get_packages("""
+ WITH search AS (
+ SELECT
+ packages.id AS package_id
+ FROM
+ package_search_index search_index
+ JOIN
+ packages ON search_index.package_id = packages.id
+ AND
+ search_index.document @@ websearch_to_tsquery('english', %s)
+ ORDER BY
+ ts_rank(search_index.document, websearch_to_tsquery('english', %s)) DESC
+ LIMIT
+ %s
+ )
+
SELECT
+ DISTINCT ON (packages.name)
packages.*
FROM
- package_search_index search_index
- LEFT JOIN
- packages ON search_index.package_id = packages.id
+ search
LEFT JOIN
- builds ON packages.id = builds.pkg_id
- WHERE
- packages.deleted_at IS NULL
- AND
- builds.deleted_at IS NULL
- AND
- search_index.document @@ websearch_to_tsquery('english', %s)
- ORDER BY
- ts_rank(search_index.document, websearch_to_tsquery('english', %s)) DESC
- LIMIT %s""",
- q, q, limit,
+ packages ON search.package_id = packages.id
+ """, q, q, limit,
)
return list(packages)
- def refresh_search_index(self):
- """
- Updates the search index for packages
- """
- self.db.execute("REFRESH MATERIALIZED VIEW package_search_index")
-
def search_by_filename(self, filename, limit=None):
packages = self._get_packages("""
SELECT
DISTINCT ON (packages.name)
packages.*
FROM
- filelists
+ package_files
LEFT JOIN
- packages ON filelists.pkg_id = packages.id
+ packages ON package_files.pkg_id = packages.id
WHERE
- filelists.path = %s
+ package_files.path = %s
ORDER BY
packages.name,
packages.build_time DESC