src/Pure/General/sql.scala
changeset 78362 8da30ae02dda
parent 78361 b625cdabf963
child 78363 fca9ec5a615c
equal deleted inserted replaced
78361:b625cdabf963 78362:8da30ae02dda
   453         catch { case exn: Throwable => connection.rollback(savepoint); throw exn }
   453         catch { case exn: Throwable => connection.rollback(savepoint); throw exn }
   454       }
   454       }
   455       finally { connection.setAutoCommit(auto_commit) }
   455       finally { connection.setAutoCommit(auto_commit) }
   456     }
   456     }
   457 
   457 
   458     private var _transaction_count: Int = 0
       
   459     private def transaction_count(): Int =
       
   460       synchronized { _transaction_count += 1; _transaction_count }
       
   461 
       
   462     def transaction_lock[A](
   458     def transaction_lock[A](
   463       tables: Tables,
   459       tables: Tables,
   464       create: Boolean = false,
   460       create: Boolean = false,
   465       label: String = "",
   461       label: String = "",
   466       log: Logger = new System_Logger
   462       log: Logger = new System_Logger
   472           case "true" => Time.min
   468           case "true" => Time.min
   473           case "false" | "" => Time.max
   469           case "false" | "" => Time.max
   474           case s => error("Bad system property " + prop + ": " + quote(s))
   470           case s => error("Bad system property " + prop + ": " + quote(s))
   475         }
   471         }
   476 
   472 
   477       val trace_count = transaction_count()
   473       val trace_count = - SQL.transaction_count()
   478       val trace_start = Time.now()
   474       val trace_start = Time.now()
   479       var trace_nl = false
   475       var trace_nl = false
   480 
   476 
   481       def trace(msg: String, nl: Boolean = false): Unit = {
   477       def trace(msg: String, nl: Boolean = false): Unit = {
   482         val trace_time = Time.now() - trace_start
   478         val trace_time = Time.now() - trace_start
   562       if (strict || !tables.contains(table.name)) {
   558       if (strict || !tables.contains(table.name)) {
   563         execute_statement("CREATE VIEW " + table + " AS " + { table.query; table.body })
   559         execute_statement("CREATE VIEW " + table + " AS " + { table.query; table.body })
   564       }
   560       }
   565     }
   561     }
   566   }
   562   }
       
   563 
       
   564 
       
   565   private val transaction_count = Counter.make()
   567 }
   566 }
   568 
   567 
   569 
   568 
   570 
   569 
   571 /** SQLite **/
   570 /** SQLite **/