src/Pure/Thy/export.scala
changeset 68115 23c6ae3dd3a0
parent 68104 3795f67716e6
child 68116 ac82ee617a75
equal deleted inserted replaced
68114:ce7f35406f37 68115:23c6ae3dd3a0
    29   def read_names(db: SQL.Database, session_name: String, theory_name: String): List[String] =
    29   def read_names(db: SQL.Database, session_name: String, theory_name: String): List[String] =
    30   {
    30   {
    31     val select = Data.table.select(List(Data.name), Data.where_equal(session_name, theory_name))
    31     val select = Data.table.select(List(Data.name), Data.where_equal(session_name, theory_name))
    32     db.using_statement(select)(stmt =>
    32     db.using_statement(select)(stmt =>
    33       stmt.execute_query().iterator(res => res.string(Data.name)).toList)
    33       stmt.execute_query().iterator(res => res.string(Data.name)).toList)
       
    34   }
       
    35 
       
    36   def read_name(db: SQL.Database, session_name: String, theory_name: String, name: String): Boolean =
       
    37   {
       
    38     val select =
       
    39       Data.table.select(List(Data.name),
       
    40         Data.where_equal(session_name, theory_name) + " AND " + Data.name.equal(name))
       
    41     db.using_statement(select)(stmt => stmt.execute_query().next())
    34   }
    42   }
    35 
    43 
    36   def message(msg: String, theory_name: String, name: String): String =
    44   def message(msg: String, theory_name: String, name: String): String =
    37     msg + " " + quote(name) + " for theory " + quote(theory_name)
    45     msg + " " + quote(name) + " for theory " + quote(theory_name)
    38 
    46 
    97     private val consumer =
   105     private val consumer =
    98       Consumer_Thread.fork(name = "export")(consume = (entry: Entry) =>
   106       Consumer_Thread.fork(name = "export")(consume = (entry: Entry) =>
    99         {
   107         {
   100           entry.body.join
   108           entry.body.join
   101           db.transaction {
   109           db.transaction {
   102             if (read_names(db, entry.session_name, entry.theory_name).contains(entry.name)) {
   110             if (read_name(db, entry.session_name, entry.theory_name, entry.name)) {
   103               val err = message("Duplicate export", entry.theory_name, entry.name)
   111               val err = message("Duplicate export", entry.theory_name, entry.name)
   104               export_errors.change(errs => err :: errs)
   112               export_errors.change(errs => err :: errs)
   105             }
   113             }
   106             else entry.write(db)
   114             else entry.write(db)
   107           }
   115           }