src/Pure/Tools/build_process.scala
changeset 77379 bd0028d1ece6
parent 77378 f047804f4860
child 77380 b9d9658131b0
equal deleted inserted replaced
77378:f047804f4860 77379:bd0028d1ece6
   441           (serial, numa_index)
   441           (serial, numa_index)
   442         }).nextOption.getOrElse(error("No build state instance " + instance + " in database " + db))
   442         }).nextOption.getOrElse(error("No build state instance " + instance + " in database " + db))
   443       }
   443       }
   444 
   444 
   445     def write_state(db: SQL.Database, instance: String, serial: Long, numa_index: Int): Unit = {
   445     def write_state(db: SQL.Database, instance: String, serial: Long, numa_index: Int): Unit = {
   446       db.using_statement(
       
   447         State.table.delete() + SQL.where(Generic.sql_equal(instance = instance)))(_.execute())
       
   448       db.using_statement(State.table.insert()) { stmt =>
   446       db.using_statement(State.table.insert()) { stmt =>
   449         stmt.string(1) = instance
   447         stmt.string(1) = instance
   450         stmt.long(2) = serial
   448         stmt.long(2) = serial
   451         stmt.int(3) = numa_index
   449         stmt.int(3) = numa_index
   452         stmt.execute()
   450         stmt.execute()
   453       }
   451       }
   454     }
   452     }
   455 
   453 
       
   454     def reset_state(db: SQL.Database, instance: String): Unit =
       
   455       db.using_statement(
       
   456         State.table.delete() + SQL.where(Generic.sql_equal(instance = instance)))(_.execute())
       
   457 
   456     def init_database(db: SQL.Database, build_context: Build_Process.Context): Unit = {
   458     def init_database(db: SQL.Database, build_context: Build_Process.Context): Unit = {
   457       val tables =
   459       val tables =
   458         List(Config.table, State.table, Pending.table, Running.table, Results.table)
   460         List(Config.table, State.table, Pending.table, Running.table, Results.table)
   459 
   461 
   460       for (table <- tables) db.create_table(table)
   462       for (table <- tables) db.create_table(table)
   476       val ch2 = update_running(db, state.running)
   478       val ch2 = update_running(db, state.running)
   477       val ch3 = update_results(db, state.results)
   479       val ch3 = update_results(db, state.results)
   478 
   480 
   479       val (serial0, numa_index0) = read_state(db, instance)
   481       val (serial0, numa_index0) = read_state(db, instance)
   480       val serial = if (ch1 || ch2 || ch3) serial0 + 1 else serial0
   482       val serial = if (ch1 || ch2 || ch3) serial0 + 1 else serial0
   481       if (serial != serial0) write_state(db, instance, serial, state.numa_index)
   483       if (serial != serial0) {
       
   484         reset_state(db, instance)
       
   485         write_state(db, instance, serial, state.numa_index)
       
   486       }
   482 
   487 
   483       state.copy(serial = serial)
   488       state.copy(serial = serial)
   484     }
   489     }
   485   }
   490   }
   486 
   491