src/Pure/Thy/sessions.scala
changeset 75759 0cdccd0d1699
parent 75750 2eee2fdfb6e2
child 75760 f8be63d2ec6f
--- a/src/Pure/Thy/sessions.scala	Thu Aug 04 17:14:56 2022 +0200
+++ b/src/Pure/Thy/sessions.scala	Thu Aug 04 22:15:50 2022 +0200
@@ -1200,7 +1200,7 @@
 
   class Database_Context private[Sessions](
     val store: Sessions.Store,
-    database_server: Option[SQL.Database]
+    val database_server: Option[SQL.Database]
   ) extends AutoCloseable {
     def cache: Term.Cache = store.cache
 
@@ -1369,9 +1369,21 @@
       }
     }
 
+    def bad_database(name: String): Nothing =
+      error("Missing build database for session " + quote(name))
+
     def open_database(name: String, output: Boolean = false): SQL.Database =
-      try_open_database(name, output = output) getOrElse
-        error("Missing build database for session " + quote(name))
+      try_open_database(name, output = output) getOrElse bad_database(name)
+
+    def open_databases(names: List[String]): List[SQL.Database] = {
+      val res = names.map(name => name -> try_open_database(name))
+      res.collectFirst({ case (name, None) => name }) match {
+        case None => res.map(_._2.get)
+        case Some(bad) =>
+          for ((_, Some(db)) <- res) db.close()
+          bad_database(bad)
+      }
+    }
 
     def clean_output(name: String): (Boolean, Boolean) = {
       val relevant_db =