src/Pure/Admin/build_log.scala
changeset 65618 986fac3c60b4
parent 65616 b8738569b8db
child 65619 e33b3d57b7cb
--- a/src/Pure/Admin/build_log.scala	Fri Apr 28 18:24:58 2017 +0200
+++ b/src/Pure/Admin/build_log.scala	Fri Apr 28 18:52:31 2017 +0200
@@ -664,57 +664,61 @@
 
     def write_meta_info(db: SQL.Database, files: List[JFile])
     {
-      for (file <- filter_files(db, Meta_Info.table, files)) {
-        val log_file = Log_File(file)
-        val meta_info = log_file.parse_meta_info()
-
+      for (file_group <- filter_files(db, Meta_Info.table, files).grouped(1000)) {
         db.transaction {
-          using(db.delete_statement(
-            Meta_Info.table, Meta_Info.log_name.sql_where_equal(log_file.name)))(_.execute)
-          using(db.insert_statement(Meta_Info.table))(stmt =>
-          {
-            db.set_string(stmt, 1, log_file.name)
-            for ((c, i) <- Meta_Info.table.columns.tail.zipWithIndex) {
-              if (c.T == SQL.Type.Date)
-                db.set_date(stmt, i + 2, meta_info.get_date(c))
-              else
-                db.set_string(stmt, i + 2, meta_info.get(c).map(Prop.multiple_lines(_)))
-            }
-            stmt.execute()
-          })
+          for (file <- file_group) {
+            val log_file = Log_File(file)
+            val meta_info = log_file.parse_meta_info()
+
+            using(db.delete_statement(
+              Meta_Info.table, Meta_Info.log_name.sql_where_equal(log_file.name)))(_.execute)
+            using(db.insert_statement(Meta_Info.table))(stmt =>
+            {
+              db.set_string(stmt, 1, log_file.name)
+              for ((c, i) <- Meta_Info.table.columns.tail.zipWithIndex) {
+                if (c.T == SQL.Type.Date)
+                  db.set_date(stmt, i + 2, meta_info.get_date(c))
+                else
+                  db.set_string(stmt, i + 2, meta_info.get(c).map(Prop.multiple_lines(_)))
+              }
+              stmt.execute()
+            })
+          }
         }
       }
     }
 
     def write_build_info(db: SQL.Database, files: List[JFile])
     {
-      for (file <- filter_files(db, Build_Info.table, files)) {
-        val log_file = Log_File(file)
-        val build_info = log_file.parse_build_info()
-
+      for (file_group <- filter_files(db, Build_Info.table, files).grouped(100)) {
         db.transaction {
-          using(db.delete_statement(
-            Build_Info.table, Meta_Info.log_name.sql_where_equal(log_file.name)))(_.execute)
-          using(db.insert_statement(Build_Info.table))(stmt =>
-          {
-            for ((session_name, session) <- build_info.sessions.iterator) {
-              db.set_string(stmt, 1, log_file.name)
-              db.set_string(stmt, 2, session_name)
-              db.set_string(stmt, 3, session.chapter)
-              db.set_string(stmt, 4, cat_lines(session.groups))
-              db.set_int(stmt, 5, session.threads)
-              db.set_long(stmt, 6, session.timing.elapsed.proper_ms)
-              db.set_long(stmt, 7, session.timing.cpu.proper_ms)
-              db.set_long(stmt, 8, session.timing.gc.proper_ms)
-              db.set_long(stmt, 9, session.ml_timing.elapsed.proper_ms)
-              db.set_long(stmt, 10, session.ml_timing.cpu.proper_ms)
-              db.set_long(stmt, 11, session.ml_timing.gc.proper_ms)
-              db.set_bytes(stmt, 12, compress_properties(session.ml_statistics))
-              db.set_long(stmt, 13, session.heap_size)
-              db.set_string(stmt, 14, session.status.toString)
-              stmt.execute()
-            }
-          })
+          for (file <- file_group) {
+            val log_file = Log_File(file)
+            val build_info = log_file.parse_build_info()
+
+            using(db.delete_statement(
+              Build_Info.table, Meta_Info.log_name.sql_where_equal(log_file.name)))(_.execute)
+            using(db.insert_statement(Build_Info.table))(stmt =>
+            {
+              for ((session_name, session) <- build_info.sessions.iterator) {
+                db.set_string(stmt, 1, log_file.name)
+                db.set_string(stmt, 2, session_name)
+                db.set_string(stmt, 3, session.chapter)
+                db.set_string(stmt, 4, cat_lines(session.groups))
+                db.set_int(stmt, 5, session.threads)
+                db.set_long(stmt, 6, session.timing.elapsed.proper_ms)
+                db.set_long(stmt, 7, session.timing.cpu.proper_ms)
+                db.set_long(stmt, 8, session.timing.gc.proper_ms)
+                db.set_long(stmt, 9, session.ml_timing.elapsed.proper_ms)
+                db.set_long(stmt, 10, session.ml_timing.cpu.proper_ms)
+                db.set_long(stmt, 11, session.ml_timing.gc.proper_ms)
+                db.set_bytes(stmt, 12, compress_properties(session.ml_statistics))
+                db.set_long(stmt, 13, session.heap_size)
+                db.set_string(stmt, 14, session.status.toString)
+                stmt.execute()
+              }
+            })
+          }
         }
       }
     }