]> git.ipfire.org Git - pbs.git/commitdiff
packages: Fix search for filenames
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 7 Jun 2023 10:26:21 +0000 (10:26 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 7 Jun 2023 10:26:21 +0000 (10:26 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/buildservice/packages.py

index 61ec38ff806b4a7b5fc1df1b1e34fb11cb9702bf..390030b901a9e20a3c48b2dfbb45a4c3e3d1beac 100644 (file)
@@ -189,45 +189,44 @@ class Packages(base.Object):
                        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