add cast.
authorJelmer Vernooij <jelmer@samba.org>
Mon, 22 Nov 2010 01:49:51 +0000 (02:49 +0100)
committerJelmer Vernooij <jelmer@samba.org>
Mon, 22 Nov 2010 01:49:51 +0000 (02:49 +0100)
buildfarm/sqldb.py
buildfarm/web/__init__.py

index bf1d5708953520a2e2e4b5eb4d03dfeb39a09170..e950c7265ab4acfbe62fa233205dc615ce7f9f7b 100644 (file)
@@ -40,10 +40,27 @@ try:
 except ImportError:
     import sqlite3
 from storm.database import create_database
+from storm.expr import EXPR, FuncExpr, compile
 from storm.locals import Bool, Desc, Int, Unicode, RawStr
 from storm.store import Store
 
 
+class Cast(FuncExpr):
+    __slots__ = ("column", "type")
+    name = "CAST"
+
+    def __init__(self, column, type):
+        self.column = column
+        self.type = type
+
+@compile.when(Cast)
+def compile_count(compile, cast, state):
+    state.push("context", EXPR)
+    column = compile(cast.column, state)
+    state.pop()
+    return "CAST(%s AS %s)" % (column, cast.type)
+
+
 class StormBuild(Build):
     __storm_table__ = "build"
 
@@ -230,9 +247,9 @@ class StormCachingBuildResultStore(BuildResultStore):
             StormBuild.compiler == compiler,
             ]
         if revision is not None:
-            expr.append(StormBuild.revision == revision)
+            expr.append(Cast(StormBuild.revision, "TEXT") == revision)
         if checksum is not None:
-            expr.append(StormBuild.checksum == checksum)
+            expr.append(Cast(StormBuild.checksum, "TEXT") == checksum)
         result = self.store.find(StormBuild, *expr).order_by(Desc(StormBuild.upload_time))
         ret = result.first()
         if ret is None:
@@ -278,7 +295,7 @@ class StormCachingBuildFarm(BuildFarm):
         return distinct_builds(result.order_by(Desc(StormBuild.upload_time)))
 
     def get_tree_builds(self, tree):
-        result = self._get_store().find(StormBuild, StormBuild.tree == tree)
+        result = self._get_store().find(StormBuild, Cast(StormBuild.tree, "TEXT") == tree)
         return distinct_builds(result.order_by(Desc(StormBuild.upload_time)))
 
     def get_last_builds(self):
index 77f1d1ce9ce18ef6e17e05cb0e561f2bb52229ac..8c9aad6825f8f156b3637b49d46868193a2319d8 100755 (executable)
@@ -118,7 +118,7 @@ def build_status_html(myself, build):
         "host": build.host,
         "tree": build.tree,
         "compiler": build.compiler,
-        "checksum": build.log_checksum()
+        "checksum": build.log_checksum(),
         }
     if build.revision:
         params["revision"] = build.revision
@@ -381,7 +381,7 @@ class ViewBuildPage(BuildFarmPage):
 
     def show_oldrevs(self, myself, tree, host, compiler):
         """show the available old revisions, if any"""
-        old_builds  = self.buildfarm.builds.get_old_builds(tree, host, compiler)
+        old_builds = self.buildfarm.builds.get_old_builds(tree, host, compiler)
 
         if not old_builds:
             return
@@ -392,10 +392,11 @@ class ViewBuildPage(BuildFarmPage):
         yield "<thead><tr><th>Revision</th><th>Status</th><th>Age</th></tr></thead>\n"
         yield "<tbody>\n"
 
-        for build in old_builds:
+        for old_build in old_builds:
             yield "<tr><td>%s</td><td>%s</td><td>%s</td></tr>\n" % (
-                revision_link(myself, build.revision, tree),
-                build_status_html(myself, build), util.dhm_time(build.age))
+                revision_link(myself, old_build.revision, tree),
+                build_status_html(myself, old_build),
+                util.dhm_time(old_build.age))
 
         yield "</tbody></table>\n"