clarified afp_pull_date: both repository versions are relevant;
authorwenzelm
Sat, 14 Oct 2017 20:58:52 +0200
changeset 66863 6acd1a2bd146
parent 66862 136793b73c7c
child 66864 5cb8ccc46e3e
clarified afp_pull_date: both repository versions are relevant;
src/Pure/Admin/build_log.scala
--- a/src/Pure/Admin/build_log.scala	Sat Oct 14 17:33:05 2017 +0200
+++ b/src/Pure/Admin/build_log.scala	Sat Oct 14 20:58:52 2017 +0200
@@ -700,25 +700,17 @@
 
     val pull_date = SQL.Column.date("pull_date")
 
-    val pull_date_table: SQL.Table =
+    def pull_date_table(afp: Boolean = false): SQL.Table =
     {
-      val version = Prop.isabelle_version
-      build_log_table("pull_date", List(version.make_primary_key, pull_date),
-        "SELECT " + version + ", min(" + Prop.build_start + ") AS " + pull_date +
-        " FROM " + meta_info_table +
-        " WHERE " + version.defined + " AND " + Prop.build_start.defined +
-        " GROUP BY " + version)
-    }
+      val (name, versions) =
+        if (afp) ("afp_pull_date", List(Prop.isabelle_version, Prop.afp_version))
+        else ("pull_date", List(Prop.isabelle_version))
 
-    val afp_pull_date_table: SQL.Table =
-    {
-      val version1 = Prop.isabelle_version
-      val version2 = Prop.afp_version
-      val table1 = pull_date_table
-      val table2 = isabelle_afp_versions_table
-      build_log_table("afp_pull_date", List(version1.make_primary_key, version2, pull_date),
-        table1.select(List(version1(table1), version2(table2), pull_date(table1))) +
-        SQL.join_inner + table2.query_named + " ON " + version1(table1) + " = " + version1(table2))
+      build_log_table(name, versions.map(_.make_primary_key) ::: List(pull_date),
+        "SELECT " + versions.mkString(", ") + ", min(" + Prop.build_start + ") AS " + pull_date +
+        " FROM " + meta_info_table +
+        " WHERE " + (versions ::: List(Prop.build_start)).map(_.defined).mkString(" AND ") +
+        " GROUP BY " + versions.mkString(", "))
     }
 
 
@@ -727,13 +719,25 @@
     def recent_time(days: Int): SQL.Source =
       "now() - INTERVAL '" + days.max(0) + " days'"
 
-    def recent_pull_date_table(days: Int, rev: String = "", afp: Boolean = false): SQL.Table =
+    def recent_pull_date_table(
+      days: Int, rev: String = "", afp_rev: Option[String] = None): SQL.Table =
     {
-      val table = if (afp) afp_pull_date_table else pull_date_table
+      val afp = afp_rev.isDefined
+      val rev2 = afp_rev.getOrElse("")
+      val table = pull_date_table(afp)
+
+      val version1 = Prop.isabelle_version
+      val version2 = Prop.afp_version
+      val eq1 = version1(table) + " = " + SQL.string(rev)
+      val eq2 = version2(table) + " = " + SQL.string(rev2)
+
       SQL.Table("recent_pull_date", table.columns,
         table.select(table.columns,
           "WHERE " + pull_date(table) + " > " + recent_time(days) +
-          (if (rev == "") "" else " OR " + Prop.isabelle_version(table) + " = " + SQL.string(rev))))
+          (if (rev != "" && rev2 == "") " OR " + eq1
+           else if (rev == "" && rev2 != "") " OR " + eq2
+           else if (rev != "" && rev2 != "") " OR (" + eq1 + " AND " + eq2 + ")"
+           else "")))
     }
 
     def select_recent_log_names(days: Int): SQL.Source =
@@ -744,11 +748,11 @@
         " ON " + Prop.isabelle_version(table1) + " = " + Prop.isabelle_version(table2)
     }
 
-    def select_recent_versions(
-      days: Int, rev: String = "", afp: Boolean = false, sql: SQL.Source = ""): SQL.Source =
+    def select_recent_versions(days: Int,
+      rev: String = "", afp_rev: Option[String] = None, sql: SQL.Source = ""): SQL.Source =
     {
       val version = Prop.isabelle_version
-      val table1 = recent_pull_date_table(days, rev = rev, afp = afp)
+      val table1 = recent_pull_date_table(days, rev = rev, afp_rev = afp_rev)
       val table2 = meta_info_table
       val aux_table = SQL.Table("aux", table2.columns, table2.select(sql = sql))
 
@@ -767,7 +771,7 @@
     val universal_table: SQL.Table =
     {
       val table1 = meta_info_table
-      val table2 = pull_date_table
+      val table2 = pull_date_table()
       val table3 = sessions_table
       val table4 = ml_statistics_table
 
@@ -825,8 +829,8 @@
     {
       write_info(db, Log_File.find_files(dirs), ml_statistics = ml_statistics)
 
-      db.create_view(Data.pull_date_table)
-      db.create_view(Data.afp_pull_date_table)
+      db.create_view(Data.pull_date_table())
+      db.create_view(Data.pull_date_table(afp = true))
       db.create_view(Data.universal_table)
     }
 
@@ -863,7 +867,7 @@
 
             // pull_date
             {
-              val table = Data.pull_date_table
+              val table = Data.pull_date_table()
               db2.create_table(table)
               db2.using_statement(table.insert())(stmt2 =>
               {