more operations;
authorwenzelm
Mon, 01 May 2017 15:42:26 +0200
changeset 65668 366bc4e6a238
parent 65667 f1c70c7fea12
child 65669 d2f19b4a16ae
more operations; tuned;
src/Pure/Admin/build_log.scala
src/Pure/General/sql.scala
--- a/src/Pure/Admin/build_log.scala	Mon May 01 13:39:27 2017 +0200
+++ b/src/Pure/Admin/build_log.scala	Mon May 01 15:42:26 2017 +0200
@@ -823,13 +823,13 @@
       val (columns, from) =
         if (ml_statistics) {
           val columns = columns1 ::: List(Build_Info.ml_statistics(table2))
-          val from =
-            "(" + table1.sql + " LEFT JOIN " + table2.sql + " ON " +
+          val join =
+            SQL.join_outer(table1, table2,
               Meta_Info.log_name(table1).sql + " = " +
               Meta_Info.log_name(table2).sql + " AND " +
               Build_Info.session_name(table1).sql + " = " +
-              Build_Info.session_name(table2).sql + ")"
-          (columns, from)
+              Build_Info.session_name(table2).sql)
+          (columns, SQL.enclose(join))
         }
         else (columns1, table1.sql)
 
--- a/src/Pure/General/sql.scala	Mon May 01 13:39:27 2017 +0200
+++ b/src/Pure/General/sql.scala	Mon May 01 15:42:26 2017 +0200
@@ -37,11 +37,19 @@
     if (Long_Name.is_qualified(s)) s
     else quote(s.replace("\"", "\"\""))
 
+  def enclose(s: String): String = "(" + s + ")"
   def enclosure(ss: Iterable[String]): String = ss.mkString("(", ", ", ")")
 
   def select(columns: List[Column], distinct: Boolean = false): String =
     "SELECT " + (if (distinct) "DISTINCT " else "") + commas(columns.map(_.sql)) + " FROM "
 
+  def join(table1: Table, table2: Table, sql: String = "", outer: Boolean = false): String =
+    table1.sql + (if (outer) " LEFT OUTER JOIN " else " INNER JOIN ") + table2.sql +
+      (if (sql == "") "" else " ON " + sql)
+
+  def join_outer(table1: Table, table2: Table, sql: String = ""): String =
+    join(table1, table2, sql, outer = true)
+
 
   /* types */