]> git.ipfire.org Git - pbs.git/commitdiff
Reduce number of required database queries.
authorMichael Tremer <michael.tremer@ipfire.org>
Sun, 18 Nov 2012 19:11:47 +0000 (20:11 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Sun, 18 Nov 2012 19:11:47 +0000 (20:11 +0100)
backend/builders.py
backend/builds.py
backend/distribution.py
backend/repository.py

index 41595f72c415c25a8ee55df1cffa2412aa843d0b..6ce1365e3d33f2e7968c41697226f7fe92e24468 100644 (file)
@@ -38,9 +38,9 @@ class Builders(base.Object):
                return builder
 
        def get_all(self):
-               builders = self.db.query("SELECT id FROM builders WHERE NOT status = 'deleted' ORDER BY name")
+               builders = self.db.query("SELECT * FROM builders WHERE NOT status = 'deleted' ORDER BY name")
 
-               return [Builder(self.pakfire, b.id) for b in builders]
+               return [Builder(self.pakfire, b.id, b) for b in builders]
 
        def get_by_id(self, id):
                if not id:
@@ -49,10 +49,10 @@ class Builders(base.Object):
                return Builder(self.pakfire, id)
 
        def get_by_name(self, name):
-               builder = self.db.get("SELECT id FROM builders WHERE name = %s LIMIT 1", name)
+               builder = self.db.get("SELECT * FROM builders WHERE name = %s LIMIT 1", name)
 
                if builder:
-                       return Builder(self.pakfire, builder.id)
+                       return Builder(self.pakfire, builder.id, builder)
 
        def get_all_arches(self):
                arches = set()
@@ -117,13 +117,13 @@ class Builders(base.Object):
 
 
 class Builder(base.Object):
-       def __init__(self, pakfire, id):
+       def __init__(self, pakfire, id, data=None):
                base.Object.__init__(self, pakfire)
 
                self.id = id
 
                # Cache.
-               self._data = None
+               self._data = data
                self._active_jobs = None
                self._arches = None
                self._disabled_arches = None
index a9f4e40753d0ed56eb429cde2e7a30d75523f6c0..2d67da9ac8788a56d7d71ad67c90f3ce1de59538 100644 (file)
@@ -634,6 +634,9 @@ class Build(base.Object):
        def state(self):
                return self.data.state
 
+       def is_broken(self):
+               return self.state == "broken"
+
        def obsolete_others(self):
                if not self.type == "release":
                        return
@@ -1218,7 +1221,7 @@ class Jobs(base.Object):
                """
                        Get all jobs in the specifies build.
                """
-               query = "SELECT id FROM jobs WHERE build_id = %s"
+               query = "SELECT * FROM jobs WHERE build_id = %s"
                args = [build_id,]
 
                if type:
@@ -1228,7 +1231,7 @@ class Jobs(base.Object):
                # Get IDs of all builds in this group.
                jobs = []
                for job in self.db.query(query, *args):
-                       job = Job(self.pakfire, job.id)
+                       job = Job(self.pakfire, job.id, job)
 
                        # If the Build object was set, we set it so it won't be retrieved
                        # from the database again.
@@ -1246,7 +1249,7 @@ class Jobs(base.Object):
                if uploads:
                        running_states.append("uploading")
 
-               query = "SELECT id FROM jobs WHERE (%s)" % \
+               query = "SELECT * FROM jobs WHERE (%s)" % \
                        " OR ".join(["state = '%s'" % s for s in running_states])
 
                if host_id:
@@ -1254,7 +1257,7 @@ class Jobs(base.Object):
 
                query += " ORDER BY time_started DESC"
 
-               return [Job(self.pakfire, j.id) for j in self.db.query(query)]
+               return [Job(self.pakfire, j.id, j) for j in self.db.query(query)]
 
        def get_next_iter(self, arches=None, limit=None, offset=None, type=None, states=["pending", "new"], max_tries=None):
                args = []
@@ -1279,7 +1282,7 @@ class Jobs(base.Object):
                        conditions.append("jobs.tries <= %s")
                        args.append(max_tries)
 
-               query = "SELECT jobs.id AS id FROM jobs \
+               query = "SELECT jobs.* FROM jobs \
                        JOIN builds ON jobs.build_id = builds.id"
 
                if conditions:
@@ -1303,7 +1306,7 @@ class Jobs(base.Object):
                                args += [limit]
 
                for job in self.db.query(query, *args):
-                       yield Job(self.pakfire, job.id)
+                       yield Job(self.pakfire, job.id, job)
 
        def get_next(self, *args, **kwargs):
                jobs = []
@@ -1315,7 +1318,7 @@ class Jobs(base.Object):
                return jobs
 
        def get_latest(self, builder=None, limit=10):
-               query = "SELECT id FROM jobs"
+               query = "SELECT * FROM jobs"
 
                #where = ["time_finished IS NOT NULL",]
                where = ["(state = 'finished' OR state = 'failed')"]
@@ -1327,7 +1330,7 @@ class Jobs(base.Object):
 
                query += " ORDER BY time_finished DESC LIMIT %s"
 
-               return [Job(self.pakfire, j.id) for j in self.db.query(query, limit)]
+               return [Job(self.pakfire, j.id, j) for j in self.db.query(query, limit)]
 
        def get_average_build_time(self):
                """
@@ -1370,14 +1373,14 @@ class Jobs(base.Object):
 
 
 class Job(base.Object):
-       def __init__(self, pakfire, id):
+       def __init__(self, pakfire, id, data=None):
                base.Object.__init__(self, pakfire)
 
                # The ID of this Job object.
                self.id = id
 
                # Cache the data of this object.
-               self._data = None
+               self._data = data
                self._build = None
                self._builder = None
                self._packages = None
index b7d0c2e695b043768b5fe595e52951404f17f8b3..27f52d9683b17445808c6a60a24af3a31bc49c94 100644 (file)
@@ -13,21 +13,21 @@ from repository import Repository, RepositoryAux
 
 class Distributions(base.Object):
        def get_all(self):
-               distros = self.db.query("SELECT id FROM distributions ORDER BY name")
+               distros = self.db.query("SELECT * FROM distributions ORDER BY name")
 
-               return [Distribution(self.pakfire, d.id) for d in distros]
+               return [Distribution(self.pakfire, d.id, d) for d in distros]
 
        def get_by_id(self, id):
-               distro = self.db.get("SELECT id FROM distributions WHERE id = %s LIMIT 1", id)
+               distro = self.db.get("SELECT * FROM distributions WHERE id = %s LIMIT 1", id)
 
                if distro:
-                       return Distribution(self.pakfire, distro.id)
+                       return Distribution(self.pakfire, distro.id, distro)
 
        def get_by_name(self, name):
-               distro = self.db.get("SELECT id FROM distributions WHERE sname = %s LIMIT 1", name)
+               distro = self.db.get("SELECT * FROM distributions WHERE sname = %s LIMIT 1", name)
 
                if distro:
-                       return Distribution(self.pakfire, distro.id)
+                       return Distribution(self.pakfire, distro.id, distro)
 
        def get_by_ident(self, ident):
                return self.get_by_name(ident)
@@ -38,11 +38,11 @@ class Distributions(base.Object):
 
 
 class Distribution(base.Object):
-       def __init__(self, pakfire, id):
+       def __init__(self, pakfire, id, data=None):
                base.Object.__init__(self, pakfire)
                self.id = id
 
-               self._data = None
+               self._data = data
                self._arches = None
                self._sources = None
 
index dd95586e21544f4829d80c242ed1dfb96740f54f..a9c1ddf9e5772a2cbd4a1e93e0d3c493cef6b8f9 100644 (file)
@@ -9,15 +9,15 @@ import packages
 
 class Repositories(base.Object):
        def get_all(self):
-               repos = self.db.query("SELECT id FROM repositories")
+               repos = self.db.query("SELECT * FROM repositories")
 
-               return [Repository(self.pakfire, r.id) for r in repos]
+               return [Repository(self.pakfire, r.id, r) for r in repos]
 
        def get_by_id(self, repo_id):
-               repo = self.db.get("SELECT id FROM repositories WHERE id = %s", repo_id)
+               repo = self.db.get("SELECT * FROM repositories WHERE id = %s", repo_id)
 
                if repo:
-                       return Repository(self.pakfire, repo.id)
+                       return Repository(self.pakfire, repo.id, repo)
 
        def get_needs_update(self, limit=None):
                query = "SELECT id FROM repositories WHERE needs_update = 'Y'"
@@ -54,12 +54,12 @@ class Repositories(base.Object):
 
 
 class Repository(base.Object):
-       def __init__(self, pakfire, id):
+       def __init__(self, pakfire, id, data=None):
                base.Object.__init__(self, pakfire)
                self.id = id
 
                # Cache.
-               self._data = None
+               self._data = data
                self._next = None
                self._prev = None
                self._key  = None
@@ -68,8 +68,7 @@ class Repository(base.Object):
        @property
        def data(self):
                if self._data is None:
-                       self._data = \
-                               self.db.get("SELECT * FROM repositories WHERE id = %s", self.id)
+                       self._data = self.db.get("SELECT * FROM repositories WHERE id = %s", self.id)
 
                return self._data