self.db.execute("REFRESH MATERIALIZED VIEW package_search_index")
def search_by_filename(self, filename, limit=None):
- query = "SELECT filelists.* FROM filelists \
- JOIN packages ON filelists.pkg_id = packages.id \
- WHERE filelists.name = %s ORDER BY packages.build_time DESC"
- args = [filename,]
-
- if limit:
- query += " LIMIT %s"
- args.append(limit)
-
- files = []
- for result in self.db.query(query, *args):
- pkg = Package(self.backend, result.pkg_id)
- files.append((pkg, result))
+ packages = self._get_packages("""
+ SELECT
+ DISTINCT ON (packages.name)
+ packages.*
+ FROM
+ filelists
+ LEFT JOIN
+ packages ON filelists.pkg_id = packages.id
+ WHERE
+ filelists.path = %s
+ ORDER BY
+ packages.name,
+ packages.build_time DESC
+ LIMIT
+ %s
+ """, filename, limit,
+ )
- return files
+ return list(packages)
class Package(base.DataObject):